* Remove unused C versions of gu functions which will conflict with ASM versions under the new build system This is a holdover from the decomp, as it must support older libultra versions which used these functions; as we're basing this project off of the final 2.0L, they gotta go * Comment out bugged unused debug code Will be removed completely by #12 soon enough anyway, but this will break CI if I don't remove this * C++ fix in ultra64.h * New build system Based off my personal "template" featuring makedepend and support for automatically building and installing all 3 library versions, along with colors Still needs cleanup to make sure I've brought over everything from the previous makefile * Fix clang_format * CI fixes to account for the non-decomp build system * Remove old makefile * Remove decomp tools * Accidentally removed format checker * Change VERSION to TARGET * Fix install target by removing unused files and bring back ZSort header * Fix CI typo * gzsort header removed, I will figure out how to add it in modsdk later * just copy the whole PR folder instead and remove install.mk, unnecessary * SDK installation shall be handled seperately * Remove RMON and a few leftover KMC things * Remove MODERN_CC, as everyone is gonna be building this on a modern compiler anyway
ultralib
Reverse engineering of libultra
Compatibility
Currently this repo supports building the following versions:
| IDO / GCC | libultra.a / libgultra.a |
libultra_d.a / libgultra_d.a |
libultra_rom.a / libgultra_rom.a |
|---|---|---|---|
| 2.0E | ❌ / N/A | ❌ / N/A | ❌ / N/A |
| 2.0F | ❌ / N/A | ❌ / N/A | ❌ / N/A |
| 2.0G | ❌ / N/A | ❌ / N/A | ❌ / N/A |
| 2.0H | N/A / ❌ | N/A / ❌ | N/A / ❌ |
| 2.0I | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| 2.0I_patch | ❌ / ❌ | ❌ / ❌ | ❌ / ❌ |
| 2.0J | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| 2.0K | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| 2.0L | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| ique_v1.5 | ❌ | ❌ | ❌ |
Preparation
After cloning the repo, put a copy of the target archive(s) in their correct version folder in base/.
For example, if your target archive is libgultra_rom.a 2.0L then you'd place it in base/L/.
If you will be building without a target archive by setting COMPARE=0 then you can skip this step.
Build dependencies
The build process requires the following packages:
- build-essential
- python3
- binutils-mips-linux-gnu (libultra* only)
Under Debian / Ubunutu you can install them with the following commands:
sudo apt update
sudo apt install build-essential python3
If building any libultra you can install binutils-mips-linux-gnu with:
sudo apt install binutils-mips-linux-gnu
Building
Run make setup with the proper flags set followed by make with optional jobs. For example, if building the 2.0L PC archive you'd do the following:
make VERSION=L TARGET=libgultra_rom setupmake VERSION=L TARGET=libgultra_rom
Every target flag combination requires separate a setup command.
If building without an target archive, than you can use COMPARE=0 like the the following:
make VERSION=L TARGET=libgultra_rom COMPARE=0 setupmake VERSION=L TARGET=libgultra_rom COMPARE=0
note that running setup without COMPARE=0 and no archive will result in an error,
and only needs to be run once instead of per target flag combination
If building for use with modern linkers, than you can use MODERN_LD=1 like the following:
make VERSION=L TARGET=libgultra_rom MODERN_LD=1 setupmake VERSION=L TARGET=libgultra_rom MODERN_LD=1
note that running with MODERN_LD=1 will automatically set COMPARE=0.
It is also possible to build archives using modern gcc by using MODERN_GCC=1 like the following:
make VERSION=L TARGET=libgultra_rom MODERN_GCC=1
note that running with MODERN_GCC=1 will automatically set COMPARE=0 and MODERN_LD=0.