authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-03-04 18:14:00-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-03-04 18:14:00-07:00
log041212a41cfaf029dc3eb9740467b721c76f406c
tree2eac3522d4a0238ddd5d74a142d8f0193e2aecf7
parent98b24aa47f98d9c70d1e152228ac89dd41e0f637

zig cc: fix handling of -MM flag

Clang docs say: > Like -MMD, but also implies -E and writes to stdout by default. Previously, Zig handled this option by forwarding it directly to Clang, and disabling depfiles. However this did not adhere to Clang's documented behavior of these flags. Now, in addition to being forwarded directly to Clang, `-MM` also sets c_out_mode = .preprocessor, just like `-E`. Another issue I noticed is that Zig did not recognize the aliases for -MG, -MM, or -MMD. The aliases are now recognized.

3 files changed, 29 insertions(+), 6 deletions(-)

src/clang_options_data.zig+5-5
......@@ -46,7 +46,7 @@ flagpd1("M"),
4646.{
4747 .name = "MM",
4848 .syntax = .flag,
49 .zig_equivalent = .dep_file,
49 .zig_equivalent = .dep_file_mm,
5050 .pd1 = true,
5151 .pd2 = false,
5252 .psl = false,
......@@ -1878,7 +1878,7 @@ flagpsl("MT"),
18781878.{
18791879 .name = "print-missing-file-dependencies",
18801880 .syntax = .flag,
1881 .zig_equivalent = .other,
1881 .zig_equivalent = .dep_file,
18821882 .pd1 = false,
18831883 .pd2 = true,
18841884 .psl = false,
......@@ -1998,7 +1998,7 @@ flagpsl("MT"),
19981998.{
19991999 .name = "user-dependencies",
20002000 .syntax = .flag,
2001 .zig_equivalent = .other,
2001 .zig_equivalent = .dep_file_mm,
20022002 .pd1 = false,
20032003 .pd2 = true,
20042004 .psl = false,
......@@ -2022,7 +2022,7 @@ flagpsl("MT"),
20222022.{
20232023 .name = "write-dependencies",
20242024 .syntax = .flag,
2025 .zig_equivalent = .other,
2025 .zig_equivalent = .dep_file,
20262026 .pd1 = false,
20272027 .pd2 = true,
20282028 .psl = false,
......@@ -2030,7 +2030,7 @@ flagpsl("MT"),
20302030.{
20312031 .name = "write-user-dependencies",
20322032 .syntax = .flag,
2033 .zig_equivalent = .other,
2033 .zig_equivalent = .dep_file,
20342034 .pd1 = false,
20352035 .pd2 = true,
20362036 .psl = false,
src/main.zig+7
......@@ -1192,6 +1192,12 @@ fn buildOutputType(
11921192 disable_c_depfile = true;
11931193 try clang_argv.appendSlice(it.other_args);
11941194 },
1195 .dep_file_mm => { // -MM
1196 // "Like -MMD, but also implies -E and writes to stdout by default"
1197 c_out_mode = .preprocessor;
1198 disable_c_depfile = true;
1199 try clang_argv.appendSlice(it.other_args);
1200 },
11951201 .framework_dir => try framework_dirs.append(it.only_arg),
11961202 .framework => try frameworks.append(it.only_arg),
11971203 .nostdlibinc => want_native_include_dirs = false,
......@@ -3055,6 +3061,7 @@ pub const ClangArgIterator = struct {
30553061 lib_dir,
30563062 mcpu,
30573063 dep_file,
3064 dep_file_mm,
30583065 framework_dir,
30593066 framework,
30603067 nostdlibinc,
tools/update_clang_options.zig+17-1
......@@ -268,6 +268,10 @@ const known_options = [_]KnownOpt{
268268 .name = "MD",
269269 .ident = "dep_file",
270270 },
271 .{
272 .name = "write-dependencies",
273 .ident = "dep_file",
274 },
271275 .{
272276 .name = "MV",
273277 .ident = "dep_file",
......@@ -284,18 +288,30 @@ const known_options = [_]KnownOpt{
284288 .name = "MG",
285289 .ident = "dep_file",
286290 },
291 .{
292 .name = "print-missing-file-dependencies",
293 .ident = "dep_file",
294 },
287295 .{
288296 .name = "MJ",
289297 .ident = "dep_file",
290298 },
291299 .{
292300 .name = "MM",
293 .ident = "dep_file",
301 .ident = "dep_file_mm",
302 },
303 .{
304 .name = "user-dependencies",
305 .ident = "dep_file_mm",
294306 },
295307 .{
296308 .name = "MMD",
297309 .ident = "dep_file",
298310 },
311 .{
312 .name = "write-user-dependencies",
313 .ident = "dep_file",
314 },
299315 .{
300316 .name = "MP",
301317 .ident = "dep_file",