Commit 0eee98edc1

Andrew Kelley <andrew@ziglang.org>
2020-03-21 20:29:52
zig cc improvements
* The generated options data file is sorted now in a way that makes sure longer prefixes are first. This prevents collisions with some parameters. * Add support for `-fPIC`, `-fno-PIC`, `-nostdlib`, `-shared`, `-rdynamic`, `-Wl,-soname`, `-Wl,-rpath` * Better support for `-o`. * Disable generating h files * Shared library support. * Better positional argument support.
1 parent a4eaeee
src/main.cpp
@@ -430,6 +430,7 @@ static int main0(int argc, char **argv) {
     bool enable_dump_analysis = false;
     bool enable_doc_generation = false;
     bool emit_bin = true;
+    const char *emit_bin_override_path = nullptr;
     bool emit_asm = false;
     bool emit_llvm_ir = false;
     bool emit_h = false;
@@ -451,6 +452,7 @@ static int main0(int argc, char **argv) {
     bool function_sections = false;
     const char *mcpu = nullptr;
     CodeModel code_model = CodeModelDefault;
+    const char *override_soname = nullptr;
 
     ZigList<const char *> llvm_argv = {0};
     llvm_argv.append("zig (LLVM option parsing)");
@@ -576,10 +578,14 @@ static int main0(int argc, char **argv) {
     } else if (argc >= 2 && strcmp(argv[1], "fmt") == 0) {
         return stage2_fmt(argc, argv);
     } else if (argc >= 2 && strcmp(argv[1], "cc") == 0) {
-        const char *o_arg = nullptr;
+        emit_h = false;
+
         bool c_arg = false;
         Stage2ClangArgIterator it;
         stage2_clang_arg_iterator(&it, argc, argv);
+        bool nostdlib = false;
+        bool is_shared_lib = false;
+        ZigList<Buf *> linker_args = {};
         while (it.has_next) {
             if ((err = stage2_clang_arg_next(&it))) {
                 fprintf(stderr, "unable to parse command line parameters: %s\n", err_str(err));
@@ -590,7 +596,8 @@ static int main0(int argc, char **argv) {
                     target_string = it.only_arg;
                     break;
                 case Stage2ClangArgO: // -o
-                    o_arg = it.only_arg;
+                    emit_bin_override_path = it.only_arg;
+                    enable_cache = CacheOptOn;
                     break;
                 case Stage2ClangArgC: // -c
                     c_arg = true;
@@ -601,9 +608,17 @@ static int main0(int argc, char **argv) {
                     }
                     break;
                 case Stage2ClangArgPositional: {
-                    CFile *c_file = heap::c_allocator.create<CFile>();
-                    c_file->source_path = it.only_arg;
-                    c_source_files.append(c_file);
+                    Buf *arg_buf = buf_create_from_str(it.only_arg);
+                    if (buf_ends_with_str(arg_buf, ".c") ||
+                        buf_ends_with_str(arg_buf, ".cpp") ||
+                        buf_ends_with_str(arg_buf, ".s"))
+                    {
+                        CFile *c_file = heap::c_allocator.create<CFile>();
+                        c_file->source_path = it.only_arg;
+                        c_source_files.append(c_file);
+                    } else {
+                        objects.append(it.only_arg);
+                    }
                     break;
                 }
                 case Stage2ClangArgL: // -l
@@ -611,18 +626,111 @@ static int main0(int argc, char **argv) {
                         have_libc = true;
                     link_libs.append(it.only_arg);
                     break;
+                case Stage2ClangArgIgnore:
+                    break;
+                case Stage2ClangArgPassthrough:
+                    // Never mind what we're doing, just pass the args directly. For example --help.
+                    return ZigClang_main(argc, argv);
+                case Stage2ClangArgPIC:
+                    want_pic = WantPICEnabled;
+                    break;
+                case Stage2ClangArgNoPIC:
+                    want_pic = WantPICDisabled;
+                    break;
+                case Stage2ClangArgNoStdLib:
+                    nostdlib = true;
+                    break;
+                case Stage2ClangArgShared:
+                    is_dynamic = true;
+                    is_shared_lib = true;
+                    break;
+                case Stage2ClangArgRDynamic:
+                    rdynamic = true;
+                    break;
+                case Stage2ClangArgWL: {
+                    const char *arg = it.only_arg;
+                    for (;;) {
+                        size_t pos = 0;
+                        while (arg[pos] != ',' && arg[pos] != 0) pos += 1;
+                        linker_args.append(buf_create_from_mem(arg, pos));
+                        if (arg[pos] == 0) break;
+                        arg += pos + 1;
+                    }
+                    break;
+                }
+            }
+        }
+        // Parse linker args
+        for (size_t i = 0; i < linker_args.length; i += 1) {
+            Buf *arg = linker_args.at(i);
+            if (buf_eql_str(arg, "-soname")) {
+                i += 1;
+                if (i >= linker_args.length) {
+                    fprintf(stderr, "expected linker arg after '%s'\n", buf_ptr(arg));
+                    return EXIT_FAILURE;
+                }
+                Buf *soname_buf = linker_args.at(i);
+                override_soname = buf_ptr(soname_buf);
+                // use it as --name
+                // example: libsoundio.so.2
+                size_t prefix = 0;
+                if (buf_starts_with_str(soname_buf, "lib")) {
+                    prefix = 3;
+                }
+                size_t end = buf_len(soname_buf);
+                if (buf_ends_with_str(soname_buf, ".so")) {
+                    end -= 3;
+                } else {
+                    bool found_digit = false;
+                    while (end > 0 && isdigit(buf_ptr(soname_buf)[end - 1])) {
+                        found_digit = true;
+                        end -= 1;
+                    }
+                    if (found_digit && end > 0 && buf_ptr(soname_buf)[end - 1] == '.') {
+                        end -= 1;
+                    } else {
+                        end = buf_len(soname_buf);
+                    }
+                    if (buf_ends_with_str(buf_slice(soname_buf, prefix, end), ".so")) {
+                        end -= 3;
+                    }
+                }
+                out_name = buf_ptr(buf_slice(soname_buf, prefix, end));
+            } else if (buf_eql_str(arg, "-rpath")) {
+                i += 1;
+                if (i >= linker_args.length) {
+                    fprintf(stderr, "expected linker arg after '%s'\n", buf_ptr(arg));
+                    return EXIT_FAILURE;
+                }
+                Buf *rpath = linker_args.at(i);
+                rpath_list.append(buf_ptr(rpath));
+            } else {
+                fprintf(stderr, "warning: unsupported linker arg: %s\n", buf_ptr(arg));
             }
         }
+
+        if (!nostdlib && !have_libc) {
+            have_libc = true;
+            link_libs.append("c");
+        }
         if (!c_arg) {
             cmd = CmdBuild;
-            out_type = OutTypeExe;
-            if (o_arg == nullptr) {
-                zig_panic("TODO set out name to a.out");
+            if (is_shared_lib) {
+                out_type = OutTypeLib;
+            } else {
+                out_type = OutTypeExe;
+            }
+            if (emit_bin_override_path == nullptr) {
+                emit_bin_override_path = "a.out";
             }
         } else {
             cmd = CmdBuild;
             out_type = OutTypeObj;
         }
+        if (c_source_files.length == 0 && objects.length == 0) {
+            // For example `zig cc` and no args should print the "no input files" message.
+            return ZigClang_main(argc, argv);
+        }
     } else for (int i = 1; i < argc; i += 1) {
         char *arg = argv[i];
 
@@ -1184,6 +1292,18 @@ static int main0(int argc, char **argv) {
                 buf_out_name = buf_alloc();
                 os_path_extname(&basename, buf_out_name, nullptr);
             }
+            if (need_name && buf_out_name == nullptr && objects.length == 1) {
+                Buf basename = BUF_INIT;
+                os_path_split(buf_create_from_str(objects.at(0)), nullptr, &basename);
+                buf_out_name = buf_alloc();
+                os_path_extname(&basename, buf_out_name, nullptr);
+            }
+            if (need_name && buf_out_name == nullptr && emit_bin_override_path != nullptr) {
+                Buf basename = BUF_INIT;
+                os_path_split(buf_create_from_str(emit_bin_override_path), nullptr, &basename);
+                buf_out_name = buf_alloc();
+                os_path_extname(&basename, buf_out_name, nullptr);
+            }
 
             if (need_name && buf_out_name == nullptr) {
                 fprintf(stderr, "--name [name] not provided and unable to infer\n\n");
@@ -1259,6 +1379,10 @@ static int main0(int argc, char **argv) {
             g->function_sections = function_sections;
             g->code_model = code_model;
 
+            if (override_soname) {
+                g->override_soname = buf_create_from_str(override_soname);
+            }
+
             for (size_t i = 0; i < lib_dirs.length; i += 1) {
                 codegen_add_lib_dir(g, lib_dirs.at(i));
             }
@@ -1337,7 +1461,14 @@ static int main0(int argc, char **argv) {
                     os_spawn_process(args, &term);
                     return term.code;
                 } else if (cmd == CmdBuild) {
-                    if (g->enable_cache) {
+                    if (emit_bin_override_path != nullptr) {
+                        Buf *dest_path = buf_create_from_str(emit_bin_override_path);
+                        if ((err = os_update_file(&g->bin_file_output_path, dest_path))) {
+                            fprintf(stderr, "unable to copy %s to %s: %s\n", buf_ptr(&g->bin_file_output_path),
+                                    buf_ptr(dest_path), err_str(err));
+                            return main_exit(root_progress_node, EXIT_FAILURE);
+                        }
+                    } else if (g->enable_cache) {
 #if defined(ZIG_OS_WINDOWS)
                         buf_replace(&g->bin_file_output_path, '/', '\\');
                         buf_replace(g->output_dir, '/', '\\');
src/stage2.h
@@ -325,6 +325,14 @@ enum Stage2ClangArg {
     Stage2ClangArgOther,
     Stage2ClangArgPositional,
     Stage2ClangArgL,
+    Stage2ClangArgIgnore,
+    Stage2ClangArgPassthrough,
+    Stage2ClangArgPIC,
+    Stage2ClangArgNoPIC,
+    Stage2ClangArgNoStdLib,
+    Stage2ClangArgShared,
+    Stage2ClangArgRDynamic,
+    Stage2ClangArgWL,
 };
 
 // ABI warning
src-self-hosted/clang_options.zig
@@ -20,7 +20,7 @@ pub const CliArg = struct {
     /// Prefixed by "/"
     psl: bool = false,
 
-    const Syntax = union(enum) {
+    pub const Syntax = union(enum) {
         /// A flag with no values.
         flag,
 
@@ -46,7 +46,7 @@ pub const CliArg = struct {
         multi_arg: u8,
     };
 
-    fn matchEql(self: CliArg, arg: []const u8) bool {
+    pub fn matchEql(self: CliArg, arg: []const u8) bool {
         if (self.pd1 and arg.len >= self.name.len + 1 and
             mem.startsWith(u8, arg, "-") and mem.eql(u8, arg[1..], self.name))
         {
@@ -65,7 +65,7 @@ pub const CliArg = struct {
         return false;
     }
 
-    fn matchStartsWith(self: CliArg, arg: []const u8) usize {
+    pub fn matchStartsWith(self: CliArg, arg: []const u8) usize {
         if (self.pd1 and arg.len >= self.name.len + 1 and
             mem.startsWith(u8, arg, "-") and mem.startsWith(u8, arg[1..], self.name))
         {
src-self-hosted/clang_options_data.zig
@@ -2,21 +2,13 @@
 // zig fmt: off
 usingnamespace @import("clang_options.zig");
 pub const data = blk: { @setEvalBranchQuota(6000); break :blk &[_]CliArg{
-jspd1("A"),
-joinpd1("A-"),
-jspd1("B"),
 flagpd1("C"),
 flagpd1("CC"),
-jspd1("D"),
 flagpd1("E"),
 flagpd1("EB"),
 flagpd1("EL"),
 flagpd1("Eonly"),
-jspd1("F"),
-jspd1("G"),
-joinpd1("G="),
 flagpd1("H"),
-jspd1("I"),
 .{
     .name = "<input>",
     .syntax = .flag,
@@ -26,42 +18,25 @@ jspd1("I"),
     .psl = false,
 },
 flagpd1("I-"),
-jspd1("J"),
-jspd1("L"),
 flagpd1("M"),
 flagpd1("MD"),
-jspd1("MF"),
 flagpd1("MG"),
-jspd1("MJ"),
 flagpd1("MM"),
 flagpd1("MMD"),
 flagpd1("MP"),
-jspd1("MQ"),
-jspd1("MT"),
 flagpd1("MV"),
 flagpd1("Mach"),
-joinpd1("O"),
 flagpd1("O0"),
 flagpd1("O4"),
 flagpd1("O"),
 flagpd1("ObjC"),
 flagpd1("ObjC++"),
-joinpd1("Ofast"),
 flagpd1("P"),
 flagpd1("Q"),
 flagpd1("Qn"),
 flagpd1("Qunused-arguments"),
 flagpd1("Qy"),
-joinpd1("R"),
-joinpd1("Rpass="),
-joinpd1("Rpass-analysis="),
-joinpd1("Rpass-missed="),
 flagpd1("S"),
-jspd1("T"),
-jspd1("Tbss"),
-jspd1("Tdata"),
-jspd1("Ttext"),
-jspd1("U"),
 .{
     .name = "<unknown>",
     .syntax = .flag,
@@ -70,74 +45,24 @@ jspd1("U"),
     .pd2 = false,
     .psl = false,
 },
-jspd1("V"),
 flagpd1("WCL4"),
-joinpd1("W"),
-.{
-    .name = "Wa,",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("Wall"),
 flagpd1("Wdeprecated"),
-joinpd1("Wframe-larger-than="),
-.{
-    .name = "Wl,",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
-joinpd1("Wlarge-by-value-copy="),
 flagpd1("Wlarge-by-value-copy"),
-joinpd1("Wlarger-than-"),
-joinpd1("Wlarger-than="),
 flagpd1("Wno-deprecated"),
-joinpd1("Wno-nonportable-cfstrings"),
 flagpd1("Wno-rewrite-macros"),
 flagpd1("Wno-write-strings"),
-joinpd1("Wnonportable-cfstrings"),
-.{
-    .name = "Wp,",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("Wwrite-strings"),
 flagpd1("X"),
-joinpd1("X"),
 sepd1("Xanalyzer"),
-.{
-    .name = "Xarch_",
-    .syntax = .joined_and_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 sepd1("Xassembler"),
 sepd1("Xclang"),
 sepd1("Xcuda-fatbinary"),
 sepd1("Xcuda-ptxas"),
 sepd1("Xlinker"),
 sepd1("Xopenmp-target"),
-.{
-    .name = "Xopenmp-target=",
-    .syntax = .joined_and_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 sepd1("Xpreprocessor"),
 flagpd1("Z"),
-joinpd1("Z"),
 flagpd1("Z-Xlinker-no-demangle"),
 flagpd1("Z-reserved-lib-cckext"),
 flagpd1("Z-reserved-lib-stdc++"),
@@ -150,23 +75,7 @@ sepd1("Zlinker-input"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "CLASSPATH=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("###"),
-.{
-    .name = "AI",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Brepro",
     .syntax = .flag,
@@ -207,14 +116,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "D",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "E",
     .syntax = .flag,
@@ -223,14 +124,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "EH",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "EP",
     .syntax = .flag,
@@ -239,14 +132,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "F",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "FA",
     .syntax = .flag,
@@ -255,14 +140,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "FA",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "FC",
     .syntax = .flag,
@@ -271,22 +148,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "FI",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "FR",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "FS",
     .syntax = .flag,
@@ -295,78 +156,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "FU",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fa",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fd",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fe",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fi",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fm",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fo",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fp",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Fr",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Fx",
     .syntax = .flag,
@@ -559,14 +348,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Gs",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Gv",
     .syntax = .flag,
@@ -631,14 +412,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "I",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "J",
     .syntax = .flag,
@@ -695,14 +468,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "MP",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "MT",
     .syntax = .flag,
@@ -719,14 +484,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "O",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "P",
     .syntax = .flag,
@@ -775,14 +532,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Qpar-report",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Qsafe_fp_loads",
     .syntax = .flag,
@@ -816,24 +565,8 @@ flagpd1("###"),
     .psl = true,
 },
 .{
-    .name = "Qvec-report",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "RTC",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "TC",
-    .syntax = .flag,
+    .name = "TC",
+    .syntax = .flag,
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
@@ -847,30 +580,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Tc",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Tp",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "U",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "V",
     .syntax = .flag,
@@ -975,14 +684,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Yc",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Yd",
     .syntax = .flag,
@@ -991,22 +692,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Yl",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "Yu",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Z7",
     .syntax = .flag,
@@ -1047,14 +732,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "ZW",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Za",
     .syntax = .flag,
@@ -1063,14 +740,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Zc:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Zc:__cplusplus",
     .syntax = .flag,
@@ -1287,14 +956,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Zm",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Zo",
     .syntax = .flag,
@@ -1311,14 +972,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "Zp",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "Zp",
     .syntax = .flag,
@@ -1343,14 +996,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "arch:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "await",
     .syntax = .flag,
@@ -1375,38 +1020,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "cgthreads",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "clang:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "clr",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "constexpr:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "d1PP",
     .syntax = .flag,
@@ -1423,14 +1036,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "d2",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "d2FastFail",
     .syntax = .flag,
@@ -1471,30 +1076,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "doc",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "errorReport",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "execution-charset:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "fallback",
     .syntax = .flag,
@@ -1503,14 +1084,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "favor",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "fp:except",
     .syntax = .flag,
@@ -1551,18 +1124,10 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "guard:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "help",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .passthrough,
     .pd1 = true,
     .pd2 = false,
     .psl = true,
@@ -1583,14 +1148,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "imsvc",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "kernel",
     .syntax = .flag,
@@ -1607,14 +1164,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "link",
-    .syntax = .remaining_args_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "nologo",
     .syntax = .flag,
@@ -1623,14 +1172,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "o",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .o,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "openmp",
     .syntax = .flag,
@@ -1703,22 +1244,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "source-charset:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
-.{
-    .name = "std:",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "u",
     .syntax = .flag,
@@ -1751,14 +1276,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "vd",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "vmb",
     .syntax = .flag,
@@ -1815,14 +1332,6 @@ flagpd1("###"),
     .pd2 = false,
     .psl = true,
 },
-.{
-    .name = "w",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = true,
-},
 .{
     .name = "w",
     .syntax = .flag,
@@ -1895,14 +1404,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "analyzer-output",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "assemble",
     .syntax = .flag,
@@ -1920,45 +1421,21 @@ flagpd1("###"),
     .psl = false,
 },
 .{
-    .name = "assert=",
-    .syntax = .joined,
+    .name = "bootclasspath",
+    .syntax = .separate,
     .zig_equivalent = .other,
     .pd1 = false,
     .pd2 = true,
     .psl = false,
 },
 .{
-    .name = "bootclasspath",
+    .name = "classpath",
     .syntax = .separate,
     .zig_equivalent = .other,
     .pd1 = false,
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "bootclasspath=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "classpath",
-    .syntax = .separate,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "classpath=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "comments",
     .syntax = .flag,
@@ -1999,14 +1476,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "debug=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "define-macro",
     .syntax = .separate,
@@ -2015,14 +1484,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "define-macro=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "dependencies",
     .syntax = .flag,
@@ -2039,14 +1500,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "dyld-prefix=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "encoding",
     .syntax = .separate,
@@ -2055,14 +1508,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "encoding=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "entry",
     .syntax = .flag,
@@ -2079,14 +1524,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "extdirs=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "extra-warnings",
     .syntax = .flag,
@@ -2103,14 +1540,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "for-linker=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "force-link",
     .syntax = .separate,
@@ -2119,14 +1548,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "force-link=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "help-hidden",
     .syntax = .flag,
@@ -2135,22 +1556,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "imacros=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "include=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "include-barrier",
     .syntax = .flag,
@@ -2167,14 +1572,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "include-directory=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "include-directory-after",
     .syntax = .separate,
@@ -2183,14 +1580,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "include-directory-after=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "include-prefix",
     .syntax = .separate,
@@ -2199,14 +1588,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "include-prefix=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "include-with-prefix",
     .syntax = .separate,
@@ -2215,14 +1596,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "include-with-prefix=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "include-with-prefix-after",
     .syntax = .separate,
@@ -2231,14 +1604,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "include-with-prefix-after=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "include-with-prefix-before",
     .syntax = .separate,
@@ -2247,14 +1612,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "include-with-prefix-before=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "language",
     .syntax = .separate,
@@ -2263,14 +1620,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "language=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "library-directory",
     .syntax = .separate,
@@ -2279,14 +1628,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "library-directory=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "mhwdiv",
     .syntax = .separate,
@@ -2295,14 +1636,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "mhwdiv=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "migrate",
     .syntax = .flag,
@@ -2330,7 +1663,7 @@ flagpd1("###"),
 .{
     .name = "no-standard-libraries",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .nostdlib,
     .pd1 = false,
     .pd2 = true,
     .psl = false,
@@ -2359,14 +1692,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "optimize=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "output",
     .syntax = .separate,
@@ -2375,14 +1700,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "output=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "output-class-directory",
     .syntax = .separate,
@@ -2391,14 +1708,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "output-class-directory=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "param",
     .syntax = .separate,
@@ -2407,14 +1716,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "param=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "precompile",
     .syntax = .flag,
@@ -2431,14 +1732,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "prefix=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "preprocess",
     .syntax = .flag,
@@ -2503,14 +1796,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "resource=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "rtlib",
     .syntax = .separate,
@@ -2559,14 +1844,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "sysroot=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "target-help",
     .syntax = .flag,
@@ -2591,14 +1868,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "undefine-macro=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "unsigned-char",
     .syntax = .flag,
@@ -2631,22 +1900,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "warn-",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "warn-=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "write-dependencies",
     .syntax = .flag,
@@ -2663,7 +1916,6 @@ flagpd1("###"),
     .pd2 = true,
     .psl = false,
 },
-joinpd1("a"),
 sepd1("add-plugin"),
 flagpd1("faggressive-function-elimination"),
 flagpd1("fno-aggressive-function-elimination"),
@@ -2684,9 +1936,7 @@ flagpd1("cfg-add-implicit-dtors"),
 flagpd1("unoptimized-cfg"),
 flagpd1("analyze"),
 sepd1("analyze-function"),
-joinpd1("analyze-function="),
 sepd1("analyzer-checker"),
-joinpd1("analyzer-checker="),
 flagpd1("analyzer-checker-help"),
 flagpd1("analyzer-checker-help-alpha"),
 flagpd1("analyzer-checker-help-developer"),
@@ -2695,32 +1945,23 @@ flagpd1("analyzer-checker-option-help-alpha"),
 flagpd1("analyzer-checker-option-help-developer"),
 sepd1("analyzer-config"),
 sepd1("analyzer-config-compatibility-mode"),
-joinpd1("analyzer-config-compatibility-mode="),
 flagpd1("analyzer-config-help"),
 sepd1("analyzer-constraints"),
-joinpd1("analyzer-constraints="),
 flagpd1("analyzer-disable-all-checks"),
 sepd1("analyzer-disable-checker"),
-joinpd1("analyzer-disable-checker="),
 flagpd1("analyzer-disable-retry-exhausted"),
 flagpd1("analyzer-display-progress"),
 sepd1("analyzer-dump-egraph"),
-joinpd1("analyzer-dump-egraph="),
 sepd1("analyzer-inline-max-stack-depth"),
-joinpd1("analyzer-inline-max-stack-depth="),
 sepd1("analyzer-inlining-mode"),
-joinpd1("analyzer-inlining-mode="),
 flagpd1("analyzer-list-enabled-checkers"),
 sepd1("analyzer-max-loop"),
 flagpd1("analyzer-opt-analyze-headers"),
 flagpd1("analyzer-opt-analyze-nested-blocks"),
 sepd1("analyzer-output"),
-joinpd1("analyzer-output="),
 sepd1("analyzer-purge"),
-joinpd1("analyzer-purge="),
 flagpd1("analyzer-stats"),
 sepd1("analyzer-store"),
-joinpd1("analyzer-store="),
 flagpd1("analyzer-viz-egraph-graphviz"),
 flagpd1("analyzer-werror"),
 flagpd1("fslp-vectorize-aggressive"),
@@ -2735,7 +1976,6 @@ flagpd1("fhonor-infinites"),
 flagpd1("fno-honor-infinites"),
 flagpd1("findirect-virtual-calls"),
 sepd1("fnew-alignment"),
-joinpd1("objcmt-white-list-dir-path="),
 flagpd1("faligned-new"),
 flagpd1("fno-aligned-new"),
 flagpd1("fsched-interblock"),
@@ -2912,27 +2152,16 @@ flagpd1("arcmt-migrate-emit-errors"),
 sepd1("arcmt-migrate-report-output"),
 flagpd1("arcmt-modify"),
 flagpd1("ast-dump"),
-joinpd1("ast-dump="),
 flagpd1("ast-dump-all"),
-joinpd1("ast-dump-all="),
 sepd1("ast-dump-filter"),
 flagpd1("ast-dump-lookups"),
 flagpd1("ast-list"),
 sepd1("ast-merge"),
 flagpd1("ast-print"),
 flagpd1("ast-view"),
-.{
-    .name = "autocomplete=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("fautomatic"),
 flagpd1("fno-automatic"),
 sepd1("aux-triple"),
-jspd1("b"),
 flagpd1("fbackslash"),
 flagpd1("fno-backslash"),
 flagpd1("fbacktrace"),
@@ -2953,12 +2182,10 @@ sepd1("bundle_loader"),
     .pd2 = false,
     .psl = false,
 },
-jspd1("c-isystem"),
 flagpd1("fcaller-saves"),
 flagpd1("fno-caller-saves"),
 flagpd1("cc1"),
 flagpd1("cc1as"),
-joinpd1("ccc-"),
 flagpd1("ccc-arcmt-check"),
 sepd1("ccc-arcmt-migrate"),
 flagpd1("ccc-arcmt-modify"),
@@ -2973,14 +2200,6 @@ sepd1("chain-include"),
 flagpd1("fcheck-array-temporaries"),
 flagpd1("fno-check-array-temporaries"),
 flagpd1("cl-denorms-are-zero"),
-.{
-    .name = "cl-ext=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("cl-fast-relaxed-math"),
 flagpd1("cl-finite-math-only"),
 flagpd1("cl-fp32-correctly-rounded-divide-sqrt"),
@@ -2989,13 +2208,10 @@ flagpd1("cl-mad-enable"),
 flagpd1("cl-no-signed-zeros"),
 flagpd1("cl-opt-disable"),
 flagpd1("cl-single-precision-constant"),
-joinpd1("cl-std="),
 flagpd1("cl-strict-aliasing"),
 flagpd1("cl-uniform-work-group-size"),
 flagpd1("cl-unsafe-math-optimizations"),
-jspd1("client_name"),
 sepd1("code-completion-at"),
-joinpd1("code-completion-at="),
 flagpd1("code-completion-brief-comments"),
 flagpd1("code-completion-macros"),
 flagpd1("code-completion-patterns"),
@@ -3008,7 +2224,6 @@ flagpd1("code-completion-with-fixits"),
     .pd2 = true,
     .psl = false,
 },
-jspd1("compatibility_version"),
 flagpd1("compiler-options-dump"),
 .{
     .name = "compress-debug-sections",
@@ -3018,14 +2233,6 @@ flagpd1("compiler-options-dump"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "compress-debug-sections=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "config",
     .syntax = .separate,
@@ -3034,22 +2241,6 @@ flagpd1("compiler-options-dump"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "config-system-dir=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "config-user-dir=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "coverage",
     .syntax = .flag,
@@ -3060,12 +2251,9 @@ flagpd1("compiler-options-dump"),
 },
 flagpd1("coverage-cfg-checksum"),
 sepd1("coverage-data-file"),
-joinpd1("coverage-data-file="),
 flagpd1("coverage-exit-block-before-body"),
 flagpd1("coverage-no-function-names-in-data"),
 sepd1("coverage-notes-file"),
-joinpd1("coverage-notes-file="),
-joinpd1("coverage-version="),
 flagpd1("cpp"),
 flagpd1("cpp-precomp"),
 flagpd1("fcray-pointer"),
@@ -3086,14 +2274,6 @@ flagpd1("fno-cray-pointer"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "cuda-gpu-arch=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "cuda-host-only",
     .syntax = .flag,
@@ -3102,14 +2282,6 @@ flagpd1("fno-cray-pointer"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "cuda-include-ptx=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "cuda-noopt-device-debug",
     .syntax = .flag,
@@ -3118,14 +2290,6 @@ flagpd1("fno-cray-pointer"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "cuda-path=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "cuda-path-ignore-env",
     .syntax = .flag,
@@ -3134,23 +2298,18 @@ flagpd1("fno-cray-pointer"),
     .pd2 = true,
     .psl = false,
 },
-jspd1("current_version"),
-jspd1("cxx-isystem"),
 flagpd1("dA"),
 flagpd1("dD"),
 flagpd1("dI"),
 flagpd1("dM"),
 flagpd1("d"),
-joinpd1("d"),
 flagpd1("fd-lines-as-code"),
 flagpd1("fno-d-lines-as-code"),
 flagpd1("fd-lines-as-comments"),
 flagpd1("fno-d-lines-as-comments"),
 flagpd1("dead_strip"),
 flagpd1("debug-forward-template-params"),
-joinpd1("debug-info-kind="),
 flagpd1("debug-info-macro"),
-joinpd1("debugger-tuning="),
 flagpd1("fdefault-double-8"),
 flagpd1("fno-default-double-8"),
 sepd1("default-function-attr"),
@@ -3163,14 +2322,6 @@ flagpd1("fno-default-real-8"),
 sepd1("defsym"),
 sepd1("dependency-dot"),
 sepd1("dependency-file"),
-.{
-    .name = "dependent-lib=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("detailed-preprocessing-record"),
 flagpd1("fdevirtualize"),
 flagpd1("fno-devirtualize"),
@@ -3190,14 +2341,6 @@ flagpd1("disable-red-zone"),
 flagpd1("discard-value-names"),
 flagpd1("fdollar-ok"),
 flagpd1("fno-dollar-ok"),
-.{
-    .name = "driver-mode=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("dump-coverage-mapping"),
 flagpd1("dump-deserialized-decls"),
 flagpd1("fdump-fortran-optimized"),
@@ -3216,13 +2359,10 @@ sepd1("dwarf-debug-flags"),
 sepd1("dwarf-debug-producer"),
 flagpd1("dwarf-explicit-import"),
 flagpd1("dwarf-ext-refs"),
-joinpd1("dwarf-version="),
 sepd1("dylib_file"),
 flagpd1("dylinker"),
-jspd1("dylinker_install_name"),
 flagpd1("dynamic"),
 flagpd1("dynamiclib"),
-jspd1("e"),
 flagpd1("feliminate-unused-debug-types"),
 flagpd1("fno-eliminate-unused-debug-types"),
 flagpd1("emit-ast"),
@@ -3241,24 +2381,24 @@ flagpd1("emit-obj"),
 flagpd1("emit-pch"),
 flagpd1("enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang"),
 sepd1("error-on-deserialized-decl"),
-joinpd1("error-on-deserialized-decl="),
 sepd1("exported_symbols_list"),
 flagpd1("fexternal-blas"),
 flagpd1("fno-external-blas"),
 flagpd1("ff2c"),
 flagpd1("fno-f2c"),
-flagpd1("fPIC"),
+.{
+    .name = "fPIC",
+    .syntax = .flag,
+    .zig_equivalent = .pic,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
 flagpd1("fPIE"),
 flagpd1("faccess-control"),
-joinpd1("faddress-space-map-mangling="),
 flagpd1("faddrsig"),
 flagpd1("falign-functions"),
-joinpd1("falign-functions="),
-joinpd1("falign-jumps="),
-joinpd1("falign-labels="),
-joinpd1("falign-loops="),
 flagpd1("faligned-allocation"),
-joinpd1("faligned-new="),
 flagpd1("fallow-editor-placeholders"),
 flagpd1("fallow-half-arguments-and-returns"),
 flagpd1("fallow-pch-with-compiler-errors"),
@@ -3281,18 +2421,12 @@ flagpd1("fasynchronous-unwind-tables"),
 flagpd1("ffat-lto-objects"),
 flagpd1("fno-fat-lto-objects"),
 flagpd1("fauto-profile"),
-joinpd1("fauto-profile="),
 flagpd1("fauto-profile-accurate"),
 flagpd1("fautolink"),
-joinpd1("fblas-matmul-limit="),
 flagpd1("fblocks"),
 flagpd1("fblocks-runtime-optional"),
-joinpd1("fbootclasspath="),
 flagpd1("fborland-extensions"),
 sepd1("fbracket-depth"),
-joinpd1("fbracket-depth="),
-joinpd1("fbuild-session-file="),
-joinpd1("fbuild-session-timestamp="),
 flagpd1("fbuiltin"),
 flagpd1("fbuiltin-module-map"),
 flagpd1("fcall-saved-x10"),
@@ -3307,46 +2441,24 @@ flagpd1("fcall-saved-x9"),
 flagpd1("fcaret-diagnostics"),
 sepd1("fcaret-diagnostics-max-lines"),
 flagpd1("fcf-protection"),
-joinpd1("fcf-protection="),
-joinpd1("fcf-runtime-abi="),
 flagpd1("fchar8_t"),
-joinpd1("fcheck="),
 flagpd1("fcheck-new"),
 flagpd1("fno-check-new"),
-joinpd1("fclang-abi-compat="),
-joinpd1("fclasspath="),
-joinpd1("fcoarray="),
 flagpd1("fcolor-diagnostics"),
-.{
-    .name = "fcomment-block-commands=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fcommon"),
-joinpd1("fcompile-resource="),
 flagpd1("fcomplete-member-pointers"),
 flagpd1("fconcepts-ts"),
 flagpd1("fconst-strings"),
 flagpd1("fconstant-cfstrings"),
 sepd1("fconstant-string-class"),
-joinpd1("fconstant-string-class="),
 sepd1("fconstexpr-backtrace-limit"),
-joinpd1("fconstexpr-backtrace-limit="),
 sepd1("fconstexpr-depth"),
-joinpd1("fconstexpr-depth="),
 sepd1("fconstexpr-steps"),
-joinpd1("fconstexpr-steps="),
 flagpd1("fconvergent-functions"),
-joinpd1("fconvert="),
 flagpd1("fcoroutines-ts"),
 flagpd1("fcoverage-mapping"),
-joinpd1("fcrash-diagnostics-dir="),
 flagpd1("fcreate-profile"),
 flagpd1("fcs-profile-generate"),
-joinpd1("fcs-profile-generate="),
 flagpd1("fcuda-allow-variadic-functions"),
 flagpd1("fcuda-approx-transcendentals"),
 flagpd1("fcuda-flush-denormals-to-zero"),
@@ -3358,14 +2470,11 @@ flagpd1("fcxx-modules"),
 flagpd1("fc++-static-destructors"),
 flagpd1("fdata-sections"),
 sepd1("fdebug-compilation-dir"),
-joinpd1("fdebug-compilation-dir="),
-joinpd1("fdebug-default-version="),
 flagpd1("fdebug-info-for-profiling"),
 flagpd1("fdebug-macro"),
 flagpd1("fdebug-pass-arguments"),
 flagpd1("fdebug-pass-manager"),
 flagpd1("fdebug-pass-structure"),
-joinpd1("fdebug-prefix-map="),
 flagpd1("fdebug-ranges-base-address"),
 flagpd1("fdebug-types-section"),
 flagpd1("fdebugger-cast-result-to-id"),
@@ -3373,25 +2482,17 @@ flagpd1("fdebugger-objc-literal"),
 flagpd1("fdebugger-support"),
 flagpd1("fdeclare-opencl-builtins"),
 flagpd1("fdeclspec"),
-joinpd1("fdefault-calling-conv="),
 flagpd1("fdelayed-template-parsing"),
 flagpd1("fdelete-null-pointer-checks"),
-joinpd1("fdenormal-fp-math="),
-joinpd1("fdepfile-entry="),
 flagpd1("fdeprecated-macro"),
 flagpd1("fdiagnostics-absolute-paths"),
 flagpd1("fdiagnostics-color"),
-joinpd1("fdiagnostics-color="),
 flagpd1("fdiagnostics-fixit-info"),
 sepd1("fdiagnostics-format"),
-joinpd1("fdiagnostics-format="),
-joinpd1("fdiagnostics-hotness-threshold="),
 flagpd1("fdiagnostics-parseable-fixits"),
 flagpd1("fdiagnostics-print-source-range-info"),
 sepd1("fdiagnostics-show-category"),
-joinpd1("fdiagnostics-show-category="),
 flagpd1("fdiagnostics-show-hotness"),
-joinpd1("fdiagnostics-show-location="),
 flagpd1("fdiagnostics-show-note-include-stack"),
 flagpd1("fdiagnostics-show-option"),
 flagpd1("fdiagnostics-show-template-tree"),
@@ -3409,7 +2510,6 @@ flagpd1("fdwarf-exceptions"),
 flagpd1("felide-constructors"),
 flagpd1("feliminate-unused-debug-symbols"),
 flagpd1("fembed-bitcode"),
-joinpd1("fembed-bitcode="),
 flagpd1("fembed-bitcode-marker"),
 flagpd1("femit-all-decls"),
 flagpd1("femit-coverage-data"),
@@ -3417,24 +2517,17 @@ flagpd1("femit-coverage-notes"),
 flagpd1("femit-debug-entry-values"),
 flagpd1("femulated-tls"),
 flagpd1("fencode-extended-block-signature"),
-joinpd1("fencoding="),
 sepd1("ferror-limit"),
-joinpd1("ferror-limit="),
 flagpd1("fescaping-block-tail-calls"),
 flagpd1("fexceptions"),
-joinpd1("fexcess-precision="),
-joinpd1("fexec-charset="),
 flagpd1("fexperimental-isel"),
 flagpd1("fexperimental-new-constant-interpreter"),
 flagpd1("fexperimental-new-pass-manager"),
-joinpd1("fextdirs="),
 flagpd1("fexternc-nounwind"),
 flagpd1("ffake-address-space-map"),
 flagpd1("ffast-math"),
-joinpd1("ffile-prefix-map="),
 flagpd1("ffine-grained-bitfield-accesses"),
 flagpd1("ffinite-math-only"),
-joinpd1("ffixed-line-length-"),
 flagpd1("ffixed-point"),
 flagpd1("ffixed-r19"),
 flagpd1("ffixed-r9"),
@@ -3474,18 +2567,12 @@ flagpd1("fforbid-guard-variables"),
 flagpd1("fforce-dwarf-frame"),
 flagpd1("fforce-emit-vtables"),
 flagpd1("fforce-enable-int128"),
-joinpd1("ffp-contract="),
-joinpd1("ffp-exception-behavior="),
-joinpd1("ffp-model="),
-joinpd1("ffpe-trap="),
-joinpd1("ffree-line-length-"),
 flagpd1("ffreestanding"),
 flagpd1("ffunction-sections"),
 flagpd1("fgnu89-inline"),
 flagpd1("fgnu-inline-asm"),
 flagpd1("fgnu-keywords"),
 flagpd1("fgnu-runtime"),
-joinpd1("fgnuc-version="),
 flagpd1("fgpu-allow-device-init"),
 flagpd1("fgpu-rdc"),
 flagpd1("fheinous-gnu-extensions"),
@@ -3499,17 +2586,11 @@ sepd1("filetype"),
 flagpd1("fimplicit-module-maps"),
 flagpd1("fimplicit-modules"),
 flagpd1("finclude-default-header"),
-joinpd1("finit-character="),
-joinpd1("finit-integer="),
-joinpd1("finit-logical="),
-joinpd1("finit-real="),
 flagpd1("finline"),
 flagpd1("finline-functions"),
 flagpd1("finline-hint-functions"),
-joinpd1("finline-limit="),
 flagpd1("finline-limit"),
 flagpd1("fno-inline-limit"),
-joinpd1("finput-charset="),
 flagpd1("finstrument-function-entry-bare"),
 flagpd1("finstrument-functions"),
 flagpd1("finstrument-functions-after-inlining"),
@@ -3520,59 +2601,36 @@ flagpd1("fix-what-you-can"),
 flagpd1("ffixed-form"),
 flagpd1("fno-fixed-form"),
 flagpd1("fixit"),
-joinpd1("fixit="),
 flagpd1("fixit-recompile"),
 flagpd1("fixit-to-temporary"),
 flagpd1("fjump-tables"),
 flagpd1("fkeep-static-consts"),
 flagpd1("flat_namespace"),
 flagpd1("flax-vector-conversions"),
-joinpd1("flax-vector-conversions="),
 flagpd1("flimit-debug-info"),
-joinpd1("flimited-precision="),
 flagpd1("ffloat-store"),
 flagpd1("fno-float-store"),
 flagpd1("flto"),
-joinpd1("flto="),
-joinpd1("flto-jobs="),
 flagpd1("flto-unit"),
 flagpd1("flto-visibility-public-std"),
 sepd1("fmacro-backtrace-limit"),
-joinpd1("fmacro-backtrace-limit="),
-joinpd1("fmacro-prefix-map="),
 flagpd1("fmath-errno"),
-joinpd1("fmax-array-constructor="),
-joinpd1("fmax-errors="),
-joinpd1("fmax-stack-var-size="),
-joinpd1("fmax-subrecord-length="),
-joinpd1("fmax-type-align="),
 flagpd1("fmerge-all-constants"),
 flagpd1("fmerge-functions"),
 sepd1("fmessage-length"),
-joinpd1("fmessage-length="),
 sepd1("fmodule-feature"),
-joinpd1("fmodule-file="),
 flagpd1("fmodule-file-deps"),
-joinpd1("fmodule-format="),
 sepd1("fmodule-implementation-of"),
-joinpd1("fmodule-map-file="),
 flagpd1("fmodule-map-file-home-is-cwd"),
 flagpd1("fmodule-maps"),
 sepd1("fmodule-name"),
-joinpd1("fmodule-name="),
 flagpd1("fmodules"),
-joinpd1("fmodules-cache-path="),
 flagpd1("fmodules-codegen"),
 flagpd1("fmodules-debuginfo"),
 flagpd1("fmodules-decluse"),
 flagpd1("fmodules-disable-diagnostic-validation"),
-joinpd1("fmodules-embed-all-files"),
-joinpd1("fmodules-embed-file="),
 flagpd1("fmodules-hash-content"),
-joinpd1("fmodules-ignore-macro="),
 flagpd1("fmodules-local-submodule-visibility"),
-joinpd1("fmodules-prune-after="),
-joinpd1("fmodules-prune-interval="),
 flagpd1("fmodules-search-all"),
 flagpd1("fmodules-strict-context-hash"),
 flagpd1("fmodules-strict-decluse"),
@@ -3582,19 +2640,22 @@ flagpd1("fmodules-validate-input-files-content"),
 flagpd1("fmodules-validate-once-per-build-session"),
 flagpd1("fmodules-validate-system-headers"),
 flagpd1("fms-compatibility"),
-joinpd1("fms-compatibility-version="),
 flagpd1("fms-extensions"),
-joinpd1("fms-memptr-rep="),
 flagpd1("fms-volatile"),
-joinpd1("fmsc-version="),
 flagpd1("fmudflap"),
 flagpd1("fmudflapth"),
 flagpd1("fnative-half-arguments-and-returns"),
 flagpd1("fnative-half-type"),
 flagpd1("fnested-functions"),
-joinpd1("fnew-alignment="),
 flagpd1("fnext-runtime"),
-flagpd1("fno-PIC"),
+.{
+    .name = "fno-PIC",
+    .syntax = .flag,
+    .zig_equivalent = .no_pic,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
 flagpd1("fno-PIE"),
 flagpd1("fno-access-control"),
 flagpd1("fno-addrsig"),
@@ -3616,7 +2677,6 @@ flagpd1("fno-bitfield-type-align"),
 flagpd1("fno-blocks"),
 flagpd1("fno-borland-extensions"),
 flagpd1("fno-builtin"),
-joinpd1("fno-builtin-"),
 flagpd1("fno-caret-diagnostics"),
 flagpd1("fno-char8_t"),
 flagpd1("fno-color-diagnostics"),
@@ -3755,54 +2815,22 @@ flagpd1("fno-rtlib-add-rpath"),
 flagpd1("fno-rtti"),
 flagpd1("fno-rtti-data"),
 flagpd1("fno-rwpi"),
-.{
-    .name = "fno-sanitize=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fno-sanitize-address-poison-custom-array-cookie"),
 flagpd1("fno-sanitize-address-use-after-scope"),
 flagpd1("fno-sanitize-address-use-odr-indicator"),
 flagpd1("fno-sanitize-blacklist"),
 flagpd1("fno-sanitize-cfi-canonical-jump-tables"),
 flagpd1("fno-sanitize-cfi-cross-dso"),
-.{
-    .name = "fno-sanitize-coverage=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fno-sanitize-link-c++-runtime"),
 flagpd1("fno-sanitize-link-runtime"),
 flagpd1("fno-sanitize-memory-track-origins"),
 flagpd1("fno-sanitize-memory-use-after-dtor"),
 flagpd1("fno-sanitize-minimal-runtime"),
 flagpd1("fno-sanitize-recover"),
-.{
-    .name = "fno-sanitize-recover=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fno-sanitize-stats"),
 flagpd1("fno-sanitize-thread-atomics"),
 flagpd1("fno-sanitize-thread-func-entry-exit"),
 flagpd1("fno-sanitize-thread-memory-access"),
-.{
-    .name = "fno-sanitize-trap=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fno-sanitize-undefined-trap-on-error"),
 flagpd1("fno-save-optimization-record"),
 flagpd1("fno-short-enums"),
@@ -3858,14 +2886,11 @@ flagpd1("fno-xray-always-emit-customevents"),
 flagpd1("fno-xray-always-emit-typedevents"),
 flagpd1("fno-xray-instrument"),
 flagpd1("fnoxray-link-deps"),
-joinpd1("fobjc-abi-version="),
 flagpd1("fobjc-arc"),
-joinpd1("fobjc-arc-cxxlib="),
 flagpd1("fobjc-arc-exceptions"),
 flagpd1("fobjc-atdefs"),
 flagpd1("fobjc-call-cxx-cdtors"),
 flagpd1("fobjc-convert-messages-to-runtime-calls"),
-joinpd1("fobjc-dispatch-method="),
 flagpd1("fobjc-exceptions"),
 flagpd1("fobjc-gc"),
 flagpd1("fobjc-gc-only"),
@@ -3874,91 +2899,50 @@ flagpd1("fobjc-legacy-dispatch"),
 flagpd1("fobjc-link-runtime"),
 flagpd1("fobjc-new-property"),
 flagpd1("fobjc-nonfragile-abi"),
-joinpd1("fobjc-nonfragile-abi-version="),
-joinpd1("fobjc-runtime="),
 flagpd1("fobjc-runtime-has-weak"),
 flagpd1("fobjc-sender-dependent-dispatch"),
 flagpd1("fobjc-subscripting-legacy-runtime"),
 flagpd1("fobjc-weak"),
 flagpd1("fomit-frame-pointer"),
 flagpd1("fopenmp"),
-joinpd1("fopenmp="),
-joinpd1("fopenmp-cuda-blocks-per-sm="),
 flagpd1("fopenmp-cuda-force-full-runtime"),
 flagpd1("fopenmp-cuda-mode"),
-joinpd1("fopenmp-cuda-number-of-sm="),
-joinpd1("fopenmp-cuda-teams-reduction-recs-num="),
 flagpd1("fopenmp-enable-irbuilder"),
 sepd1("fopenmp-host-ir-file-path"),
 flagpd1("fopenmp-is-device"),
 flagpd1("fopenmp-optimistic-collapse"),
 flagpd1("fopenmp-relocatable-target"),
 flagpd1("fopenmp-simd"),
-.{
-    .name = "fopenmp-targets=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fopenmp-use-tls"),
-joinpd1("fopenmp-version="),
 sepd1("foperator-arrow-depth"),
-joinpd1("foperator-arrow-depth="),
-joinpd1("foptimization-record-file="),
-joinpd1("foptimization-record-passes="),
 flagpd1("foptimize-sibling-calls"),
 flagpd1("force_cpusubtype_ALL"),
 flagpd1("force_flat_namespace"),
 sepd1("force_load"),
-joinpd1("fforce-addr"),
 flagpd1("forder-file-instrumentation"),
-joinpd1("foutput-class-dir="),
-joinpd1("foverride-record-layout="),
 flagpd1("fpack-struct"),
-joinpd1("fpack-struct="),
 flagpd1("fpadding-on-unsigned-fixed-point"),
 flagpd1("fparse-all-comments"),
 flagpd1("fpascal-strings"),
-joinpd1("fpass-plugin="),
-joinpd1("fpatchable-function-entry="),
-joinpd1("fpatchable-function-entry-offset="),
 flagpd1("fpcc-struct-return"),
 flagpd1("fpch-preprocess"),
 flagpd1("fpch-validate-input-files-content"),
 flagpd1("fpic"),
 flagpd1("fpie"),
 flagpd1("fplt"),
-joinpd1("fplugin="),
-joinpd1("fprebuilt-module-path="),
 flagpd1("fpreserve-as-comments"),
 flagpd1("fpreserve-vec3-type"),
 flagpd1("fprofile-arcs"),
-joinpd1("fprofile-dir="),
-joinpd1("fprofile-exclude-files="),
-joinpd1("fprofile-filter-files="),
 flagpd1("fprofile-generate"),
-joinpd1("fprofile-generate="),
 flagpd1("fprofile-instr-generate"),
-joinpd1("fprofile-instr-generate="),
 flagpd1("fprofile-instr-use"),
-joinpd1("fprofile-instr-use="),
-joinpd1("fprofile-instrument="),
-joinpd1("fprofile-instrument-path="),
-joinpd1("fprofile-instrument-use-path="),
 sepd1("fprofile-remapping-file"),
-joinpd1("fprofile-remapping-file="),
 flagpd1("fprofile-sample-accurate"),
 flagpd1("fprofile-sample-use"),
-joinpd1("fprofile-sample-use="),
 flagpd1("fprofile-use"),
-joinpd1("fprofile-use="),
 sepd1("framework"),
-joinpd1("frandom-seed="),
 flagpd1("freciprocal-math"),
 flagpd1("frecord-command-line"),
-joinpd1("frecord-marker="),
 flagpd1("ffree-form"),
 flagpd1("fno-free-form"),
 flagpd1("freg-struct-return"),
@@ -3969,7 +2953,6 @@ flagpd1("fretain-comments-from-system-headers"),
 flagpd1("frewrite-imports"),
 flagpd1("frewrite-includes"),
 sepd1("frewrite-map-file"),
-joinpd1("frewrite-map-file="),
 flagpd1("ffriend-injection"),
 flagpd1("fno-friend-injection"),
 flagpd1("ffrontend-optimize"),
@@ -3979,31 +2962,13 @@ flagpd1("frounding-math"),
 flagpd1("frtlib-add-rpath"),
 flagpd1("frtti"),
 flagpd1("frwpi"),
-.{
-    .name = "fsanitize=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
-joinpd1("fsanitize-address-field-padding="),
 flagpd1("fsanitize-address-globals-dead-stripping"),
 flagpd1("fsanitize-address-poison-custom-array-cookie"),
 flagpd1("fsanitize-address-use-after-scope"),
 flagpd1("fsanitize-address-use-odr-indicator"),
-joinpd1("fsanitize-blacklist="),
 flagpd1("fsanitize-cfi-canonical-jump-tables"),
 flagpd1("fsanitize-cfi-cross-dso"),
 flagpd1("fsanitize-cfi-icall-generalize-pointers"),
-.{
-    .name = "fsanitize-coverage=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fsanitize-coverage-8bit-counters"),
 flagpd1("fsanitize-coverage-indirect-calls"),
 flagpd1("fsanitize-coverage-inline-8bit-counters"),
@@ -4016,45 +2981,22 @@ flagpd1("fsanitize-coverage-trace-div"),
 flagpd1("fsanitize-coverage-trace-gep"),
 flagpd1("fsanitize-coverage-trace-pc"),
 flagpd1("fsanitize-coverage-trace-pc-guard"),
-joinpd1("fsanitize-coverage-type="),
-joinpd1("fsanitize-hwaddress-abi="),
 flagpd1("fsanitize-link-c++-runtime"),
 flagpd1("fsanitize-link-runtime"),
 flagpd1("fsanitize-memory-track-origins"),
-joinpd1("fsanitize-memory-track-origins="),
 flagpd1("fsanitize-memory-use-after-dtor"),
 flagpd1("fsanitize-minimal-runtime"),
 flagpd1("fsanitize-recover"),
-.{
-    .name = "fsanitize-recover=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("fsanitize-stats"),
-joinpd1("fsanitize-system-blacklist="),
 flagpd1("fsanitize-thread-atomics"),
 flagpd1("fsanitize-thread-func-entry-exit"),
 flagpd1("fsanitize-thread-memory-access"),
-.{
-    .name = "fsanitize-trap=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
-joinpd1("fsanitize-undefined-strip-path-components="),
 flagpd1("fsanitize-undefined-trap-on-error"),
 flagpd1("fsave-optimization-record"),
-joinpd1("fsave-optimization-record="),
 flagpd1("fseh-exceptions"),
 flagpd1("fshort-enums"),
 flagpd1("fshort-wchar"),
 flagpd1("fshow-column"),
-joinpd1("fshow-overloads="),
 flagpd1("fshow-source-location"),
 flagpd1("fsignaling-math"),
 flagpd1("fsigned-bitfields"),
@@ -4066,7 +3008,6 @@ flagpd1("fsjlj-exceptions"),
 flagpd1("fslp-vectorize"),
 flagpd1("fspell-checking"),
 sepd1("fspell-checking-limit"),
-joinpd1("fspell-checking-limit="),
 flagpd1("fsplit-dwarf-inlining"),
 flagpd1("fsplit-lto-unit"),
 flagpd1("fsplit-stack"),
@@ -4083,31 +3024,18 @@ flagpd1("fstrict-return"),
 flagpd1("fstrict-vtable-pointers"),
 flagpd1("fstruct-path-tbaa"),
 flagpd1("fsycl-is-device"),
-joinpd1("fsymbol-partition="),
 flagpd1("fsyntax-only"),
 sepd1("ftabstop"),
-joinpd1("ftabstop="),
 sepd1("ftemplate-backtrace-limit"),
-joinpd1("ftemplate-backtrace-limit="),
 sepd1("ftemplate-depth"),
-joinpd1("ftemplate-depth-"),
-joinpd1("ftemplate-depth="),
 flagpd1("ftest-coverage"),
-joinpd1("ftest-module-file-extension="),
-joinpd1("fthin-link-bitcode="),
-joinpd1("fthinlto-index="),
 flagpd1("fthreadsafe-statics"),
 flagpd1("ftime-report"),
 flagpd1("ftime-trace"),
-joinpd1("ftime-trace-granularity="),
-joinpd1("ftls-model="),
-joinpd1("ftrap-function="),
 flagpd1("ftrapping-math"),
 flagpd1("ftrapv"),
 sepd1("ftrapv-handler"),
-joinpd1("ftrapv-handler="),
 flagpd1("ftrigraphs"),
-joinpd1("ftrivial-auto-var-init="),
 sepd1("ftype-visibility"),
 sepd1("function-alignment"),
 flagpd1("ffunction-attribute-list"),
@@ -4122,35 +3050,24 @@ flagpd1("funsigned-char"),
 flagpd1("funwind-tables"),
 flagpd1("fuse-cxa-atexit"),
 flagpd1("fuse-init-array"),
-joinpd1("fuse-ld="),
 flagpd1("fuse-line-directives"),
 flagpd1("fuse-register-sized-bitfield-access"),
 flagpd1("fvalidate-ast-input-files-content"),
-joinpd1("fveclib="),
 flagpd1("fvectorize"),
 flagpd1("fverbose-asm"),
 flagpd1("fvirtual-function-elimination"),
 sepd1("fvisibility"),
-joinpd1("fvisibility="),
 flagpd1("fvisibility-global-new-delete-hidden"),
 flagpd1("fvisibility-inlines-hidden"),
 flagpd1("fvisibility-ms-compat"),
 flagpd1("fwasm-exceptions"),
-joinpd1("fwchar-type="),
 flagpd1("fwhole-program-vtables"),
 flagpd1("fwrapv"),
 flagpd1("fwritable-strings"),
 flagpd1("fxray-always-emit-customevents"),
 flagpd1("fxray-always-emit-typedevents"),
-jspd1("fxray-always-instrument="),
-jspd1("fxray-attr-list="),
-jspd1("fxray-instruction-threshold"),
-jspd1("fxray-instruction-threshold="),
 flagpd1("fxray-instrument"),
-jspd1("fxray-instrumentation-bundle="),
 flagpd1("fxray-link-deps"),
-jspd1("fxray-modes="),
-jspd1("fxray-never-instrument="),
 flagpd1("fzero-initialized-in-bss"),
 flagpd1("fzvector"),
 flagpd1("g0"),
@@ -4158,18 +3075,9 @@ flagpd1("g1"),
 flagpd1("g2"),
 flagpd1("g3"),
 flagpd1("g"),
-.{
-    .name = "gcc-toolchain=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 sepd1("gcc-toolchain"),
 flagpd1("gcodeview"),
 flagpd1("gcodeview-ghash"),
-joinpd1("gcoff"),
 flagpd1("gcolumn-info"),
 flagpd1("fgcse-after-reload"),
 flagpd1("fno-gcse-after-reload"),
@@ -4211,53 +3119,23 @@ flagpd1("gno-record-command-line"),
 flagpd1("gno-strict-dwarf"),
 flagpd1("fgnu"),
 flagpd1("fno-gnu"),
-.{
-    .name = "gpu-max-threads-per-block=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("gpubnames"),
 flagpd1("grecord-command-line"),
 flagpd1("gsce"),
 flagpd1("gsplit-dwarf"),
-joinpd1("gsplit-dwarf="),
-joinpd1("gstabs"),
 flagpd1("gstrict-dwarf"),
 flagpd1("gtoggle"),
 flagpd1("gused"),
-joinpd1("gvms"),
-joinpd1("gxcoff"),
 flagpd1("gz"),
-joinpd1("gz="),
 sepd1("header-include-file"),
-joinpd1("headerpad_max_install_names"),
 .{
     .name = "help",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .passthrough,
     .pd1 = true,
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "hip-device-lib=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "hip-device-lib-path=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "hip-link",
     .syntax = .flag,
@@ -4266,17 +3144,6 @@ joinpd1("headerpad_max_install_names"),
     .pd2 = true,
     .psl = false,
 },
-jspd1("idirafter"),
-jspd1("iframework"),
-jspd1("iframeworkwithsysroot"),
-.{
-    .name = "imacros",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 sepd1("image_base"),
 flagpd1("fimplement-inlines"),
 flagpd1("fno-implement-inlines"),
@@ -4285,14 +3152,6 @@ flagpd1("fno-implicit-none"),
 flagpd1("fimplicit-templates"),
 flagpd1("fno-implicit-templates"),
 sepd1("imultilib"),
-.{
-    .name = "include",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 sepd1("include-pch"),
 flagpd1("index-header-map"),
 sepd1("init"),
@@ -4306,51 +3165,15 @@ flagpd1("fno-inline-small-functions"),
 sepd1("install_name"),
 flagpd1("finteger-4-integer-8"),
 flagpd1("fno-integer-4-integer-8"),
-jspd1("interface-stub-version="),
-jspd1("internal-externc-isystem"),
-jspd1("internal-isystem"),
 flagpd1("fintrinsic-modules-path"),
 flagpd1("fno-intrinsic-modules-path"),
 flagpd1("fipa-cp"),
 flagpd1("fno-ipa-cp"),
-jspd1("iprefix"),
-jspd1("iquote"),
-jspd1("isysroot"),
-jspd1("isystem"),
-jspd1("isystem-after"),
-jspd1("ivfsoverlay"),
 flagpd1("fivopts"),
 flagpd1("fno-ivopts"),
-jspd1("iwithprefix"),
-jspd1("iwithprefixbefore"),
-jspd1("iwithsysroot"),
 flagpd1("keep_private_externs"),
-.{
-    .name = "l",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .l,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 sepd1("lazy_framework"),
 sepd1("lazy_library"),
-.{
-    .name = "libomptarget-nvptx-path=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "linker-option=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 sepd1("load"),
 flagpd1("m16"),
 flagpd1("m32"),
@@ -4358,34 +3181,14 @@ flagpd1("m3dnow"),
 flagpd1("m3dnowa"),
 flagpd1("m64"),
 flagpd1("m80387"),
-joinpd1("mabi="),
 flagpd1("mabi=ieeelongdouble"),
 flagpd1("mabicalls"),
-joinpd1("mabs="),
 flagpd1("madx"),
 flagpd1("maes"),
 sepd1("main-file-name"),
-.{
-    .name = "malign-branch=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
-joinpd1("malign-branch-boundary="),
-joinpd1("malign-branch-prefix-size="),
 flagpd1("malign-double"),
-joinpd1("malign-functions="),
-joinpd1("malign-jumps="),
-joinpd1("malign-loops="),
 flagpd1("maltivec"),
-joinpd1("mamdgpu-debugger-abi="),
-joinpd1("mappletvos-version-min="),
-joinpd1("mappletvsimulator-version-min="),
-joinpd1("march="),
 flagpd1("marm"),
-joinpd1("masm="),
 flagpd1("masm-verbose"),
 flagpd1("massembler-fatal-warnings"),
 flagpd1("massembler-no-warn"),
@@ -4414,7 +3217,6 @@ flagpd1("mbig-endian"),
 flagpd1("mbmi"),
 flagpd1("mbmi2"),
 flagpd1("mbranch-likely"),
-joinpd1("mbranch-protection="),
 flagpd1("mbranch-target-enforce"),
 flagpd1("mbranches-within-32B-boundaries"),
 flagpd1("mbulk-memory"),
@@ -4423,32 +3225,25 @@ flagpd1("mcldemote"),
 flagpd1("mclflushopt"),
 flagpd1("mclwb"),
 flagpd1("mclzero"),
-joinpd1("mcmodel="),
 flagpd1("mcmodel=medany"),
 flagpd1("mcmodel=medlow"),
 flagpd1("mcmpb"),
 flagpd1("mcmse"),
 sepd1("mcode-model"),
 flagpd1("mcode-object-v3"),
-joinpd1("mcompact-branches="),
-joinpd1("mconsole"),
 flagpd1("mconstant-cfstrings"),
 flagpd1("mconstructor-aliases"),
-joinpd1("mcpu="),
 flagpd1("mcpu=?"),
 flagpd1("mcrbits"),
 flagpd1("mcrc"),
 flagpd1("mcumode"),
 flagpd1("mcx16"),
 sepd1("mdebug-pass"),
-joinpd1("mdefault-build-attributes"),
 flagpd1("mdirect-move"),
 flagpd1("mdisable-tail-calls"),
-joinpd1("mdll"),
 flagpd1("mdouble-float"),
 flagpd1("mdsp"),
 flagpd1("mdspr2"),
-joinpd1("mdynamic-no-pic"),
 sepd1("meabi"),
 flagpd1("membedded-data"),
 flagpd1("menable-no-infs"),
@@ -4467,17 +3262,13 @@ flagpd1("mfix-and-continue"),
 flagpd1("mfix-cortex-a53-835769"),
 flagpd1("mfloat128"),
 sepd1("mfloat-abi"),
-joinpd1("mfloat-abi="),
 flagpd1("mfma"),
 flagpd1("mfma4"),
 flagpd1("mfp32"),
 flagpd1("mfp64"),
 sepd1("mfpmath"),
-joinpd1("mfpmath="),
 flagpd1("mfprnd"),
-joinpd1("mfpu="),
 flagpd1("mfpxx"),
-joinpd1("mframe-pointer="),
 flagpd1("mfsgsbase"),
 flagpd1("mfxsr"),
 flagpd1("mgeneral-regs-only"),
@@ -4488,11 +3279,7 @@ flagpd1("mglobal-merge"),
 flagpd1("mgpopt"),
 flagpd1("mhard-float"),
 flagpd1("mhvx"),
-joinpd1("mhvx="),
-joinpd1("mhvx-length="),
 flagpd1("mhtm"),
-joinpd1("mhwdiv="),
-joinpd1("mhwmult="),
 flagpd1("miamcu"),
 flagpd1("mieee-fp"),
 flagpd1("mieee-rnd-near"),
@@ -4500,16 +3287,10 @@ flagpd1("migrate"),
 flagpd1("no-finalize-removal"),
 flagpd1("no-ns-alloc-error"),
 flagpd1("mimplicit-float"),
-joinpd1("mimplicit-it="),
 flagpd1("mincremental-linker-compatible"),
-joinpd1("mindirect-jump="),
 flagpd1("minline-all-stringops"),
 flagpd1("minvariant-function-descriptors"),
 flagpd1("minvpcid"),
-joinpd1("mios-simulator-version-min="),
-joinpd1("mios-version-min="),
-joinpd1("miphoneos-version-min="),
-joinpd1("miphonesimulator-version-min="),
 flagpd1("mips1"),
 flagpd1("mips16"),
 flagpd1("mips2"),
@@ -4533,7 +3314,6 @@ sepd1("mlimit-float-precision"),
 sepd1("mlink-bitcode-file"),
 sepd1("mlink-builtin-bitcode"),
 sepd1("mlink-cuda-bitcode"),
-joinpd1("mlinker-version="),
 flagpd1("mlittle-endian"),
 sepd1("mllvm"),
 flagpd1("mlocal-sdata"),
@@ -4544,10 +3324,7 @@ flagpd1("mlong-double-80"),
 flagpd1("mlongcall"),
 flagpd1("mlwp"),
 flagpd1("mlzcnt"),
-joinpd1("mmacos-version-min="),
-joinpd1("mmacosx-version-min="),
 flagpd1("mmadd4"),
-joinpd1("mmcu="),
 flagpd1("mmemops"),
 flagpd1("mmfcrf"),
 flagpd1("mmfocrf"),
@@ -4563,7 +3340,6 @@ flagpd1("mmt"),
 flagpd1("mmultivalue"),
 flagpd1("mmutable-globals"),
 flagpd1("mmwaitx"),
-joinpd1("mnan="),
 flagpd1("mno-3dnow"),
 flagpd1("mno-3dnowa"),
 flagpd1("mno-80387"),
@@ -4606,7 +3382,6 @@ flagpd1("mno-crbits"),
 flagpd1("mno-crc"),
 flagpd1("mno-cumode"),
 flagpd1("mno-cx16"),
-joinpd1("mno-default-build-attributes"),
 flagpd1("mno-dsp"),
 flagpd1("mno-dspr2"),
 flagpd1("mno-embedded-data"),
@@ -4761,7 +3536,6 @@ flagpd1("fno-modulo-sched-allow-regmoves"),
 flagpd1("fmodulo-sched"),
 flagpd1("fno-modulo-sched"),
 flagpd1("momit-leaf-frame-pointer"),
-joinpd1("moslib="),
 flagpd1("moutline"),
 flagpd1("mpacked-stack"),
 flagpd1("mpackets"),
@@ -4775,7 +3549,6 @@ flagpd1("mpopcntd"),
 flagpd1("mcrypto"),
 flagpd1("mpower8-vector"),
 flagpd1("mpower9-vector"),
-joinpd1("mprefer-vector-width="),
 flagpd1("mprefetchwt1"),
 flagpd1("mprfchw"),
 flagpd1("mptwrite"),
@@ -4787,19 +3560,10 @@ flagpd1("mrdrnd"),
 flagpd1("mrdseed"),
 flagpd1("mreassociate"),
 flagpd1("mrecip"),
-.{
-    .name = "mrecip=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("mrecord-mcount"),
 flagpd1("mred-zone"),
 flagpd1("mreference-types"),
 sepd1("mregparm"),
-joinpd1("mregparm="),
 flagpd1("mrelax"),
 flagpd1("mrelax-all"),
 flagpd1("mrelax-pic-calls"),
@@ -4825,11 +3589,8 @@ flagpd1("msgx"),
 flagpd1("msha"),
 flagpd1("mshstk"),
 flagpd1("msign-ext"),
-joinpd1("msign-return-address="),
-joinpd1("msign-return-address-key="),
 flagpd1("msimd128"),
 flagpd1("msingle-float"),
-joinpd1("msmall-data-threshold="),
 flagpd1("msoft-float"),
 flagpd1("mspe"),
 flagpd1("mspeculative-load-hardening"),
@@ -4842,31 +3603,22 @@ flagpd1("msse4.1"),
 flagpd1("msse4.2"),
 flagpd1("msse4a"),
 flagpd1("mssse3"),
-joinpd1("mstack-alignment="),
 flagpd1("mstack-arg-probe"),
-joinpd1("mstack-probe-size="),
 flagpd1("mstackrealign"),
 flagpd1("mstrict-align"),
 sepd1("mt-migrate-directory"),
 flagpd1("mtail-call"),
 flagpd1("mtbm"),
 sepd1("mthread-model"),
-joinpd1("mthreads"),
 flagpd1("mthumb"),
 flagpd1("mtls-direct-seg-refs"),
-joinpd1("mtls-size="),
 sepd1("mtp"),
-joinpd1("mtp="),
-joinpd1("mtune="),
 flagpd1("mtune=?"),
-joinpd1("mtvos-simulator-version-min="),
-joinpd1("mtvos-version-min="),
 flagpd1("muclibc"),
 flagpd1("multi_module"),
 sepd1("multiply_defined"),
 sepd1("multiply_defined_unused"),
 flagpd1("munaligned-access"),
-joinpd1("municode"),
 flagpd1("munimplemented-simd128"),
 flagpd1("munwind-tables"),
 flagpd1("mv5"),
@@ -4883,12 +3635,8 @@ flagpd1("mvx"),
 flagpd1("mvzeroupper"),
 flagpd1("mwaitpkg"),
 flagpd1("mwarn-nonportable-cfstrings"),
-joinpd1("mwatchos-simulator-version-min="),
-joinpd1("mwatchos-version-min="),
-joinpd1("mwatchsimulator-version-min="),
 flagpd1("mwavefrontsize64"),
 flagpd1("mwbnoinvd"),
-joinpd1("mwindows"),
 flagpd1("mx32"),
 flagpd1("mx87"),
 flagpd1("mxgot"),
@@ -4906,22 +3654,6 @@ flagpd1("no-canonical-prefixes"),
 flagpd1("no-code-completion-globals"),
 flagpd1("no-code-completion-ns-level-decls"),
 flagpd1("no-cpp-precomp"),
-.{
-    .name = "no-cuda-gpu-arch=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "no-cuda-include-ptx=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "no-cuda-noopt-device-debug",
     .syntax = .flag,
@@ -4959,14 +3691,6 @@ flagpd1("no-implicit-float"),
 flagpd1("no-pie"),
 flagpd1("no-pthread"),
 flagpd1("no-struct-path-tbaa"),
-.{
-    .name = "no-system-header-prefix=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("nobuiltininc"),
 flagpd1("nocpp"),
 flagpd1("nocudainc"),
@@ -4984,19 +3708,17 @@ flagpd1("noseglinkedit"),
 flagpd1("nostartfiles"),
 flagpd1("nostdinc"),
 flagpd1("nostdinc++"),
-flagpd1("nostdlib"),
-flagpd1("nostdlibinc"),
-flagpd1("nostdlib++"),
-flagpd1("nostdsysteminc"),
 .{
-    .name = "o",
-    .syntax = .joined_or_separate,
-    .zig_equivalent = .o,
+    .name = "nostdlib",
+    .syntax = .flag,
+    .zig_equivalent = .nostdlib,
     .pd1 = true,
     .pd2 = false,
     .psl = false,
 },
-jspd1("objc-isystem"),
+flagpd1("nostdlibinc"),
+flagpd1("nostdlib++"),
+flagpd1("nostdsysteminc"),
 flagpd1("objcmt-atomic-property"),
 flagpd1("objcmt-migrate-all"),
 flagpd1("objcmt-migrate-annotation"),
@@ -5012,8 +3734,6 @@ flagpd1("objcmt-migrate-readwrite-property"),
 flagpd1("objcmt-migrate-subscripting"),
 flagpd1("objcmt-ns-nonatomic-iosonly"),
 flagpd1("objcmt-returns-innerpointer-property"),
-joinpd1("objcmt-whitelist-dir-path="),
-jspd1("objcxx-isystem"),
 flagpd1("object"),
 sepd1("opt-record-file"),
 sepd1("opt-record-format"),
@@ -5022,7 +3742,6 @@ sepd1("output-asm-variant"),
 flagpd1("p"),
 flagpd1("fpack-derived"),
 flagpd1("fno-pack-derived"),
-jspd1("pagezero_size"),
 .{
     .name = "pass-exit-codes",
     .syntax = .flag,
@@ -5033,7 +3752,6 @@ jspd1("pagezero_size"),
 },
 flagpd1("pch-through-hdrstop-create"),
 flagpd1("pch-through-hdrstop-use"),
-joinpd1("pch-through-header="),
 .{
     .name = "pedantic",
     .syntax = .flag,
@@ -5061,21 +3779,12 @@ flagpd1("pie"),
 .{
     .name = "pipe",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .ignore,
     .pd1 = true,
     .pd2 = true,
     .psl = false,
 },
 sepd1("plugin"),
-.{
-    .name = "plugin-arg-",
-    .syntax = .joined_and_separate,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
-joinpd1("preamble-bytes="),
 flagpd1("prebind"),
 flagpd1("prebind_all_twolevel_modules"),
 flagpd1("fprefetch-loop-arrays"),
@@ -5090,14 +3799,6 @@ flagpd1("print-dependency-directives-minimized-source"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "print-file-name=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("print-ivar-layout"),
 .{
     .name = "print-libgcc-file-name",
@@ -5132,14 +3833,6 @@ flagpd1("print-ivar-layout"),
     .psl = false,
 },
 flagpd1("print-preamble"),
-.{
-    .name = "print-prog-name=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "print-resource-dir",
     .syntax = .flag,
@@ -5190,18 +3883,17 @@ flagpd1("fprotect-parens"),
 flagpd1("fno-protect-parens"),
 flagpd1("pthread"),
 flagpd1("pthreads"),
-.{
-    .name = "ptxas-path=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("r"),
 flagpd1("frange-check"),
 flagpd1("fno-range-check"),
-flagpd1("rdynamic"),
+.{
+    .name = "rdynamic",
+    .syntax = .flag,
+    .zig_equivalent = .rdynamic,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
 sepd1("read_only_relocs"),
 flagpd1("freal-4-real-10"),
 flagpd1("fno-real-4-real-10"),
@@ -5240,7 +3932,6 @@ flagpd1("fno-reorder-blocks"),
 flagpd1("frepack-arrays"),
 flagpd1("fno-repack-arrays"),
 sepd1("resource-dir"),
-joinpd1("resource-dir="),
 flagpd1("rewrite-legacy-objc"),
 flagpd1("rewrite-macros"),
 flagpd1("rewrite-objc"),
@@ -5248,22 +3939,6 @@ flagpd1("rewrite-test"),
 flagpd1("fripa"),
 flagpd1("fno-ripa"),
 sepd1("rpath"),
-.{
-    .name = "rsp-quoting=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
-.{
-    .name = "rtlib=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("s"),
 .{
     .name = "save-stats",
@@ -5273,14 +3948,6 @@ flagpd1("s"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "save-stats=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 .{
     .name = "save-temps",
     .syntax = .flag,
@@ -5289,14 +3956,6 @@ flagpd1("s"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "save-temps=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("fschedule-insns2"),
 flagpd1("fno-schedule-insns2"),
 flagpd1("fschedule-insns"),
@@ -5305,7 +3964,7 @@ flagpd1("fsecond-underscore"),
 flagpd1("fno-second-underscore"),
 .{
     .name = "sectalign",
-    .syntax = .{ .multi_arg = 3 },
+    .syntax = .{.multi_arg=3},
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
@@ -5313,7 +3972,7 @@ flagpd1("fno-second-underscore"),
 },
 .{
     .name = "sectcreate",
-    .syntax = .{ .multi_arg = 3 },
+    .syntax = .{.multi_arg=3},
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
@@ -5321,7 +3980,7 @@ flagpd1("fno-second-underscore"),
 },
 .{
     .name = "sectobjectsymbols",
-    .syntax = .{ .multi_arg = 2 },
+    .syntax = .{.multi_arg=2},
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
@@ -5329,7 +3988,7 @@ flagpd1("fno-second-underscore"),
 },
 .{
     .name = "sectorder",
-    .syntax = .{ .multi_arg = 3 },
+    .syntax = .{.multi_arg=3},
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
@@ -5337,12 +3996,11 @@ flagpd1("fno-second-underscore"),
 },
 flagpd1("fsee"),
 flagpd1("fno-see"),
-jspd1("seg1addr"),
 sepd1("seg_addr_table"),
 sepd1("seg_addr_table_filename"),
 .{
     .name = "segaddr",
-    .syntax = .{ .multi_arg = 2 },
+    .syntax = .{.multi_arg=2},
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
@@ -5350,7 +4008,7 @@ sepd1("seg_addr_table_filename"),
 },
 .{
     .name = "segcreate",
-    .syntax = .{ .multi_arg = 3 },
+    .syntax = .{.multi_arg=3},
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
@@ -5359,20 +4017,19 @@ sepd1("seg_addr_table_filename"),
 flagpd1("seglinkedit"),
 .{
     .name = "segprot",
-    .syntax = .{ .multi_arg = 3 },
+    .syntax = .{.multi_arg=3},
     .zig_equivalent = .other,
     .pd1 = true,
     .pd2 = false,
     .psl = false,
 },
-joinpd1("segs_read_"),
 sepd1("segs_read_only_addr"),
 sepd1("segs_read_write_addr"),
 flagpd1("setup-static-analyzer"),
 .{
     .name = "shared",
     .syntax = .flag,
-    .zig_equivalent = .other,
+    .zig_equivalent = .shared,
     .pd1 = true,
     .pd2 = true,
     .psl = false,
@@ -5406,14 +4063,6 @@ flagpd1("fno-spec-constr-count"),
     .pd2 = true,
     .psl = false,
 },
-.{
-    .name = "specs=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 sepd1("split-dwarf-file"),
 sepd1("split-dwarf-output"),
 flagpd1("split-stacks"),
@@ -5438,47 +4087,10 @@ flagpd1("static-libsan"),
 flagpd1("static-libstdc++"),
 flagpd1("static-openmp"),
 flagpd1("static-pie"),
-joinpd1("stats-file="),
-.{
-    .name = "std=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
-joinpd1("std-default="),
-.{
-    .name = "stdlib=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
-jspd1("stdlib++-isystem"),
 flagpd1("fstrength-reduce"),
 flagpd1("fno-strength-reduce"),
-jspd1("sub_library"),
-jspd1("sub_umbrella"),
 flagpd1("sys-header-deps"),
-.{
-    .name = "system-header-prefix=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("t"),
-.{
-    .name = "target=",
-    .syntax = .joined,
-    .zig_equivalent = .target,
-    .pd1 = false,
-    .pd2 = true,
-    .psl = false,
-},
 sepd1("target-abi"),
 sepd1("target-cpu"),
 sepd1("target-feature"),
@@ -5491,7 +4103,6 @@ sepd1("target-feature"),
     .psl = false,
 },
 sepd1("target-linker-version"),
-joinpd1("target-sdk-version="),
 flagpd1("templight-dump"),
 flagpd1("test-coverage"),
 flagpd1("time"),
@@ -5541,13 +4152,10 @@ flagpd1("fno-tree-vrp"),
 },
 flagpd1("trim-egraph"),
 sepd1("triple"),
-joinpd1("triple="),
 flagpd1("twolevel_namespace"),
 flagpd1("twolevel_namespace_hints"),
-jspd1("u"),
 sepd1("umbrella"),
 flagpd1("undef"),
-jspd1("undefined"),
 flagpd1("funderscoring"),
 flagpd1("fno-underscoring"),
 sepd1("unexported_symbols_list"),
@@ -5557,14 +4165,6 @@ flagpd1("funsafe-loop-optimizations"),
 flagpd1("fno-unsafe-loop-optimizations"),
 flagpd1("funswitch-loops"),
 flagpd1("fno-unswitch-loops"),
-.{
-    .name = "unwindlib=",
-    .syntax = .joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = true,
-    .psl = false,
-},
 flagpd1("fuse-linker-plugin"),
 flagpd1("fno-use-linker-plugin"),
 flagpd1("v"),
@@ -5575,14 +4175,6 @@ flagpd1("fno-vect-cost-model"),
 flagpd1("vectorize-loops"),
 flagpd1("vectorize-slp"),
 flagpd1("verify"),
-.{
-    .name = "verify=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 .{
     .name = "verify-debug-info",
     .syntax = .flag,
@@ -5592,14 +4184,6 @@ flagpd1("verify"),
     .psl = false,
 },
 flagpd1("verify-ignore-unexpected"),
-.{
-    .name = "verify-ignore-unexpected=",
-    .syntax = .comma_joined,
-    .zig_equivalent = .other,
-    .pd1 = true,
-    .pd2 = false,
-    .psl = false,
-},
 flagpd1("verify-pch"),
 flagpd1("version"),
 .{
@@ -5610,12 +4194,10 @@ flagpd1("version"),
     .pd2 = true,
     .psl = false,
 },
-joinpd1("vtordisp-mode="),
 flagpd1("w"),
 sepd1("weak_framework"),
 sepd1("weak_library"),
 sepd1("weak_reference_mismatches"),
-joinpd1("weak-l"),
 flagpd1("fweb"),
 flagpd1("fno-web"),
 flagpd1("whatsloaded"),
@@ -5624,9 +4206,1455 @@ flagpd1("fno-whole-file"),
 flagpd1("fwhole-program"),
 flagpd1("fno-whole-program"),
 flagpd1("whyload"),
-jspd1("working-directory"),
-joinpd1("working-directory="),
-jspd1("x"),
-joinpd1("y"),
 sepd1("z"),
+joinpd1("fsanitize-undefined-strip-path-components="),
+joinpd1("fopenmp-cuda-teams-reduction-recs-num="),
+joinpd1("analyzer-config-compatibility-mode="),
+joinpd1("fpatchable-function-entry-offset="),
+joinpd1("analyzer-inline-max-stack-depth="),
+joinpd1("fsanitize-address-field-padding="),
+joinpd1("fdiagnostics-hotness-threshold="),
+joinpd1("fsanitize-memory-track-origins="),
+joinpd1("mwatchos-simulator-version-min="),
+joinpd1("mappletvsimulator-version-min="),
+joinpd1("fobjc-nonfragile-abi-version="),
+joinpd1("fprofile-instrument-use-path="),
+jspd1("fxray-instrumentation-bundle="),
+joinpd1("miphonesimulator-version-min="),
+joinpd1("faddress-space-map-mangling="),
+joinpd1("foptimization-record-passes="),
+joinpd1("ftest-module-file-extension="),
+jspd1("fxray-instruction-threshold="),
+joinpd1("mno-default-build-attributes"),
+joinpd1("mtvos-simulator-version-min="),
+joinpd1("mwatchsimulator-version-min="),
+.{
+    .name = "include-with-prefix-before=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("objcmt-white-list-dir-path="),
+joinpd1("error-on-deserialized-decl="),
+joinpd1("fconstexpr-backtrace-limit="),
+joinpd1("fdiagnostics-show-category="),
+joinpd1("fdiagnostics-show-location="),
+joinpd1("fopenmp-cuda-blocks-per-sm="),
+joinpd1("fsanitize-system-blacklist="),
+jspd1("fxray-instruction-threshold"),
+joinpd1("headerpad_max_install_names"),
+joinpd1("mios-simulator-version-min="),
+.{
+    .name = "include-with-prefix-after=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("fms-compatibility-version="),
+joinpd1("fopenmp-cuda-number-of-sm="),
+joinpd1("foptimization-record-file="),
+joinpd1("fpatchable-function-entry="),
+joinpd1("fsave-optimization-record="),
+joinpd1("ftemplate-backtrace-limit="),
+.{
+    .name = "gpu-max-threads-per-block=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("malign-branch-prefix-size="),
+joinpd1("objcmt-whitelist-dir-path="),
+joinpd1("Wno-nonportable-cfstrings"),
+joinpd1("analyzer-disable-checker="),
+joinpd1("fbuild-session-timestamp="),
+joinpd1("fprofile-instrument-path="),
+joinpd1("mdefault-build-attributes"),
+joinpd1("msign-return-address-key="),
+.{
+    .name = "verify-ignore-unexpected=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "include-directory-after=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "compress-debug-sections=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "fcomment-block-commands=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("flax-vector-conversions="),
+joinpd1("fmodules-embed-all-files"),
+joinpd1("fmodules-prune-interval="),
+joinpd1("foverride-record-layout="),
+joinpd1("fprofile-instr-generate="),
+joinpd1("fprofile-remapping-file="),
+joinpd1("fsanitize-coverage-type="),
+joinpd1("fsanitize-hwaddress-abi="),
+joinpd1("ftime-trace-granularity="),
+jspd1("fxray-always-instrument="),
+jspd1("internal-externc-isystem"),
+.{
+    .name = "libomptarget-nvptx-path=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "no-system-header-prefix=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "output-class-directory=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("analyzer-inlining-mode="),
+joinpd1("fconstant-string-class="),
+joinpd1("fcrash-diagnostics-dir="),
+joinpd1("fdebug-compilation-dir="),
+joinpd1("fdebug-default-version="),
+joinpd1("ffp-exception-behavior="),
+joinpd1("fmacro-backtrace-limit="),
+joinpd1("fmax-array-constructor="),
+joinpd1("fprofile-exclude-files="),
+joinpd1("ftrivial-auto-var-init="),
+jspd1("fxray-never-instrument="),
+jspd1("interface-stub-version="),
+joinpd1("malign-branch-boundary="),
+joinpd1("mappletvos-version-min="),
+joinpd1("Wnonportable-cfstrings"),
+joinpd1("fdefault-calling-conv="),
+joinpd1("fmax-subrecord-length="),
+joinpd1("fmodules-ignore-macro="),
+.{
+    .name = "fno-sanitize-coverage=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("fobjc-dispatch-method="),
+joinpd1("foperator-arrow-depth="),
+joinpd1("fprebuilt-module-path="),
+joinpd1("fprofile-filter-files="),
+joinpd1("fspell-checking-limit="),
+joinpd1("miphoneos-version-min="),
+joinpd1("msmall-data-threshold="),
+joinpd1("Wlarge-by-value-copy="),
+joinpd1("analyzer-constraints="),
+joinpd1("analyzer-dump-egraph="),
+jspd1("compatibility_version"),
+jspd1("dylinker_install_name"),
+joinpd1("fcs-profile-generate="),
+joinpd1("fmodules-prune-after="),
+.{
+    .name = "fno-sanitize-recover=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+jspd1("iframeworkwithsysroot"),
+joinpd1("mamdgpu-debugger-abi="),
+joinpd1("mprefer-vector-width="),
+joinpd1("msign-return-address="),
+joinpd1("mwatchos-version-min="),
+.{
+    .name = "system-header-prefix=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "include-with-prefix=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("coverage-notes-file="),
+joinpd1("fbuild-session-file="),
+joinpd1("fdiagnostics-format="),
+joinpd1("fmax-stack-var-size="),
+joinpd1("fmodules-cache-path="),
+joinpd1("fmodules-embed-file="),
+joinpd1("fprofile-instrument="),
+joinpd1("fprofile-sample-use="),
+joinpd1("fsanitize-blacklist="),
+.{
+    .name = "hip-device-lib-path=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("mmacosx-version-min="),
+.{
+    .name = "no-cuda-include-ptx=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("Wframe-larger-than="),
+joinpd1("code-completion-at="),
+joinpd1("coverage-data-file="),
+joinpd1("fblas-matmul-limit="),
+joinpd1("fdiagnostics-color="),
+joinpd1("ffixed-line-length-"),
+joinpd1("flimited-precision="),
+joinpd1("fprofile-instr-use="),
+.{
+    .name = "fsanitize-coverage=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("fthin-link-bitcode="),
+joinpd1("mbranch-protection="),
+joinpd1("mmacos-version-min="),
+joinpd1("pch-through-header="),
+joinpd1("target-sdk-version="),
+.{
+    .name = "execution-charset:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "include-directory=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "library-directory=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "config-system-dir=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("fclang-abi-compat="),
+joinpd1("fcompile-resource="),
+joinpd1("fdebug-prefix-map="),
+joinpd1("fdenormal-fp-math="),
+joinpd1("fexcess-precision="),
+joinpd1("ffree-line-length-"),
+joinpd1("fmacro-prefix-map="),
+.{
+    .name = "fno-sanitize-trap=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("fobjc-abi-version="),
+joinpd1("foutput-class-dir="),
+joinpd1("fprofile-generate="),
+joinpd1("frewrite-map-file="),
+.{
+    .name = "fsanitize-recover=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("fsymbol-partition="),
+joinpd1("mcompact-branches="),
+joinpd1("mstack-probe-size="),
+joinpd1("mtvos-version-min="),
+joinpd1("working-directory="),
+joinpd1("analyze-function="),
+joinpd1("analyzer-checker="),
+joinpd1("coverage-version="),
+.{
+    .name = "cuda-include-ptx=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("falign-functions="),
+joinpd1("fconstexpr-depth="),
+joinpd1("fconstexpr-steps="),
+joinpd1("ffile-prefix-map="),
+joinpd1("fmodule-map-file="),
+joinpd1("fobjc-arc-cxxlib="),
+jspd1("iwithprefixbefore"),
+joinpd1("malign-functions="),
+joinpd1("mios-version-min="),
+joinpd1("mstack-alignment="),
+.{
+    .name = "no-cuda-gpu-arch=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+jspd1("working-directory"),
+joinpd1("analyzer-output="),
+.{
+    .name = "config-user-dir=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("debug-info-kind="),
+joinpd1("debugger-tuning="),
+joinpd1("fcf-runtime-abi="),
+joinpd1("finit-character="),
+joinpd1("fmax-type-align="),
+joinpd1("fmessage-length="),
+.{
+    .name = "fopenmp-targets=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("fopenmp-version="),
+joinpd1("fshow-overloads="),
+joinpd1("ftemplate-depth-"),
+joinpd1("ftemplate-depth="),
+jspd1("fxray-attr-list="),
+jspd1("internal-isystem"),
+joinpd1("mlinker-version="),
+.{
+    .name = "print-file-name=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "print-prog-name=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+jspd1("stdlib++-isystem"),
+joinpd1("Rpass-analysis="),
+.{
+    .name = "Xopenmp-target=",
+    .syntax = .joined_and_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "source-charset:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "analyzer-output",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "include-prefix=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "undefine-macro=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("analyzer-purge="),
+joinpd1("analyzer-store="),
+jspd1("current_version"),
+joinpd1("fbootclasspath="),
+joinpd1("fbracket-depth="),
+joinpd1("fcf-protection="),
+joinpd1("fdepfile-entry="),
+joinpd1("fembed-bitcode="),
+joinpd1("finput-charset="),
+joinpd1("fmodule-format="),
+joinpd1("fms-memptr-rep="),
+joinpd1("fnew-alignment="),
+joinpd1("frecord-marker="),
+.{
+    .name = "fsanitize-trap=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("fthinlto-index="),
+joinpd1("ftrap-function="),
+joinpd1("ftrapv-handler="),
+.{
+    .name = "hip-device-lib=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("mdynamic-no-pic"),
+joinpd1("mframe-pointer="),
+joinpd1("mindirect-jump="),
+joinpd1("preamble-bytes="),
+.{
+    .name = "bootclasspath=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "cuda-gpu-arch=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "dependent-lib=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("dwarf-version="),
+joinpd1("falign-labels="),
+joinpd1("fauto-profile="),
+joinpd1("fexec-charset="),
+joinpd1("fgnuc-version="),
+joinpd1("finit-integer="),
+joinpd1("finit-logical="),
+joinpd1("finline-limit="),
+joinpd1("fobjc-runtime="),
+.{
+    .name = "gcc-toolchain=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "linker-option=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "malign-branch=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+jspd1("objcxx-isystem"),
+joinpd1("vtordisp-mode="),
+joinpd1("Rpass-missed="),
+joinpd1("Wlarger-than-"),
+joinpd1("Wlarger-than="),
+.{
+    .name = "define-macro=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("ast-dump-all="),
+.{
+    .name = "autocomplete=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("falign-jumps="),
+joinpd1("falign-loops="),
+joinpd1("faligned-new="),
+joinpd1("ferror-limit="),
+joinpd1("ffp-contract="),
+joinpd1("fmodule-file="),
+joinpd1("fmodule-name="),
+joinpd1("fmsc-version="),
+.{
+    .name = "fno-sanitize=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("fpack-struct="),
+joinpd1("fpass-plugin="),
+joinpd1("fprofile-dir="),
+joinpd1("fprofile-use="),
+joinpd1("frandom-seed="),
+joinpd1("gsplit-dwarf="),
+jspd1("isystem-after"),
+joinpd1("malign-jumps="),
+joinpd1("malign-loops="),
+joinpd1("mimplicit-it="),
+jspd1("pagezero_size"),
+joinpd1("resource-dir="),
+.{
+    .name = "dyld-prefix=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "driver-mode=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("fmax-errors="),
+joinpd1("fno-builtin-"),
+joinpd1("fvisibility="),
+joinpd1("fwchar-type="),
+jspd1("fxray-modes="),
+jspd1("iwithsysroot"),
+joinpd1("mhvx-length="),
+jspd1("objc-isystem"),
+.{
+    .name = "rsp-quoting=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("std-default="),
+jspd1("sub_umbrella"),
+.{
+    .name = "Qpar-report",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Qvec-report",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "errorReport",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "for-linker=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "force-link=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+jspd1("client_name"),
+jspd1("cxx-isystem"),
+joinpd1("fclasspath="),
+joinpd1("finit-real="),
+joinpd1("fforce-addr"),
+joinpd1("ftls-model="),
+jspd1("ivfsoverlay"),
+jspd1("iwithprefix"),
+joinpd1("mfloat-abi="),
+.{
+    .name = "plugin-arg-",
+    .syntax = .joined_and_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "ptxas-path=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "save-stats=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "save-temps=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("stats-file="),
+jspd1("sub_library"),
+.{
+    .name = "CLASSPATH=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "constexpr:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "classpath=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "cuda-path=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("fencoding="),
+joinpd1("ffp-model="),
+joinpd1("ffpe-trap="),
+joinpd1("flto-jobs="),
+.{
+    .name = "fsanitize=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+jspd1("iframework"),
+joinpd1("mtls-size="),
+joinpd1("segs_read_"),
+.{
+    .name = "unwindlib=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "cgthreads",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "encoding=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "language=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "optimize=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "resource=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("ast-dump="),
+jspd1("c-isystem"),
+joinpd1("fcoarray="),
+joinpd1("fconvert="),
+joinpd1("fextdirs="),
+joinpd1("ftabstop="),
+jspd1("idirafter"),
+joinpd1("mregparm="),
+jspd1("undefined"),
+.{
+    .name = "extdirs=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "imacros=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "include=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "sysroot=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("fopenmp="),
+joinpd1("fplugin="),
+joinpd1("fuse-ld="),
+joinpd1("fveclib="),
+jspd1("isysroot"),
+joinpd1("mcmodel="),
+joinpd1("mconsole"),
+joinpd1("mfpmath="),
+joinpd1("mhwmult="),
+joinpd1("mthreads"),
+joinpd1("municode"),
+joinpd1("mwindows"),
+jspd1("seg1addr"),
+.{
+    .name = "assert=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "mhwdiv=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "output=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "prefix=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "cl-ext=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("cl-std="),
+joinpd1("fcheck="),
+.{
+    .name = "imacros",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "include",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+jspd1("iprefix"),
+jspd1("isystem"),
+joinpd1("mhwdiv="),
+joinpd1("moslib="),
+.{
+    .name = "mrecip=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "stdlib=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "target=",
+    .syntax = .joined,
+    .zig_equivalent = .target,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("triple="),
+.{
+    .name = "verify=",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+joinpd1("Rpass="),
+.{
+    .name = "Xarch_",
+    .syntax = .joined_and_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "clang:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "guard:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "debug=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "param=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "warn-=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("fixit="),
+joinpd1("gstabs"),
+joinpd1("gxcoff"),
+jspd1("iquote"),
+joinpd1("march="),
+joinpd1("mtune="),
+.{
+    .name = "rtlib=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "specs=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("weak-l"),
+joinpd1("Ofast"),
+jspd1("Tdata"),
+jspd1("Ttext"),
+.{
+    .name = "arch:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "favor",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "imsvc",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "warn-",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = false,
+    .pd2 = true,
+    .psl = false,
+},
+joinpd1("flto="),
+joinpd1("gcoff"),
+joinpd1("mabi="),
+joinpd1("mabs="),
+joinpd1("masm="),
+joinpd1("mcpu="),
+joinpd1("mfpu="),
+joinpd1("mhvx="),
+joinpd1("mmcu="),
+joinpd1("mnan="),
+jspd1("Tbss"),
+.{
+    .name = "link",
+    .syntax = .remaining_args_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "std:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+joinpd1("ccc-"),
+joinpd1("gvms"),
+joinpd1("mdll"),
+joinpd1("mtp="),
+.{
+    .name = "std=",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = true,
+    .psl = false,
+},
+.{
+    .name = "Wa,",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "Wl,",
+    .syntax = .comma_joined,
+    .zig_equivalent = .wl,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "Wp,",
+    .syntax = .comma_joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "RTC",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Zc:",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "clr",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "doc",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+joinpd1("gz="),
+joinpd1("A-"),
+joinpd1("G="),
+jspd1("MF"),
+jspd1("MJ"),
+jspd1("MQ"),
+jspd1("MT"),
+.{
+    .name = "AI",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "EH",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "FA",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "FI",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "FR",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "FU",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fa",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fd",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fe",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fi",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fm",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fo",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fp",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Fr",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Gs",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "MP",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Tc",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Tp",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Yc",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Yl",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Yu",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "ZW",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Zm",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "Zp",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "d2",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "vd",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+jspd1("A"),
+jspd1("B"),
+jspd1("D"),
+jspd1("F"),
+jspd1("G"),
+jspd1("I"),
+jspd1("J"),
+jspd1("L"),
+joinpd1("O"),
+joinpd1("R"),
+jspd1("T"),
+jspd1("U"),
+jspd1("V"),
+joinpd1("W"),
+joinpd1("X"),
+joinpd1("Z"),
+.{
+    .name = "D",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "F",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "I",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "O",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "U",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "o",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .o,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+.{
+    .name = "w",
+    .syntax = .joined,
+    .zig_equivalent = .other,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = true,
+},
+joinpd1("a"),
+jspd1("b"),
+joinpd1("d"),
+jspd1("e"),
+.{
+    .name = "l",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .l,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+.{
+    .name = "o",
+    .syntax = .joined_or_separate,
+    .zig_equivalent = .o,
+    .pd1 = true,
+    .pd2 = false,
+    .psl = false,
+},
+jspd1("u"),
+jspd1("x"),
+joinpd1("y"),
 };};
src-self-hosted/stage2.zig
@@ -1239,6 +1239,14 @@ pub const ClangArgIterator = extern struct {
         other,
         positional,
         l,
+        ignore,
+        passthrough,
+        pic,
+        no_pic,
+        nostdlib,
+        shared,
+        rdynamic,
+        wl,
     };
 
     fn init(argv: []const [*:0]const u8) ClangArgIterator {
@@ -1282,7 +1290,8 @@ pub const ClangArgIterator = extern struct {
                 break :find_clang_arg;
             },
             .joined, .comma_joined => {
-                // Example: --target=foo
+                // joined example: --target=foo
+                // comma_joined example: -Wl,-soname,libsoundio.so.2
                 const prefix_len = clang_arg.matchStartsWith(arg);
                 if (prefix_len != 0) {
                     self.zig_equivalent = clang_arg.zig_equivalent;
tools/update_clang_options.zig
@@ -38,6 +38,42 @@ const known_options = [_]KnownOpt{
         .name = "l",
         .ident = "l",
     },
+    .{
+        .name = "pipe",
+        .ident = "ignore",
+    },
+    .{
+        .name = "help",
+        .ident = "passthrough",
+    },
+    .{
+        .name = "fPIC",
+        .ident = "pic",
+    },
+    .{
+        .name = "fno-PIC",
+        .ident = "no_pic",
+    },
+    .{
+        .name = "nostdlib",
+        .ident = "nostdlib",
+    },
+    .{
+        .name = "no-standard-libraries",
+        .ident = "nostdlib",
+    },
+    .{
+        .name = "shared",
+        .ident = "shared",
+    },
+    .{
+        .name = "rdynamic",
+        .ident = "rdynamic",
+    },
+    .{
+        .name = "Wl,",
+        .ident = "wl",
+    },
 };
 
 const blacklisted_options = [_][]const u8{};
@@ -110,7 +146,7 @@ pub fn main() anyerror!void {
     const tree = try parser.parse(json_text);
     const root_map = &tree.root.Object;
 
-    var all_names = std.ArrayList([]const u8).init(allocator);
+    var all_objects = std.ArrayList(*json.ObjectMap).init(allocator);
     {
         var it = root_map.iterator();
         it_map: while (it.next()) |kv| {
@@ -123,10 +159,12 @@ pub fn main() anyerror!void {
                 if (std.mem.eql(u8, blacklisted_key, kv.key)) continue :it_map;
             }
             if (kv.value.Object.get("Name").?.value.String.len == 0) continue;
-            try all_names.append(kv.key);
+            try all_objects.append(&kv.value.Object);
         }
     }
-    std.sort.sort([]const u8, all_names.span(), nameLessThan);
+    // Some options have multiple matches. As an example, "-Wl,foo" matches both
+    // "W" and "Wl,". So we sort this list in order of descending priority.
+    std.sort.sort(*json.ObjectMap, all_objects.span(), objectLessThan);
 
     var stdout_bos = std.io.bufferedOutStream(std.io.getStdOut().outStream());
     const stdout = stdout_bos.outStream();
@@ -138,8 +176,7 @@ pub fn main() anyerror!void {
         \\
     );
 
-    for (all_names.span()) |key| {
-        const obj = &root_map.get(key).?.value.Object;
+    for (all_objects.span()) |obj| {
         const name = obj.get("Name").?.value.String;
         var pd1 = false;
         var pd2 = false;
@@ -153,61 +190,12 @@ pub fn main() anyerror!void {
             } else if (std.mem.eql(u8, prefix, "/")) {
                 pslash = true;
             } else {
-                std.debug.warn("{} (key {}) has unrecognized prefix '{}'\n", .{ name, key, prefix });
+                std.debug.warn("{} has unrecognized prefix '{}'\n", .{ name, prefix });
                 std.process.exit(1);
             }
         }
-        const num_args = @intCast(u8, obj.get("NumArgs").?.value.Integer);
-        const syntax_str: []const u8 = blk: {
-            for (obj.get("!superclasses").?.value.Array.span()) |superclass_json| {
-                const superclass = superclass_json.String;
-                if (std.mem.eql(u8, superclass, "Joined")) {
-                    break :blk ".joined";
-                } else if (std.mem.eql(u8, superclass, "CLJoined")) {
-                    break :blk ".joined";
-                } else if (std.mem.eql(u8, superclass, "CLIgnoredJoined")) {
-                    break :blk ".joined";
-                } else if (std.mem.eql(u8, superclass, "CLCompileJoined")) {
-                    break :blk ".joined";
-                } else if (std.mem.eql(u8, superclass, "JoinedOrSeparate")) {
-                    break :blk ".joined_or_separate";
-                } else if (std.mem.eql(u8, superclass, "CLJoinedOrSeparate")) {
-                    break :blk ".joined_or_separate";
-                } else if (std.mem.eql(u8, superclass, "CLCompileJoinedOrSeparate")) {
-                    break :blk ".joined_or_separate";
-                } else if (std.mem.eql(u8, superclass, "Flag")) {
-                    break :blk ".flag";
-                } else if (std.mem.eql(u8, superclass, "CLFlag")) {
-                    break :blk ".flag";
-                } else if (std.mem.eql(u8, superclass, "CLIgnoredFlag")) {
-                    break :blk ".flag";
-                } else if (std.mem.eql(u8, superclass, "Separate")) {
-                    break :blk ".separate";
-                } else if (std.mem.eql(u8, superclass, "JoinedAndSeparate")) {
-                    break :blk ".joined_and_separate";
-                } else if (std.mem.eql(u8, superclass, "CommaJoined")) {
-                    break :blk ".comma_joined";
-                } else if (std.mem.eql(u8, superclass, "CLRemainingArgsJoined")) {
-                    break :blk ".remaining_args_joined";
-                } else if (std.mem.eql(u8, superclass, "MultiArg")) {
-                    break :blk try std.fmt.allocPrint(allocator, ".{{ .multi_arg = {} }}", .{num_args});
-                }
-            }
-            if (std.mem.eql(u8, name, "<input>")) {
-                break :blk ".flag";
-            } else if (std.mem.eql(u8, name, "<unknown>")) {
-                break :blk ".flag";
-            }
-            const kind_def = obj.get("Kind").?.value.Object.get("def").?.value.String;
-            if (std.mem.eql(u8, kind_def, "KIND_FLAG")) {
-                break :blk ".flag";
-            }
-            std.debug.warn("{} (key {}) has unrecognized superclasses:\n", .{ name, key });
-            for (obj.get("!superclasses").?.value.Array.span()) |superclass_json| {
-                std.debug.warn(" {}\n", .{superclass_json.String});
-            }
-            std.process.exit(1);
-        };
+        const syntax = objSyntax(obj);
+
         if (knownOption(name)) |ident| {
             try stdout.print(
                 \\.{{
@@ -219,22 +207,14 @@ pub fn main() anyerror!void {
                 \\    .psl = {},
                 \\}},
                 \\
-            , .{ name, syntax_str, ident, pd1, pd2, pslash });
-        } else if (pd1 and !pd2 and !pslash and
-            std.mem.eql(u8, syntax_str, ".flag"))
-        {
+            , .{ name, syntax, ident, pd1, pd2, pslash });
+        } else if (pd1 and !pd2 and !pslash and syntax == .flag) {
             try stdout.print("flagpd1(\"{}\"),\n", .{name});
-        } else if (pd1 and !pd2 and !pslash and
-            std.mem.eql(u8, syntax_str, ".joined"))
-        {
+        } else if (pd1 and !pd2 and !pslash and syntax == .joined) {
             try stdout.print("joinpd1(\"{}\"),\n", .{name});
-        } else if (pd1 and !pd2 and !pslash and
-            std.mem.eql(u8, syntax_str, ".joined_or_separate"))
-        {
+        } else if (pd1 and !pd2 and !pslash and syntax == .joined_or_separate) {
             try stdout.print("jspd1(\"{}\"),\n", .{name});
-        } else if (pd1 and !pd2 and !pslash and
-            std.mem.eql(u8, syntax_str, ".separate"))
-        {
+        } else if (pd1 and !pd2 and !pslash and syntax == .separate) {
             try stdout.print("sepd1(\"{}\"),\n", .{name});
         } else {
             try stdout.print(
@@ -247,7 +227,7 @@ pub fn main() anyerror!void {
                 \\    .psl = {},
                 \\}},
                 \\
-            , .{ name, syntax_str, pd1, pd2, pslash });
+            , .{ name, syntax, pd1, pd2, pslash });
         }
     }
 
@@ -259,8 +239,142 @@ pub fn main() anyerror!void {
     try stdout_bos.flush();
 }
 
-fn nameLessThan(a: []const u8, b: []const u8) bool {
-    return std.mem.lessThan(u8, a, b);
+// TODO we should be able to import clang_options.zig but currently this is problematic because it will
+// import stage2.zig and that causes a bunch of stuff to get exported
+const Syntax = union(enum) {
+    /// A flag with no values.
+    flag,
+
+    /// An option which prefixes its (single) value.
+    joined,
+
+    /// An option which is followed by its value.
+    separate,
+
+    /// An option which is either joined to its (non-empty) value, or followed by its value.
+    joined_or_separate,
+
+    /// An option which is both joined to its (first) value, and followed by its (second) value.
+    joined_and_separate,
+
+    /// An option followed by its values, which are separated by commas.
+    comma_joined,
+
+    /// An option which consumes an optional joined argument and any other remaining arguments.
+    remaining_args_joined,
+
+    /// An option which is which takes multiple (separate) arguments.
+    multi_arg: u8,
+
+    pub fn format(
+        self: Syntax,
+        comptime fmt: []const u8,
+        options: std.fmt.FormatOptions,
+        out_stream: var,
+    ) !void {
+        switch (self) {
+            .multi_arg => |n| return out_stream.print(".{{.{}={}}}", .{ @tagName(self), n }),
+            else => return out_stream.print(".{}", .{@tagName(self)}),
+        }
+    }
+};
+
+fn objSyntax(obj: *json.ObjectMap) Syntax {
+    const num_args = @intCast(u8, obj.get("NumArgs").?.value.Integer);
+    for (obj.get("!superclasses").?.value.Array.span()) |superclass_json| {
+        const superclass = superclass_json.String;
+        if (std.mem.eql(u8, superclass, "Joined")) {
+            return .joined;
+        } else if (std.mem.eql(u8, superclass, "CLJoined")) {
+            return .joined;
+        } else if (std.mem.eql(u8, superclass, "CLIgnoredJoined")) {
+            return .joined;
+        } else if (std.mem.eql(u8, superclass, "CLCompileJoined")) {
+            return .joined;
+        } else if (std.mem.eql(u8, superclass, "JoinedOrSeparate")) {
+            return .joined_or_separate;
+        } else if (std.mem.eql(u8, superclass, "CLJoinedOrSeparate")) {
+            return .joined_or_separate;
+        } else if (std.mem.eql(u8, superclass, "CLCompileJoinedOrSeparate")) {
+            return .joined_or_separate;
+        } else if (std.mem.eql(u8, superclass, "Flag")) {
+            return .flag;
+        } else if (std.mem.eql(u8, superclass, "CLFlag")) {
+            return .flag;
+        } else if (std.mem.eql(u8, superclass, "CLIgnoredFlag")) {
+            return .flag;
+        } else if (std.mem.eql(u8, superclass, "Separate")) {
+            return .separate;
+        } else if (std.mem.eql(u8, superclass, "JoinedAndSeparate")) {
+            return .joined_and_separate;
+        } else if (std.mem.eql(u8, superclass, "CommaJoined")) {
+            return .comma_joined;
+        } else if (std.mem.eql(u8, superclass, "CLRemainingArgsJoined")) {
+            return .remaining_args_joined;
+        } else if (std.mem.eql(u8, superclass, "MultiArg")) {
+            return .{ .multi_arg = num_args };
+        }
+    }
+    const name = obj.get("Name").?.value.String;
+    if (std.mem.eql(u8, name, "<input>")) {
+        return .flag;
+    } else if (std.mem.eql(u8, name, "<unknown>")) {
+        return .flag;
+    }
+    const kind_def = obj.get("Kind").?.value.Object.get("def").?.value.String;
+    if (std.mem.eql(u8, kind_def, "KIND_FLAG")) {
+        return .flag;
+    }
+    const key = obj.get("!name").?.value.String;
+    std.debug.warn("{} (key {}) has unrecognized superclasses:\n", .{ name, key });
+    for (obj.get("!superclasses").?.value.Array.span()) |superclass_json| {
+        std.debug.warn(" {}\n", .{superclass_json.String});
+    }
+    std.process.exit(1);
+}
+
+fn syntaxMatchesWithEql(syntax: Syntax) bool {
+    return switch (syntax) {
+        .flag,
+        .separate,
+        .multi_arg,
+        => true,
+
+        .joined,
+        .joined_or_separate,
+        .joined_and_separate,
+        .comma_joined,
+        .remaining_args_joined,
+        => false,
+    };
+}
+
+fn objectLessThan(a: *json.ObjectMap, b: *json.ObjectMap) bool {
+    // Priority is determined by exact matches first, followed by prefix matches in descending
+    // length, with key as a final tiebreaker.
+    const a_syntax = objSyntax(a);
+    const b_syntax = objSyntax(b);
+
+    const a_match_with_eql = syntaxMatchesWithEql(a_syntax);
+    const b_match_with_eql = syntaxMatchesWithEql(b_syntax);
+
+    if (a_match_with_eql and !b_match_with_eql) {
+        return true;
+    } else if (!a_match_with_eql and b_match_with_eql) {
+        return false;
+    }
+
+    if (!a_match_with_eql and !b_match_with_eql) {
+        const a_name = a.get("Name").?.value.String;
+        const b_name = b.get("Name").?.value.String;
+        if (a_name.len != b_name.len) {
+            return a_name.len > b_name.len;
+        }
+    }
+
+    const a_key = a.get("!name").?.value.String;
+    const b_key = b.get("!name").?.value.String;
+    return std.mem.lessThan(u8, a_key, b_key);
 }
 
 fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn {