Skip to content

Commit f71590d

Browse files
committed
build.zig: Statically link LLVM libraries for experimental targets if requested.
1 parent 2489b5f commit f71590d

File tree

1 file changed

+55
-2
lines changed

1 file changed

+55
-2
lines changed

build.zig

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,12 @@ pub fn build(b: *std.Build) !void {
326326
try addCmakeCfgOptionsToExe(b, cfg, exe, use_zig_libcxx);
327327
} else {
328328
// Here we are -Denable-llvm but no cmake integration.
329-
try addStaticLlvmOptionsToModule(exe.root_module);
329+
try addStaticLlvmOptionsToModule(exe.root_module, .{
330+
.llvm_has_m68k = llvm_has_m68k,
331+
.llvm_has_csky = llvm_has_csky,
332+
.llvm_has_arc = llvm_has_arc,
333+
.llvm_has_xtensa = llvm_has_xtensa,
334+
});
330335
}
331336
if (target.result.os.tag == .windows) {
332337
// LLVM depends on networking as of version 18.
@@ -809,7 +814,12 @@ fn addCmakeCfgOptionsToExe(
809814
}
810815
}
811816

812-
fn addStaticLlvmOptionsToModule(mod: *std.Build.Module) !void {
817+
fn addStaticLlvmOptionsToModule(mod: *std.Build.Module, options: struct {
818+
llvm_has_m68k: bool,
819+
llvm_has_csky: bool,
820+
llvm_has_arc: bool,
821+
llvm_has_xtensa: bool,
822+
}) !void {
813823
// Adds the Zig C++ sources which both stage1 and stage2 need.
814824
//
815825
// We need this because otherwise zig_clang_cc1_main.cpp ends up pulling
@@ -833,6 +843,22 @@ fn addStaticLlvmOptionsToModule(mod: *std.Build.Module) !void {
833843
mod.linkSystemLibrary(lib_name, .{});
834844
}
835845

846+
if (options.llvm_has_m68k) for (llvm_libs_m68k) |lib_name| {
847+
mod.linkSystemLibrary(lib_name, .{});
848+
};
849+
850+
if (options.llvm_has_csky) for (llvm_libs_csky) |lib_name| {
851+
mod.linkSystemLibrary(lib_name, .{});
852+
};
853+
854+
if (options.llvm_has_arc) for (llvm_libs_arc) |lib_name| {
855+
mod.linkSystemLibrary(lib_name, .{});
856+
};
857+
858+
if (options.llvm_has_xtensa) for (llvm_libs_xtensa) |lib_name| {
859+
mod.linkSystemLibrary(lib_name, .{});
860+
};
861+
836862
mod.linkSystemLibrary("z", .{});
837863
mod.linkSystemLibrary("zstd", .{});
838864

@@ -1321,6 +1347,33 @@ const llvm_libs = [_][]const u8{
13211347
"LLVMSupport",
13221348
"LLVMDemangle",
13231349
};
1350+
const llvm_libs_m68k = [_][]const u8{
1351+
"LLVMM68kDisassembler",
1352+
"LLVMM68kAsmParser",
1353+
"LLVMM68kCodeGen",
1354+
"LLVMM68kDesc",
1355+
"LLVMM68kInfo",
1356+
};
1357+
const llvm_libs_csky = [_][]const u8{
1358+
"LLVMCSKYDisassembler",
1359+
"LLVMCSKYAsmParser",
1360+
"LLVMCSKYCodeGen",
1361+
"LLVMCSKYDesc",
1362+
"LLVMCSKYInfo",
1363+
};
1364+
const llvm_libs_arc = [_][]const u8{
1365+
"LLVMARCDisassembler",
1366+
"LLVMARCCodeGen",
1367+
"LLVMARCDesc",
1368+
"LLVMARCInfo",
1369+
};
1370+
const llvm_libs_xtensa = [_][]const u8{
1371+
"LLVMXtensaDisassembler",
1372+
"LLVMXtensaAsmParser",
1373+
"LLVMXtensaCodeGen",
1374+
"LLVMXtensaDesc",
1375+
"LLVMXtensaInfo",
1376+
};
13241377

13251378
fn generateLangRef(b: *std.Build) std.Build.LazyPath {
13261379
const doctest_exe = b.addExecutable(.{

0 commit comments

Comments
 (0)