Implement switching between dynamic and static

This commit is contained in:
David Gonzalez Martin 2024-03-13 12:57:47 -06:00
parent 0185ffaab8
commit 7fdb3566ca
2 changed files with 351 additions and 350 deletions

View File

@ -20,7 +20,9 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Test - name: Test
run: zig build test -Dself_hosted_ci=true -Dllvm_path=../../../../../dev/llvm/llvm-static-release-zen4-17.0.6/out/x86_64-linux-musl-native run: |
zig build test -Dself_hosted_ci=true -Dstatic=true -Dllvm_path=../../../../../dev/llvm/llvm-static-release-zen4-17.0.6/out/x86_64-linux-musl-native
zig build test -Dself_hosted_ci=true -Dstatic=false
# macos_m1: # macos_m1:
# runs-on: macos-14 # runs-on: macos-14
# timeout-minutes: 15 # timeout-minutes: 15

697
build.zig
View File

@ -8,52 +8,10 @@ pub fn build(b: *std.Build) !void {
const print_stack_trace = b.option(bool, "print_stack_trace", "This option enables printing stack traces inside the compiler") orelse is_ci or @import("builtin").os.tag == .macos; const print_stack_trace = b.option(bool, "print_stack_trace", "This option enables printing stack traces inside the compiler") orelse is_ci or @import("builtin").os.tag == .macos;
const native_target = b.resolveTargetQuery(.{}); const native_target = b.resolveTargetQuery(.{});
const optimization = b.standardOptimizeOption(.{}); const optimization = b.standardOptimizeOption(.{});
const target_query = b.standardTargetOptionsQueryOnly(.{}); const static = b.option(bool, "static", "This option enables the compiler to be built statically") orelse false;
const os = target_query.os_tag orelse @import("builtin").os.tag;
_ = os; // autofix
// if (os == .linux) {
// target_query.abi = .musl;
// }
const target = b.resolveTargetQuery(target_query);
const compiler_options = b.addOptions(); const compiler_options = b.addOptions();
compiler_options.addOption(bool, "print_stack_trace", print_stack_trace); compiler_options.addOption(bool, "print_stack_trace", print_stack_trace);
const compiler = b.addExecutable(.{
.name = "nat",
.root_source_file = .{ .path = "bootstrap/main.zig" },
.target = target,
.optimize = optimization,
});
compiler.root_module.addOptions("configuration", compiler_options);
compiler.formatted_panics = print_stack_trace;
compiler.root_module.unwind_tables = print_stack_trace;
compiler.root_module.omit_frame_pointer = false;
compiler.root_module.error_tracing = false;
compiler.want_lto = false;
compiler.linkLibC();
compiler.addObjectFile(.{ .cwd_relative = "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/libstdc++.so" });
compiler.addIncludePath(.{ .cwd_relative = "/usr/include"});
compiler.addIncludePath(.{ .cwd_relative = "/usr/include/c++/13.2.1"});
compiler.addIncludePath(.{ .cwd_relative = "/usr/include/c++/13.2.1/x86_64-pc-linux-gnu"});
compiler.addLibraryPath(.{ .cwd_relative = "/usr/lib"});
compiler.linkSystemLibrary("LLVM");
compiler.linkSystemLibrary("clang-cpp");
compiler.linkSystemLibrary("lldCommon");
compiler.linkSystemLibrary("lldCOFF");
compiler.linkSystemLibrary("lldELF");
compiler.linkSystemLibrary("lldMachO");
compiler.linkSystemLibrary("lldWasm");
compiler.linkSystemLibrary("unwind");
// TODO:
// if (target.result.os.tag == .windows) {
// compiler.linkSystemLibrary("ole32");
// compiler.linkSystemLibrary("version");
// compiler.linkSystemLibrary("uuid");
// compiler.linkSystemLibrary("msvcrt-os");
// }
const fetcher = b.addExecutable(.{ const fetcher = b.addExecutable(.{
.name = "llvm_fetcher", .name = "llvm_fetcher",
.root_source_file = .{ .path = "build/fetcher.zig" }, .root_source_file = .{ .path = "build/fetcher.zig" },
@ -61,54 +19,38 @@ pub fn build(b: *std.Build) !void {
.optimize = .Debug, .optimize = .Debug,
.single_threaded = true, .single_threaded = true,
}); });
const llvm_version = "17.0.6";
const prefix = "nat/cache";
const llvm_path = b.option([]const u8, "llvm_path", "LLVM prefix path") orelse blk: {
assert(!self_hosted_ci);
if (third_party_ci or (!target.query.isNativeOs() or !target.query.isNativeCpu())) {
var llvm_directory = try std.ArrayListUnmanaged(u8).initCapacity(b.allocator, 128);
llvm_directory.appendSliceAssumeCapacity(prefix ++ "/");
llvm_directory.appendSliceAssumeCapacity("llvm-");
llvm_directory.appendSliceAssumeCapacity(llvm_version);
llvm_directory.appendSliceAssumeCapacity("-");
llvm_directory.appendSliceAssumeCapacity(@tagName(target.result.cpu.arch));
llvm_directory.appendSliceAssumeCapacity("-");
llvm_directory.appendSliceAssumeCapacity(@tagName(target.result.os.tag));
llvm_directory.appendSliceAssumeCapacity("-");
llvm_directory.appendSliceAssumeCapacity(@tagName(target.result.abi));
llvm_directory.appendSliceAssumeCapacity("-");
const cpu = if (std.mem.eql(u8, target.result.cpu.model.name, @tagName(target.result.cpu.arch))) "baseline" else target.result.cpu.model.name;
llvm_directory.appendSliceAssumeCapacity(cpu);
const url = try std.mem.concat(b.allocator, u8, &.{"https://github.com/birth-software/fetch-llvm/releases/download/v", llvm_version, "/llvm-", llvm_version, "-", @tagName(target.result.cpu.arch), "-", @tagName(target.result.os.tag), "-", @tagName(target.result.abi), "-", cpu, ".tar.xz"}); var target_query = b.standardTargetOptionsQueryOnly(.{});
const abi = b.option(std.Target.Abi, "abi", "This option modifies the ABI used for the compiler") orelse if (static) switch (native_target.result.os.tag) {
var dir = std.fs.cwd().openDir(llvm_directory.items, .{}) catch { else => target_query.abi,
const run = b.addRunArtifact(fetcher); .linux => b: {
compiler.step.dependOn(&run.step); const os_release = try std.fs.cwd().readFileAlloc(b.allocator, "/etc/os-release", 0xffff);
run.addArg("-prefix"); std.debug.print("/etc/os-release:\n```\n{s}\n```\n", .{os_release});
run.addArg(prefix); const attribute_name = "ID=";
run.addArg("-url"); const i = std.mem.indexOf(u8, os_release, attribute_name) orelse unreachable;
run.addArg(url); const maybe_start_quote_index = i + attribute_name.len;
break :blk llvm_directory.items; const value = if (os_release[maybe_start_quote_index] == '\"') attr: {
const end_quote_index = std.mem.indexOf(u8, os_release[maybe_start_quote_index + 1 ..], "\"") orelse unreachable;
const attribute_value = os_release[maybe_start_quote_index + 1 ..][0..end_quote_index];
break :attr attribute_value;
} else attr: {
const line_feed = std.mem.indexOf(u8, os_release[maybe_start_quote_index..], "\n") orelse unreachable;
const attribute_value = os_release[maybe_start_quote_index..][0..line_feed];
break :attr attribute_value;
}; };
break :b if (std.mem.eql(u8, value, "arch") or std.mem.eql(u8, value, "endeavouros")) .musl else target_query.abi;
},
} else target_query.abi;
target_query.abi = abi;
const target = b.resolveTargetQuery(target_query);
dir.close(); const compiler = b.addExecutable(.{
.name = "nat",
.root_source_file = .{ .path = "bootstrap/main.zig" },
.target = target,
.optimize = optimization,
});
break :blk llvm_directory.items;
} else {
const use_debug = b.option(bool, "use_debug", "This option enables the LLVM debug build in the development PC") orelse false;
break :blk switch (use_debug) {
true => "../llvm-17-static-debug",
false => "../llvm-17-static-release",
};
}
};
const llvm_include_dir = try std.mem.concat(b.allocator, u8, &.{ llvm_path, "/include" });
_ = llvm_include_dir; // autofix
const llvm_lib_dir = try std.mem.concat(b.allocator, u8, &.{ llvm_path, "/lib" });
_ = llvm_lib_dir; // autofix
// compiler.addIncludePath(std.Build.LazyPath.relative(llvm_include_dir));
const cpp_files = .{ const cpp_files = .{
"src/llvm/llvm.cpp", "src/llvm/llvm.cpp",
"src/llvm/lld.cpp", "src/llvm/lld.cpp",
@ -117,6 +59,7 @@ pub fn build(b: *std.Build) !void {
"src/llvm/clang_cc1as.cpp", "src/llvm/clang_cc1as.cpp",
"src/llvm/ar.cpp", "src/llvm/ar.cpp",
}; };
compiler.addCSourceFiles(.{ compiler.addCSourceFiles(.{
.files = &cpp_files, .files = &cpp_files,
.flags = &.{ .flags = &.{
@ -135,248 +78,325 @@ pub fn build(b: *std.Build) !void {
}, },
}); });
// const zlib = if (target.result.os.tag == .windows) "zstd.lib" else "libzstd.a"; compiler.root_module.addOptions("configuration", compiler_options);
// const llvm_libraries = [_][]const u8{ compiler.formatted_panics = print_stack_trace;
// "libLLVMAArch64AsmParser.a", compiler.root_module.unwind_tables = print_stack_trace;
// "libLLVMAArch64CodeGen.a", compiler.root_module.omit_frame_pointer = false;
// "libLLVMAArch64Desc.a", compiler.root_module.error_tracing = false;
// "libLLVMAArch64Disassembler.a", compiler.want_lto = false;
// "libLLVMAArch64Info.a",
// "libLLVMAArch64Utils.a",
// "libLLVMAggressiveInstCombine.a",
// "libLLVMAMDGPUAsmParser.a",
// "libLLVMAMDGPUCodeGen.a",
// "libLLVMAMDGPUDesc.a",
// "libLLVMAMDGPUDisassembler.a",
// "libLLVMAMDGPUInfo.a",
// "libLLVMAMDGPUTargetMCA.a",
// "libLLVMAMDGPUUtils.a",
// "libLLVMAnalysis.a",
// "libLLVMARMAsmParser.a",
// "libLLVMARMCodeGen.a",
// "libLLVMARMDesc.a",
// "libLLVMARMDisassembler.a",
// "libLLVMARMInfo.a",
// "libLLVMARMUtils.a",
// "libLLVMAsmParser.a",
// "libLLVMAsmPrinter.a",
// "libLLVMAVRAsmParser.a",
// "libLLVMAVRCodeGen.a",
// "libLLVMAVRDesc.a",
// "libLLVMAVRDisassembler.a",
// "libLLVMAVRInfo.a",
// "libLLVMBinaryFormat.a",
// "libLLVMBitReader.a",
// "libLLVMBitstreamReader.a",
// "libLLVMBitWriter.a",
// "libLLVMBPFAsmParser.a",
// "libLLVMBPFCodeGen.a",
// "libLLVMBPFDesc.a",
// "libLLVMBPFDisassembler.a",
// "libLLVMBPFInfo.a",
// "libLLVMCFGuard.a",
// "libLLVMCFIVerify.a",
// "libLLVMCodeGen.a",
// "libLLVMCodeGenTypes.a",
// "libLLVMCore.a",
// "libLLVMCoroutines.a",
// "libLLVMCoverage.a",
// "libLLVMDebugInfoBTF.a",
// "libLLVMDebugInfoCodeView.a",
// "libLLVMDebuginfod.a",
// "libLLVMDebugInfoDWARF.a",
// "libLLVMDebugInfoGSYM.a",
// "libLLVMDebugInfoLogicalView.a",
// "libLLVMDebugInfoMSF.a",
// "libLLVMDebugInfoPDB.a",
// "libLLVMDemangle.a",
// "libLLVMDiff.a",
// "libLLVMDlltoolDriver.a",
// "libLLVMDWARFLinker.a",
// "libLLVMDWARFLinkerParallel.a",
// "libLLVMDWP.a",
// "libLLVMExecutionEngine.a",
// "libLLVMExtensions.a",
// "libLLVMFileCheck.a",
// "libLLVMFrontendHLSL.a",
// "libLLVMFrontendOpenACC.a",
// "libLLVMFrontendOpenMP.a",
// "libLLVMFuzzerCLI.a",
// "libLLVMFuzzMutate.a",
// "libLLVMGlobalISel.a",
// "libLLVMHexagonAsmParser.a",
// "libLLVMHexagonCodeGen.a",
// "libLLVMHexagonDesc.a",
// "libLLVMHexagonDisassembler.a",
// "libLLVMHexagonInfo.a",
// "libLLVMInstCombine.a",
// "libLLVMInstrumentation.a",
// "libLLVMInterfaceStub.a",
// "libLLVMInterpreter.a",
// "libLLVMipo.a",
// "libLLVMIRPrinter.a",
// "libLLVMIRReader.a",
// "libLLVMJITLink.a",
// "libLLVMLanaiAsmParser.a",
// "libLLVMLanaiCodeGen.a",
// "libLLVMLanaiDesc.a",
// "libLLVMLanaiDisassembler.a",
// "libLLVMLanaiInfo.a",
// "libLLVMLibDriver.a",
// "libLLVMLineEditor.a",
// "libLLVMLinker.a",
// "libLLVMLoongArchAsmParser.a",
// "libLLVMLoongArchCodeGen.a",
// "libLLVMLoongArchDesc.a",
// "libLLVMLoongArchDisassembler.a",
// "libLLVMLoongArchInfo.a",
// "libLLVMLTO.a",
// "libLLVMMC.a",
// "libLLVMMCA.a",
// "libLLVMMCDisassembler.a",
// "libLLVMMCJIT.a",
// "libLLVMMCParser.a",
// "libLLVMMipsAsmParser.a",
// "libLLVMMipsCodeGen.a",
// "libLLVMMipsDesc.a",
// "libLLVMMipsDisassembler.a",
// "libLLVMMipsInfo.a",
// "libLLVMMIRParser.a",
// "libLLVMMSP430AsmParser.a",
// "libLLVMMSP430CodeGen.a",
// "libLLVMMSP430Desc.a",
// "libLLVMMSP430Disassembler.a",
// "libLLVMMSP430Info.a",
// "libLLVMNVPTXCodeGen.a",
// "libLLVMNVPTXDesc.a",
// "libLLVMNVPTXInfo.a",
// "libLLVMObjCARCOpts.a",
// "libLLVMObjCopy.a",
// "libLLVMObject.a",
// "libLLVMObjectYAML.a",
// "libLLVMOption.a",
// "libLLVMOrcJIT.a",
// "libLLVMOrcShared.a",
// "libLLVMOrcTargetProcess.a",
// "libLLVMPasses.a",
// "libLLVMPowerPCAsmParser.a",
// "libLLVMPowerPCCodeGen.a",
// "libLLVMPowerPCDesc.a",
// "libLLVMPowerPCDisassembler.a",
// "libLLVMPowerPCInfo.a",
// "libLLVMProfileData.a",
// "libLLVMRemarks.a",
// "libLLVMRISCVAsmParser.a",
// "libLLVMRISCVCodeGen.a",
// "libLLVMRISCVDesc.a",
// "libLLVMRISCVDisassembler.a",
// "libLLVMRISCVInfo.a",
// "libLLVMRISCVTargetMCA.a",
// "libLLVMRuntimeDyld.a",
// "libLLVMScalarOpts.a",
// "libLLVMSelectionDAG.a",
// "libLLVMSparcAsmParser.a",
// "libLLVMSparcCodeGen.a",
// "libLLVMSparcDesc.a",
// "libLLVMSparcDisassembler.a",
// "libLLVMSparcInfo.a",
// "libLLVMSupport.a",
// "libLLVMSymbolize.a",
// "libLLVMSystemZAsmParser.a",
// "libLLVMSystemZCodeGen.a",
// "libLLVMSystemZDesc.a",
// "libLLVMSystemZDisassembler.a",
// "libLLVMSystemZInfo.a",
// "libLLVMTableGen.a",
// "libLLVMTableGenCommon.a",
// "libLLVMTableGenGlobalISel.a",
// "libLLVMTarget.a",
// "libLLVMTargetParser.a",
// "libLLVMTextAPI.a",
// "libLLVMTransformUtils.a",
// "libLLVMVEAsmParser.a",
// "libLLVMVECodeGen.a",
// "libLLVMVectorize.a",
// "libLLVMVEDesc.a",
// "libLLVMVEDisassembler.a",
// "libLLVMVEInfo.a",
// "libLLVMWebAssemblyAsmParser.a",
// "libLLVMWebAssemblyCodeGen.a",
// "libLLVMWebAssemblyDesc.a",
// "libLLVMWebAssemblyDisassembler.a",
// "libLLVMWebAssemblyInfo.a",
// "libLLVMWebAssemblyUtils.a",
// "libLLVMWindowsDriver.a",
// "libLLVMWindowsManifest.a",
// "libLLVMX86AsmParser.a",
// "libLLVMX86CodeGen.a",
// "libLLVMX86Desc.a",
// "libLLVMX86Disassembler.a",
// "libLLVMX86Info.a",
// "libLLVMX86TargetMCA.a",
// "libLLVMXCoreCodeGen.a",
// "libLLVMXCoreDesc.a",
// "libLLVMXCoreDisassembler.a",
// "libLLVMXCoreInfo.a",
// "libLLVMXRay.a",
// //LLD
// "liblldCOFF.a",
// "liblldCommon.a",
// "liblldELF.a",
// "liblldMachO.a",
// "liblldMinGW.a",
// "liblldWasm.a",
// // Zlib
// zlib,
// "libz.a",
// // Clang
// "libclangAnalysis.a",
// "libclangAnalysisFlowSensitive.a",
// "libclangAnalysisFlowSensitiveModels.a",
// "libclangAPINotes.a",
// "libclangARCMigrate.a",
// "libclangAST.a",
// "libclangASTMatchers.a",
// "libclangBasic.a",
// "libclangCodeGen.a",
// "libclangCrossTU.a",
// "libclangDependencyScanning.a",
// "libclangDirectoryWatcher.a",
// "libclangDriver.a",
// "libclangDynamicASTMatchers.a",
// "libclangEdit.a",
// "libclangExtractAPI.a",
// "libclangFormat.a",
// "libclangFrontend.a",
// "libclangFrontendTool.a",
// "libclangHandleCXX.a",
// "libclangHandleLLVM.a",
// "libclangIndex.a",
// "libclangIndexSerialization.a",
// "libclangInterpreter.a",
// "libclangLex.a",
// "libclangParse.a",
// "libclangRewrite.a",
// "libclangRewriteFrontend.a",
// "libclangSema.a",
// "libclangSerialization.a",
// "libclangStaticAnalyzerCheckers.a",
// "libclangStaticAnalyzerCore.a",
// "libclangStaticAnalyzerFrontend.a",
// "libclangSupport.a",
// "libclangTooling.a",
// "libclangToolingASTDiff.a",
// "libclangToolingCore.a",
// "libclangToolingInclusions.a",
// "libclangToolingInclusionsStdlib.a",
// "libclangToolingRefactoring.a",
// "libclangToolingSyntax.a",
// "libclangTransformer.a",
// };
// for (llvm_libraries) |llvm_library| { compiler.linkLibC();
// compiler.addObjectFile(std.Build.LazyPath.relative(try std.mem.concat(b.allocator, u8, &.{ llvm_lib_dir, "/", llvm_library })));
// } if (static) {
compiler.linkage = .static;
compiler.linkLibCpp();
const prefix = "nat/cache";
const llvm_version = "17.0.6";
const llvm_path = b.option([]const u8, "llvm_path", "LLVM prefix path") orelse blk: {
assert(!self_hosted_ci);
if (third_party_ci or (!target.query.isNativeOs() or !target.query.isNativeCpu())) {
var llvm_directory = try std.ArrayListUnmanaged(u8).initCapacity(b.allocator, 128);
llvm_directory.appendSliceAssumeCapacity(prefix ++ "/");
llvm_directory.appendSliceAssumeCapacity("llvm-");
llvm_directory.appendSliceAssumeCapacity(llvm_version);
llvm_directory.appendSliceAssumeCapacity("-");
llvm_directory.appendSliceAssumeCapacity(@tagName(target.result.cpu.arch));
llvm_directory.appendSliceAssumeCapacity("-");
llvm_directory.appendSliceAssumeCapacity(@tagName(target.result.os.tag));
llvm_directory.appendSliceAssumeCapacity("-");
llvm_directory.appendSliceAssumeCapacity(@tagName(target.result.abi));
llvm_directory.appendSliceAssumeCapacity("-");
const cpu = if (std.mem.eql(u8, target.result.cpu.model.name, @tagName(target.result.cpu.arch))) "baseline" else target.result.cpu.model.name;
llvm_directory.appendSliceAssumeCapacity(cpu);
const url = try std.mem.concat(b.allocator, u8, &.{ "https://github.com/birth-software/fetch-llvm/releases/download/v", llvm_version, "/llvm-", llvm_version, "-", @tagName(target.result.cpu.arch), "-", @tagName(target.result.os.tag), "-", @tagName(target.result.abi), "-", cpu, ".tar.xz" });
var dir = std.fs.cwd().openDir(llvm_directory.items, .{}) catch {
const run = b.addRunArtifact(fetcher);
compiler.step.dependOn(&run.step);
run.addArg("-prefix");
run.addArg(prefix);
run.addArg("-url");
run.addArg(url);
break :blk llvm_directory.items;
};
dir.close();
break :blk llvm_directory.items;
} else {
const use_debug = b.option(bool, "use_debug", "This option enables the LLVM debug build in the development PC") orelse false;
break :blk switch (use_debug) {
true => "../llvm-17-static-debug",
false => "../llvm-17-static-release",
};
}
};
const llvm_include_dir = try std.mem.concat(b.allocator, u8, &.{ llvm_path, "/include" });
compiler.addIncludePath(std.Build.LazyPath.relative(llvm_include_dir));
const llvm_lib_dir = try std.mem.concat(b.allocator, u8, &.{ llvm_path, "/lib" });
const zstd = if (target.result.os.tag == .windows) "zstd.lib" else "libzstd.a";
const llvm_libraries = [_][]const u8{
"libLLVMAArch64AsmParser.a",
"libLLVMAArch64CodeGen.a",
"libLLVMAArch64Desc.a",
"libLLVMAArch64Disassembler.a",
"libLLVMAArch64Info.a",
"libLLVMAArch64Utils.a",
"libLLVMAggressiveInstCombine.a",
"libLLVMAMDGPUAsmParser.a",
"libLLVMAMDGPUCodeGen.a",
"libLLVMAMDGPUDesc.a",
"libLLVMAMDGPUDisassembler.a",
"libLLVMAMDGPUInfo.a",
"libLLVMAMDGPUTargetMCA.a",
"libLLVMAMDGPUUtils.a",
"libLLVMAnalysis.a",
"libLLVMARMAsmParser.a",
"libLLVMARMCodeGen.a",
"libLLVMARMDesc.a",
"libLLVMARMDisassembler.a",
"libLLVMARMInfo.a",
"libLLVMARMUtils.a",
"libLLVMAsmParser.a",
"libLLVMAsmPrinter.a",
"libLLVMAVRAsmParser.a",
"libLLVMAVRCodeGen.a",
"libLLVMAVRDesc.a",
"libLLVMAVRDisassembler.a",
"libLLVMAVRInfo.a",
"libLLVMBinaryFormat.a",
"libLLVMBitReader.a",
"libLLVMBitstreamReader.a",
"libLLVMBitWriter.a",
"libLLVMBPFAsmParser.a",
"libLLVMBPFCodeGen.a",
"libLLVMBPFDesc.a",
"libLLVMBPFDisassembler.a",
"libLLVMBPFInfo.a",
"libLLVMCFGuard.a",
"libLLVMCFIVerify.a",
"libLLVMCodeGen.a",
"libLLVMCodeGenTypes.a",
"libLLVMCore.a",
"libLLVMCoroutines.a",
"libLLVMCoverage.a",
"libLLVMDebugInfoBTF.a",
"libLLVMDebugInfoCodeView.a",
"libLLVMDebuginfod.a",
"libLLVMDebugInfoDWARF.a",
"libLLVMDebugInfoGSYM.a",
"libLLVMDebugInfoLogicalView.a",
"libLLVMDebugInfoMSF.a",
"libLLVMDebugInfoPDB.a",
"libLLVMDemangle.a",
"libLLVMDiff.a",
"libLLVMDlltoolDriver.a",
"libLLVMDWARFLinker.a",
"libLLVMDWARFLinkerParallel.a",
"libLLVMDWP.a",
"libLLVMExecutionEngine.a",
"libLLVMExtensions.a",
"libLLVMFileCheck.a",
"libLLVMFrontendHLSL.a",
"libLLVMFrontendOpenACC.a",
"libLLVMFrontendOpenMP.a",
"libLLVMFuzzerCLI.a",
"libLLVMFuzzMutate.a",
"libLLVMGlobalISel.a",
"libLLVMHexagonAsmParser.a",
"libLLVMHexagonCodeGen.a",
"libLLVMHexagonDesc.a",
"libLLVMHexagonDisassembler.a",
"libLLVMHexagonInfo.a",
"libLLVMInstCombine.a",
"libLLVMInstrumentation.a",
"libLLVMInterfaceStub.a",
"libLLVMInterpreter.a",
"libLLVMipo.a",
"libLLVMIRPrinter.a",
"libLLVMIRReader.a",
"libLLVMJITLink.a",
"libLLVMLanaiAsmParser.a",
"libLLVMLanaiCodeGen.a",
"libLLVMLanaiDesc.a",
"libLLVMLanaiDisassembler.a",
"libLLVMLanaiInfo.a",
"libLLVMLibDriver.a",
"libLLVMLineEditor.a",
"libLLVMLinker.a",
"libLLVMLoongArchAsmParser.a",
"libLLVMLoongArchCodeGen.a",
"libLLVMLoongArchDesc.a",
"libLLVMLoongArchDisassembler.a",
"libLLVMLoongArchInfo.a",
"libLLVMLTO.a",
"libLLVMMC.a",
"libLLVMMCA.a",
"libLLVMMCDisassembler.a",
"libLLVMMCJIT.a",
"libLLVMMCParser.a",
"libLLVMMipsAsmParser.a",
"libLLVMMipsCodeGen.a",
"libLLVMMipsDesc.a",
"libLLVMMipsDisassembler.a",
"libLLVMMipsInfo.a",
"libLLVMMIRParser.a",
"libLLVMMSP430AsmParser.a",
"libLLVMMSP430CodeGen.a",
"libLLVMMSP430Desc.a",
"libLLVMMSP430Disassembler.a",
"libLLVMMSP430Info.a",
"libLLVMNVPTXCodeGen.a",
"libLLVMNVPTXDesc.a",
"libLLVMNVPTXInfo.a",
"libLLVMObjCARCOpts.a",
"libLLVMObjCopy.a",
"libLLVMObject.a",
"libLLVMObjectYAML.a",
"libLLVMOption.a",
"libLLVMOrcJIT.a",
"libLLVMOrcShared.a",
"libLLVMOrcTargetProcess.a",
"libLLVMPasses.a",
"libLLVMPowerPCAsmParser.a",
"libLLVMPowerPCCodeGen.a",
"libLLVMPowerPCDesc.a",
"libLLVMPowerPCDisassembler.a",
"libLLVMPowerPCInfo.a",
"libLLVMProfileData.a",
"libLLVMRemarks.a",
"libLLVMRISCVAsmParser.a",
"libLLVMRISCVCodeGen.a",
"libLLVMRISCVDesc.a",
"libLLVMRISCVDisassembler.a",
"libLLVMRISCVInfo.a",
"libLLVMRISCVTargetMCA.a",
"libLLVMRuntimeDyld.a",
"libLLVMScalarOpts.a",
"libLLVMSelectionDAG.a",
"libLLVMSparcAsmParser.a",
"libLLVMSparcCodeGen.a",
"libLLVMSparcDesc.a",
"libLLVMSparcDisassembler.a",
"libLLVMSparcInfo.a",
"libLLVMSupport.a",
"libLLVMSymbolize.a",
"libLLVMSystemZAsmParser.a",
"libLLVMSystemZCodeGen.a",
"libLLVMSystemZDesc.a",
"libLLVMSystemZDisassembler.a",
"libLLVMSystemZInfo.a",
"libLLVMTableGen.a",
"libLLVMTableGenCommon.a",
"libLLVMTableGenGlobalISel.a",
"libLLVMTarget.a",
"libLLVMTargetParser.a",
"libLLVMTextAPI.a",
"libLLVMTransformUtils.a",
"libLLVMVEAsmParser.a",
"libLLVMVECodeGen.a",
"libLLVMVectorize.a",
"libLLVMVEDesc.a",
"libLLVMVEDisassembler.a",
"libLLVMVEInfo.a",
"libLLVMWebAssemblyAsmParser.a",
"libLLVMWebAssemblyCodeGen.a",
"libLLVMWebAssemblyDesc.a",
"libLLVMWebAssemblyDisassembler.a",
"libLLVMWebAssemblyInfo.a",
"libLLVMWebAssemblyUtils.a",
"libLLVMWindowsDriver.a",
"libLLVMWindowsManifest.a",
"libLLVMX86AsmParser.a",
"libLLVMX86CodeGen.a",
"libLLVMX86Desc.a",
"libLLVMX86Disassembler.a",
"libLLVMX86Info.a",
"libLLVMX86TargetMCA.a",
"libLLVMXCoreCodeGen.a",
"libLLVMXCoreDesc.a",
"libLLVMXCoreDisassembler.a",
"libLLVMXCoreInfo.a",
"libLLVMXRay.a",
//LLD
"liblldCOFF.a",
"liblldCommon.a",
"liblldELF.a",
"liblldMachO.a",
"liblldMinGW.a",
"liblldWasm.a",
// Zlib
"libz.a",
// Zstd
zstd,
// Clang
"libclangAnalysis.a",
"libclangAnalysisFlowSensitive.a",
"libclangAnalysisFlowSensitiveModels.a",
"libclangAPINotes.a",
"libclangARCMigrate.a",
"libclangAST.a",
"libclangASTMatchers.a",
"libclangBasic.a",
"libclangCodeGen.a",
"libclangCrossTU.a",
"libclangDependencyScanning.a",
"libclangDirectoryWatcher.a",
"libclangDriver.a",
"libclangDynamicASTMatchers.a",
"libclangEdit.a",
"libclangExtractAPI.a",
"libclangFormat.a",
"libclangFrontend.a",
"libclangFrontendTool.a",
"libclangHandleCXX.a",
"libclangHandleLLVM.a",
"libclangIndex.a",
"libclangIndexSerialization.a",
"libclangInterpreter.a",
"libclangLex.a",
"libclangParse.a",
"libclangRewrite.a",
"libclangRewriteFrontend.a",
"libclangSema.a",
"libclangSerialization.a",
"libclangStaticAnalyzerCheckers.a",
"libclangStaticAnalyzerCore.a",
"libclangStaticAnalyzerFrontend.a",
"libclangSupport.a",
"libclangTooling.a",
"libclangToolingASTDiff.a",
"libclangToolingCore.a",
"libclangToolingInclusions.a",
"libclangToolingInclusionsStdlib.a",
"libclangToolingRefactoring.a",
"libclangToolingSyntax.a",
"libclangTransformer.a",
};
for (llvm_libraries) |llvm_library| {
compiler.addObjectFile(std.Build.LazyPath.relative(try std.mem.concat(b.allocator, u8, &.{ llvm_lib_dir, "/", llvm_library })));
}
} else {
compiler.addObjectFile(.{ .cwd_relative = "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/libstdc++.so" });
compiler.addIncludePath(.{ .cwd_relative = "/usr/include" });
compiler.addIncludePath(.{ .cwd_relative = "/usr/include/c++/13.2.1" });
compiler.addIncludePath(.{ .cwd_relative = "/usr/include/c++/13.2.1/x86_64-pc-linux-gnu" });
compiler.addLibraryPath(.{ .cwd_relative = "/usr/lib" });
compiler.linkSystemLibrary("LLVM");
compiler.linkSystemLibrary("clang-cpp");
compiler.linkSystemLibrary("lldCommon");
compiler.linkSystemLibrary("lldCOFF");
compiler.linkSystemLibrary("lldELF");
compiler.linkSystemLibrary("lldMachO");
compiler.linkSystemLibrary("lldWasm");
compiler.linkSystemLibrary("unwind");
}
const install_exe = b.addInstallArtifact(compiler, .{}); const install_exe = b.addInstallArtifact(compiler, .{});
b.getInstallStep().dependOn(&install_exe.step); b.getInstallStep().dependOn(&install_exe.step);
@ -435,23 +455,6 @@ pub fn build(b: *std.Build) !void {
debug_command.addArgs(args); debug_command.addArgs(args);
test_command.addArgs(args); test_command.addArgs(args);
} }
// const tests = b.addTest(.{
// .name = "nat_test",
// .root_source_file = .{ .path = "bootstrap/main.zig" },
// .target = target,
// .optimize = optimization,
// });
// tests.root_module.addOptions("configuration", compiler_options);
// tests.formatted_panics = print_stack_trace;
// tests.root_module.unwind_tables = print_stack_trace;
// tests.root_module.omit_frame_pointer = false;
// tests.want_lto = false;
//
//
// const run_tests = b.addRunArtifact(tests);
// b.installArtifact(tests);
// run_tests.step.dependOn(b.getInstallStep());
const run_step = b.step("run", "Test the Nativity compiler"); const run_step = b.step("run", "Test the Nativity compiler");
run_step.dependOn(&run_command.step); run_step.dependOn(&run_command.step);
@ -460,10 +463,6 @@ pub fn build(b: *std.Build) !void {
const test_step = b.step("test", "Test the Nativity compiler"); const test_step = b.step("test", "Test the Nativity compiler");
test_step.dependOn(&test_command.step); test_step.dependOn(&test_command.step);
// const test_lib = b.step("test_lib", "Test the Nativity Zig library");
// test_lib.dependOn(&run_tests.step);
const test_all = b.step("test_all", "Test all"); const test_all = b.step("test_all", "Test all");
// test_all.dependOn(&run_tests.step);
test_all.dependOn(&test_command.step); test_all.dependOn(&test_command.step);
} }