尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Odin 语言编译器从源码构建指南:跨平台环境准备、编译流程与 ODIN_ROOT 配置

Odin 语言编译器从源码构建指南:跨平台环境准备、编译流程与 ODIN_ROOT 配置 Odin 语言编译器从源码构建指南跨平台环境准备、编译流程与 ODIN_ROOT 配置【免费下载链接】OdinOdin Programming Language项目地址: https://gitcode.com/GitHub_Trending/od/Odin导读本文以仓库 bin/README.md 为基础系统讲解 Odin 编程语言编译器从源码构建的完整流程包括 Windows / macOS / GNU/Linux 三大平台的依赖安装步骤、build.bat与make两种构建入口、构建成功后自动运行的示例程序以及 *Nix 系统下core/shared库集合定位与ODIN_ROOT环境变量的关键配置。读完本文你将掌握在任意受支持平台上从零构建 Odin 编译器、判断构建产物正确性、并正确配置运行环境使编译器可被任意目录调用。平台支持与依赖总览按照 bin/README.md 的说明Odin 编译器当前支持x86-64amd64与 ARM64aarch64两种 64 位架构并且代码生成依赖 LLVMOdin 使用 LLVM 作为后端进行机器码生成链接依赖外部链接器编译产物需要调用系统或随附的链接器完成最终可执行文件的生成。这两点决定了每个平台都需要先准备好对应的 LLVM 工具链与链接器环境然后才能进入编译器的构建步骤。从仓库 bin/ 目录的内容也可以印证这一点其中随附了 Windows 平台构建所需的LLVM-C.lib、lld-link.exe、radlink.exe、wasm-ld.exe以及 nasm 汇编器bin/llvm/windows/ 与 bin/nasm/windows/说明 LLVM 库与外部链接器是编译器正常运行所依赖的核心组件。WindowsVisual Studio 与 x64 命令行环境在 Windows 上构建 Odin 编译器前提是安装Visual StudioMSVC 2010 或更高版本用于提供链接器。文档给出了两种打开有效命令行环境的方式基础方式运行 VS 2017 自带的x64 Native Tools Command Prompt for VS2017快捷方式进阶方式在空白cmd会话中执行vcvarsall.bat x64。这一要求在仓库的 build.bat 中有对应的强制校验逻辑脚本开头通过where /Q cl.exe检测 MSVC 编译器是否已在环境中若不存在则调用vswhere.exe定位 Visual Studio 安装路径并执行vsdevcmd.bat -archx64 -host_archx64自动初始化环境随后还会检查VSCMD_ARG_TGT_ARCH是否为x64若目标架构不是 x64 会直接报错退出除非显式设置ODIN_IGNORE_MSVC_CHECK环境变量跳过该检查。由此可见64 位 MSVC 环境是 Windows 构建的硬性前提。准备好环境后在仓库根目录直接运行build.bat该脚本会完成以下工作详见 build.bat通过git或 misc/get-date.c 生成版本信息ODIN_VERSION_RAW、GIT_SHA并写入misc/odin.rc资源文件使用clMSVC编译 src/main.cpp 与 src/libtommath.cpp链接bin\llvm\windows\LLVM-C.lib等库输出odin.exe通过mt嵌入 misc/odin.manifest 清单调用 build_vendor.bat 构建 vendor 库若为 Debug 构建自动运行示例程序见下文构建成功后的自动验证一节。macOSHomebrew LLVM 与 Xcode 链接器macOS 上需要准备两部分依赖显式安装 LLVM执行brew install llvm安装 Xcode用于链接Xcode 提供系统的链接工具链将 LLVM 二进制与链接器加入$PATH环境变量。之所以强调显式安装 LLVM是因为 macOS 自带的工具链中通常不包含可供 Odin 直接使用的 LLVM。仓库的 build_odin.sh 对 macOS 场景做了专门适配由于 Homebrew 官方不建议将 LLVM 直接加入$PATH脚本会优先通过brew --prefix llvmV查找已安装的版本化 LLVM支持22 21 20 19 18 17这些版本最低要求 LLVM 17推荐版本为 22并定位其bin/llvm-config作为配置来源在 Darwin 分支中还会通过xcrun --sdk macosx --show-sdk-path或/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk自动探测 SDK 路径并注入--sysroot链接参数则追加-liconv -ldl -framework System -lLLVM。GNU/LinuxClang 与 LLVM 的安装GNU/Linux 上的准备步骤为安装 Clang用于链接将 LLVM 二进制与链接器加入$PATH环境变量。在 build_odin.sh 中Linux 分支会使用$LLVM_CONFIG --cxxflags --ldflags与$LLVM_CONFIG --libs core native passes arm aarch64 x86 webassembly riscv --system-libs --libfiles收集编译与链接参数——注意这里同时启用了 ARM、AArch64、x86、WebAssembly、RISC-V 等多个后端的库与文档所述的多架构x86-64 / ARM64支持目标一致链接时还会加入-Wl,-rpath$ORIGIN使生成的编译器可执行文件能够相对自身位置找到libLLVM*.so。若系统中找不到受支持的llvm-config脚本会依据/etc/os-release中的发行版信息给出安装建议Debian/Ubuntu 系建议从 LLVM 官方 apt 源安装 LLVM 22Fedora/CentOS 系建议通过 COPR 仓库安装。也可通过设置LLVM_CONFIG环境变量显式指定llvm-config路径来跳过自动探测。构建编译器build.bat 与 make依赖准备完毕后即可执行构建Windows运行build.batLinux / macOS运行make两者成功完成后都会自动运行示例程序demo以验证构建产物。make 的目标与构建模式Makefile 定义了多个目标底层均委托给 build_odin.sh目标底层调用说明default默认./build_odin.shdebug构建 Debug 版编译器debug./build_odin.sh debug显式构建 Debug 版编译参数含-grelease./build_odin.sh release构建 Release 版编译参数含-O3release-native/release_native./build_odin.sh release-nativeRelease 且针对本机微架构优化ARM 上使用-mcpunativex86 上使用-marchnativenightly./build_odin.sh nightly构建带-DNIGHTLY的 nightly 版本同样启用-O3demo./odin run examples/demo/demo.odin -file使用已构建的编译器直接运行 demoreport./odin report若编译器尚不存在则先构建再输出编译器的环境与配置报告需要注意默认的default目标构建的是Debug 版构建完成后脚本会提示如需更快的编译器请执行make release或make release-native。这一点在 build_odin.sh 末尾的提示信息中有明确说明Windows 的 build.bat 也给出了同样的提示。Windows 的 release / nightly 参数build.bat同样支持参数化构建build.bat release :: 构建 Release 版等价于参数 1 build.bat 1 1 :: 第一个参数 1 表示 Release第二个参数 1 表示 nightly其中 Release 模式会启用-O2 -MT -Z7并定义NO_ARRAY_BOUNDS_CHECK关闭数组越界检查以提升性能同时通过 misc/odin.rc 与 misc/odin.manifest 生成带版本号与清单的odin.exe。构建成功后的自动验证无论哪个平台构建脚本都会在成功后自动运行 demo 程序用真实执行结果验证编译器可用性Linux / macOSbuild_odin.sh./odin run examples/demo -vet -strict-style -- Hellope WorldWindowsbuild.bat仅 Debug 模式odin run examples/demo -vet -strict-style -resource:examples/demo/demo.rc -- Hellope World这里-vet启用静态检查、-strict-style启用严格代码风格检查--之后是传给 demo 程序的命令行参数示例程序源码位于 examples/demo/demo.odin它会演示 Odin 的基础语法、控制流、结构体与联合体、参数多态、隐式 context 系统等特性并打印Hellope, World!之类的输出。能够成功编译并运行该 demo即说明编译器工具链、LLVM 后端与链接器均已正确工作。*Nix 系统的关键注意事项库集合定位与 ODIN_ROOT文档特别强调在 *Nix 系统上编译器默认依赖与其可执行文件相对位置固定的core和shared库集合。因此传统意义上的安装如将编译器放入/usr/local/bin并不直接可行——因为编译器在定位标准库时会以自身可执行文件的位置为基准去寻找core、shared等库目录一旦可执行文件与库集合分离就会找不到标准库。针对这一点文档给出的推荐做法有两种在构建系统中直接以完整路径调用编译器/path/to/odin run 你的程序设置ODIN_ROOT环境变量指向仓库根目录set ODIN_ROOT/path/to/odin_root这一机制在源码中有清晰实现src/build_settings.cpp中的odin_root_dir()src/build_settings.cpp会优先读取ODIN_ROOT环境变量并归一化为绝对路径若未设置则回退到internal_odin_root_dir()——后者根据编译器可执行文件自身的路径推导根目录。当ODIN_ROOT缺失且编译器不在PATH中、无法自定位时编译器会直接报错Odin could not locate itself in PATH, and ODIN_ROOT wasnt set either.src/build_settings.cpp。此外ODIN_ROOT也会作为全局常量暴露给 Odin 程序本身见 src/checker.cpp 的add_global_string_constant(ODIN_ROOT, ...)因此运行时也可以通过它感知仓库位置。进阶静态构建与 nightly 发布对于需要打包分发的场景仓库还提供了静态构建脚本 ci/build_linux_static.sh该脚本面向 Alpine 容器静态链接场景使用clang-20/llvm-config-20通过-static、-fuse-ldmold与$LLVM_CONFIG --link-static --libs --system-libs --libfiles生成完全静态链接的odin可执行文件并附带-Wl,-rpath$ORIGIN。nightly 产物则由 ci/nightly.py 负责打包上传Linux/macOS 生成.tar.gzWindows 生成.zip并维护nightly.json清单与过期清理。这意味着如果你希望体验每日最新构建而非源码自编译也可以关注 nightly 渠道而本文所述的源码构建流程则是理解 Odin 编译器组成与依赖关系的最直接途径。小结构建 Odin 编译器的核心要点可以归纳为三句话先备依赖Windows 需要 MSVC 2010x64 环境macOS 需要brew install llvm XcodeGNU/Linux 需要 Clang 与 LLVM版本 17 及以上推荐 22并将 LLVM 二进制与链接器加入$PATH再跑构建Windows 执行build.batLinux/macOS 执行make需要高性能编译器时改用release或release-native模式最后配环境在 *Nix 下要么以完整路径/path/to/odin调用编译器要么设置ODIN_ROOT/path/to/odin_root确保编译器能找到随附的core与shared库集合。按照上述流程构建出的odin可执行文件与仓库根目录下的 core、base、shared 等库集合构成一个完整的开发环境之后即可用odin run、odin build等命令开始编写和编译 Odin 程序。【免费下载链接】OdinOdin Programming Language项目地址: https://gitcode.com/GitHub_Trending/od/Odin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表