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"),...@@ -46,7 +46,7 @@ flagpd1("M"),
46.{46.{
47 .name = "MM",47 .name = "MM",
48 .syntax = .flag,48 .syntax = .flag,
49 .zig_equivalent = .dep_file,49 .zig_equivalent = .dep_file_mm,
50 .pd1 = true,50 .pd1 = true,
51 .pd2 = false,51 .pd2 = false,
52 .psl = false,52 .psl = false,
...@@ -1878,7 +1878,7 @@ flagpsl("MT"),...@@ -1878,7 +1878,7 @@ flagpsl("MT"),
1878.{1878.{
1879 .name = "print-missing-file-dependencies",1879 .name = "print-missing-file-dependencies",
1880 .syntax = .flag,1880 .syntax = .flag,
1881 .zig_equivalent = .other,1881 .zig_equivalent = .dep_file,
1882 .pd1 = false,1882 .pd1 = false,
1883 .pd2 = true,1883 .pd2 = true,
1884 .psl = false,1884 .psl = false,
...@@ -1998,7 +1998,7 @@ flagpsl("MT"),...@@ -1998,7 +1998,7 @@ flagpsl("MT"),
1998.{1998.{
1999 .name = "user-dependencies",1999 .name = "user-dependencies",
2000 .syntax = .flag,2000 .syntax = .flag,
2001 .zig_equivalent = .other,2001 .zig_equivalent = .dep_file_mm,
2002 .pd1 = false,2002 .pd1 = false,
2003 .pd2 = true,2003 .pd2 = true,
2004 .psl = false,2004 .psl = false,
...@@ -2022,7 +2022,7 @@ flagpsl("MT"),...@@ -2022,7 +2022,7 @@ flagpsl("MT"),
2022.{2022.{
2023 .name = "write-dependencies",2023 .name = "write-dependencies",
2024 .syntax = .flag,2024 .syntax = .flag,
2025 .zig_equivalent = .other,2025 .zig_equivalent = .dep_file,
2026 .pd1 = false,2026 .pd1 = false,
2027 .pd2 = true,2027 .pd2 = true,
2028 .psl = false,2028 .psl = false,
...@@ -2030,7 +2030,7 @@ flagpsl("MT"),...@@ -2030,7 +2030,7 @@ flagpsl("MT"),
2030.{2030.{
2031 .name = "write-user-dependencies",2031 .name = "write-user-dependencies",
2032 .syntax = .flag,2032 .syntax = .flag,
2033 .zig_equivalent = .other,2033 .zig_equivalent = .dep_file,
2034 .pd1 = false,2034 .pd1 = false,
2035 .pd2 = true,2035 .pd2 = true,
2036 .psl = false,2036 .psl = false,
src/main.zig+7
...@@ -1192,6 +1192,12 @@ fn buildOutputType(...@@ -1192,6 +1192,12 @@ fn buildOutputType(
1192 disable_c_depfile = true;1192 disable_c_depfile = true;
1193 try clang_argv.appendSlice(it.other_args);1193 try clang_argv.appendSlice(it.other_args);
1194 },1194 },
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 },
1195 .framework_dir => try framework_dirs.append(it.only_arg),1201 .framework_dir => try framework_dirs.append(it.only_arg),
1196 .framework => try frameworks.append(it.only_arg),1202 .framework => try frameworks.append(it.only_arg),
1197 .nostdlibinc => want_native_include_dirs = false,1203 .nostdlibinc => want_native_include_dirs = false,
...@@ -3055,6 +3061,7 @@ pub const ClangArgIterator = struct {...@@ -3055,6 +3061,7 @@ pub const ClangArgIterator = struct {
3055 lib_dir,3061 lib_dir,
3056 mcpu,3062 mcpu,
3057 dep_file,3063 dep_file,
3064 dep_file_mm,
3058 framework_dir,3065 framework_dir,
3059 framework,3066 framework,
3060 nostdlibinc,3067 nostdlibinc,
tools/update_clang_options.zig+17-1
...@@ -268,6 +268,10 @@ const known_options = [_]KnownOpt{...@@ -268,6 +268,10 @@ const known_options = [_]KnownOpt{
268 .name = "MD",268 .name = "MD",
269 .ident = "dep_file",269 .ident = "dep_file",
270 },270 },
271 .{
272 .name = "write-dependencies",
273 .ident = "dep_file",
274 },
271 .{275 .{
272 .name = "MV",276 .name = "MV",
273 .ident = "dep_file",277 .ident = "dep_file",
...@@ -284,18 +288,30 @@ const known_options = [_]KnownOpt{...@@ -284,18 +288,30 @@ const known_options = [_]KnownOpt{
284 .name = "MG",288 .name = "MG",
285 .ident = "dep_file",289 .ident = "dep_file",
286 },290 },
291 .{
292 .name = "print-missing-file-dependencies",
293 .ident = "dep_file",
294 },
287 .{295 .{
288 .name = "MJ",296 .name = "MJ",
289 .ident = "dep_file",297 .ident = "dep_file",
290 },298 },
291 .{299 .{
292 .name = "MM",300 .name = "MM",
293 .ident = "dep_file",301 .ident = "dep_file_mm",
302 },
303 .{
304 .name = "user-dependencies",
305 .ident = "dep_file_mm",
294 },306 },
295 .{307 .{
296 .name = "MMD",308 .name = "MMD",
297 .ident = "dep_file",309 .ident = "dep_file",
298 },310 },
311 .{
312 .name = "write-user-dependencies",
313 .ident = "dep_file",
314 },
299 .{315 .{
300 .name = "MP",316 .name = "MP",
301 .ident = "dep_file",317 .ident = "dep_file",