This two-step patch is for ease of patch maintenance only. diff -ur a/src/trans/target.cpp b/src/trans/target.cpp --- a/src/trans/target.cpp 2024-12-17 15:23:24.990000000 +0000 +++ b/src/trans/target.cpp 2024-12-17 15:23:59.900000000 +0000 @@ -411,231 +411,6 @@ { return load_spec_from_file(target_name); } - else if(target_name == "i586-linux-gnu" || target_name == "i586-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, true, "i586-linux-gnu", BACKEND_C_OPTS_GNU}, - ARCH_X86 - }; - } - else if(target_name == "x86_64-linux-gnu" || target_name == "x86_64-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, true /*false*/, "x86_64-linux-gnu", BACKEND_C_OPTS_GNU}, - ARCH_X86_64 - }; - } - else if(target_name == "x86_64-linux-musl" || target_name == "x86_64-unknown-linux-musl") - { - return TargetSpec { - "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "x86_64-linux-musl", BACKEND_C_OPTS_GNU}, - ARCH_X86_64 - }; - } - else if(target_name == "x86_64-unknown-linux-gnux32") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, true, "x86_64-unknown-linux-gnux32", BACKEND_C_OPTS_GNU}, - ARCH_X32 - }; - } - else if(target_name == "arm-linux-gnu" || target_name == "arm-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, true, "arm-elf-eabi", BACKEND_C_OPTS_GNU}, - ARCH_ARM32 - }; - } - else if(target_name == "aarch64-linux-gnu" || target_name == "aarch64-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "aarch64-linux-gnu", BACKEND_C_OPTS_GNU}, - ARCH_ARM64 - }; - } - else if(target_name == "m68k-linux-gnu" || target_name == "m68k-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, true, "m68k-linux-gnu", BACKEND_C_OPTS_GNU}, - ARCH_M68K - }; - } - else if(target_name == "powerpc64-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "powerpc64-unknown-linux-gnu", BACKEND_C_OPTS_GNU}, - ARCH_POWERPC64 - }; - } - else if(target_name == "powerpc64le-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "powerpc64le-unknown-linux-gnu", BACKEND_C_OPTS_GNU}, - ARCH_POWERPC64LE - }; - } - else if(target_name == "riscv64-unknown-linux-gnu") - { - return TargetSpec { - "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "riscv64-unknown-linux-gnu", BACKEND_C_OPTS_GNU}, - ARCH_RISCV64 - }; - } - else if(target_name == "i586-pc-windows-gnu") - { - return TargetSpec { - "windows", "windows", "gnu", {CodegenMode::Gnu11, true, "mingw32", BACKEND_C_OPTS_GNU}, - ARCH_X86 - }; - } - else if(target_name == "x86_64-pc-windows-gnu") - { - return TargetSpec { - "windows", "windows", "gnu", {CodegenMode::Gnu11, false, "x86_64-w64-mingw32", BACKEND_C_OPTS_GNU}, - ARCH_X86_64 - }; - } - else if (target_name == "x86-pc-windows-msvc") - { - // TODO: Should this include the "kernel32.lib" inclusion? - return TargetSpec { - "windows", "windows", "msvc", {CodegenMode::Msvc, true, "x86", {}, {}}, - ARCH_X86 - }; - } - else if (target_name == "x86_64-pc-windows-msvc") - { - return TargetSpec { - "windows", "windows", "msvc", {CodegenMode::Msvc, true, "amd64", {}, {}}, - ARCH_X86_64 - }; - } - else if(target_name == "i686-unknown-freebsd") - { - return TargetSpec { - "unix", "freebsd", "gnu", {CodegenMode::Gnu11, true, "i686-unknown-freebsd", BACKEND_C_OPTS_GNU}, - ARCH_X86 - }; - } - else if(target_name == "x86_64-unknown-freebsd") - { - return TargetSpec { - "unix", "freebsd", "gnu", {CodegenMode::Gnu11, false, "x86_64-unknown-freebsd", BACKEND_C_OPTS_GNU}, - ARCH_X86_64 - }; - } - else if(target_name == "arm-unknown-freebsd") - { - return TargetSpec { - "unix", "freebsd", "gnu", {CodegenMode::Gnu11, true, "arm-unknown-freebsd", BACKEND_C_OPTS_GNU}, - ARCH_ARM32 - }; - } - else if(target_name == "aarch64-unknown-freebsd") - { - return TargetSpec { - "unix", "freebsd", "gnu", {CodegenMode::Gnu11, false, "aarch64-unknown-freebsd", BACKEND_C_OPTS_GNU}, - ARCH_ARM64 - }; - } - else if(target_name == "x86_64-unknown-netbsd") - { - return TargetSpec { - "unix", "netbsd", "gnu", {CodegenMode::Gnu11, false, "x86_64-unknown-netbsd", BACKEND_C_OPTS_GNU}, - ARCH_X86_64 - }; - } - else if(target_name == "i686-unknown-openbsd") - { - return TargetSpec { - "unix", "openbsd", "gnu", {CodegenMode::Gnu11, true, "i686-unknown-openbsd", BACKEND_C_OPTS_GNU}, - ARCH_X86 - }; - } - else if(target_name == "x86_64-unknown-openbsd") - { - return TargetSpec { - "unix", "openbsd", "gnu", {CodegenMode::Gnu11, false, "x86_64-unknown-openbsd", BACKEND_C_OPTS_GNU}, - ARCH_X86_64 - }; - } - else if(target_name == "arm-unknown-openbsd") - { - return TargetSpec { - "unix", "openbsd", "gnu", {CodegenMode::Gnu11, true, "arm-unknown-openbsd", BACKEND_C_OPTS_GNU}, - ARCH_ARM32 - }; - } - else if(target_name == "aarch64-unknown-openbsd") - { - return TargetSpec { - "unix", "openbsd", "gnu", {CodegenMode::Gnu11, false, "aarch64-unknown-openbsd", BACKEND_C_OPTS_GNU}, - ARCH_ARM64 - }; - } - else if(target_name == "x86_64-unknown-dragonfly") - { - return TargetSpec { - "unix", "dragonfly", "gnu", {CodegenMode::Gnu11, false, "x86_64-unknown-dragonfly", BACKEND_C_OPTS_GNU}, - ARCH_X86_64 - }; - } - else if(target_name == "i686-apple-darwin") - { - // NOTE: OSX uses Mach-O binaries, which don't fully support the defaults used for GNU targets - // The first 32bit Intel Mac was Core Solo aka yonah. It allows to use `-march=yonah` like Rust. - return TargetSpec { - "unix", "macos", "gnu", {CodegenMode::Gnu11, false, "x86_64-apple-darwin", {"-march=yonah"}, {}}, - ARCH_X86_64 - }; - } - else if(target_name == "x86_64-apple-darwin") - { - // NOTE: OSX uses Mach-O binaries, which don't fully support the defaults used for GNU targets - // The first 64bit Intel Mac was Core Duo. It allows to use `-march=core2` like Rust. - return TargetSpec { - "unix", "macos", "gnu", {CodegenMode::Gnu11, false, "x86_64-apple-darwin", {"-march=core2"}, {}}, - ARCH_X86_64 - }; - } - else if(target_name == "aarch64-apple-darwin") - { - // NOTE: OSX uses Mach-O binaries, which don't fully support the defaults used for GNU targets - return TargetSpec { - "unix", "macos", "gnu", {CodegenMode::Gnu11, false, "aarch64-apple-darwin", {}, {}}, - ARCH_ARM64 - }; - } - else if(target_name == "powerpc-apple-darwin") - { - // NOTE: OSX uses Mach-O binaries, which don't fully support the defaults used for GNU targets - return TargetSpec { - "unix", "macos", "gnu", {CodegenMode::Gnu11, false, "powerpc-apple-darwin", {}, {}}, - ARCH_POWERPC32 - }; - } - else if(target_name == "powerpc64-apple-darwin") - { - // NOTE: OSX uses Mach-O binaries, which don't fully support the defaults used for GNU targets - return TargetSpec { - "unix", "macos", "gnu", {CodegenMode::Gnu11, false, "powerpc64-apple-darwin", {}, {}}, - ARCH_POWERPC64 - }; - } - else if(target_name == "arm-unknown-haiku") - { - return TargetSpec { - "unix", "haiku", "gnu", {CodegenMode::Gnu11, true, "arm-unknown-haiku", {}, {}}, - ARCH_ARM32 - }; - } - else if(target_name == "x86_64-unknown-haiku") - { - return TargetSpec { - "unix", "haiku", "gnu", {CodegenMode::Gnu11, false, "x86_64-unknown-haiku", {}, {}}, - ARCH_X86_64 - }; - } else { ::std::cerr << "Unknown target name '" << target_name << "'" << ::std::endl; --- a/src/trans/target.cpp 2024-12-17 15:27:49.410000000 +0000 +++ b/src/trans/target.cpp 2024-12-17 15:26:13.600000000 +0000 @@ -411,6 +411,69 @@ { return load_spec_from_file(target_name); } + else if(target_name == "x86_64-foxkit-linux-musl" || target_name == "x86_64-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "x86_64-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_X86_64 + }; + } + else if(target_name == "i586-foxkit-linux-musl" || target_name == "i586-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "i586-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_X86 + }; + } + else if(target_name == "aarch64-foxkit-linux-musl" || target_name == "aarch64-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "aarch64-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_ARM64 + }; + } + else if(target_name == "armv7-foxkit-linux-musleabihf" || target_name == "armv7-unknown-linux-musleabihf") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "arm-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_ARM32 + }; + } + else if(target_name == "m68k-foxkit-linux-musl" || target_name == "m68k-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "m68k-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_M68K + }; + } + else if(target_name == "powerpc64-foxkit-linux-musl" || target_name == "powerpc64-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "powerpc64-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_POWERPC64 + }; + } + else if(target_name == "powerpc64le-foxkit-linux-musl" || target_name == "powerpc64le-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "powerpc64le-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_POWERPC64LE + }; + } + else if(target_name == "powerpc-foxkit-linux-musl" || target_name == "powerpc-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "powerpc-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_POWERPC32 + }; + } + else if(target_name == "riscv64-foxkit-linux-musl" || target_name == "riscv64-unknown-linux-musl") + { + return TargetSpec { + "unix", "linux", "musl", {CodegenMode::Gnu11, true /*false*/, "riscv64-linux-musl", BACKEND_C_OPTS_GNU}, + ARCH_RISCV64 + }; + } else { ::std::cerr << "Unknown target name '" << target_name << "'" << ::std::endl;