CrashOveride95 b742894b55 New and improved make build system and other cleanups (#13)
* 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
2025-08-23 22:58:24 -04:00
2025-02-17 22:56:09 -05:00
2024-02-23 21:20:09 -08:00
2025-02-17 23:00:42 -05:00
2024-11-29 01:40:28 +09:00

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 setup
  • make 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 setup
  • make 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 setup
  • make 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.

Description
No description provided
Readme 3.3 MiB
Languages
C 93%
Assembly 5.4%
Python 0.8%
Makefile 0.8%