Build process - aalesv/2boost GitHub Wiki
Project moved to GCC 12.2 and Binutils 2.4.0 because GCC 4.7 that comes with GNUSH toolchain v13.01 sometimes produces incorrect code when a function is inlined. Support for GNUSH toolchain v13.01 will remain for some time but it is not recommended to use GNUSH toolchain v13.01.
Project builds with make
command. make
ships with GNUSH tools but you can use GNU make that comes with your system.
Type make
or make help
to see brief help:
make all - Build all CAL IDs. Specify DOPATCH=-yes to patch your ROM. make analyze - Do static analysis with PVS-Studio, must be installed. Specify CALID=CALID. make analyze-clean - Delete files needed for static analysis make CALID - Specify CALID to build only that target, for example 'make A8DK100P' will build files only for A8DK100P. Specify DOPATCH=-yes to patch your ROM. make clean - Clean build directory. make help - This message. make list - List for possible CAL IDs. make tests - Test build for emulator testing only. Specify CALID=CALID for building CALID or CALID=all for build all ROMs.
To override any var including target specific vars set in Makefile
set the var in command line, like
make YOUR-CAL-ID WINDOWS=1
make
determines if it runs on Windows by examining OS
shell variable. Then it sets internal variables. List of all possible CAL Ids to build is based on include\target\*.h
file list. If CAL Id specified i.e. make A2WC420F
, it builds only for that CAL Id. If all
specified i.e. make all
it builds for every CAL Id.
make tests
defines debug symbol and then builds.
During build, all intermediate files are placed into build directory.
Symbols, variables and other settings specific to each Cal Id, contain in corresponding header file include\target\*.h
. This header is included in every source file by -include
GCC parameter at compile time (that's why unused static variables may appear). All src\*.c
files compile and then link into one file named 2Boost-CALID.out
aligned at entry point. Entry point takes from corresponding include\target\CALID.txt
file.
Then all unneeded strips and file converts to true binary named CALID.bin
ready to patch.
Original ROM file copies from ROM
directory (can be changed by setting orig-rom
variable) to build directory and renames to CALID-patched.bin
.
By default, no patching is done and this is indicated by word 'simulating' in command output:
Patching ROM... copy .\ROM\A2WC420F.bin .\build\A2WC420F-patched.bin Files copied: 1. sfkx64 -verbose partcopy .\build\2Boost-A2WC420F.bin -allfrom 0 .\build\A2WC420F-patched.bin 0x0007C000 mapping copy length : 6780 = 6780 - 0 [simulating:] copying 6780 bytes, from input offset 0 to 6780, to target offset 507904 [add -yes to really copy data.]
To patch ROM set DOPATCH=-yes
. Example:
make YOUR-CAL-ID DOPATCH=-yes
Optimization enabled on globally by adding -O
flag in CFLAGS
variable. This is done to optimize out unused static variables,
but this has side effect of reordering variables and functions.
To eliminate this, top level reorder disabled globally by adding -fno-toplevel-reorder
compiler option to CFLAGS
variable
as only few CALIDs have unused static variables. CAL Ids list that have unused static variables is contained in TOP_LEVEL_REORDER_TARGET_LIST
Makefile variable and is compiled with -ftoplevel-reorder
compiler option.
What CAL ID to build. Needed only when you build analyze
and tests
targets. Example:
make tests CALID=A2WC420F
Controls if ROM will be actually patched. Empty by default, so no patching is done by default. This var passed to sfk
command. To patch ROM set it to -yes
:
make A2WC420F DOPATCH=-yes
Path to ROM that will be copied to build dir and patched. If you whant to use ROM that is not located in .\ROM
dir, set this variable:
make A2WC420F orig-rom=C:\temp\read-image.bin
Do not set orig-rom
when building all targets.
Path to Swiss File Knife binary.
Path to GNU SH toolchain root. Override it when path is incorrectly detected. Setting WINDOWS
variable may also help.
CAL Ids list that will be compiled with -ftoplevel-reorder
compiler option.
User specified compiler flags. Empty by default. Useful to define symbols without modifying code. Example:
make analyze CALID=A2WC420F USERCFLAGS=-DBUILD_TESTS
Indicates that this is Windows system or not. Equals 1
if Windows, all other values including empty if non-Windows (assuming *nix). Autodetected, but can be overridden. This is useful for environments like Cygwin where OS can not be correctly detected.
Indicates that this is WSL (Windows Subsystem for Linux). Equals 1
if WSL, 0
otherwise. Autodetected, but can be overridden.
When BUILD_TESTS
symbol is defined, tests are compiled. Define it if you want analyze your tests when running make analyze
command:
make analyze CALID=YOUR-CAL-ID USERCFLAGS=-DBUILD_TESTS
If you run make tests
, this symbol is defined automatically.