-
Notifications
You must be signed in to change notification settings - Fork 566
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?
Reactions are currently unavailable