diff options
| author | Maciej 'vesim' KuliĆski <vesim809@pm.me> | 2024-09-18 05:10:36 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-09-17 23:54:04 -0700 |
| commit | feaee2ba170766cc905a6aa9c799f3105cdc8145 (patch) | |
| tree | a984efc8d76751c38c2b18f6b04ea6e440bf6124 /src/main.zig | |
| parent | 41330c96aebddbf26d8fdc0725e7483476175601 (diff) | |
| download | zig-feaee2ba170766cc905a6aa9c799f3105cdc8145.tar.gz zig-feaee2ba170766cc905a6aa9c799f3105cdc8145.zip | |
cc: Add support for -Wp,
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig index 4a7f477106..95f1ad569b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1791,6 +1791,7 @@ fn buildOutputType( var c_out_mode: ?COutMode = null; var out_path: ?[]const u8 = null; var is_shared_lib = false; + var preprocessor_args = std.ArrayList([]const u8).init(arena); var linker_args = std.ArrayList([]const u8).init(arena); var it = ClangArgIterator.init(arena, all_args); var emit_llvm = false; @@ -1946,6 +1947,24 @@ fn buildOutputType( is_shared_lib = true; }, .rdynamic => create_module.opts.rdynamic = true, + .wp => { + var split_it = mem.splitScalar(u8, it.only_arg, ','); + while (split_it.next()) |preprocessor_arg| { + if (preprocessor_arg.len >= 3 and + preprocessor_arg[0] == '-' and + preprocessor_arg[2] != '-') + { + if (mem.indexOfScalar(u8, preprocessor_arg, '=')) |equals_pos| { + const key = preprocessor_arg[0..equals_pos]; + const value = preprocessor_arg[equals_pos + 1 ..]; + try preprocessor_args.append(key); + try preprocessor_args.append(value); + continue; + } + } + try preprocessor_args.append(preprocessor_arg); + } + }, .wl => { var split_it = mem.splitScalar(u8, it.only_arg, ','); while (split_it.next()) |linker_arg| { @@ -2554,6 +2573,20 @@ fn buildOutputType( } } + // Parse preprocessor args. + var preprocessor_args_it = ArgsIterator{ + .args = preprocessor_args.items, + }; + while (preprocessor_args_it.next()) |arg| { + if (mem.eql(u8, arg, "-MD") or mem.eql(u8, arg, "-MMD") or mem.eql(u8, arg, "-MT")) { + disable_c_depfile = true; + const cc_arg = try std.fmt.allocPrint(arena, "-Wp,{s},{s}", .{ arg, preprocessor_args_it.nextOrFatal() }); + try cc_argv.append(arena, cc_arg); + } else { + fatal("unsupported preprocessor arg: {s}", .{arg}); + } + } + if (mod_opts.sanitize_c) |wsc| { if (wsc and mod_opts.optimize_mode == .ReleaseFast) { mod_opts.optimize_mode = .ReleaseSafe; @@ -5771,6 +5804,7 @@ pub const ClangArgIterator = struct { shared, rdynamic, wl, + wp, preprocess_only, asm_only, optimize, |
