authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-03-26 23:19:35+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-03-27 00:31:11+01:00
logf71590d4c49493b533da81a55962c7429f5b5151
tree9c236e05c1676ada1708eea0d408b434d8caf6e5
parent2489b5fd74a436ebe0bcdcc5dccf9e89bac08a1c
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

build.zig: Statically link LLVM libraries for experimental targets if requested.


1 files changed, 55 insertions(+), 2 deletions(-)

build.zig+55-2
......@@ -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
812fn addStaticLlvmOptionsToModule(mod: *std.Build.Module) !void {
817fn 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};
1350const llvm_libs_m68k = [_][]const u8{
1351 "LLVMM68kDisassembler",
1352 "LLVMM68kAsmParser",
1353 "LLVMM68kCodeGen",
1354 "LLVMM68kDesc",
1355 "LLVMM68kInfo",
1356};
1357const llvm_libs_csky = [_][]const u8{
1358 "LLVMCSKYDisassembler",
1359 "LLVMCSKYAsmParser",
1360 "LLVMCSKYCodeGen",
1361 "LLVMCSKYDesc",
1362 "LLVMCSKYInfo",
1363};
1364const llvm_libs_arc = [_][]const u8{
1365 "LLVMARCDisassembler",
1366 "LLVMARCCodeGen",
1367 "LLVMARCDesc",
1368 "LLVMARCInfo",
1369};
1370const llvm_libs_xtensa = [_][]const u8{
1371 "LLVMXtensaDisassembler",
1372 "LLVMXtensaAsmParser",
1373 "LLVMXtensaCodeGen",
1374 "LLVMXtensaDesc",
1375 "LLVMXtensaInfo",
1376};
13241377
13251378fn generateLangRef(b: *std.Build) std.Build.LazyPath {
13261379 const doctest_exe = b.addExecutable(.{