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"),
26102610},
26112611sepd1("dylib_file"),
26122612flagpd1("dylinker"),
2613flagpd1("dynamic"),
2613.{
2614 .name = "dynamic",
2615 .syntax = .flag,
2616 .zig_equivalent = .dynamic,
2617 .pd1 = true,
2618 .pd2 = false,
2619 .psl = false,
2620},
26142621.{
26152622 .name = "dynamiclib",
26162623 .syntax = .flag,
......@@ -5698,7 +5705,7 @@ flagpd1("startfiles"),
56985705.{
56995706 .name = "static",
57005707 .syntax = .flag,
5701 .zig_equivalent = .other,
5708 .zig_equivalent = .static,
57025709 .pd1 = true,
57035710 .pd2 = true,
57045711 .psl = false,
src/main.zig+12
......@@ -2338,6 +2338,16 @@ fn buildOutputType(
23382338 fatal("unsupported -rtlib option '{s}'", .{it.only_arg});
23392339 }
23402340 },
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 },
23412351 }
23422352 }
23432353 // Parse linker args.
......@@ -5954,6 +5964,8 @@ pub const ClangArgIterator = struct {
59545964 san_cov,
59555965 no_san_cov,
59565966 rtlib,
5967 static,
5968 dynamic,
59575969 };
59585970
59595971 const Args = struct {
tools/update_clang_options.zig+8
......@@ -572,6 +572,14 @@ const known_options = [_]KnownOpt{
572572 .name = "rtlib=",
573573 .ident = "rtlib",
574574 },
575 .{
576 .name = "static",
577 .ident = "static",
578 },
579 .{
580 .name = "dynamic",
581 .ident = "dynamic",
582 },
575583};
576584
577585const blacklisted_options = [_][]const u8{};