Merge pull request #114 from birth-software/can-switch-between-dynamic-and-static

Implement switching between dynamic and static
This commit is contained in:
David 2024-03-13 20:15:22 +01:00 committed by GitHub
commit 1a1e0e6da6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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

669
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,8 +19,80 @@ pub fn build(b: *std.Build) !void {
.optimize = .Debug, .optimize = .Debug,
.single_threaded = true, .single_threaded = true,
}); });
const llvm_version = "17.0.6";
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) {
else => target_query.abi,
.linux => b: {
const os_release = try std.fs.cwd().readFileAlloc(b.allocator, "/etc/os-release", 0xffff);
std.debug.print("/etc/os-release:\n```\n{s}\n```\n", .{os_release});
const attribute_name = "ID=";
const i = std.mem.indexOf(u8, os_release, attribute_name) orelse unreachable;
const maybe_start_quote_index = i + attribute_name.len;
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);
const compiler = b.addExecutable(.{
.name = "nat",
.root_source_file = .{ .path = "bootstrap/main.zig" },
.target = target,
.optimize = optimization,
});
const cpp_files = .{
"src/llvm/llvm.cpp",
"src/llvm/lld.cpp",
"src/llvm/clang_main.cpp",
"src/llvm/clang_cc1.cpp",
"src/llvm/clang_cc1as.cpp",
"src/llvm/ar.cpp",
};
compiler.addCSourceFiles(.{
.files = &cpp_files,
.flags = &.{
"-g",
"-std=c++17",
"-D__STDC_CONSTANT_MACROS",
"-D__STDC_FORMAT_MACROS",
"-D__STDC_LIMIT_MACROS",
"-D_GNU_SOURCE",
"-fvisibility-inlines-hidden",
"-fno-exceptions",
"-fno-rtti",
"-Werror=type-limits",
"-Wno-missing-braces",
"-Wno-comment",
},
});
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();
if (static) {
compiler.linkage = .static;
compiler.linkLibCpp();
const prefix = "nat/cache"; const prefix = "nat/cache";
const llvm_version = "17.0.6";
const llvm_path = b.option([]const u8, "llvm_path", "LLVM prefix path") orelse blk: { const llvm_path = b.option([]const u8, "llvm_path", "LLVM prefix path") orelse blk: {
assert(!self_hosted_ci); assert(!self_hosted_ci);
if (third_party_ci or (!target.query.isNativeOs() or !target.query.isNativeCpu())) { if (third_party_ci or (!target.query.isNativeOs() or !target.query.isNativeCpu())) {
@ -80,7 +110,7 @@ pub fn build(b: *std.Build) !void {
const cpu = if (std.mem.eql(u8, target.result.cpu.model.name, @tagName(target.result.cpu.arch))) "baseline" else target.result.cpu.model.name; 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); 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"}); 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 { var dir = std.fs.cwd().openDir(llvm_directory.items, .{}) catch {
const run = b.addRunArtifact(fetcher); const run = b.addRunArtifact(fetcher);
@ -105,278 +135,268 @@ pub fn build(b: *std.Build) !void {
}; };
const llvm_include_dir = try std.mem.concat(b.allocator, u8, &.{ llvm_path, "/include" }); const llvm_include_dir = try std.mem.concat(b.allocator, u8, &.{ llvm_path, "/include" });
_ = llvm_include_dir; // autofix compiler.addIncludePath(std.Build.LazyPath.relative(llvm_include_dir));
const llvm_lib_dir = try std.mem.concat(b.allocator, u8, &.{ llvm_path, "/lib" }); 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 zstd = if (target.result.os.tag == .windows) "zstd.lib" else "libzstd.a";
const cpp_files = .{
"src/llvm/llvm.cpp", const llvm_libraries = [_][]const u8{
"src/llvm/lld.cpp", "libLLVMAArch64AsmParser.a",
"src/llvm/clang_main.cpp", "libLLVMAArch64CodeGen.a",
"src/llvm/clang_cc1.cpp", "libLLVMAArch64Desc.a",
"src/llvm/clang_cc1as.cpp", "libLLVMAArch64Disassembler.a",
"src/llvm/ar.cpp", "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",
}; };
compiler.addCSourceFiles(.{
.files = &cpp_files,
.flags = &.{
"-g",
"-std=c++17",
"-D__STDC_CONSTANT_MACROS",
"-D__STDC_FORMAT_MACROS",
"-D__STDC_LIMIT_MACROS",
"-D_GNU_SOURCE",
"-fvisibility-inlines-hidden",
"-fno-exceptions",
"-fno-rtti",
"-Werror=type-limits",
"-Wno-missing-braces",
"-Wno-comment",
},
});
// const zlib = if (target.result.os.tag == .windows) "zstd.lib" else "libzstd.a"; for (llvm_libraries) |llvm_library| {
// const llvm_libraries = [_][]const u8{ compiler.addObjectFile(std.Build.LazyPath.relative(try std.mem.concat(b.allocator, u8, &.{ llvm_lib_dir, "/", llvm_library })));
// "libLLVMAArch64AsmParser.a", }
// "libLLVMAArch64CodeGen.a", } else {
// "libLLVMAArch64Desc.a", compiler.addObjectFile(.{ .cwd_relative = "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/libstdc++.so" });
// "libLLVMAArch64Disassembler.a", compiler.addIncludePath(.{ .cwd_relative = "/usr/include" });
// "libLLVMAArch64Info.a", compiler.addIncludePath(.{ .cwd_relative = "/usr/include/c++/13.2.1" });
// "libLLVMAArch64Utils.a", compiler.addIncludePath(.{ .cwd_relative = "/usr/include/c++/13.2.1/x86_64-pc-linux-gnu" });
// "libLLVMAggressiveInstCombine.a", compiler.addLibraryPath(.{ .cwd_relative = "/usr/lib" });
// "libLLVMAMDGPUAsmParser.a", compiler.linkSystemLibrary("LLVM");
// "libLLVMAMDGPUCodeGen.a", compiler.linkSystemLibrary("clang-cpp");
// "libLLVMAMDGPUDesc.a", compiler.linkSystemLibrary("lldCommon");
// "libLLVMAMDGPUDisassembler.a", compiler.linkSystemLibrary("lldCOFF");
// "libLLVMAMDGPUInfo.a", compiler.linkSystemLibrary("lldELF");
// "libLLVMAMDGPUTargetMCA.a", compiler.linkSystemLibrary("lldMachO");
// "libLLVMAMDGPUUtils.a", compiler.linkSystemLibrary("lldWasm");
// "libLLVMAnalysis.a", compiler.linkSystemLibrary("unwind");
// "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.addObjectFile(std.Build.LazyPath.relative(try std.mem.concat(b.allocator, u8, &.{ llvm_lib_dir, "/", llvm_library })));
// }
const install_exe = b.addInstallArtifact(compiler, .{}); const install_exe = b.addInstallArtifact(compiler, .{});
b.getInstallStep().dependOn(&install_exe.step); b.getInstallStep().dependOn(&install_exe.step);
@ -436,23 +456,6 @@ pub fn build(b: *std.Build) !void {
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);
const debug_step = b.step("debug", "Debug the Nativity compiler"); const debug_step = b.step("debug", "Debug the Nativity compiler");
@ -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);
} }