tools/ido-static-recomp/README.md
Convert selected IRIX C toolchain programs into modern Linux or macOS programs
sudo apt-get install build-essential
Install homebrew and then:
brew install make
First build the recomp binary itself
make setup
make VERSION=5.3
make VERSION=7.1
The build artifacts are located in build/{7.1|5.3}/out. Add -j{thread num} for multithreaded building.
By default, debug builds are created with less optimizations, debug flags, and unstripped binaries.
Add RELEASE=1 to build release builds with optimizations and stripped binaries.
By default, make build script create native binaries on macOS. This was done to minimize the time to build the recompiled suite.
In order to create "fat," universal ARM and x86_64, pass TARGET=universal to gmake.
Example for compiling as1 in a Linux environment:
make -C tools/rabbitizer
g++ -Itools/rabbitizer/include -Itools/rabbitizer/cplusplus/include recomp.cpp -o recomp.elf -g -Ltools/rabbitizer/build -lrabbitizerpp
./recomp.elf ido/7.1/usr/lib/as1 > as1_c.c
gcc libc_impl.c as1_c.c -o as1 -g -fno-strict-aliasing -lm -DIDO71
Use the same approach for cc, cfe, uopt, ugen, as1 (and copt if you need that).
Use -DIDO53 instead of -DIDO71 if the program you are trying to recompile was compiled with IDO 5.3 rather than IDO 7.1.
To compile ugen for IDO 5.3, add --conservative when invoking ./recomp.elf. This mimics UB present in ugen53. That program reads uninitialized stack memory and its result depends on that stack memory.