summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--INSTALL.md83
-rw-r--r--Makefile30
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
diff --git a/Makefile b/Makefile
index 9e2a2366e..e8d8fff9a 100644
--- a/Makefile
+++ b/Makefile
@@ -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