Files
decomp.me/backend/coreapp/compilers.py
Mark Street 7ad329fa1e Use alternate method to inject COMPILER_ARGS for N64 EGCS compilers (#1709)
* Use alternate method to inject COMPILER_ARGS for N64 EGCS compilers

* golf

* gpt feedback

* handle empty flags

* Move COMPILER_FLAGS after the hardcoded flags
2025-10-23 20:36:11 +01:00

1780 lines
44 KiB
Python

import enum
import logging
import platform as platform_stdlib
from dataclasses import dataclass
from functools import cache
from pathlib import Path
from typing import ClassVar, List, Optional, OrderedDict
from coreapp import platforms
from coreapp.flags import (
COMMON_ARMCC_FLAGS,
COMMON_CLANG_FLAGS,
COMMON_GCC_GC_FLAGS,
COMMON_SHC_FLAGS,
COMMON_GCC_FLAGS,
COMMON_GCC_PS1_FLAGS,
COMMON_GCC_PS2_FLAGS,
COMMON_GCC_SATURN_FLAGS,
COMMON_IDO_FLAGS,
COMMON_MSVC_FLAGS,
COMMON_MWCC_NDS_ARM9_FLAGS,
COMMON_MWCC_PS2_FLAGS,
COMMON_MWCC_PSP_FLAGS,
COMMON_MWCC_WII_GC_FLAGS,
COMMON_WATCOM_FLAGS,
COMMON_BORLAND_FLAGS,
Flags,
Language,
)
from coreapp.platforms import (
GBA,
GC_WII,
IRIX,
MACOSX,
MSDOS,
N3DS,
N64,
NDS_ARM9,
PS1,
PS2,
PSP,
SATURN,
DREAMCAST,
SWITCH,
WIN32,
Platform,
)
from django.conf import settings
from rest_framework import status
from rest_framework.exceptions import APIException
logger = logging.getLogger(__name__)
CONFIG_PY = "config.py"
COMPILER_BASE_PATH: Path = settings.COMPILER_BASE_PATH
class CompilerType(enum.Enum):
GCC = "gcc"
IDO = "ido"
MWCC = "mwcc"
OTHER = "other"
@dataclass(frozen=True)
class Compiler:
id: str
cc: str
platform: Platform
flags: ClassVar[Flags]
library_include_flag: str
base_compiler: Optional["Compiler"] = None
type: ClassVar[CompilerType] = CompilerType.OTHER
language: Language = Language.C
@property
def path(self) -> Path:
if self.base_compiler is not None:
return (
COMPILER_BASE_PATH
/ self.base_compiler.platform.id
/ self.base_compiler.id
)
return COMPILER_BASE_PATH / self.platform.id / self.id
def available(self) -> bool:
# consider compiler binaries present if the compiler's directory is found
if not self.path.exists():
print(f"Compiler {self.id} not found at {self.path}")
return self.path.exists()
@dataclass(frozen=True)
class DummyCompiler(Compiler):
flags: ClassVar[Flags] = []
library_include_flag: str = ""
def available(self) -> bool:
return settings.DUMMY_COMPILER
@dataclass(frozen=True)
class DummyLongRunningCompiler(DummyCompiler):
def available(self) -> bool:
return settings.DUMMY_COMPILER and platform_stdlib.system() != "Windows"
@dataclass(frozen=True)
class ClangCompiler(Compiler):
flags: ClassVar[Flags] = COMMON_CLANG_FLAGS
library_include_flag: str = "-isystem"
@dataclass(frozen=True)
class ArmccCompiler(Compiler):
flags: ClassVar[Flags] = COMMON_ARMCC_FLAGS
library_include_flag: str = "-J"
@dataclass(frozen=True)
class SHCCompiler(Compiler):
flags: ClassVar[Flags] = COMMON_SHC_FLAGS
library_include_flag: str = ""
@dataclass(frozen=True)
class GCCCompiler(Compiler):
type: ClassVar[CompilerType] = CompilerType.GCC
flags: ClassVar[Flags] = COMMON_GCC_FLAGS
library_include_flag: str = "-isystem"
@dataclass(frozen=True)
class GCCPS1Compiler(GCCCompiler):
platform: Platform = PS1
flags: ClassVar[Flags] = COMMON_GCC_PS1_FLAGS
@dataclass(frozen=True)
class GCCPS2Compiler(GCCCompiler):
platform: Platform = PS2
flags: ClassVar[Flags] = COMMON_GCC_PS2_FLAGS
@dataclass(frozen=True)
class GCCGCCompiler(GCCCompiler):
platform: Platform = GC_WII
flags: ClassVar[Flags] = COMMON_GCC_GC_FLAGS
@dataclass(frozen=True)
class GCCSaturnCompiler(GCCCompiler):
platform: Platform = SATURN
flags: ClassVar[Flags] = COMMON_GCC_SATURN_FLAGS
@dataclass(frozen=True)
class IDOCompiler(Compiler):
type: ClassVar[CompilerType] = CompilerType.IDO
flags: ClassVar[Flags] = COMMON_IDO_FLAGS
library_include_flag: str = "-I"
@dataclass(frozen=True)
class MWCCCompiler(Compiler):
type: ClassVar[CompilerType] = CompilerType.MWCC
@dataclass(frozen=True)
class MWCCNDSArm9Compiler(MWCCCompiler):
platform: Platform = NDS_ARM9
flags: ClassVar[Flags] = COMMON_MWCC_NDS_ARM9_FLAGS
library_include_flag: str = "-IZ:"
@dataclass(frozen=True)
class MWCCPS2Compiler(MWCCCompiler):
platform: Platform = PS2
flags: ClassVar[Flags] = COMMON_MWCC_PS2_FLAGS
library_include_flag: str = "-IZ:"
@dataclass(frozen=True)
class MWCCPSPCompiler(MWCCCompiler):
platform: Platform = PSP
flags: ClassVar[Flags] = COMMON_MWCC_PSP_FLAGS
library_include_flag: str = "-IZ:"
@dataclass(frozen=True)
class MWCCWiiGCCompiler(MWCCCompiler):
platform: Platform = GC_WII
flags: ClassVar[Flags] = COMMON_MWCC_WII_GC_FLAGS
library_include_flag: str = "-IZ:"
@dataclass(frozen=True)
class MSVCCompiler(Compiler):
flags: ClassVar[Flags] = COMMON_MSVC_FLAGS
library_include_flag: str = "/IZ:"
@dataclass(frozen=True)
class WatcomCompiler(Compiler):
flags: ClassVar[Flags] = COMMON_WATCOM_FLAGS
library_include_flag: str = "/IZ:"
@dataclass(frozen=True)
class BorlandCompiler(Compiler):
flags: ClassVar[Flags] = COMMON_BORLAND_FLAGS
library_include_flag: str = ""
def from_id(compiler_id: str) -> Compiler:
if compiler_id not in _compilers:
raise APIException(
f"Unknown compiler: {compiler_id}",
str(status.HTTP_400_BAD_REQUEST),
)
return _compilers[compiler_id]
@cache
def available_compilers() -> List[Compiler]:
return list(_compilers.values())
@cache
def available_platforms() -> List[Platform]:
pset = set(compiler.platform for compiler in available_compilers())
return sorted(pset, key=lambda p: p.name)
DUMMY = DummyCompiler(id="dummy", platform=platforms.DUMMY, cc="")
DUMMY_LONGRUNNING = DummyLongRunningCompiler(
id="dummy_longrunning", platform=platforms.DUMMY, cc="sleep 3600"
)
# GBA
AGBCC = GCCCompiler(
id="agbcc",
platform=GBA,
cc='/usr/bin/cpp -E -I "${COMPILER_DIR}"/include -iquote include -nostdinc -undef "$INPUT" | "${COMPILER_DIR}"/bin/agbcc $COMPILER_FLAGS -o - | arm-none-eabi-as -mcpu=arm7tdmi -o "$OUTPUT"',
)
OLD_AGBCC = GCCCompiler(
id="old_agbcc",
platform=GBA,
cc='/usr/bin/cpp -E -I "${COMPILER_DIR}"/include -iquote include -nostdinc -undef "$INPUT" | "${COMPILER_DIR}"/bin/old_agbcc $COMPILER_FLAGS -o - | arm-none-eabi-as -mcpu=arm7tdmi -o "$OUTPUT"',
base_compiler=AGBCC,
)
AGBCCPP = GCCCompiler(
id="agbccpp",
platform=GBA,
cc='/usr/bin/cpp -E -I "${COMPILER_DIR}"/include -iquote include -nostdinc -undef "$INPUT" | "${COMPILER_DIR}"/bin/agbcp -quiet $COMPILER_FLAGS -o - | arm-none-eabi-as -mcpu=arm7tdmi -o "$OUTPUT"',
)
# N3DS
ARMCC_CC = '${WIBO} "${COMPILER_DIR}"/bin/armcc.exe -c --cpu=MPCore --fpmode=fast --apcs=/interwork -I "${COMPILER_DIR}"/include $COMPILER_FLAGS -o "${OUTPUT}" "${INPUT}"'
ARMCC_40_771 = ArmccCompiler(
id="armcc_40_771",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_40_821 = ArmccCompiler(
id="armcc_40_821",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_561 = ArmccCompiler(
id="armcc_41_561",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_713 = ArmccCompiler(
id="armcc_41_713",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_791 = ArmccCompiler(
id="armcc_41_791",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_894 = ArmccCompiler(
id="armcc_41_894",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_921 = ArmccCompiler(
id="armcc_41_921",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_1049 = ArmccCompiler(
id="armcc_41_1049",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_1440 = ArmccCompiler(
id="armcc_41_1440",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_41_1454 = ArmccCompiler(
id="armcc_41_1454",
platform=N3DS,
cc=ARMCC_CC,
)
ARMCC_504_82 = ArmccCompiler(
id="armcc_504_82",
platform=N3DS,
cc=ARMCC_CC,
)
# Switch
CLANG_391 = ClangCompiler(
id="clang-3.9.1",
platform=SWITCH,
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -c -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -D_LIBCPP_HAS_MUSL_LIBC -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
)
CLANG_401 = ClangCompiler(
id="clang-4.0.1",
platform=SWITCH,
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -c -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
)
CLANG_800 = ClangCompiler(
id="clang-8.0.0",
platform=SWITCH,
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -c -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
)
# PS1
PSYQ_COMPILE_BAT = "\r\n".join(
[
"@echo off",
"SET TMPDIR=D:\\Temp",
"CC1PSX.EXE -quiet ${COMPILER_FLAGS} D:\\dos_src.c -o D:\\output.s",
"EXIT /B",
]
)
PSYQ_MSDOS_CC = (
"echo \"\\$_hdimage = '+0 $(pwd) +1'\" > .dosemurc && "
f'echo "{PSYQ_COMPILE_BAT}" >> COMPILE.BAT && '
'/usr/bin/cpp -E "${INPUT}" | unix2dos > dos_src.c && '
'(HOME="$(pwd)" /usr/bin/dosemu -quiet -dumb -f .dosemurc -p -K "${COMPILER_DIR}" -E "D:\\COMPILE.BAT") && '
'(HOME="$(pwd)" /usr/bin/dosemu -quiet -dumb -f .dosemurc -p -K "${COMPILER_DIR}" -E "ASPSX.EXE -quiet D:\\output.s -o D:\\output.obj") && '
'${COMPILER_DIR}/psyq-obj-parser output.obj -o "${OUTPUT}"'
)
PSYQ_CC = (
'/usr/bin/cpp -P "${INPUT}" | unix2dos | '
'${WIBO} ${COMPILER_DIR}/CC1PSX.EXE -quiet ${COMPILER_FLAGS} -o "${OUTPUT}".s && '
'${WIBO} ${COMPILER_DIR}/ASPSX.EXE -quiet "${OUTPUT}".s -o "${OUTPUT}"bj && '
'${COMPILER_DIR}/psyq-obj-parser "${OUTPUT}"bj -o "${OUTPUT}"'
)
PSYQ_263_221 = GCCPS1Compiler(
id="psyq_263_221",
cc=PSYQ_MSDOS_CC,
)
PSYQ33 = GCCPS1Compiler(
id="psyq3.3",
cc=PSYQ_MSDOS_CC,
)
PSYQ35 = GCCPS1Compiler(
id="psyq3.5",
cc=PSYQ_MSDOS_CC,
)
PSYQ36 = GCCPS1Compiler(
id="psyq3.6",
cc=PSYQ_MSDOS_CC,
)
PSYQ40 = GCCPS1Compiler(
id="psyq4.0",
cc=PSYQ_CC,
)
PSYQ43 = GCCPS1Compiler(
id="psyq4.3",
cc=PSYQ_CC,
)
PSYQ_CCPSX = (
'echo "[ccpsx]" >> SN.INI && '
'echo "compiler_path=${COMPILER_DIR//\\//\\\\}" >> SN.INI && '
'echo "assembler_path=${COMPILER_DIR//\\//\\\\}" >> SN.INI && '
'echo "tmpdir=/tmp" >> SN.INI && '
'SN_PATH=. ${WIBO} ${COMPILER_DIR}/CCPSX.EXE -v -c ${COMPILER_FLAGS} "${INPUT}" -o "${OUTPUT}bj" && '
'${COMPILER_DIR}/psyq-obj-parser "${OUTPUT}"bj -o "${OUTPUT}"'
)
PSYQ41 = GCCPS1Compiler(
id="psyq4.1",
cc=PSYQ_CCPSX,
)
PSYQ44 = GCCPS1Compiler(
id="psyq4.4",
cc=PSYQ_CCPSX,
)
PSYQ45 = GCCPS1Compiler(
id="psyq4.5",
cc=PSYQ_CCPSX,
)
PSYQ46 = GCCPS1Compiler(
id="psyq4.6",
cc=PSYQ_CCPSX,
)
PS1_GCC = (
'/usr/bin/cpp -E -lang-c -nostdinc "${INPUT}" -o "${INPUT}".i && '
'eval "${COMPILER_DIR}/gcc ${COMPILER_FLAGS} -c -pipe -B${COMPILER_DIR}/ -o "${OUTPUT}" "${INPUT}".i"'
)
GCC257_PSX = GCCPS1Compiler(
id="gcc2.5.7-psx",
cc=PS1_GCC,
)
GCC260_PSX = GCCPS1Compiler(
id="gcc2.6.0-psx",
cc=PS1_GCC,
)
GCC263_PSX = GCCPS1Compiler(
id="gcc2.6.3-psx",
cc=PS1_GCC,
)
GCC272_PSX = GCCPS1Compiler(
id="gcc2.7.2-psx",
cc=PS1_GCC,
)
GCC280_PSX = GCCPS1Compiler(
id="gcc2.8.0-psx",
cc=PS1_GCC,
)
GCC281_PSX = GCCPS1Compiler(
id="gcc2.8.1-psx",
cc=PS1_GCC,
)
GCC29166_PSX = GCCPS1Compiler(
id="gcc2.91.66-psx",
cc=PS1_GCC,
)
GCC2952_PSX = GCCPS1Compiler(
id="gcc2.95.2-psx",
cc=PS1_GCC,
)
# these are "vanilla" compilers without direct PSYQ counterparts
GCC270_MIPSEL = GCCPS1Compiler(
id="gcc2.7.0-mipsel",
cc=PS1_GCC,
)
GCC271_MIPSEL = GCCPS1Compiler(
id="gcc2.7.1-mipsel",
cc=PS1_GCC,
)
GCC2721_MIPSEL = GCCPS1Compiler(
id="gcc2.7.2.1-mipsel",
cc=PS1_GCC,
)
GCC2722_MIPSEL = GCCPS1Compiler(
id="gcc2.7.2.2-mipsel",
cc=PS1_GCC,
)
GCC2723_MIPSEL = GCCPS1Compiler(
id="gcc2.7.2.3-mipsel",
cc=PS1_GCC,
)
# Saturn
SATURN_CC = (
"echo \"\\$_hdimage = '+0 $(pwd) +1'\" > .dosemurc && "
'cat "${INPUT}" | unix2dos > dos_src.c && '
'(HOME="$(pwd)" /usr/bin/dosemu -quiet -dumb -f .dosemurc -p -K "${COMPILER_DIR}" -E "CPP.EXE D:\\dos_src.c -o D:\\src_proc.c") && '
'(HOME="$(pwd)" /usr/bin/dosemu -quiet -dumb -f .dosemurc -p -K "${COMPILER_DIR}" -E "CC1.EXE -quiet ${COMPILER_FLAGS} D:\\src_proc.c -o D:\\output.s") && '
'(HOME="$(pwd)" /usr/bin/dosemu -quiet -dumb -f .dosemurc -p -K "${COMPILER_DIR}" -E "AS.EXE D:\\output.s -o D:\\output.o") && '
'sh-elf-objcopy -Icoff-sh -Oelf32-sh output.o "${OUTPUT}"'
)
CYGNUS_2_7_96Q3 = GCCSaturnCompiler(
id="cygnus-2.7-96Q3",
cc=SATURN_CC,
)
# earlier shc doesn't accept -fpu=single or -aggressive=2
DREAMCAST_CC_V50R10 = (
'cat "$INPUT" | unix2dos > dos_src.c && '
"cp -r ${COMPILER_DIR}/bin/* . && "
"(SHC_LIB=. SHC_TMP=. ${WIBO} ${COMPILER_DIR}/bin/shc.exe dos_src.c ${COMPILER_FLAGS} -comment=nonest -cpu=sh4 -division=cpu -endian=little -extra=a=1800 -pic=0 -macsave=0 -sjis -string=const -object=dos_src.obj) && "
"${WIBO} ${COMPILER_DIR}/bin/elfcnv.exe dos_src.obj ${OUTPUT}"
)
SHC_V50R10 = SHCCompiler(id="shc-v5.0r10", platform=DREAMCAST, cc=DREAMCAST_CC_V50R10)
DREAMCAST_CC = (
'cat "$INPUT" | unix2dos > dos_src.c && '
"cp -r ${COMPILER_DIR}/bin/* . && "
"(SHC_LIB=. SHC_TMP=. ${WIBO} ${COMPILER_DIR}/bin/shc.exe dos_src.c ${COMPILER_FLAGS} -comment=nonest -cpu=sh4 -division=cpu -fpu=single -endian=little -extra=a=1800 -pic=0 -macsave=0 -sjis -string=const -aggressive=2 -object=dos_src.obj) && "
"${WIBO} ${COMPILER_DIR}/bin/elfcnv.exe dos_src.obj ${OUTPUT}"
)
SHC_V50R26 = SHCCompiler(id="shc-v5.0r26", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V50R28 = SHCCompiler(id="shc-v5.0r28", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V50R31 = SHCCompiler(id="shc-v5.0r31", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V50R32 = SHCCompiler(id="shc-v5.0r32", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V51R01 = SHCCompiler(id="shc-v5.1r01", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V51R03 = SHCCompiler(id="shc-v5.1r03", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V51R04 = SHCCompiler(id="shc-v5.1r04", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V51R08 = SHCCompiler(id="shc-v5.1r08", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V51R11 = SHCCompiler(id="shc-v5.1r11", platform=DREAMCAST, cc=DREAMCAST_CC)
SHC_V51R13 = SHCCompiler(id="shc-v5.1r13", platform=DREAMCAST, cc=DREAMCAST_CC)
# PS2
IOP_GCC281 = GCCPS2Compiler(
id="iop-gcc2.8.1",
cc='"${COMPILER_DIR}"/bin/iop-gcc -c -B "${COMPILER_DIR}"/lib/gcc-lib/mipsel-scei-elfl/2.8.1/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
IOP_GCC2952_102 = GCCPS2Compiler(
id="iop-gcc2.95.2-102",
cc='${WIBO} "${COMPILER_DIR}"/bin/iop-gcc.exe -c -B "${COMPILER_DIR}"/lib/gcc-lib/mipsel-scei-elfl/2.95.2/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC29_990721 = GCCPS2Compiler(
id="ee-gcc2.9-990721",
cc='"${COMPILER_DIR}"/bin/ee-gcc -c -B "${COMPILER_DIR}"/bin/ee- $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC29_991111 = GCCPS2Compiler(
id="ee-gcc2.9-991111",
cc='${COMPILER_DIR}/bin/ee-gcc -c $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC29_991111A = GCCPS2Compiler(
id="ee-gcc2.9-991111a",
cc='${COMPILER_DIR}/bin/ee-gcc -c $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC29_991111_01 = GCCPS2Compiler(
id="ee-gcc2.9-991111-01",
cc='${COMPILER_DIR}/bin/ee-gcc -c $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC29_991111_01_DTLS13010 = GCCPS2Compiler(
id="ee-gcc2.9-991111-01-dtls13010",
platform=PS2,
cc='${COMPILER_DIR}/bin/ee-gcc -c $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC2952_273A = GCCPS2Compiler(
id="ee-gcc2.95.2-273a",
cc='${WIBO} "${COMPILER_DIR}/bin/ee-gcc.exe" -c -B "${COMPILER_DIR}"/lib/gcc-lib/ee/2.95.2/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC2952_274 = GCCPS2Compiler(
id="ee-gcc2.95.2-274",
cc='${WIBO} "${COMPILER_DIR}/bin/ee-gcc.exe" -c -B "${COMPILER_DIR}"/lib/gcc-lib/ee/2.95.2/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC2953_107 = GCCPS2Compiler(
id="ee-gcc2.95.3-107",
cc='${WIBO} "${COMPILER_DIR}/bin/ee-gcc.exe" -c -B "${COMPILER_DIR}"/lib/gcc-lib/ee/2.95.3/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC2953_114 = GCCPS2Compiler(
id="ee-gcc2.95.3-114",
cc='${WIBO} "${COMPILER_DIR}/bin/ee-gcc.exe" -c -B "${COMPILER_DIR}"/lib/gcc-lib/ee/2.95.3/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC2953_136 = GCCPS2Compiler(
id="ee-gcc2.95.3-136",
cc='${WIBO} "${COMPILER_DIR}/bin/ee-gcc.exe" -c -B "${COMPILER_DIR}"/lib/gcc-lib/ee/2.95.3/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC296 = GCCPS2Compiler(
id="ee-gcc2.96",
cc='"${COMPILER_DIR}"/bin/ee-gcc -c -B "${COMPILER_DIR}"/bin/ee- $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC32_030210_BETA2 = GCCPS2Compiler(
id="ee-gcc3.2-030210-beta2",
cc='WINEPATH="${COMPILER_DIR}"/dll/ ${WINE} "${COMPILER_DIR}"/bin/ee-gcc.exe -c -B "${COMPILER_DIR}"/bin/ee- $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC32_030926 = GCCPS2Compiler(
id="ee-gcc3.2-030926",
cc='"${COMPILER_DIR}"/bin/ee-gcc -c -B "${COMPILER_DIR}"/bin/ee- $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
EE_GCC32_040921 = GCCPS2Compiler(
id="ee-gcc3.2-040921",
cc='"${COMPILER_DIR}"/bin/ee-gcc -c -B "${COMPILER_DIR}"/bin/ee- $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
MWCPS2_23_991202 = MWCCPS2Compiler(
id="mwcps2-2.3-991202",
cc='${WIBO} "${COMPILER_DIR}/mwccmips.exe" -c $COMPILER_FLAGS -nostdinc -stderr "$INPUT" -o "$OUTPUT"',
)
MWCPS2_CC = '${WIBO} "${COMPILER_DIR}/mwccps2.exe" -c $COMPILER_FLAGS -nostdinc -stderr "$INPUT" -o "$OUTPUT"'
MWCPS2_233_000906 = MWCCPS2Compiler(
id="mwcps2-2.3.3-000906",
cc=MWCPS2_CC,
)
MWCPS2_24_001213 = MWCCPS2Compiler(
id="mwcps2-2.4-001213",
cc=MWCPS2_CC,
)
MWCPS2_30_011126 = MWCCPS2Compiler(
id="mwcps2-3.0-011126",
cc=MWCPS2_CC,
)
MWCPS2_301_020123 = MWCCPS2Compiler(
id="mwcps2-3.0.1-020123",
cc=MWCPS2_CC,
)
MWCPS2_303_020716 = MWCCPS2Compiler(
id="mwcps2-3.0.3-020716",
cc=MWCPS2_CC,
)
MWCPS2_30B22_020926 = MWCCPS2Compiler(
id="mwcps2-3.0b22-020926",
cc=MWCPS2_CC,
)
MWCPS2_30B38_030307 = MWCCPS2Compiler(
id="mwcps2-3.0b38-030307",
cc=MWCPS2_CC,
)
MWCPS2_30B50_030527 = MWCCPS2Compiler(
id="mwcps2-3.0b50-030527",
cc=MWCPS2_CC,
)
MWCPS2_30B52_030722 = MWCCPS2Compiler(
id="mwcps2-3.0b52-030722",
cc=MWCPS2_CC,
)
MWCPS2_301B44_030325 = MWCCPS2Compiler(
id="mwcps2-3.0.1b44-030325",
cc=MWCPS2_CC,
)
MWCPS2_301B51_030512 = MWCCPS2Compiler(
id="mwcps2-3.0.1b51-030512",
cc=MWCPS2_CC,
)
MWCPS2_301B74_030811 = MWCCPS2Compiler(
id="mwcps2-3.0.1b74-030811",
cc=MWCPS2_CC,
)
MWCPS2_301B75_030916 = MWCCPS2Compiler(
id="mwcps2-3.0.1b75-030916",
cc=MWCPS2_CC,
)
MWCPS2_301B87_031208 = MWCCPS2Compiler(
id="mwcps2-3.0.1b87-031208",
cc=MWCPS2_CC,
)
MWCPS2_301B95_040309 = MWCCPS2Compiler(
id="mwcps2-3.0.1b95-040309",
cc=MWCPS2_CC,
)
MWCPS2_301B103_040528 = MWCCPS2Compiler(
id="mwcps2-3.0.1b103-040528",
cc=MWCPS2_CC,
)
MWCPS2_301B119_040914 = MWCCPS2Compiler(
id="mwcps2-3.0.1b119-040914",
cc=MWCPS2_CC,
)
MWCPS2_301B145_050209 = MWCCPS2Compiler(
id="mwcps2-3.0.1b145-050209",
cc=MWCPS2_CC,
)
MWCPS2_301B151_050317 = MWCCPS2Compiler(
id="mwcps2-3.0.1b151-050317",
cc=MWCPS2_CC,
)
MWCPS2_301B198_051011 = MWCCPS2Compiler(
id="mwcps2-3.0.1b198-051011",
cc=MWCPS2_CC,
)
MWCPS2_301B205_051227 = MWCCPS2Compiler(
id="mwcps2-3.0.1b205-051227",
cc=MWCPS2_CC,
)
MWCPS2_301B210_060308 = MWCCPS2Compiler(
id="mwcps2-3.0.1b210-060308",
cc=MWCPS2_CC,
)
# PSP
PSP_GCC_1_3_1 = GCCCompiler(
id="psp-gcc-1.3.1",
platform=PSP,
cc='${COMPILER_DIR}/bin/psp-gcc -B. -c ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
)
PSPSNC_1_2_7503_0 = GCCCompiler(
id="pspsnc_1.2.7503.0",
platform=PSP,
cc='${WIBO} ${COMPILER_DIR}/pspsnc.exe -c -td=. ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
)
MWCCPSP_CC = (
'${WIBO} ${COMPILER_DIR}/mwccpsp.exe -c ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"'
)
MWCCPSP_3_0_1_121 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_121",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_134 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_134",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_139 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_139",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_147 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_147",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_151 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_151",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_180 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_180",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_192 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_192",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_201 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_201",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_205 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_205",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_210 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_210",
cc=MWCCPSP_CC,
)
MWCCPSP_3_0_1_219 = MWCCPSPCompiler(
id="mwccpsp_3.0.1_219",
cc=MWCCPSP_CC,
)
# N64
IDO53 = IDOCompiler(
id="ido5.3",
platform=N64,
cc='USR_LIB="${COMPILER_DIR}" "${COMPILER_DIR}/cc" -c -Xcpluscomm -G0 -non_shared -Wab,-r4300_mul -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
)
IDO53_CXX = IDOCompiler(
id="ido5.3_c++",
platform=N64,
cc='"${COMPILER_DIR}"/usr/bin/qemu-irix -silent -L "${COMPILER_DIR}" "${COMPILER_DIR}/usr/lib/CC" -I "{COMPILER_DIR}"/usr/include -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
language=Language.OLD_CXX,
)
IDO71 = IDOCompiler(
id="ido7.1",
platform=N64,
cc='USR_LIB="${COMPILER_DIR}" "${COMPILER_DIR}/cc" -c -Xcpluscomm -G0 -non_shared -Wab,-r4300_mul -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
)
IDO60 = IDOCompiler(
id="ido6.0",
platform=N64,
cc='"${COMPILER_DIR}"/usr/bin/qemu-irix -silent -L "${COMPILER_DIR}" "${COMPILER_DIR}/usr/lib/driver" -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
)
MIPS_PRO_744 = IDOCompiler(
id="mips_pro_744",
platform=N64,
cc='"${COMPILER_DIR}"/usr/bin/qemu-irix -silent -L "${COMPILER_DIR}" "${COMPILER_DIR}/usr/lib/driver" -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
)
GCC272KMC = GCCCompiler(
id="gcc2.7.2kmc",
platform=N64,
cc='COMPILER_PATH="${COMPILER_DIR}" "${COMPILER_DIR}"/gcc -c -G0 -mgp32 -mfp32 ${COMPILER_FLAGS} "${INPUT}" -o "${OUTPUT}"',
)
GCC281PM = GCCCompiler(
id="gcc2.8.1pm",
platform=N64,
cc='"${COMPILER_DIR}"/gcc -G0 -c -B "${COMPILER_DIR}"/ $COMPILER_FLAGS "$INPUT" -o "$OUTPUT"',
)
CCN64_CPP_C = '/usr/bin/cpp -E -lang-c -undef -D__GNUC__=2 -Dmips -D__mips__ -D__mips -Dn64 -D__n64__ -D__n64 -D_PSYQ -D__EXTENSIONS__ -D_MIPSEB -D__CHAR_UNSIGNED__ "$INPUT" '
CCN64_CPP_CXX = '/usr/bin/cpp -E -lang-c++ -undef -D__GNUC__=2 -D__cplusplus -Dmips -D__mips__ -D__mips -Dn64 -D__n64__ -D__n64 -D_PSYQ -D__EXTENSIONS__ -D_MIPSEB -D__CHAR_UNSIGNED__ -D_LANGUAGE_C_PLUS_PLUS "$INPUT" '
GCC272SN0001 = GCCCompiler(
id="gcc2.7.2sn0001",
platform=N64,
cc=CCN64_CPP_C
+ '| ${WIBO} "${COMPILER_DIR}"/cc1n64.exe ${COMPILER_FLAGS} -o "$OUTPUT".s '
'&& ${WIBO} "${COMPILER_DIR}"/asn64.exe -q "$OUTPUT".s -o "$OUTPUT".obj '
'&& "${COMPILER_DIR}"/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT" -b -n -s',
)
GCC272SN0001CXX = GCCCompiler(
id="gcc2.7.2sn0001-cxx",
base_compiler=GCC272SN0001,
platform=N64,
cc=CCN64_CPP_CXX
+ '| ${WIBO} "${COMPILER_DIR}"/cc1pln64.exe ${COMPILER_FLAGS} -o "$OUTPUT".s '
'&& ${WIBO} "${COMPILER_DIR}"/asn64.exe -q "$OUTPUT".s -o "$OUTPUT".obj '
'&& "${COMPILER_DIR}"/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT" -b -n -s',
)
GCC272SN0004 = GCCCompiler(
id="gcc2.7.2sn0004",
platform=N64,
cc='/usr/bin/cpp -P "$INPUT" | ${WIBO} "${COMPILER_DIR}"/cc1n64.exe -quiet -G0 -mcpu=vr4300 -mips3 -mhard-float -meb ${COMPILER_FLAGS} -o "$OUTPUT".s && ${WIBO} "${COMPILER_DIR}"/asn64.exe -q -G0 "$OUTPUT".s -o "$OUTPUT".obj && "${COMPILER_DIR}"/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT" -b -n',
)
GCC272SN0006 = GCCCompiler(
id="gcc2.7.2sn0006",
platform=N64,
cc=CCN64_CPP_C
+ '| ${WIBO} "${COMPILER_DIR}"/cc1n64.exe ${COMPILER_FLAGS} -o "$OUTPUT".s '
'&& ${WIBO} "${COMPILER_DIR}"/asn64.exe -q -G0 "$OUTPUT".s -o "$OUTPUT".obj '
'&& "${COMPILER_DIR}"/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT" -b -n -s',
)
GCC272SN0006CXX = GCCCompiler(
id="gcc2.7.2sn0006-cxx",
base_compiler=GCC272SN0006,
platform=N64,
cc=CCN64_CPP_CXX
+ '| ${WIBO} "${COMPILER_DIR}"/cc1pln64.exe ${COMPILER_FLAGS} -o "$OUTPUT".s '
'&& ${WIBO} "${COMPILER_DIR}"/asn64.exe -q -G0 "$OUTPUT".s -o "$OUTPUT".obj '
'&& "${COMPILER_DIR}"/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT" -b -n -s',
)
GCC272SNEW = GCCCompiler(
id="gcc2.7.2snew",
platform=N64,
cc='"${COMPILER_DIR}"/cpp -lang-c -undef "$INPUT" | "${COMPILER_DIR}"/cc1 -mfp32 -mgp32 -G0 -quiet -mcpu=vr4300 -fno-exceptions ${COMPILER_FLAGS} -o "$OUTPUT".s && python3 "${COMPILER_DIR}"/modern-asn64.py mips-linux-gnu-as "$OUTPUT".s -G0 -EB -mips3 -O1 -mabi=32 -mgp32 -march=vr4300 -mfp32 -mno-shared -o "$OUTPUT"',
)
GCC281SN = GCCCompiler(
id="gcc2.8.1sn",
platform=N64,
cc=CCN64_CPP_C
+ '| ${WIBO} "${COMPILER_DIR}"/cc1n64.exe ${COMPILER_FLAGS} -o "$OUTPUT".s '
'&& ${WIBO} "${COMPILER_DIR}"/asn64.exe -q -G0 "$OUTPUT".s -o "$OUTPUT".obj '
'&& "${COMPILER_DIR}"/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT" -b -n',
)
GCC281SNCXX = GCCCompiler(
id="gcc2.8.1sn-cxx",
base_compiler=GCC281SN,
platform=N64,
cc=CCN64_CPP_CXX
+ '| ${WIBO} "${COMPILER_DIR}"/cc1pln64.exe ${COMPILER_FLAGS} -o "$OUTPUT".s '
'&& ${WIBO} "${COMPILER_DIR}"/asn64.exe -q -G0 "$OUTPUT".s -o "$OUTPUT".obj '
'&& "${COMPILER_DIR}"/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT" -b -n',
)
GCC281SNEWCXX = GCCCompiler(
id="gcc2.8.1snew-cxx",
base_compiler=GCC281SN,
platform=N64,
cc=CCN64_CPP_CXX
+ '| ${WIBO} "${COMPILER_DIR}"/cc1pln64.exe ${COMPILER_FLAGS} -o "$OUTPUT".s '
'&& python3 "${COMPILER_DIR}"/modern-asn64.py mips-linux-gnu-as "$OUTPUT".s -G0 -EB -mtune=vr4300 -march=vr4300 -mabi=32 -O1 --no-construct-floats -o "$OUTPUT"',
)
# Python alternative to the printf/xargs approach for quoted flags
PYTHON_SHLEX = """[[ -n "${COMPILER_FLAGS}" ]] && mapfile -t FLAGS < <(python3 -c "import shlex,sys; print(*shlex.split(sys.argv[1]), sep='\\n')" "${COMPILER_FLAGS}"); """
EGCS1124 = GCCCompiler(
id="egcs_1.1.2-4",
platform=N64,
cc=(
PYTHON_SHLEX
+ 'COMPILER_PATH="${COMPILER_DIR}" "${COMPILER_DIR}/mips-linux-gcc" -c -G 0 -fno-PIC -mgp32 -mfp32 -mcpu=4300 -nostdinc "${FLAGS[@]}" "${INPUT}" -o "${OUTPUT}"'
),
)
EGCS1124C = GCCCompiler(
id="egcs_1.1.2-4c",
platform=N64,
cc=(
PYTHON_SHLEX
+ 'COMPILER_PATH="${COMPILER_DIR}" "${COMPILER_DIR}/gcc" -c -G 0 -fno-PIC -mgp32 -mfp32 -mcpu=4300 -nostdinc "${FLAGS[@]}" "${INPUT}" -o "${OUTPUT}"'
),
)
GCC440MIPS64ELF = GCCCompiler(
id="gcc4.4.0-mips64-elf",
platform=N64,
cc='"${COMPILER_DIR}"/bin/mips64-elf-gcc -I "${COMPILER_DIR}"/mips64-elf/include -c ${COMPILER_FLAGS} "${INPUT}" -o "${OUTPUT}"',
)
# IRIX
IDO53_IRIX = IDOCompiler(
id="ido5.3_irix",
platform=IRIX,
cc='USR_LIB="${COMPILER_DIR}" "${COMPILER_DIR}/cc" -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=IDO53,
)
IDO53_ASM_IRIX = IDOCompiler(
id="ido5.3_asm_irix",
platform=IRIX,
cc='USR_LIB="${COMPILER_DIR}" "${COMPILER_DIR}/cc" -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=IDO53,
language=Language.ASSEMBLY,
)
IDO53_CXX_IRIX = IDOCompiler(
id="ido5.3_c++_irix",
platform=IRIX,
cc='"${COMPILER_DIR}"/usr/bin/qemu-irix -silent -L "${COMPILER_DIR}" "${COMPILER_DIR}/usr/lib/CC" -I "${COMPILER_DIR}"/usr/include -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=IDO53_CXX,
language=Language.OLD_CXX,
)
IDO53PASCAL = IDOCompiler(
id="ido5.3Pascal",
platform=IRIX,
cc='USR_LIB="${COMPILER_DIR}" "${COMPILER_DIR}/cc" -c -Xcpluscomm -G0 -non_shared ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=IDO53,
language=Language.PASCAL,
)
IDO60_IRIX = IDOCompiler(
id="ido6.0_irix",
platform=IRIX,
cc='"${COMPILER_DIR}"/usr/bin/qemu-irix -silent -L "${COMPILER_DIR}" "${COMPILER_DIR}/usr/lib/driver" -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=IDO60,
)
IDO71_IRIX = IDOCompiler(
id="ido7.1_irix",
platform=IRIX,
cc='USR_LIB="${COMPILER_DIR}" "${COMPILER_DIR}/cc" -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=IDO71,
)
IDO71PASCAL = IDOCompiler(
id="ido7.1Pascal",
platform=IRIX,
cc='USR_LIB="${COMPILER_DIR}" "${COMPILER_DIR}/cc" -c ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=IDO71,
language=Language.PASCAL,
)
MIPS_PRO_744_IRIX = IDOCompiler(
id="mips_pro_744_irix",
platform=IRIX,
cc='"${COMPILER_DIR}"/usr/bin/qemu-irix -silent -L "${COMPILER_DIR}" "${COMPILER_DIR}/usr/lib/driver" -c -Xcpluscomm -G0 -non_shared -woff 649,838,712 -32 ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"',
base_compiler=MIPS_PRO_744,
)
# MACOSX
GCC_CC1 = '"${COMPILER_DIR}"/powerpc-darwin-cross/bin/cc1 -quiet ${COMPILER_FLAGS} "${INPUT}" -o "${OUTPUT}.s" && python3 ${COMPILER_DIR}/convert_gas_syntax.py "${OUTPUT}.s" "${FUNCTION}" new > "${OUTPUT}_new.s" && powerpc-linux-gnu-as "${OUTPUT}_new.s" -o "${OUTPUT}"'
GCC_CC1_ALT = '"${COMPILER_DIR}"/cc1 -quiet ${COMPILER_FLAGS} "${INPUT}" -o "${OUTPUT}.s" && python3 ${COMPILER_DIR}/convert_gas_syntax.py "${OUTPUT}.s" "${FUNCTION}" new > "${OUTPUT}_new.s" && powerpc-linux-gnu-as "${OUTPUT}_new.s" -o "${OUTPUT}"'
GCC_CC1PLUS = '"${COMPILER_DIR}"/powerpc-darwin-cross/bin/cc1plus -quiet ${COMPILER_FLAGS} "${INPUT}" -o "${OUTPUT}.s" && python3 ${COMPILER_DIR}/convert_gas_syntax.py "${OUTPUT}.s" "${FUNCTION}" new > "${OUTPUT}_new.s" && powerpc-linux-gnu-as "${OUTPUT}_new.s" -o "${OUTPUT}"'
GCC_CC1PLUS_ALT = '"${COMPILER_DIR}"/cc1plus -quiet ${COMPILER_FLAGS} "${INPUT}" -o "${OUTPUT}.s" && python3 ${COMPILER_DIR}/convert_gas_syntax.py "${OUTPUT}.s" "${FUNCTION}" new > "${OUTPUT}_new.s" && powerpc-linux-gnu-as "${OUTPUT}_new.s" -o "${OUTPUT}"'
XCODE_GCC401_C = GCCCompiler(
id="gcc-5370",
platform=MACOSX,
cc=GCC_CC1,
)
XCODE_GCC401_CPP = GCCCompiler(
id="gcc-5370-cpp",
platform=MACOSX,
cc=GCC_CC1PLUS,
base_compiler=XCODE_GCC401_C,
)
XCODE_24_C = GCCCompiler(
id="gcc-5363",
platform=MACOSX,
cc=GCC_CC1_ALT,
)
XCODE_24_CPP = GCCCompiler(
id="gcc-5363-cpp",
platform=MACOSX,
cc=GCC_CC1PLUS_ALT,
base_compiler=XCODE_24_C,
)
XCODE_GCC400_C = GCCCompiler(
id="gcc-5026",
platform=MACOSX,
cc=GCC_CC1_ALT,
)
XCODE_GCC400_CPP = GCCCompiler(
id="gcc-5026-cpp",
platform=MACOSX,
cc=GCC_CC1PLUS_ALT,
base_compiler=XCODE_GCC400_C,
)
PBX_GCC3 = GCCCompiler(
id="gcc3-1041",
platform=MACOSX,
cc=GCC_CC1_ALT,
)
# GC_WII
# Thanks to Gordon Davisson for the xargs trick:
# https://superuser.com/questions/1529226/get-bash-to-respect-quotes-when-word-splitting-subshell-output/1529316#1529316
MWCCEPPC_CC = 'printf "%s" "${COMPILER_FLAGS}" | xargs -x -- ${WIBO} "${COMPILER_DIR}/mwcceppc.exe" -pragma "msg_show_realref off" -c -proc gekko -nostdinc -stderr -o "${OUTPUT}" "${INPUT}"'
MWCC_233_144 = MWCCWiiGCCompiler(
id="mwcc_233_144",
cc=MWCCEPPC_CC,
)
MWCC_233_159 = MWCCWiiGCCompiler(
id="mwcc_233_159",
cc=MWCCEPPC_CC,
)
MWCC_233_159P1 = MWCCWiiGCCompiler(
id="mwcc_233_159p1",
cc=MWCCEPPC_CC,
)
MWCC_233_163 = MWCCWiiGCCompiler(
id="mwcc_233_163",
cc=MWCCEPPC_CC,
)
MWCC_233_163E = MWCCWiiGCCompiler(
id="mwcc_233_163e",
cc='${WIBO} "${COMPILER_DIR}/mwcceppc.125.exe" -c -proc gekko -nostdinc -stderr ${COMPILER_FLAGS} -o "${OUTPUT}.1" "${INPUT}" && ${WIBO} "${COMPILER_DIR}/mwcceppc.exe" -c -proc gekko -nostdinc -stderr ${COMPILER_FLAGS} -o "${OUTPUT}.2" "${INPUT}" && python3 "${COMPILER_DIR}/frank.py" "${OUTPUT}.1" "${OUTPUT}.2" "${OUTPUT}"',
)
MWCC_233_163N = MWCCWiiGCCompiler(
id="mwcc_233_163n",
cc=MWCCEPPC_CC,
)
MWCC_242_53 = MWCCWiiGCCompiler(
id="mwcc_242_53",
cc=MWCCEPPC_CC,
)
MWCC_242_81 = MWCCWiiGCCompiler(
id="mwcc_242_81",
cc=MWCCEPPC_CC,
)
MWCC_242_81R = MWCCWiiGCCompiler(
id="mwcc_242_81r",
cc=MWCCEPPC_CC,
)
MWCC_247_92 = MWCCWiiGCCompiler(
id="mwcc_247_92",
cc=MWCCEPPC_CC,
)
MWCC_247_92P1 = MWCCWiiGCCompiler(
id="mwcc_247_92p1",
cc=MWCCEPPC_CC,
)
MWCC_247_105 = MWCCWiiGCCompiler(
id="mwcc_247_105",
cc=MWCCEPPC_CC,
)
MWCC_247_107 = MWCCWiiGCCompiler(
id="mwcc_247_107",
cc=MWCCEPPC_CC,
)
MWCC_247_108 = MWCCWiiGCCompiler(
id="mwcc_247_108",
cc=MWCCEPPC_CC,
)
MWCC_41_51213 = MWCCWiiGCCompiler(
id="mwcc_41_51213",
cc=MWCCEPPC_CC,
)
MWCC_41_60209 = MWCCWiiGCCompiler(
id="mwcc_41_60209",
cc=MWCCEPPC_CC,
)
MWCC_41_60831 = MWCCWiiGCCompiler(
id="mwcc_41_60831",
cc=MWCCEPPC_CC,
)
MWCC_41_60126 = MWCCWiiGCCompiler(
id="mwcc_41_60126",
cc=MWCCEPPC_CC,
)
MWCC_42_127 = MWCCWiiGCCompiler(
id="mwcc_42_127",
cc=MWCCEPPC_CC,
)
MWCC_42_140 = MWCCWiiGCCompiler(
id="mwcc_42_140",
cc=MWCCEPPC_CC,
)
MWCC_42_142 = MWCCWiiGCCompiler(
id="mwcc_42_142",
cc=MWCCEPPC_CC,
)
MWCC_42_60308 = MWCCWiiGCCompiler(
id="mwcc_42_60308",
cc=MWCCEPPC_CC,
)
MWCC_42_60422 = MWCCWiiGCCompiler(
id="mwcc_42_60422",
cc=MWCCEPPC_CC,
)
MWCC_43_145 = MWCCWiiGCCompiler(
id="mwcc_43_145",
cc=MWCCEPPC_CC,
)
MWCC_43_151 = MWCCWiiGCCompiler(
id="mwcc_43_151",
cc=MWCCEPPC_CC,
)
MWCC_43_188 = MWCCWiiGCCompiler(
id="mwcc_43_188",
cc=MWCCEPPC_CC,
)
MWCC_43_172 = MWCCWiiGCCompiler(
id="mwcc_43_172",
cc=MWCCEPPC_CC,
)
MWCC_43_202 = MWCCWiiGCCompiler(
id="mwcc_43_202",
cc=MWCCEPPC_CC,
)
MWCC_43_213 = MWCCWiiGCCompiler(
id="mwcc_43_213",
cc=MWCCEPPC_CC,
)
PRODG_NGC_CC = "SN_NGC_PATH=${COMPILER_DIR} ${WIBO} ${COMPILER_DIR}/ngccc.exe ${COMPILER_FLAGS} -o ${OUTPUT} ${INPUT}"
PRODG_35 = GCCGCCompiler(
id="prodg_35",
platform=GC_WII,
cc=PRODG_NGC_CC,
)
PRODG_35_B140 = GCCGCCompiler(
id="prodg_35_b140",
platform=GC_WII,
cc=PRODG_NGC_CC,
)
PRODG_37 = GCCGCCompiler(
id="prodg_37",
platform=GC_WII,
cc=PRODG_NGC_CC,
)
PRODG_381 = GCCGCCompiler(
id="prodg_381",
platform=GC_WII,
cc=PRODG_NGC_CC,
)
PRODG_393 = GCCGCCompiler(
id="prodg_393",
platform=GC_WII,
cc=PRODG_NGC_CC,
)
# NDS_ARM9
MWCCARM_CC = '${WIBO} "${COMPILER_DIR}/mwccarm.exe" -pragma "msg_show_realref off" -c -proc arm946e -nostdinc -stderr ${COMPILER_FLAGS} -o "${OUTPUT}" "${INPUT}"'
MWCC_20_72 = MWCCNDSArm9Compiler(
id="mwcc_20_72",
cc=MWCCARM_CC,
)
MWCC_20_79 = MWCCNDSArm9Compiler(
id="mwcc_20_79",
cc=MWCCARM_CC,
)
MWCC_20_82 = MWCCNDSArm9Compiler(
id="mwcc_20_82",
cc=MWCCARM_CC,
)
MWCC_20_84 = MWCCNDSArm9Compiler(
id="mwcc_20_84",
cc=MWCCARM_CC,
)
MWCC_20_87 = MWCCNDSArm9Compiler(
id="mwcc_20_87",
cc=MWCCARM_CC,
)
MWCC_30_114 = MWCCNDSArm9Compiler(
id="mwcc_30_114",
cc=MWCCARM_CC,
)
MWCC_30_123 = MWCCNDSArm9Compiler(
id="mwcc_30_123",
cc=MWCCARM_CC,
)
MWCC_30_126 = MWCCNDSArm9Compiler(
id="mwcc_30_126",
cc=MWCCARM_CC,
)
MWCC_30_131 = MWCCNDSArm9Compiler(
id="mwcc_30_131",
cc=MWCCARM_CC,
)
MWCC_30_133 = MWCCNDSArm9Compiler(
id="mwcc_30_133",
cc=MWCCARM_CC,
)
MWCC_30_134 = MWCCNDSArm9Compiler(
id="mwcc_30_134",
cc=MWCCARM_CC,
)
MWCC_30_136 = MWCCNDSArm9Compiler(
id="mwcc_30_136",
cc=MWCCARM_CC,
)
MWCC_30_137 = MWCCNDSArm9Compiler(
id="mwcc_30_137",
cc=MWCCARM_CC,
)
MWCC_30_138 = MWCCNDSArm9Compiler(
id="mwcc_30_138",
cc=MWCCARM_CC,
)
MWCC_30_139 = MWCCNDSArm9Compiler(
id="mwcc_30_139",
cc=MWCCARM_CC,
)
MWCC_40_1018 = MWCCNDSArm9Compiler(
id="mwcc_40_1018",
cc=MWCCARM_CC,
)
MWCC_40_1024 = MWCCNDSArm9Compiler(
id="mwcc_40_1024",
cc=MWCCARM_CC,
)
MWCC_40_1026 = MWCCNDSArm9Compiler(
id="mwcc_40_1026",
cc=MWCCARM_CC,
)
MWCC_40_1027 = MWCCNDSArm9Compiler(
id="mwcc_40_1027",
cc=MWCCARM_CC,
)
MWCC_40_1028 = MWCCNDSArm9Compiler(
id="mwcc_40_1028",
cc=MWCCARM_CC,
)
MWCC_40_1034 = MWCCNDSArm9Compiler(
id="mwcc_40_1034",
cc=MWCCARM_CC,
)
MWCC_40_1036 = MWCCNDSArm9Compiler(
id="mwcc_40_1036",
cc=MWCCARM_CC,
)
MWCC_40_1051 = MWCCNDSArm9Compiler(
id="mwcc_40_1051",
cc=MWCCARM_CC,
)
CL_WIN = '${WIBO} "${COMPILER_DIR}/Bin/CL.EXE" /c /nologo /I"Z:${COMPILER_DIR}/Include/" ${COMPILER_FLAGS} /Fd"Z:/tmp/" /Bk"Z:/tmp/" /Fo"Z:${OUTPUT}" "Z:${INPUT}"'
MSVC40 = MSVCCompiler(
id="msvc4.0",
platform=WIN32,
cc=CL_WIN,
)
MSVC41 = MSVCCompiler(
id="msvc4.1",
platform=WIN32,
cc=CL_WIN,
)
MSVC42 = MSVCCompiler(
id="msvc4.2",
platform=WIN32,
cc=CL_WIN,
)
MSVC60 = MSVCCompiler(
id="msvc6.0",
platform=WIN32,
cc=CL_WIN,
)
MSVC63 = MSVCCompiler(
id="msvc6.3",
platform=WIN32,
cc=CL_WIN,
)
MSVC64 = MSVCCompiler(
id="msvc6.4",
platform=WIN32,
cc=CL_WIN,
)
MSVC65 = MSVCCompiler(
id="msvc6.5",
platform=WIN32,
cc=CL_WIN,
)
MSVC65PP = MSVCCompiler(
id="msvc6.5pp",
platform=WIN32,
cc=CL_WIN,
)
MSVC66 = MSVCCompiler(
id="msvc6.6",
platform=WIN32,
cc=CL_WIN,
)
MSVC70 = MSVCCompiler(
id="msvc7.0",
platform=WIN32,
cc=CL_WIN,
)
MSVC71 = MSVCCompiler(
id="msvc7.1",
platform=WIN32,
cc=CL_WIN,
)
MSVC80 = MSVCCompiler(
id="msvc8.0",
platform=WIN32,
cc=CL_WIN,
)
MSVC80P = MSVCCompiler(
id="msvc8.0p",
platform=WIN32,
cc=CL_WIN,
)
# Watcom doesn't like '/' in paths passed to it so we need to replace them.
WATCOM_ARGS = ' -zq -i="Z:${COMPILER_DIR}/h" -i="Z:${COMPILER_DIR}/h/nt" ${COMPILER_FLAGS} -fo"Z:${OUTPUT}" "Z:${INPUT}"'
WATCOM_CC = (
'${WIBO} "${COMPILER_DIR}/binnt/wcc386.exe" $(echo "'
+ WATCOM_ARGS
+ "\" | sed 's:/:\\\\:g')"
)
WATCOM_CXX = (
'${WIBO} "${COMPILER_DIR}/binnt/wpp386.exe" $(echo "'
+ WATCOM_ARGS
+ "\" | sed 's:/:\\\\:g')"
)
WATCOM_105_C = WatcomCompiler(
id="wcc10.5",
platform=MSDOS,
cc=WATCOM_CC,
)
WATCOM_105_CPP = WatcomCompiler(
id="wpp10.5",
base_compiler=WATCOM_105_C,
platform=MSDOS,
cc=WATCOM_CXX,
)
WATCOM_105A_C = WatcomCompiler(
id="wcc10.5a",
platform=MSDOS,
cc=WATCOM_CC,
)
WATCOM_105A_CPP = WatcomCompiler(
id="wpp10.5a",
base_compiler=WATCOM_105A_C,
platform=MSDOS,
cc=WATCOM_CXX,
)
WATCOM_106_C = WatcomCompiler(
id="wcc10.6",
platform=MSDOS,
cc=WATCOM_CC,
)
WATCOM_106_CPP = WatcomCompiler(
id="wpp10.6",
base_compiler=WATCOM_106_C,
platform=MSDOS,
cc=WATCOM_CXX,
)
WATCOM_110_C = WatcomCompiler(
id="wcc11.0",
platform=MSDOS,
cc=WATCOM_CC,
)
WATCOM_110_CPP = WatcomCompiler(
id="wpp11.0",
base_compiler=WATCOM_110_C,
platform=MSDOS,
cc=WATCOM_CXX,
)
BORLAND_MSDOS_CC = (
"echo \"\\$_hdimage = '+0 ${COMPILER_DIR} +1'\" > .dosemurc && "
'cat "${INPUT}" | unix2dos > dos_src.c && '
'(HOME="$(pwd)" /usr/bin/dosemu -quiet -dumb -f .dosemurc -p -K . -E "D:\\bin\\bcc.exe -ID:\\include ${COMPILER_FLAGS} -c -oout.o dos_src.c") && '
'cp out.o "${OUTPUT}"'
)
BORLAND_20_C = BorlandCompiler(
id="bcc2.0",
platform=MSDOS,
cc=BORLAND_MSDOS_CC,
)
BORLAND_31_C = BorlandCompiler(
id="bcc3.1",
platform=MSDOS,
cc=BORLAND_MSDOS_CC,
)
_all_compilers: List[Compiler] = [
DUMMY,
DUMMY_LONGRUNNING,
# GBA
AGBCC,
OLD_AGBCC,
AGBCCPP,
# N3DS
ARMCC_40_771,
ARMCC_40_821,
ARMCC_41_561,
ARMCC_41_713,
ARMCC_41_791,
ARMCC_41_894,
ARMCC_41_921,
ARMCC_41_1049,
ARMCC_41_1440,
ARMCC_41_1454,
ARMCC_504_82,
# Switch
CLANG_391,
CLANG_401,
CLANG_800,
# PS1
PSYQ_263_221,
PSYQ33,
PSYQ35,
PSYQ36,
PSYQ40,
PSYQ41,
PSYQ43,
PSYQ44,
PSYQ45,
PSYQ46,
GCC257_PSX,
GCC260_PSX,
GCC263_PSX,
GCC272_PSX,
GCC280_PSX,
GCC281_PSX,
GCC29166_PSX,
GCC2952_PSX,
GCC270_MIPSEL,
GCC271_MIPSEL,
GCC2721_MIPSEL,
GCC2722_MIPSEL,
GCC2723_MIPSEL,
# PSP
PSP_GCC_1_3_1,
PSPSNC_1_2_7503_0,
MWCCPSP_3_0_1_121,
MWCCPSP_3_0_1_134,
MWCCPSP_3_0_1_139,
MWCCPSP_3_0_1_147,
MWCCPSP_3_0_1_151,
MWCCPSP_3_0_1_180,
MWCCPSP_3_0_1_192,
MWCCPSP_3_0_1_201,
MWCCPSP_3_0_1_205,
MWCCPSP_3_0_1_210,
MWCCPSP_3_0_1_219,
# Saturn
CYGNUS_2_7_96Q3,
# Dreamcast
SHC_V50R10,
SHC_V50R26,
SHC_V50R28,
SHC_V50R31,
SHC_V50R32,
SHC_V51R01,
SHC_V51R03,
SHC_V51R04,
SHC_V51R08,
SHC_V51R11,
SHC_V51R13,
# PS2
IOP_GCC281,
IOP_GCC2952_102,
EE_GCC29_990721,
EE_GCC29_991111,
EE_GCC29_991111A,
EE_GCC29_991111_01,
EE_GCC29_991111_01_DTLS13010,
EE_GCC2952_273A,
EE_GCC2952_274,
EE_GCC2953_107,
EE_GCC2953_114,
EE_GCC2953_136,
EE_GCC296,
EE_GCC32_030210_BETA2,
EE_GCC32_030926,
EE_GCC32_040921,
MWCPS2_23_991202,
MWCPS2_233_000906,
MWCPS2_24_001213,
MWCPS2_30_011126,
MWCPS2_301_020123,
MWCPS2_303_020716,
MWCPS2_30B22_020926,
MWCPS2_30B38_030307,
MWCPS2_30B50_030527,
MWCPS2_30B52_030722,
MWCPS2_301B44_030325,
MWCPS2_301B51_030512,
MWCPS2_301B74_030811,
MWCPS2_301B75_030916,
MWCPS2_301B87_031208,
MWCPS2_301B95_040309,
MWCPS2_301B103_040528,
MWCPS2_301B119_040914,
MWCPS2_301B145_050209,
MWCPS2_301B151_050317,
MWCPS2_301B198_051011,
MWCPS2_301B205_051227,
MWCPS2_301B210_060308,
# N64
IDO53,
IDO53_CXX,
IDO60,
IDO71,
MIPS_PRO_744,
GCC272KMC,
GCC272SN0001,
GCC272SN0001CXX,
GCC272SN0004,
GCC272SN0006,
GCC272SN0006CXX,
GCC272SNEW,
GCC281PM,
GCC281SN,
GCC281SNCXX,
GCC281SNEWCXX,
EGCS1124,
EGCS1124C,
GCC440MIPS64ELF,
# IRIX
IDO53_IRIX,
IDO53_ASM_IRIX,
IDO53_CXX_IRIX,
IDO53PASCAL,
IDO60_IRIX,
IDO71_IRIX,
IDO71PASCAL,
MIPS_PRO_744_IRIX,
# GC_WII
MWCC_233_144,
MWCC_233_159,
MWCC_233_159P1,
MWCC_233_163,
MWCC_233_163E,
MWCC_233_163N,
MWCC_242_53,
MWCC_242_81,
MWCC_242_81R,
MWCC_247_92,
MWCC_247_92P1,
MWCC_247_105,
MWCC_247_107,
MWCC_247_108,
MWCC_41_51213,
MWCC_41_60126,
MWCC_41_60209,
MWCC_41_60831,
MWCC_42_127,
MWCC_42_140,
MWCC_42_142,
MWCC_42_60308,
MWCC_42_60422,
MWCC_43_145,
MWCC_43_151,
MWCC_43_172,
MWCC_43_188,
MWCC_43_202,
MWCC_43_213,
PRODG_35,
PRODG_35_B140,
PRODG_37,
PRODG_381,
PRODG_393,
# NDS
MWCC_20_72,
MWCC_20_79,
MWCC_20_82,
MWCC_20_84,
MWCC_20_87,
MWCC_30_114,
MWCC_30_123,
MWCC_30_126,
MWCC_30_131,
MWCC_30_133,
MWCC_30_134,
MWCC_30_136,
MWCC_30_137,
MWCC_30_138,
MWCC_30_139,
MWCC_40_1018,
MWCC_40_1024,
MWCC_40_1026,
MWCC_40_1027,
MWCC_40_1028,
MWCC_40_1034,
MWCC_40_1036,
MWCC_40_1051,
# MACOSX
XCODE_GCC401_C,
XCODE_GCC401_CPP,
XCODE_24_C,
XCODE_24_CPP,
XCODE_GCC400_C,
XCODE_GCC400_CPP,
PBX_GCC3,
# WIN32
MSVC40,
MSVC41,
MSVC42,
MSVC60,
MSVC63,
MSVC64,
MSVC65,
MSVC65PP,
MSVC66,
MSVC70,
MSVC71,
MSVC80,
MSVC80P,
# Watcom, DOS and Win32
WATCOM_105_C,
WATCOM_105_CPP,
WATCOM_105A_C,
WATCOM_105A_CPP,
WATCOM_106_C,
WATCOM_106_CPP,
WATCOM_110_C,
WATCOM_110_CPP,
# Borland, DOS
BORLAND_20_C,
BORLAND_31_C,
]
_compilers = OrderedDict({c.id: c for c in _all_compilers if c.available()})
logger.info(f"Enabled {len(_compilers)} compiler(s): {', '.join(_compilers.keys())}")
logger.info(
f"Available platform(s): {', '.join([platform.id for platform in available_platforms()])}"
)