authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-01-25 11:37:12-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-02 21:46:28-07:00
log93545fe74fadf92d07e19ca81f46db9bf800a993
tree682bbd23f2d9aefd28f8d40ade64ebc196e487c9
parent8ed432fe3c00a7879511719f7db5eb9bd195d3d2

zig cc: detect more linker args

* --whole-archive, -whole-archive * --no-whole-archive, -no-whole-archive * -s, --strip-all * -S, --strip-debug

1 files changed, 19 insertions(+), 1 deletions(-)

src/main.zig+19-1
......@@ -1287,6 +1287,7 @@ fn buildOutputType(
12871287 var it = ClangArgIterator.init(arena, all_args);
12881288 var emit_llvm = false;
12891289 var needed = false;
1290 var must_link = false;
12901291 var force_static_libs = false;
12911292 while (it.has_next) {
12921293 it.next() catch |err| {
......@@ -1307,7 +1308,10 @@ fn buildOutputType(
13071308 switch (file_ext) {
13081309 .assembly, .c, .cpp, .ll, .bc, .h, .m, .mm => try c_source_files.append(.{ .src_path = it.only_arg }),
13091310 .unknown, .shared_library, .object, .static_library => {
1310 try link_objects.append(.{ .path = it.only_arg });
1311 try link_objects.append(.{
1312 .path = it.only_arg,
1313 .must_link = must_link,
1314 });
13111315 },
13121316 .zig => {
13131317 if (root_src_file) |other| {
......@@ -1372,6 +1376,14 @@ fn buildOutputType(
13721376 needed = false;
13731377 } else if (mem.eql(u8, linker_arg, "--no-as-needed")) {
13741378 needed = true;
1379 } else if (mem.eql(u8, linker_arg, "--whole-archive") or
1380 mem.eql(u8, linker_arg, "-whole-archive"))
1381 {
1382 must_link = true;
1383 } else if (mem.eql(u8, linker_arg, "--no-whole-archive") or
1384 mem.eql(u8, linker_arg, "-no-whole-archive"))
1385 {
1386 must_link = false;
13751387 } else if (mem.eql(u8, linker_arg, "-Bdynamic") or
13761388 mem.eql(u8, linker_arg, "-dy") or
13771389 mem.eql(u8, linker_arg, "-call_shared"))
......@@ -1663,6 +1675,12 @@ fn buildOutputType(
16631675 // This option does not do anything.
16641676 } else if (mem.eql(u8, arg, "--export-all-symbols")) {
16651677 rdynamic = true;
1678 } else if (mem.eql(u8, arg, "-s") or mem.eql(u8, arg, "--strip-all") or
1679 mem.eql(u8, arg, "-S") or mem.eql(u8, arg, "--strip-debug"))
1680 {
1681 // -s, --strip-all Strip all symbols
1682 // -S, --strip-debug Strip debugging symbols
1683 strip = true;
16661684 } else if (mem.eql(u8, arg, "--start-group") or
16671685 mem.eql(u8, arg, "--end-group"))
16681686 {