# Linux Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). Then run the following commands. export DEVKITPRO=/opt/devkitPro echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc export DEVKITARM=$DEVKITPRO/devkitARM echo "export DEVKITARM=$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 To build **pokeruby.gba**: make -j4 # Mac Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). Then in **Terminal**, run the following commands. xcode-select --install export DEVKITPRO=${HOME}/devkitPro echo "export DEVKITPRO=${DEVKITPRO}" >> ~/.bashrc export DEVKITARM=${DEVKITPRO}/devkitARM echo "export DEVKITARM=${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 To build **pokeruby.gba**: make -j4 # Windows 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 DEVKITPRO=/cygdrive/c/devkitpro echo export DEVKITPRO=$DEVKITPRO >> ~/.bashrc export DEVKITARM=$DEVKITPRO/devkitARM echo export DEVKITARM=$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 To build **pokeruby.gba**: make -j4 # Compiling Sapphire and later revisions When you simply enter `make` and don't specify a target, then Pokémon Ruby 1.0 will be built. However, Sapphire can also be built, along with revisions 1 and 2 of both Ruby and Sapphire. Here is a listing of each ROM that can be made, along with the command to make the ROM. Version | Command -------------|--------------------- Ruby 1.0 | `make ruby` Ruby 1.1 | `make ruby_rev1` Ruby 1.2 | `make ruby_rev2` Sapphire 1.0 | `make sapphire` Sapphire 1.1 | `make sapphire_rev1` 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 # Using present-day toolchains `agbcc` is based on GCC 2.95.1, which is primitive by today's standards and compiles inoptimal instructions. You can overcome this by swapping in a more modern compiler. Makefile rules have been set up for you to do this, all you need to do is run make MODERN=1 or make modern You can build Sapphire and other Ruby revisions by appending `_modern` to the target name: make sapphire_rev1_modern Bear in mind that the resulting ROM will not match vanilla Ruby and may exhibit undefined, buggy behavior. We are trying to resolve this as much as possible, so please report anything you find. If you don't want to use devkitARM, you can install your own ARM toolchain consisting of GNU binutils, GCC, and newlib targeting arm-none-eabi. You can pass the root directory of your toolchain to the variable `TOOLCHAIN` when running `make` for any target. **If you opt to do this, the assumption is that you know what you are doing already!** # Debug symbols You can compile the ROM with helpful debug symbols by passing `DINFO=1` to make. Note that this WILL NOT result in a matching build even with the default compiler. You can suppress the `pokeruby.gba: FAILED` error by additionally passing `COMPARE=0`.