commit e62a3ea74eb4d019a3360f666700579ca6b30cb9 (tree)
parent eedfce92b0363af1b6783ab626690be0aebf4e94
Author: Carl Ã…stholm <carl@astholm.se>
Date: Sun, 23 Mar 2025 14:14:42 +0100
Use `-unknown` when converting WASI/Emscripten target triples into LLVM triples
The "musl" part of the Zig target triples `wasm32-wasi-musl` and
`wasm32-emscripten-musl` refers to the libc, not really the ABI.
For WASM, most LLVM-based tooling uses `wasm32-wasi`, which is
normalized into `wasm32-unknown-wasi`, with an implicit `-unknown` and
without `-musl`.
Similarly, Emscripten uses `wasm32-unknown-emscripten` without `-musl`.
By using `-unknown` instead of `-musl` we get better compatibility with
external tooling.
Diffstat:
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
@@ -265,7 +265,12 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
.eabihf => "eabihf",
.android => "android",
.androideabi => "androideabi",
- .musl => "musl",
+ .musl => switch (target.os.tag) {
+ // For WASI/Emscripten, "musl" refers to the libc, not really the ABI.
+ // "unknown" provides better compatibility with LLVM-based tooling for these targets.
+ .wasi, .emscripten => "unknown",
+ else => "musl",
+ },
.muslabin32 => "musl", // Should be muslabin32 in LLVM 20.
.muslabi64 => "musl", // Should be muslabi64 in LLVM 20.
.musleabi => "musleabi",