Created
August 10, 2024 17:21
-
-
Save kassane/7d8f498a64f908b4d72bc2f019b46059 to your computer and use it in GitHub Desktop.
Build c3c (v0.62.x) compiler using `build.zig` (bootstrap)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //! Zig v0.13.0 or master | |
| //! Recommended `-Doptimize=ReleaseSmall` or `-Doptimize=ReleaseFast` (disabling sanitizer) | |
| const std = @import("std"); | |
| pub fn build(b: *std.Build) void { | |
| const target = b.standardTargetOptions(.{}); | |
| const optimize = b.standardOptimizeOption(.{}); | |
| // -Duse_tb | |
| const use_tb = b.option(bool, "use_tb", "Enable the tild backend") orelse false; | |
| const c3c = b.addExecutable(.{ | |
| .name = "c3c", | |
| .target = target, | |
| .optimize = optimize, | |
| }); | |
| c3c.addIncludePath(b.path("wrapper/include")); | |
| c3c.addIncludePath(b.path("dependencies/miniz")); | |
| c3c.addIncludePath(b.path("src")); | |
| // espressif-LLVM/18.0.2 | |
| // https://github.com/kassane/zig-espressif-bootstrap/releases/download/0.14.0-xtensa-dev/llvm-libs+zstd+zlib-x86_64-linux-musl-baseline.tar.xz | |
| c3c.addLibraryPath(.{ | |
| .cwd_relative = "../zig-espressif-bootstrap/out/x86_64-linux-musl-baseline/lib", | |
| }); | |
| c3c.addIncludePath(.{ | |
| .cwd_relative = "../zig-espressif-bootstrap/out/x86_64-linux-musl-baseline/include", | |
| }); | |
| c3c.addCSourceFiles(.{ | |
| .root = b.path("src"), | |
| .files = src, | |
| }); | |
| c3c.addCSourceFiles(.{ | |
| .root = b.path("dependencies/miniz"), | |
| .files = &.{ | |
| "miniz.c", | |
| }, | |
| }); | |
| c3c.addCSourceFiles(.{ | |
| .root = b.path("wrapper/src"), | |
| .files = &.{ | |
| "wrapper.cpp", | |
| }, | |
| }); | |
| if (use_tb) { | |
| c3c.addCSourceFiles(.{ | |
| .root = b.path("src"), | |
| .files = tilde_src, | |
| }); | |
| } | |
| // linking | |
| c3c.linkSystemLibrary("z"); | |
| c3c.linkSystemLibrary("zstd"); | |
| for (clang_libs) |lib_name| { | |
| c3c.linkSystemLibrary(lib_name); | |
| } | |
| for (lld_libs) |lib_name| { | |
| c3c.linkSystemLibrary(lib_name); | |
| } | |
| for (llvm_libs) |lib_name| { | |
| c3c.linkSystemLibrary(lib_name); | |
| } | |
| if (c3c.rootModuleTarget().abi != .msvc) { | |
| c3c.linkLibCpp(); // libcxx + libunwind (statically linked) (mingw/glibc/musl/darwin/bsd) | |
| } else c3c.linkLibC(); // search msvc runtime + winsdk | |
| b.installArtifact(c3c); | |
| } | |
| const src = &.{ | |
| "build/build_options.c", | |
| "build/builder.c", | |
| "build/common_build.c", | |
| "build/libraries.c", | |
| "build/project.c", | |
| "build/project_creation.c", | |
| "compiler/abi/c_abi.c", | |
| "compiler/abi/c_abi_aarch64.c", | |
| "compiler/abi/c_abi_riscv.c", | |
| "compiler/abi/c_abi_wasm.c", | |
| "compiler/abi/c_abi_win64.c", | |
| "compiler/abi/c_abi_x64.c", | |
| "compiler/abi/c_abi_x86.c", | |
| "compiler/asm_target.c", | |
| "compiler/ast.c", | |
| "compiler/bigint.c", | |
| "compiler/codegen_asm.c", | |
| "compiler/codegen_general.c", | |
| "compiler/compiler.c", | |
| "compiler/context.c", | |
| "compiler/copying.c", | |
| "compiler/decltable.c", | |
| "compiler/diagnostics.c", | |
| "compiler/expr.c", | |
| "compiler/float.c", | |
| "compiler/headers.c", | |
| "compiler/json_output.c", | |
| "compiler/lexer.c", | |
| "compiler/linker.c", | |
| "compiler/llvm_codegen.c", | |
| "compiler/llvm_codegen_builtins.c", | |
| "compiler/llvm_codegen_debug_info.c", | |
| "compiler/llvm_codegen_expr.c", | |
| "compiler/llvm_codegen_function.c", | |
| "compiler/llvm_codegen_instr.c", | |
| "compiler/llvm_codegen_module.c", | |
| "compiler/llvm_codegen_stmt.c", | |
| "compiler/llvm_codegen_storeload.c", | |
| "compiler/llvm_codegen_type.c", | |
| "compiler/llvm_codegen_value.c", | |
| "compiler/mac_support.c", | |
| "compiler/module.c", | |
| "compiler/number.c", | |
| "compiler/parse_expr.c", | |
| "compiler/parse_global.c", | |
| "compiler/parse_stmt.c", | |
| "compiler/parser.c", | |
| "compiler/sema_asm.c", | |
| "compiler/sema_builtins.c", | |
| "compiler/sema_casts.c", | |
| "compiler/sema_decls.c", | |
| "compiler/sema_errors.c", | |
| "compiler/sema_expr.c", | |
| "compiler/sema_initializers.c", | |
| "compiler/sema_liveness.c", | |
| "compiler/sema_name_resolution.c", | |
| "compiler/sema_passes.c", | |
| "compiler/sema_stmts.c", | |
| "compiler/sema_types.c", | |
| "compiler/semantic_analyser.c", | |
| "compiler/source_file.c", | |
| "compiler/subprocess.c", | |
| "compiler/symtab.c", | |
| "compiler/target.c", | |
| "compiler/tokens.c", | |
| "compiler/types.c", | |
| "compiler/windows_support.c", | |
| "compiler_tests/benchmark.c", | |
| "compiler_tests/shorttest.c", | |
| "compiler_tests/tests.c", | |
| "main.c", | |
| "utils/cpus.c", | |
| "utils/errors.c", | |
| "utils/file_utils.c", | |
| "utils/find_msvc.c", | |
| "utils/http.c", | |
| "utils/json.c", | |
| "utils/malloc.c", | |
| "utils/stringutils.c", | |
| "utils/taskqueue.c", | |
| "utils/time.c", | |
| "utils/unzipper.c", | |
| "utils/vmem.c", | |
| "utils/whereami.c", | |
| }; | |
| const tilde_src = &.{ | |
| "compiler/tilde_codegen.c", | |
| "compiler/tilde_codegen_abi.c", | |
| "compiler/tilde_codegen_expr.c", | |
| "compiler/tilde_codegen_instr.c", | |
| "compiler/tilde_codegen_stmt.c", | |
| "compiler/tilde_codegen_storeload.c", | |
| "compiler/tilde_codegen_type.c", | |
| "compiler/tilde_codegen_value.c", | |
| }; | |
| // Based on Zig bootstrap | |
| const clang_libs = [_][]const u8{ | |
| "clangFrontendTool", | |
| "clangCodeGen", | |
| "clangFrontend", | |
| "clangDriver", | |
| "clangSerialization", | |
| "clangSema", | |
| "clangStaticAnalyzerFrontend", | |
| "clangStaticAnalyzerCheckers", | |
| "clangStaticAnalyzerCore", | |
| "clangAnalysis", | |
| "clangASTMatchers", | |
| "clangAST", | |
| "clangParse", | |
| "clangSema", | |
| "clangAPINotes", | |
| "clangBasic", | |
| "clangEdit", | |
| "clangLex", | |
| "clangARCMigrate", | |
| "clangRewriteFrontend", | |
| "clangRewrite", | |
| "clangCrossTU", | |
| "clangIndex", | |
| "clangToolingCore", | |
| "clangExtractAPI", | |
| "clangSupport", | |
| }; | |
| const lld_libs = [_][]const u8{ | |
| "lldMinGW", | |
| "lldELF", | |
| "lldCOFF", | |
| "lldWasm", | |
| "lldMachO", | |
| "lldCommon", | |
| }; | |
| // This list can be re-generated with `llvm-config --libfiles` and then | |
| // reformatting using your favorite text editor. Note we do not execute | |
| // `llvm-config` here because we are cross compiling. Also omit LLVMTableGen | |
| // from these libs. | |
| const llvm_libs = [_][]const u8{ | |
| "LLVMWindowsManifest", | |
| "LLVMXRay", | |
| "LLVMLibDriver", | |
| "LLVMDlltoolDriver", | |
| "LLVMTextAPIBinaryReader", | |
| "LLVMCoverage", | |
| "LLVMLineEditor", | |
| "LLVMXCoreDisassembler", | |
| "LLVMXCoreCodeGen", | |
| "LLVMXCoreDesc", | |
| "LLVMXCoreInfo", | |
| "LLVMX86TargetMCA", | |
| "LLVMX86Disassembler", | |
| "LLVMX86AsmParser", | |
| "LLVMX86CodeGen", | |
| "LLVMX86Desc", | |
| "LLVMX86Info", | |
| "LLVMWebAssemblyDisassembler", | |
| "LLVMWebAssemblyAsmParser", | |
| "LLVMWebAssemblyCodeGen", | |
| "LLVMWebAssemblyUtils", | |
| "LLVMWebAssemblyDesc", | |
| "LLVMWebAssemblyInfo", | |
| "LLVMVEDisassembler", | |
| "LLVMVEAsmParser", | |
| "LLVMVECodeGen", | |
| "LLVMVEDesc", | |
| "LLVMVEInfo", | |
| "LLVMSystemZDisassembler", | |
| "LLVMSystemZAsmParser", | |
| "LLVMSystemZCodeGen", | |
| "LLVMSystemZDesc", | |
| "LLVMSystemZInfo", | |
| "LLVMSparcDisassembler", | |
| "LLVMSparcAsmParser", | |
| "LLVMSparcCodeGen", | |
| "LLVMSparcDesc", | |
| "LLVMSparcInfo", | |
| "LLVMRISCVTargetMCA", | |
| "LLVMRISCVDisassembler", | |
| "LLVMRISCVAsmParser", | |
| "LLVMRISCVCodeGen", | |
| "LLVMRISCVDesc", | |
| "LLVMRISCVInfo", | |
| "LLVMPowerPCDisassembler", | |
| "LLVMPowerPCAsmParser", | |
| "LLVMPowerPCCodeGen", | |
| "LLVMPowerPCDesc", | |
| "LLVMPowerPCInfo", | |
| "LLVMNVPTXCodeGen", | |
| "LLVMNVPTXDesc", | |
| "LLVMNVPTXInfo", | |
| "LLVMMSP430Disassembler", | |
| "LLVMMSP430AsmParser", | |
| "LLVMMSP430CodeGen", | |
| "LLVMMSP430Desc", | |
| "LLVMMSP430Info", | |
| "LLVMMipsDisassembler", | |
| "LLVMMipsAsmParser", | |
| "LLVMMipsCodeGen", | |
| "LLVMMipsDesc", | |
| "LLVMMipsInfo", | |
| "LLVMLoongArchDisassembler", | |
| "LLVMLoongArchAsmParser", | |
| "LLVMLoongArchCodeGen", | |
| "LLVMLoongArchDesc", | |
| "LLVMLoongArchInfo", | |
| "LLVMLanaiDisassembler", | |
| "LLVMLanaiCodeGen", | |
| "LLVMLanaiAsmParser", | |
| "LLVMLanaiDesc", | |
| "LLVMLanaiInfo", | |
| "LLVMHexagonDisassembler", | |
| "LLVMHexagonCodeGen", | |
| "LLVMHexagonAsmParser", | |
| "LLVMHexagonDesc", | |
| "LLVMHexagonInfo", | |
| "LLVMBPFDisassembler", | |
| "LLVMBPFAsmParser", | |
| "LLVMBPFCodeGen", | |
| "LLVMBPFDesc", | |
| "LLVMBPFInfo", | |
| "LLVMAVRDisassembler", | |
| "LLVMAVRAsmParser", | |
| "LLVMAVRCodeGen", | |
| "LLVMAVRDesc", | |
| "LLVMAVRInfo", | |
| "LLVMARMDisassembler", | |
| "LLVMARMAsmParser", | |
| "LLVMARMCodeGen", | |
| "LLVMARMDesc", | |
| "LLVMARMUtils", | |
| "LLVMARMInfo", | |
| "LLVMAMDGPUTargetMCA", | |
| "LLVMAMDGPUDisassembler", | |
| "LLVMAMDGPUAsmParser", | |
| "LLVMAMDGPUCodeGen", | |
| "LLVMAMDGPUDesc", | |
| "LLVMAMDGPUUtils", | |
| "LLVMAMDGPUInfo", | |
| "LLVMAArch64Disassembler", | |
| "LLVMAArch64AsmParser", | |
| "LLVMAArch64CodeGen", | |
| "LLVMAArch64Desc", | |
| "LLVMAArch64Utils", | |
| "LLVMAArch64Info", | |
| "LLVMOrcDebugging", | |
| "LLVMOrcJIT", | |
| "LLVMWindowsDriver", | |
| "LLVMMCJIT", | |
| "LLVMJITLink", | |
| "LLVMInterpreter", | |
| "LLVMExecutionEngine", | |
| "LLVMRuntimeDyld", | |
| "LLVMOrcTargetProcess", | |
| "LLVMOrcShared", | |
| "LLVMDWP", | |
| "LLVMDebugInfoLogicalView", | |
| "LLVMDebugInfoGSYM", | |
| "LLVMOption", | |
| "LLVMObjectYAML", | |
| "LLVMObjCopy", | |
| "LLVMMCA", | |
| "LLVMMCDisassembler", | |
| "LLVMLTO", | |
| "LLVMPasses", | |
| "LLVMHipStdPar", | |
| "LLVMCFGuard", | |
| "LLVMCoroutines", | |
| "LLVMipo", | |
| "LLVMVectorize", | |
| "LLVMLinker", | |
| "LLVMInstrumentation", | |
| "LLVMFrontendOpenMP", | |
| "LLVMFrontendOffloading", | |
| "LLVMFrontendOpenACC", | |
| "LLVMFrontendHLSL", | |
| "LLVMFrontendDriver", | |
| "LLVMExtensions", | |
| "LLVMDWARFLinkerParallel", | |
| "LLVMDWARFLinkerClassic", | |
| "LLVMDWARFLinker", | |
| "LLVMGlobalISel", | |
| "LLVMMIRParser", | |
| "LLVMAsmPrinter", | |
| "LLVMSelectionDAG", | |
| "LLVMCodeGen", | |
| "LLVMTarget", | |
| "LLVMObjCARCOpts", | |
| "LLVMCodeGenTypes", | |
| "LLVMIRPrinter", | |
| "LLVMInterfaceStub", | |
| "LLVMFileCheck", | |
| "LLVMFuzzMutate", | |
| "LLVMScalarOpts", | |
| "LLVMInstCombine", | |
| "LLVMAggressiveInstCombine", | |
| "LLVMTransformUtils", | |
| "LLVMBitWriter", | |
| "LLVMAnalysis", | |
| "LLVMProfileData", | |
| "LLVMSymbolize", | |
| "LLVMDebugInfoBTF", | |
| "LLVMDebugInfoPDB", | |
| "LLVMDebugInfoMSF", | |
| "LLVMDebugInfoDWARF", | |
| "LLVMObject", | |
| "LLVMTextAPI", | |
| "LLVMMCParser", | |
| "LLVMIRReader", | |
| "LLVMAsmParser", | |
| "LLVMMC", | |
| "LLVMDebugInfoCodeView", | |
| "LLVMBitReader", | |
| "LLVMFuzzerCLI", | |
| "LLVMCore", | |
| "LLVMRemarks", | |
| "LLVMBitstreamReader", | |
| "LLVMBinaryFormat", | |
| "LLVMTargetParser", | |
| "LLVMSupport", | |
| "LLVMDemangle", | |
| "LLVMXtensaAsmParser", | |
| "LLVMXtensaDesc", | |
| "LLVMXtensaInfo", | |
| "LLVMXtensaCodeGen", | |
| "LLVMXtensaDisassembler", | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment