-
Notifications
You must be signed in to change notification settings - Fork 503
Open
Labels
Description
When installing a GNU cross-compiler, the compiler binary seems to use various prefixes, but their use is fairly inconsistent.
We have a partial list of rustc
target tuple to compiler prefix mapping here:
Lines 3397 to 3516 in 0c1ee89
match target { | |
// Note: there is no `aarch64-pc-windows-gnu` target, only `-gnullvm` | |
"aarch64-pc-windows-gnullvm" => Some("aarch64-w64-mingw32"), | |
"aarch64-uwp-windows-gnu" => Some("aarch64-w64-mingw32"), | |
"aarch64-unknown-linux-gnu" => Some("aarch64-linux-gnu"), | |
"aarch64-unknown-linux-musl" => Some("aarch64-linux-musl"), | |
"aarch64-unknown-netbsd" => Some("aarch64--netbsd"), | |
"arm-unknown-linux-gnueabi" => Some("arm-linux-gnueabi"), | |
"armv4t-unknown-linux-gnueabi" => Some("arm-linux-gnueabi"), | |
"armv5te-unknown-linux-gnueabi" => Some("arm-linux-gnueabi"), | |
"armv5te-unknown-linux-musleabi" => Some("arm-linux-gnueabi"), | |
"arm-unknown-linux-gnueabihf" => Some("arm-linux-gnueabihf"), | |
"arm-unknown-linux-musleabi" => Some("arm-linux-musleabi"), | |
"arm-unknown-linux-musleabihf" => Some("arm-linux-musleabihf"), | |
"arm-unknown-netbsd-eabi" => Some("arm--netbsdelf-eabi"), | |
"armv6-unknown-netbsd-eabihf" => Some("armv6--netbsdelf-eabihf"), | |
"armv7-unknown-linux-gnueabi" => Some("arm-linux-gnueabi"), | |
"armv7-unknown-linux-gnueabihf" => Some("arm-linux-gnueabihf"), | |
"armv7-unknown-linux-musleabihf" => Some("arm-linux-musleabihf"), | |
"armv7neon-unknown-linux-gnueabihf" => Some("arm-linux-gnueabihf"), | |
"armv7neon-unknown-linux-musleabihf" => Some("arm-linux-musleabihf"), | |
"thumbv7-unknown-linux-gnueabihf" => Some("arm-linux-gnueabihf"), | |
"thumbv7-unknown-linux-musleabihf" => Some("arm-linux-musleabihf"), | |
"thumbv7neon-unknown-linux-gnueabihf" => Some("arm-linux-gnueabihf"), | |
"thumbv7neon-unknown-linux-musleabihf" => Some("arm-linux-musleabihf"), | |
"armv7-unknown-netbsd-eabihf" => Some("armv7--netbsdelf-eabihf"), | |
"hexagon-unknown-linux-musl" => Some("hexagon-linux-musl"), | |
"i586-unknown-linux-musl" => Some("musl"), | |
"i686-pc-windows-gnu" => Some("i686-w64-mingw32"), | |
"i686-pc-windows-gnullvm" => Some("i686-w64-mingw32"), | |
"i686-uwp-windows-gnu" => Some("i686-w64-mingw32"), | |
"i686-unknown-linux-gnu" => self.find_working_gnu_prefix(&[ | |
"i686-linux-gnu", | |
"x86_64-linux-gnu", // transparently support gcc-multilib | |
]), // explicit None if not found, so caller knows to fall back | |
"i686-unknown-linux-musl" => Some("musl"), | |
"i686-unknown-netbsd" => Some("i486--netbsdelf"), | |
"loongarch64-unknown-linux-gnu" => Some("loongarch64-linux-gnu"), | |
"mips-unknown-linux-gnu" => Some("mips-linux-gnu"), | |
"mips-unknown-linux-musl" => Some("mips-linux-musl"), | |
"mipsel-unknown-linux-gnu" => Some("mipsel-linux-gnu"), | |
"mipsel-unknown-linux-musl" => Some("mipsel-linux-musl"), | |
"mips64-unknown-linux-gnuabi64" => Some("mips64-linux-gnuabi64"), | |
"mips64el-unknown-linux-gnuabi64" => Some("mips64el-linux-gnuabi64"), | |
"mipsisa32r6-unknown-linux-gnu" => Some("mipsisa32r6-linux-gnu"), | |
"mipsisa32r6el-unknown-linux-gnu" => Some("mipsisa32r6el-linux-gnu"), | |
"mipsisa64r6-unknown-linux-gnuabi64" => Some("mipsisa64r6-linux-gnuabi64"), | |
"mipsisa64r6el-unknown-linux-gnuabi64" => Some("mipsisa64r6el-linux-gnuabi64"), | |
"powerpc-unknown-linux-gnu" => Some("powerpc-linux-gnu"), | |
"powerpc-unknown-linux-gnuspe" => Some("powerpc-linux-gnuspe"), | |
"powerpc-unknown-netbsd" => Some("powerpc--netbsd"), | |
"powerpc64-unknown-linux-gnu" => Some("powerpc-linux-gnu"), | |
"powerpc64le-unknown-linux-gnu" => Some("powerpc64le-linux-gnu"), | |
"riscv32i-unknown-none-elf" => self.find_working_gnu_prefix(&[ | |
"riscv32-unknown-elf", | |
"riscv64-unknown-elf", | |
"riscv-none-embed", | |
]), | |
"riscv32imac-esp-espidf" => Some("riscv32-esp-elf"), | |
"riscv32imac-unknown-none-elf" => self.find_working_gnu_prefix(&[ | |
"riscv32-unknown-elf", | |
"riscv64-unknown-elf", | |
"riscv-none-embed", | |
]), | |
"riscv32imac-unknown-xous-elf" => self.find_working_gnu_prefix(&[ | |
"riscv32-unknown-elf", | |
"riscv64-unknown-elf", | |
"riscv-none-embed", | |
]), | |
"riscv32imc-esp-espidf" => Some("riscv32-esp-elf"), | |
"riscv32imc-unknown-none-elf" => self.find_working_gnu_prefix(&[ | |
"riscv32-unknown-elf", | |
"riscv64-unknown-elf", | |
"riscv-none-embed", | |
]), | |
"riscv64gc-unknown-none-elf" => self.find_working_gnu_prefix(&[ | |
"riscv64-unknown-elf", | |
"riscv32-unknown-elf", | |
"riscv-none-embed", | |
]), | |
"riscv64imac-unknown-none-elf" => self.find_working_gnu_prefix(&[ | |
"riscv64-unknown-elf", | |
"riscv32-unknown-elf", | |
"riscv-none-embed", | |
]), | |
"riscv64gc-unknown-linux-gnu" => Some("riscv64-linux-gnu"), | |
"riscv32gc-unknown-linux-gnu" => Some("riscv32-linux-gnu"), | |
"riscv64gc-unknown-linux-musl" => Some("riscv64-linux-musl"), | |
"riscv32gc-unknown-linux-musl" => Some("riscv32-linux-musl"), | |
"riscv64gc-unknown-netbsd" => Some("riscv64--netbsd"), | |
"s390x-unknown-linux-gnu" => Some("s390x-linux-gnu"), | |
"sparc-unknown-linux-gnu" => Some("sparc-linux-gnu"), | |
"sparc64-unknown-linux-gnu" => Some("sparc64-linux-gnu"), | |
"sparc64-unknown-netbsd" => Some("sparc64--netbsd"), | |
"sparcv9-sun-solaris" => Some("sparcv9-sun-solaris"), | |
"armv7a-none-eabi" => Some("arm-none-eabi"), | |
"armv7a-none-eabihf" => Some("arm-none-eabi"), | |
"armebv7r-none-eabi" => Some("arm-none-eabi"), | |
"armebv7r-none-eabihf" => Some("arm-none-eabi"), | |
"armv7r-none-eabi" => Some("arm-none-eabi"), | |
"armv7r-none-eabihf" => Some("arm-none-eabi"), | |
"armv8r-none-eabihf" => Some("arm-none-eabi"), | |
"thumbv6m-none-eabi" => Some("arm-none-eabi"), | |
"thumbv7em-none-eabi" => Some("arm-none-eabi"), | |
"thumbv7em-none-eabihf" => Some("arm-none-eabi"), | |
"thumbv7m-none-eabi" => Some("arm-none-eabi"), | |
"thumbv8m.base-none-eabi" => Some("arm-none-eabi"), | |
"thumbv8m.main-none-eabi" => Some("arm-none-eabi"), | |
"thumbv8m.main-none-eabihf" => Some("arm-none-eabi"), | |
"x86_64-pc-windows-gnu" => Some("x86_64-w64-mingw32"), | |
"x86_64-pc-windows-gnullvm" => Some("x86_64-w64-mingw32"), | |
"x86_64-uwp-windows-gnu" => Some("x86_64-w64-mingw32"), | |
"x86_64-rumprun-netbsd" => Some("x86_64-rumprun-netbsd"), | |
"x86_64-unknown-linux-gnu" => self.find_working_gnu_prefix(&[ | |
"x86_64-linux-gnu", // rustfmt wrap | |
]), // explicit None if not found, so caller knows to fall back | |
"x86_64-unknown-linux-musl" => Some("x86_64-linux-musl"), | |
"x86_64-unknown-netbsd" => Some("x86_64--netbsd"), | |
_ => None, | |
} |
It'd be nice if we were able to fill out this list (or even better, generate all possible prefixes based on TargetInfo
).
I have yet to find the canonical source for these prefix names, places I've looked so far:
- https://www.gnu.org/software/automake/manual/html_node/Cross_002dCompilation.html
- https://www.gnu.org/software/autoconf/manual/autoconf-2.71/html_node/Specifying-Target-Triplets.html
- https://www.kernel.org/pub/tools/crosstool/
- https://wiki.osdev.org/Target_Triplet
I know too little about GNU/GCC to completely tell how these work? Does anyone have additional references as to how these are generated? Are they distro-specific?