std.Build: Add option to specify language of CSourceFiles

Closes: #20655
This commit is contained in:
GalaxyShard
2025-01-30 13:04:47 +00:00
committed by GitHub
parent 3348478fc3
commit a3ee5215bb
2 changed files with 60 additions and 19 deletions

View File

@@ -78,22 +78,51 @@ pub const SystemLib = struct {
pub const SearchStrategy = enum { paths_first, mode_first, no_fallback };
};
pub const CSourceLanguage = enum {
c,
cpp,
objective_c,
objective_cpp,
/// Standard assembly
assembly,
/// Assembly with the C preprocessor
assembly_with_preprocessor,
pub fn internalIdentifier(self: CSourceLanguage) []const u8 {
return switch (self) {
.c => "c",
.cpp => "c++",
.objective_c => "objective-c",
.objective_cpp => "objective-c++",
.assembly => "assembler",
.assembly_with_preprocessor => "assembler-with-cpp",
};
}
};
pub const CSourceFiles = struct {
root: LazyPath,
/// `files` is relative to `root`, which is
/// the build root by default
files: []const []const u8,
flags: []const []const u8,
/// By default, determines language of each file individually based on its file extension
language: ?CSourceLanguage,
};
pub const CSourceFile = struct {
file: LazyPath,
flags: []const []const u8 = &.{},
/// By default, determines language of each file individually based on its file extension
language: ?CSourceLanguage = null,
pub fn dupe(file: CSourceFile, b: *std.Build) CSourceFile {
return .{
.file = file.file.dupe(b),
.flags = b.dupeStrings(file.flags),
.language = file.language,
};
}
};
@@ -378,9 +407,11 @@ pub const AddCSourceFilesOptions = struct {
root: ?LazyPath = null,
files: []const []const u8,
flags: []const []const u8 = &.{},
/// By default, determines language of each file individually based on its file extension
language: ?CSourceLanguage = null,
};
/// Handy when you have many C/C++ source files and want them all to have the same flags.
/// Handy when you have many non-Zig source files and want them all to have the same flags.
pub fn addCSourceFiles(m: *Module, options: AddCSourceFilesOptions) void {
const b = m.owner;
const allocator = b.allocator;
@@ -399,6 +430,7 @@ pub fn addCSourceFiles(m: *Module, options: AddCSourceFilesOptions) void {
.root = options.root orelse b.path(""),
.files = b.dupeStrings(options.files),
.flags = b.dupeStrings(options.flags),
.language = options.language,
};
m.link_objects.append(allocator, .{ .c_source_files = c_source_files }) catch @panic("OOM");
}