From 13ed20c6e3cc2a5029d33df39cffbcc219fbacf1 Mon Sep 17 00:00:00 2001 From: garakmon Date: Sat, 16 Jun 2018 18:49:27 -0400 Subject: [PATCH 01/10] compiler fixes The compiler flag -s is not necessary and causes build failure on some systems (macOS, clang compilers) due to it being deprecated. Additionally, on those same systems, tools/aif2pcm/main.c failed to compile due to an overly cautious compiler not liking some struct declarations. These changes afaik do not affect other builds. --- tools/aif2pcm/Makefile | 2 +- tools/aif2pcm/main.c | 4 ++-- tools/bin2c/Makefile | 2 +- tools/gbagfx/Makefile | 2 +- tools/mid2agb/Makefile | 2 +- tools/preproc/Makefile | 2 +- tools/ramscrgen/Makefile | 2 +- tools/rsfont/Makefile | 2 +- tools/scaninc/Makefile | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index 967930c59..e5cb6ad31 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -1,6 +1,6 @@ CC = gcc -CFLAGS = -Wall -Wextra -Wno-switch -Werror -std=c11 -O2 -s +CFLAGS = -Wall -Wextra -Wno-switch -Werror -std=c11 -O2 LIBS = -lm diff --git a/tools/aif2pcm/main.c b/tools/aif2pcm/main.c index fbb024a1d..b6287a1dd 100644 --- a/tools/aif2pcm/main.c +++ b/tools/aif2pcm/main.c @@ -469,12 +469,12 @@ do { \ void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) { struct Bytes *aif = read_bytearray(aif_filename); - AifData aif_data = {0}; + AifData aif_data; read_aif(aif, &aif_data); int header_size = 0x10; struct Bytes *pcm; - struct Bytes output = {0}; + struct Bytes output; if (compress) { diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 4cc23a25a..73f78980e 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -1,6 +1,6 @@ CC = gcc -CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -s +CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 .PHONY: clean diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index d791dabb5..6f11b1b3f 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,6 +1,6 @@ CC = gcc -CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -s -DPNG_SKIP_SETJMP_CHECK +CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK LIBS = -lpng -lz diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index f27f2cad4..7fd5d5fc8 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -1,6 +1,6 @@ CXX := g++ -CXXFLAGS := -std=c++11 -O2 -s -Wall -Wno-switch -Werror +CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index ec4a5f365..3d3275819 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -1,6 +1,6 @@ CXX := g++ -CXXFLAGS := -std=c++11 -O2 -s -Wall -Wno-switch -Werror +CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ utf8.cpp diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index cc6d458ba..9aa309aa1 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -1,6 +1,6 @@ CXX := g++ -CXXFLAGS := -std=c++11 -O2 -s -Wall -Wno-switch -Werror +CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror SRCS := main.cpp sym_file.cpp elf.cpp diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index a78beca50..582be7b88 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -1,6 +1,6 @@ CC = gcc -CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -s -DPNG_SKIP_SETJMP_CHECK +CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK LIBS = -lpng -lz diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 3e1c031a8..367a3350b 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -1,6 +1,6 @@ CXX = g++ -CXXFLAGS = -Wall -Werror -std=c++11 -O2 -s +CXXFLAGS = -Wall -Werror -std=c++11 -O2 SRCS = scaninc.cpp c_file.cpp asm_file.cpp From 0b574eb01cafb2af8827a4fcb4202146cfa0e84d Mon Sep 17 00:00:00 2001 From: garakmon Date: Sat, 16 Jun 2018 18:49:53 -0400 Subject: [PATCH 02/10] adding macOS install instructions While the procedure here is similar to the Linux one, there are some Mac-specific quirks that I thought warranted some more detail. --- INSTALL.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index cd8f4b185..3eb980eb6 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -8,16 +8,22 @@ Make sure that there is an environment variable called DEVKITARM with the path o Then get the compiler from https://github.com/pret/agbcc and run the following commands. - ./build.sh - ./install.sh PATH_OF_POKEEMERALD_DIRECTORY +``` +./build.sh +./install.sh PATH_OF_POKEEMERALD_DIRECTORY +``` Then in the pokeemerald directory, build the tools. - ./build_tools.sh +``` +./build_tools.sh +``` Finally, build the rom. - make +``` +make +``` # Windows @@ -26,3 +32,52 @@ Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM). Then get the compiled tools from https://github.com/pret/pokeruby-tools. Copy the `tools/` folder over the `tools/` folder in your pokeemerald directory. You can then build pokeemerald using `make` in the MSYS environment provided with devkitARM. + +# Mac + +Installing pokeemerald on a Mac requires macOS >= 10.12 (Sierra or higher). + +To get pokeemerald up and running, run the following commands in Terminal: + +Make sure you have the right compilers. + +``` +xcode-select --install +``` + +Download a [devkitPRO pacman](https://github.com/devkitPro/pacman/releases/tag/v1.0.0) package (`.pkg`) and install using the native Installer. + +This will install the devkitPRO package in `/opt/devkitpro`. + +You must install devkitARM using + +``` +sudo dkp-pacman -S devkitARM +``` + +Then set environment variables + +``` +export DEVKITPRO=/opt/devkitpro +echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc +export DEVKITARM=$DEVKITPRO/devkitARM +echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc +``` + +Now download and install the game's compiler from . You should download and unpack the `.zip` and move the folder to the same folder holding pokeemerald. + +``` +cd /PATH/TO/agbcc/ +./build.sh +./install.sh /PATH/TO/pokeemerald +``` + +Build the necessary tools +``` +cd /PATH/TO/pokeemerald +./build_tools.sh +``` +And finally the ROM should be ready to build +``` +make +``` From 9766108fbc343dec01d3690c1ed8e38daa84d131 Mon Sep 17 00:00:00 2001 From: garakmon Date: Sat, 16 Jun 2018 19:03:20 -0400 Subject: [PATCH 03/10] adding agbcc include path For some reason the headers for agbcc are being installed in tools/agbcc instead of tools/agbcc/include. This is a simple (potentially temporary) workaround. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2afb830cf..1f4514f7b 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,7 @@ ASFLAGS := -mcpu=arm7tdmi CC1 := tools/agbcc/bin/agbcc override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef +CPPFLAGS := -I tools/agbcc/include -I tools/agbcc -iquote include -nostdinc -undef LDFLAGS = -Map ../../$(MAP) From 9acd55ae4f9e455a92765aaee5929240097f9f8f Mon Sep 17 00:00:00 2001 From: garakmon Date: Sat, 16 Jun 2018 19:20:10 -0400 Subject: [PATCH 04/10] re-initializing structs in tools/aif2pcm/main.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit initializing all fields because clang doesn’t understand {0} --- tools/aif2pcm/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/aif2pcm/main.c b/tools/aif2pcm/main.c index b6287a1dd..51dbf1bb9 100644 --- a/tools/aif2pcm/main.c +++ b/tools/aif2pcm/main.c @@ -469,12 +469,12 @@ do { \ void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) { struct Bytes *aif = read_bytearray(aif_filename); - AifData aif_data; + AifData aif_data = {0,0,0,0,0,0,0}; read_aif(aif, &aif_data); int header_size = 0x10; struct Bytes *pcm; - struct Bytes output; + struct Bytes output = {0,0}; if (compress) { From 1ab872c68e951837b6925dbbdf25c4e8d0b63c82 Mon Sep 17 00:00:00 2001 From: garakmon Date: Wed, 18 Jul 2018 15:06:18 -0400 Subject: [PATCH 05/10] Allow make compare to work on all platforms --- Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 25dd876d6..58a93bb55 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,13 @@ LDFLAGS = -Map ../../$(MAP) LIB := -L ../../tools/agbcc/lib -lgcc -lc -SHA1 := sha1sum -c +ifeq ($(OS),Windows_NT) + SHA1 := sha1sum -c +else ifeq ($(shell uname -s),Darwin) + SHA1 := shasum -c +else + SHA1 := sha1sum -c +endif GFX := tools/gbagfx/gbagfx AIF := tools/aif2pcm/aif2pcm From 5d899d00e02553db75aa4a7e30e44190170ff45d Mon Sep 17 00:00:00 2001 From: garak Date: Sat, 11 Aug 2018 21:06:27 -0400 Subject: [PATCH 06/10] tone down INSTALL steps --- INSTALL.md | 38 +++++++++++--------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 3eb980eb6..0fa9af8e7 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -37,47 +37,31 @@ You can then build pokeemerald using `make` in the MSYS environment provided wit Installing pokeemerald on a Mac requires macOS >= 10.12 (Sierra or higher). -To get pokeemerald up and running, run the following commands in Terminal: +Download a [devkitPRO pacman](https://github.com/devkitPro/pacman/releases/tag/v1.0.0) + +Run the following commands in Terminal: -Make sure you have the right compilers. ``` xcode-select --install -``` - -Download a [devkitPRO pacman](https://github.com/devkitPro/pacman/releases/tag/v1.0.0) package (`.pkg`) and install using the native Installer. -This will install the devkitPRO package in `/opt/devkitpro`. - -You must install devkitARM using - -``` sudo dkp-pacman -S devkitARM -``` -Then set environment variables - -``` export DEVKITPRO=/opt/devkitpro echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc export DEVKITARM=$DEVKITPRO/devkitARM echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc -``` +echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile -Now download and install the game's compiler from . You should download and unpack the `.zip` and move the folder to the same folder holding pokeemerald. +git clone https://github.com/pret/pokeemerald +git clone https://github.com/pret/agbcc -``` -cd /PATH/TO/agbcc/ +cd agbcc/ ./build.sh -./install.sh /PATH/TO/pokeemerald -``` +./install.sh ../pokeemerald -Build the necessary tools -``` -cd /PATH/TO/pokeemerald +cd ../pokeemerald ./build_tools.sh ``` -And finally the ROM should be ready to build -``` -make -``` + +And build the ROM with `make -j4`. From 9ee4c23a467a15452d67804139abd68dc7c1d51a Mon Sep 17 00:00:00 2001 From: Garak Date: Sat, 11 Aug 2018 21:11:28 -0400 Subject: [PATCH 07/10] remove -j4 --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 0fa9af8e7..c5425204c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -64,4 +64,4 @@ cd ../pokeemerald ./build_tools.sh ``` -And build the ROM with `make -j4`. +And build the ROM with `make`. From 296a539664975b29f25a24958ec513a2ecd008c8 Mon Sep 17 00:00:00 2001 From: Garak Date: Sat, 11 Aug 2018 21:19:27 -0400 Subject: [PATCH 08/10] add faster builds and NODEP sections from pokeruby --- INSTALL.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index c5425204c..bb5e9849d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -65,3 +65,32 @@ cd ../pokeemerald ``` And build the ROM with `make`. + +# 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` + + From 2cfc7bd358561aa88930a07e2a05d3c919c3beb3 Mon Sep 17 00:00:00 2001 From: Garak Date: Sat, 11 Aug 2018 21:21:43 -0400 Subject: [PATCH 09/10] change darwin check --- Makefile | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 58a93bb55..38e8fd71e 100644 --- a/Makefile +++ b/Makefile @@ -31,14 +31,7 @@ LDFLAGS = -Map ../../$(MAP) LIB := -L ../../tools/agbcc/lib -lgcc -lc -ifeq ($(OS),Windows_NT) - SHA1 := sha1sum -c -else ifeq ($(shell uname -s),Darwin) - SHA1 := shasum -c -else - SHA1 := sha1sum -c -endif - +SHA1SUM := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx AIF := tools/aif2pcm/aif2pcm MID := $(abspath tools/mid2agb/mid2agb) From e0a9faacb58311b697cf704823f8279a077716f0 Mon Sep 17 00:00:00 2001 From: Garak Date: Sat, 11 Aug 2018 21:29:54 -0400 Subject: [PATCH 10/10] sha1sum -> sha1 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 38e8fd71e..9637d98a8 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ LDFLAGS = -Map ../../$(MAP) LIB := -L ../../tools/agbcc/lib -lgcc -lc -SHA1SUM := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c +SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx AIF := tools/aif2pcm/aif2pcm MID := $(abspath tools/mid2agb/mid2agb)