authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-12-13 04:56:35+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-12-13 06:48:32+01:00
log88f324ebe7a7fe088903ebaeb0c49f31c10ae9a6
tree76bbc436f7a23dad393c2567808ae19fb5c8bada
parentb6ece854c93e3ff6d6f20cd31133174b34b02fb0
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

Compilation: Override Clang's language type for header files.

Clang seems to treat them as linker input without this.

1 files changed, 34 insertions(+), 4 deletions(-)

src/Compilation.zig+34-4
......@@ -4687,19 +4687,19 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: std.Pr
46874687
46884688 try argv.appendSlice(&[_][]const u8{ self_exe_path, "clang" });
46894689 // if "ext" is explicit, add "-x <lang>". Otherwise let clang do its thing.
4690 if (c_object.src.ext != null) {
4690 if (c_object.src.ext != null or ext.clangNeedsLanguageOverride()) {
46914691 try argv.appendSlice(&[_][]const u8{ "-x", switch (ext) {
46924692 .assembly => "assembler",
46934693 .assembly_with_cpp => "assembler-with-cpp",
46944694 .c => "c",
4695 .cpp => "c++",
46964695 .h => "c-header",
4696 .cpp => "c++",
46974697 .hpp => "c++-header",
4698 .m => "objective-c",
46984699 .hm => "objective-c-header",
4700 .mm => "objective-c++",
46994701 .hmm => "objective-c++-header",
47004702 .cu => "cuda",
4701 .m => "objective-c",
4702 .mm => "objective-c++",
47034703 else => fatal("language '{s}' is unsupported in this context", .{@tagName(ext)}),
47044704 } });
47054705 }
......@@ -5840,6 +5840,36 @@ pub const FileExt = enum {
58405840 manifest,
58415841 unknown,
58425842
5843 pub fn clangNeedsLanguageOverride(ext: FileExt) bool {
5844 return switch (ext) {
5845 .h,
5846 .hpp,
5847 .hm,
5848 .hmm,
5849 => true,
5850
5851 .c,
5852 .cpp,
5853 .cu,
5854 .m,
5855 .mm,
5856 .ll,
5857 .bc,
5858 .assembly,
5859 .assembly_with_cpp,
5860 .shared_library,
5861 .object,
5862 .static_library,
5863 .zig,
5864 .def,
5865 .rc,
5866 .res,
5867 .manifest,
5868 .unknown,
5869 => false,
5870 };
5871 }
5872
58435873 pub fn clangSupportsDiagnostics(ext: FileExt) bool {
58445874 return switch (ext) {
58455875 .c, .cpp, .h, .hpp, .hm, .hmm, .m, .mm, .cu, .ll, .bc => true,