By default, Tigress will generate code for the machine you're currently on, using a compiler that makes sense for your target. I.e., if you're on MacOS, Tigress will use Clang, if you're on Linux, Gcc, on Windows, cl:
However, it is common to use Tigress in a cross-compilation scenario. For example, your development machine
might run Linux/X86_64, but your target machine could be Android/Arm. Tigress is, in fact, designed for this
scenario. You can set the target using the --Compiler
and --Environment
options:
The reason for these machinations is that, even though Tigress is a source-2-source translator, it relies on knowing the sizes and alignments of all types. This information is encoded in "machdep" files in the TIgress distribution directory:
If your target is not one of the ones provided, you can easily create your own machdep
file and add it to the machdeps_json directory. Simply compile and run the machdep-ml.c
file (also found in the Tigress distribution directory) on your target machine:
> gcc-11 -D_GNUCC -o machdep-ml.exe machdep-ml.c
> machdep-ml.exe --json > `uname -s`_`uname -m`_Gcc_0.json
> head Darwin_x86_64_Gcc_0.json
{
"version_major" : 11,
"version_minor" : 3,
"version" : "11.3.0",
"sizeof_short" : 2,
"sizeof_int" : 4,
"sizeof_bool" : 1,
"sizeof_long" : 8,
"sizeof_longlong" : 8,
"sizeof_ptr" : 8,