authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-04-14 21:01:25+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-04-14 22:10:08+02:00
log6a8228603c924f8e091c52b98f8043e02843c358
treec5147dcbdd0e3c4103075924ba6ea70daac3c665
parent715984340b247a27469a3e789843aed3220dd748
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

zig cc: Respect Clang's -static and -dynamic flags.

Before: ❯ zig cc main.c -target x86_64-linux-musl && musl-ldd ./a.out musl-ldd: ./a.out: Not a valid dynamic program ❯ zig cc main.c -target x86_64-linux-musl -static && musl-ldd ./a.out musl-ldd: ./a.out: Not a valid dynamic program ❯ zig cc main.c -target x86_64-linux-musl -dynamic && musl-ldd ./a.out musl-ldd: ./a.out: Not a valid dynamic program After: ❯ zig cc main.c -target x86_64-linux-musl && musl-ldd ./a.out musl-ldd: ./a.out: Not a valid dynamic program ❯ zig cc main.c -target x86_64-linux-musl -static && musl-ldd ./a.out musl-ldd: ./a.out: Not a valid dynamic program ❯ zig cc main.c -target x86_64-linux-musl -dynamic && musl-ldd ./a.out /lib/ld-musl-x86_64.so.1 (0x72c10019e000) libc.so => /lib/ld-musl-x86_64.so.1 (0x72c10019e000) Closes #11909.

3 files changed, 29 insertions(+), 2 deletions(-)

src/clang_options_data.zig+9-2
...@@ -2610,7 +2610,14 @@ flagpd1("dwarf-ext-refs"),...@@ -2610,7 +2610,14 @@ flagpd1("dwarf-ext-refs"),
2610},2610},
2611sepd1("dylib_file"),2611sepd1("dylib_file"),
2612flagpd1("dylinker"),2612flagpd1("dylinker"),
2613flagpd1("dynamic"),2613.{
2614 .name = "dynamic",
2615 .syntax = .flag,
2616 .zig_equivalent = .dynamic,
2617 .pd1 = true,
2618 .pd2 = false,
2619 .psl = false,
2620},
2614.{2621.{
2615 .name = "dynamiclib",2622 .name = "dynamiclib",
2616 .syntax = .flag,2623 .syntax = .flag,
...@@ -5698,7 +5705,7 @@ flagpd1("startfiles"),...@@ -5698,7 +5705,7 @@ flagpd1("startfiles"),
5698.{5705.{
5699 .name = "static",5706 .name = "static",
5700 .syntax = .flag,5707 .syntax = .flag,
5701 .zig_equivalent = .other,5708 .zig_equivalent = .static,
5702 .pd1 = true,5709 .pd1 = true,
5703 .pd2 = true,5710 .pd2 = true,
5704 .psl = false,5711 .psl = false,
src/main.zig+12
...@@ -2338,6 +2338,16 @@ fn buildOutputType(...@@ -2338,6 +2338,16 @@ fn buildOutputType(
2338 fatal("unsupported -rtlib option '{s}'", .{it.only_arg});2338 fatal("unsupported -rtlib option '{s}'", .{it.only_arg});
2339 }2339 }
2340 },2340 },
2341 .static => {
2342 create_module.opts.link_mode = .static;
2343 lib_preferred_mode = .static;
2344 lib_search_strategy = .no_fallback;
2345 },
2346 .dynamic => {
2347 create_module.opts.link_mode = .dynamic;
2348 lib_preferred_mode = .dynamic;
2349 lib_search_strategy = .mode_first;
2350 },
2341 }2351 }
2342 }2352 }
2343 // Parse linker args.2353 // Parse linker args.
...@@ -5954,6 +5964,8 @@ pub const ClangArgIterator = struct {...@@ -5954,6 +5964,8 @@ pub const ClangArgIterator = struct {
5954 san_cov,5964 san_cov,
5955 no_san_cov,5965 no_san_cov,
5956 rtlib,5966 rtlib,
5967 static,
5968 dynamic,
5957 };5969 };
59585970
5959 const Args = struct {5971 const Args = struct {
tools/update_clang_options.zig+8
...@@ -572,6 +572,14 @@ const known_options = [_]KnownOpt{...@@ -572,6 +572,14 @@ const known_options = [_]KnownOpt{
572 .name = "rtlib=",572 .name = "rtlib=",
573 .ident = "rtlib",573 .ident = "rtlib",
574 },574 },
575 .{
576 .name = "static",
577 .ident = "static",
578 },
579 .{
580 .name = "dynamic",
581 .ident = "dynamic",
582 },
575};583};
576584
577const blacklisted_options = [_][]const u8{};585const blacklisted_options = [_][]const u8{};