diff options
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | INSTALL.md | 83 | ||||
-rw-r--r-- | Makefile | 30 |
3 files changed, 103 insertions, 12 deletions
diff --git a/.travis.yml b/.travis.yml index 6e88230ac..c6a2781a6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,7 +24,6 @@ matrix: - os: linux env: _="Build" script: - - ./build_tools.sh - make -j2 ruby - make -j2 ruby_rev1 - make -j2 ruby_rev2 @@ -52,7 +51,6 @@ matrix: - rsync -avhI data-de/ data/ - rsync -avhI graphics-de/ graphics/ script: - - ./build_tools.sh - make -j2 ruby_de - make -j2 sapphire_de - make -j2 ruby_de_debug diff --git a/INSTALL.md b/INSTALL.md index dfd992f2f..d8f60f3e1 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -4,26 +4,63 @@ Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). Make sure that there is an environment variable called DEVKITARM with the path of the directory before the "bin" directory containing "arm-none-eabi-as", "arm-none-eabi-cpp", "arm-none-eabi-ld" and "arm-none-eabi-objcopy". -Then get the compiler from https://github.com/pret/agbcc and run the following commands. +Then run the following commands. + git clone https://github.com/pret/pokeruby + git clone https://github.com/pret/agbcc + + cd agbcc ./build.sh - ./install.sh PATH_OF_POKERUBY_DIRECTORY + ./install.sh ../pokeruby + + cd ../pokeruby + +To build **pokeruby.gba**: + + make -j4 -Then in the pokeruby directory, build the tools. - ./build_tools.sh +# Mac -Finally, build the rom. +In **Terminal**, run the following command: + + xcode-select --install + +Then follow the Linux instructions. - make # Windows -Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). +Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM) to the default directory (C:/devkitpro). + +Then download [**Cygwin**](http://cygwin.com/install.html): **setup-x86_64.exe** for 64-bit Windows, **setup-x86.exe** for 32-bit. + +Run the Cygwin setup and leave the default settings. At "Select Packages", set the view to "Full" and choose to install the following: + +- `make` +- `git` +- `gcc-core` +- `gcc-g++` +- `libpng-devel` + +In the **Cygwin terminal**, enter these commands: + + export DEVKITARM=/cygdrive/c/devkitpro/devkitARM + echo export DEVKITARM=/cygdrive/c/devkitpro/devkitARM >> ~/.bashrc + + git clone https://github.com/pret/pokeruby + git clone https://github.com/pret/agbcc + + cd agbcc + ./build.sh + ./install.sh ../pokeruby + + cd ../pokeruby -Then get the compiled tools from https://github.com/pret/pokeruby-tools. Copy the `tools/` folder over the `tools/` folder in your pokeruby directory. +To build **pokeruby.gba**: + + make -j4 -You can then build pokeruby using `make` in the MSYS environment provided with devkitARM. # Compiling Sapphire and later revisions @@ -52,3 +89,31 @@ Pokémon Sapphire 1.1 Pokémon Sapphire 1.2 make sapphire_rev2 + + +# Faster builds + +After the first build, subsequent builds are faster. You can further speed up the build: + +## Parallel build + +This significantly speeds up the build on modern machines. + +By default `make` only runs a single thread. You can tell `make` to run on multiple threads with `make -j`. See the manfile for usage (`man make`). + +The optimal value for `-j` is the number of logical cores on your machine. You can run `nproc` to see the exact number. + + $ nproc + 8 + +If you have 8 cores, run: + + make -j8 + +`-j` on its own will spawn a new thread for each job. A clean build will have thousands of jobs, which will be slower than not using -j at all. + +## Disable the dependency scanning + +If you've only changed `.c` or `.s` files, you can turn off the dependency scanning temporarily. Changes to any other files will be ignored, and the build will either fail or not reflect those changes. + + make NODEP=1 @@ -70,6 +70,19 @@ LD_SCRIPT := $(BUILD_DIR)/ld_script.ld #### Main Rules #### +ALL_BUILDS := ruby ruby_rev1 ruby_rev1 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug + +# Available targets +.PHONY: all clean tidy tools $(ALL_BUILDS) + +# Build tools when building the rom +# Disable dependency scanning for clean/tidy/tools +ifeq (,$(filter-out all,$(MAKECMDGOALS))) +$(info $(shell $(MAKE) tools)) +else +NODEP := 1 +endif + # Disable dependency scanning when NODEP is used for quick building ifeq ($(NODEP),) $(BUILD_DIR)/src/%.o: C_FILE = $(*D)/$(*F).c @@ -99,8 +112,23 @@ clean: tidy find sound/direct_sound_samples \( -iname '*.bin' \) -exec rm {} + $(RM) $(ALL_OBJECTS) find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' \) -exec rm {} + + $(MAKE) clean -C tools/gbagfx + $(MAKE) clean -C tools/scaninc + $(MAKE) clean -C tools/preproc + $(MAKE) clean -C tools/bin2c + $(MAKE) clean -C tools/rsfont + $(MAKE) clean -C tools/aif2pcm + $(MAKE) clean -C tools/ramscrgen + +tools: + $(MAKE) -C tools/gbagfx + $(MAKE) -C tools/scaninc + $(MAKE) -C tools/preproc + $(MAKE) -C tools/bin2c + $(MAKE) -C tools/rsfont + $(MAKE) -C tools/aif2pcm + $(MAKE) -C tools/ramscrgen -ALL_BUILDS := ruby ruby_rev1 ruby_rev1 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug tidy: $(RM) $(ALL_BUILDS:%=poke%{.gba,.elf,.map}) $(RM) -r build |