From f71590d4c49493b533da81a55962c7429f5b5151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 26 Mar 2025 23:19:35 +0100 Subject: [PATCH] build.zig: Statically link LLVM libraries for experimental targets if requested. --- build.zig | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index 9794514f1f..6f045f086b 100644 --- a/build.zig +++ b/build.zig @@ -326,7 +326,12 @@ pub fn build(b: *std.Build) !void { try addCmakeCfgOptionsToExe(b, cfg, exe, use_zig_libcxx); } else { // Here we are -Denable-llvm but no cmake integration. - try addStaticLlvmOptionsToModule(exe.root_module); + try addStaticLlvmOptionsToModule(exe.root_module, .{ + .llvm_has_m68k = llvm_has_m68k, + .llvm_has_csky = llvm_has_csky, + .llvm_has_arc = llvm_has_arc, + .llvm_has_xtensa = llvm_has_xtensa, + }); } if (target.result.os.tag == .windows) { // LLVM depends on networking as of version 18. @@ -809,7 +814,12 @@ fn addCmakeCfgOptionsToExe( } } -fn addStaticLlvmOptionsToModule(mod: *std.Build.Module) !void { +fn addStaticLlvmOptionsToModule(mod: *std.Build.Module, options: struct { + llvm_has_m68k: bool, + llvm_has_csky: bool, + llvm_has_arc: bool, + llvm_has_xtensa: bool, +}) !void { // Adds the Zig C++ sources which both stage1 and stage2 need. // // We need this because otherwise zig_clang_cc1_main.cpp ends up pulling @@ -833,6 +843,22 @@ fn addStaticLlvmOptionsToModule(mod: *std.Build.Module) !void { mod.linkSystemLibrary(lib_name, .{}); } + if (options.llvm_has_m68k) for (llvm_libs_m68k) |lib_name| { + mod.linkSystemLibrary(lib_name, .{}); + }; + + if (options.llvm_has_csky) for (llvm_libs_csky) |lib_name| { + mod.linkSystemLibrary(lib_name, .{}); + }; + + if (options.llvm_has_arc) for (llvm_libs_arc) |lib_name| { + mod.linkSystemLibrary(lib_name, .{}); + }; + + if (options.llvm_has_xtensa) for (llvm_libs_xtensa) |lib_name| { + mod.linkSystemLibrary(lib_name, .{}); + }; + mod.linkSystemLibrary("z", .{}); mod.linkSystemLibrary("zstd", .{}); @@ -1321,6 +1347,33 @@ const llvm_libs = [_][]const u8{ "LLVMSupport", "LLVMDemangle", }; +const llvm_libs_m68k = [_][]const u8{ + "LLVMM68kDisassembler", + "LLVMM68kAsmParser", + "LLVMM68kCodeGen", + "LLVMM68kDesc", + "LLVMM68kInfo", +}; +const llvm_libs_csky = [_][]const u8{ + "LLVMCSKYDisassembler", + "LLVMCSKYAsmParser", + "LLVMCSKYCodeGen", + "LLVMCSKYDesc", + "LLVMCSKYInfo", +}; +const llvm_libs_arc = [_][]const u8{ + "LLVMARCDisassembler", + "LLVMARCCodeGen", + "LLVMARCDesc", + "LLVMARCInfo", +}; +const llvm_libs_xtensa = [_][]const u8{ + "LLVMXtensaDisassembler", + "LLVMXtensaAsmParser", + "LLVMXtensaCodeGen", + "LLVMXtensaDesc", + "LLVMXtensaInfo", +}; fn generateLangRef(b: *std.Build) std.Build.LazyPath { const doctest_exe = b.addExecutable(.{