| ... | @@ -270,11 +270,11 @@ pub const LangToExt = std.ComptimeStringMap(FileExt, .{ | ... | @@ -270,11 +270,11 @@ pub const LangToExt = std.ComptimeStringMap(FileExt, .{ |
| 270 | .{ "c", .c }, | 270 | .{ "c", .c }, |
| 271 | .{ "c-header", .h }, | 271 | .{ "c-header", .h }, |
| 272 | .{ "c++", .cpp }, | 272 | .{ "c++", .cpp }, |
| 273 | .{ "c++-header", .h }, | 273 | .{ "c++-header", .hpp }, |
| 274 | .{ "objective-c", .m }, | 274 | .{ "objective-c", .m }, |
| 275 | .{ "objective-c-header", .h }, | 275 | .{ "objective-c-header", .hm }, |
| 276 | .{ "objective-c++", .mm }, | 276 | .{ "objective-c++", .mm }, |
| 277 | .{ "objective-c++-header", .h }, | 277 | .{ "objective-c++-header", .hmm }, |
| 278 | .{ "assembler", .assembly }, | 278 | .{ "assembler", .assembly }, |
| 279 | .{ "assembler-with-cpp", .assembly_with_cpp }, | 279 | .{ "assembler-with-cpp", .assembly_with_cpp }, |
| 280 | .{ "cuda", .cu }, | 280 | .{ "cuda", .cu }, |
| ... | @@ -887,6 +887,8 @@ pub const ClangPreprocessorMode = enum { | ... | @@ -887,6 +887,8 @@ pub const ClangPreprocessorMode = enum { |
| 887 | yes, | 887 | yes, |
| 888 | /// This means we are doing `zig cc -E`. | 888 | /// This means we are doing `zig cc -E`. |
| 889 | stdout, | 889 | stdout, |
| | 890 | /// precompiled C header |
| | 891 | pch, |
| 890 | }; | 892 | }; |
| 891 | | 893 | |
| 892 | pub const Framework = link.File.MachO.Framework; | 894 | pub const Framework = link.File.MachO.Framework; |
| ... | @@ -4393,6 +4395,10 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P | ... | @@ -4393,6 +4395,10 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P |
| 4393 | .assembly_with_cpp => "assembler-with-cpp", | 4395 | .assembly_with_cpp => "assembler-with-cpp", |
| 4394 | .c => "c", | 4396 | .c => "c", |
| 4395 | .cpp => "c++", | 4397 | .cpp => "c++", |
| | 4398 | .h => "c-header", |
| | 4399 | .hpp => "c++-header", |
| | 4400 | .hm => "objective-c-header", |
| | 4401 | .hmm => "objective-c++-header", |
| 4396 | .cu => "cuda", | 4402 | .cu => "cuda", |
| 4397 | .m => "objective-c", | 4403 | .m => "objective-c", |
| 4398 | .mm => "objective-c++", | 4404 | .mm => "objective-c++", |
| ... | @@ -4418,10 +4424,11 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P | ... | @@ -4418,10 +4424,11 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P |
| 4418 | else | 4424 | else |
| 4419 | "/dev/null"; | 4425 | "/dev/null"; |
| 4420 | | 4426 | |
| 4421 | try argv.ensureUnusedCapacity(5); | 4427 | try argv.ensureUnusedCapacity(6); |
| 4422 | switch (comp.clang_preprocessor_mode) { | 4428 | switch (comp.clang_preprocessor_mode) { |
| 4423 | .no => argv.appendSliceAssumeCapacity(&[_][]const u8{ "-c", "-o", out_obj_path }), | 4429 | .no => argv.appendSliceAssumeCapacity(&.{ "-c", "-o", out_obj_path }), |
| 4424 | .yes => argv.appendSliceAssumeCapacity(&[_][]const u8{ "-E", "-o", out_obj_path }), | 4430 | .yes => argv.appendSliceAssumeCapacity(&.{ "-E", "-o", out_obj_path }), |
| | 4431 | .pch => argv.appendSliceAssumeCapacity(&.{ "-Xclang", "-emit-pch", "-o", out_obj_path }), |
| 4425 | .stdout => argv.appendAssumeCapacity("-E"), | 4432 | .stdout => argv.appendAssumeCapacity("-E"), |
| 4426 | } | 4433 | } |
| 4427 | | 4434 | |
| ... | @@ -4456,10 +4463,11 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P | ... | @@ -4456,10 +4463,11 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P |
| 4456 | try argv.appendSlice(c_object.src.extra_flags); | 4463 | try argv.appendSlice(c_object.src.extra_flags); |
| 4457 | try argv.appendSlice(c_object.src.cache_exempt_flags); | 4464 | try argv.appendSlice(c_object.src.cache_exempt_flags); |
| 4458 | | 4465 | |
| 4459 | try argv.ensureUnusedCapacity(5); | 4466 | try argv.ensureUnusedCapacity(6); |
| 4460 | switch (comp.clang_preprocessor_mode) { | 4467 | switch (comp.clang_preprocessor_mode) { |
| 4461 | .no => argv.appendSliceAssumeCapacity(&.{ "-c", "-o", out_obj_path }), | 4468 | .no => argv.appendSliceAssumeCapacity(&.{ "-c", "-o", out_obj_path }), |
| 4462 | .yes => argv.appendSliceAssumeCapacity(&.{ "-E", "-o", out_obj_path }), | 4469 | .yes => argv.appendSliceAssumeCapacity(&.{ "-E", "-o", out_obj_path }), |
| | 4470 | .pch => argv.appendSliceAssumeCapacity(&.{ "-Xclang", "-emit-pch", "-o", out_obj_path }), |
| 4463 | .stdout => argv.appendAssumeCapacity("-E"), | 4471 | .stdout => argv.appendAssumeCapacity("-E"), |
| 4464 | } | 4472 | } |
| 4465 | if (comp.clang_passthrough_mode) { | 4473 | if (comp.clang_passthrough_mode) { |
| ... | @@ -5101,7 +5109,7 @@ pub fn addCCArgs( | ... | @@ -5101,7 +5109,7 @@ pub fn addCCArgs( |
| 5101 | try argv.appendSlice(&[_][]const u8{ "-target", llvm_triple }); | 5109 | try argv.appendSlice(&[_][]const u8{ "-target", llvm_triple }); |
| 5102 | | 5110 | |
| 5103 | if (target.os.tag == .windows) switch (ext) { | 5111 | if (target.os.tag == .windows) switch (ext) { |
| 5104 | .c, .cpp, .m, .mm, .h, .cu, .rc, .assembly, .assembly_with_cpp => { | 5112 | .c, .cpp, .m, .mm, .h, .hpp, .hm, .hmm, .cu, .rc, .assembly, .assembly_with_cpp => { |
| 5105 | const minver: u16 = @truncate(@intFromEnum(target.os.getVersionRange().windows.min) >> 16); | 5113 | const minver: u16 = @truncate(@intFromEnum(target.os.getVersionRange().windows.min) >> 16); |
| 5106 | try argv.append( | 5114 | try argv.append( |
| 5107 | try std.fmt.allocPrint(arena, "-D_WIN32_WINNT=0x{x:0>4}", .{minver}), | 5115 | try std.fmt.allocPrint(arena, "-D_WIN32_WINNT=0x{x:0>4}", .{minver}), |
| ... | @@ -5111,7 +5119,7 @@ pub fn addCCArgs( | ... | @@ -5111,7 +5119,7 @@ pub fn addCCArgs( |
| 5111 | }; | 5119 | }; |
| 5112 | | 5120 | |
| 5113 | switch (ext) { | 5121 | switch (ext) { |
| 5114 | .c, .cpp, .m, .mm, .h, .cu, .rc => { | 5122 | .c, .cpp, .m, .mm, .h, .hpp, .hm, .hmm, .cu, .rc => { |
| 5115 | try argv.appendSlice(&[_][]const u8{ | 5123 | try argv.appendSlice(&[_][]const u8{ |
| 5116 | "-nostdinc", | 5124 | "-nostdinc", |
| 5117 | "-fno-spell-checking", | 5125 | "-fno-spell-checking", |
| ... | @@ -5679,6 +5687,9 @@ pub const FileExt = enum { | ... | @@ -5679,6 +5687,9 @@ pub const FileExt = enum { |
| 5679 | cpp, | 5687 | cpp, |
| 5680 | cu, | 5688 | cu, |
| 5681 | h, | 5689 | h, |
| | 5690 | hpp, |
| | 5691 | hm, |
| | 5692 | hmm, |
| 5682 | m, | 5693 | m, |
| 5683 | mm, | 5694 | mm, |
| 5684 | ll, | 5695 | ll, |
| ... | @@ -5697,7 +5708,7 @@ pub const FileExt = enum { | ... | @@ -5697,7 +5708,7 @@ pub const FileExt = enum { |
| 5697 | | 5708 | |
| 5698 | pub fn clangSupportsDepFile(ext: FileExt) bool { | 5709 | pub fn clangSupportsDepFile(ext: FileExt) bool { |
| 5699 | return switch (ext) { | 5710 | return switch (ext) { |
| 5700 | .c, .cpp, .h, .m, .mm, .cu => true, | 5711 | .c, .cpp, .h, .hpp, .hm, .hmm, .m, .mm, .cu => true, |
| 5701 | | 5712 | |
| 5702 | .ll, | 5713 | .ll, |
| 5703 | .bc, | 5714 | .bc, |
| ... | @@ -5722,6 +5733,9 @@ pub const FileExt = enum { | ... | @@ -5722,6 +5733,9 @@ pub const FileExt = enum { |
| 5722 | .cpp => ".cpp", | 5733 | .cpp => ".cpp", |
| 5723 | .cu => ".cu", | 5734 | .cu => ".cu", |
| 5724 | .h => ".h", | 5735 | .h => ".h", |
| | 5736 | .hpp => ".h", |
| | 5737 | .hm => ".h", |
| | 5738 | .hmm => ".h", |
| 5725 | .m => ".m", | 5739 | .m => ".m", |
| 5726 | .mm => ".mm", | 5740 | .mm => ".mm", |
| 5727 | .ll => ".ll", | 5741 | .ll => ".ll", |