Commit c2c1998269

Jakub Konka <kubkon@jakubkonka.com>
2022-06-28 21:16:19
clang: update cmdline options to include weak libs and frameworks
Clang accepts `-weak-lx`, `-weak_library x` and `-weak_framework x`.
1 parent c02dc17
src/clang_options_data.zig
@@ -4867,8 +4867,22 @@ flagpd1("version"),
     .psl = false,
 },
 flagpd1("w"),
-sepd1("weak_framework"),
-sepd1("weak_library"),
+.{
+    .name = "weak_framework",
+    .syntax = .separate,
+    .zig_equivalent = .weak_framework,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "weak_library",
+    .syntax = .separate,
+    .zig_equivalent = .weak_library,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
 sepd1("weak_reference_mismatches"),
 flagpd1("whatsloaded"),
 flagpd1("why_load"),
@@ -6200,7 +6214,14 @@ jspd1("iquote"),
     .pd2 = true,
     .psl = false,
 },
-joinpd1("weak-l"),
+.{
+    .name = "weak-l",
+    .syntax = .joined,
+    .zig_equivalent = .weak_library,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
 .{
     .name = "Ofast",
     .syntax = .flag,
src/main.zig
@@ -1625,6 +1625,8 @@ fn buildOutputType(
                     .entry => {
                         entry = it.only_arg;
                     },
+                    .weak_library => try system_libs.put(it.only_arg, .{ .weak = true }),
+                    .weak_framework => try frameworks.put(gpa, it.only_arg, .{ .weak = true }),
                 }
             }
             // Parse linker args.
@@ -4577,6 +4579,8 @@ pub const ClangArgIterator = struct {
         emit_llvm,
         sysroot,
         entry,
+        weak_library,
+        weak_framework,
     };
 
     const Args = struct {
tools/update_clang_options.zig
@@ -432,6 +432,18 @@ const known_options = [_]KnownOpt{
         .name = "e",
         .ident = "entry",
     },
+    .{
+        .name = "weak-l",
+        .ident = "weak_library",
+    },
+    .{
+        .name = "weak_library",
+        .ident = "weak_library",
+    },
+    .{
+        .name = "weak_framework",
+        .ident = "weak_framework",
+    },
 };
 
 const blacklisted_options = [_][]const u8{};