llvm-api-swift
是一个库,代表 Swift LLVM API,它是 LLVM API 及其相关库的纯 Swift 接口。它提供了原生的、易于使用的组件来创建编译器代码生成后端。它包含 LLVM 绑定、组件和工具集,以便在 Swift 上高效地使用 LLVM 作为编译器后端实现。
llvm-api-swift
为 LLVM 编译器基础设施提供了一个强大而全面的接口,利用 LLVM-C API
提供安全性、灵活性和可扩展性的融合。该库旨在为希望为编译器创建后端的开发人员提供一个强大的工具,使他们能够以安全且用户友好的方式利用 LLVM 的全部潜力。
安全性是此库设计中最重要的考虑因素。通过构建在 LLVM-C API
之上,我们确保与 LLVM 基础设施的交互以类型安全和内存安全的方式进行。该库采用 Swift 严格的安全保证来防止常见的诸如空指针解引用、缓冲区溢出和内存泄漏等问题。这种对安全性的承诺使开发人员能够专注于其编译器后端的 functionality,而无需担心底层安全漏洞。
灵活性是 llvm-api-swift
的另一个核心属性。该库提供了一组丰富的 API,涵盖了 LLVM 的广泛功能,从模块管理和内联汇编到调试元数据和函数迭代。开发人员可以轻松访问和操作 LLVM 结构,从而能够创建高度定制和优化的编译器后端。该库的设计确保它可以适应各种用例和需求,使其成为基于 Swift 的各种编译器开发项目的理想选择。
'llvm-api-swift' 的构建考虑了可扩展性。它被设计为易于扩展,允许开发人员根据需要添加新功能和支持额外的 LLVM 功能。该库的模块化结构有助于集成新组件,确保它可以与 LLVM 生态系统一起成长和发展。这种可扩展性确保了随着 LLVM 的不断进步和扩展其功能,该库仍然具有相关性和实用性。
LLVM(Low-Level Virtual Machine,底层虚拟机)是一个强大而通用的编译器基础设施,它提供了一系列模块化和可重用的编译器和工具链技术。它广泛应用于现代编译器的开发中,为优化中间表示和为各种目标架构生成机器代码提供了一个框架。LLVM 支持多种语言和平台的能力,加上其广泛的优化功能,使其成为编译器开发人员必不可少的工具。通过利用 LLVM,开发人员可以创建高效且可移植的编译器,以满足当今多样化计算环境的需求。
llvm-api-awift
库遵循 LLVM C API
的结构,确保可以轻松浏览大量的 LLVM 函数。逻辑元素被分组到模块中,提供了清晰的组织结构。在这些模块中,引入了 Rust 结构来包装 LLVM 类型,为包装的 LLVM 类型实现相应的功能。这种方法增强了灵活性和可用性,同时保持了原始的 LLVM 代码结构。该设计避免了代码和文档中不必要的复杂性,并与 LLVM API
完全对齐。这种对齐使开发人员可以使用现有的 LLVM-C 文档轻松浏览 llvm-api-swift
库。
在创建库时,我们以与 LLVM-C API 的 完全兼容性 为指导。因此,在结构上,该库尝试继承 LLVM-C API
树,从而将库结构划分为子目录。并使用相应的 LLVM-C API
填充组件。在实现 Swift 类型时,我们以从 C 类型中抽象出来的思路为指导,将其完全转换为 Swift 类型。同时,坚持安全可靠的实现原则 - 没有显式的内存管理,采用 Swift 提供的安全技术和功能。
支持的操作系统:MacOS 12.0 或更高版本
Swift 语言:5.9 或更高版本
安装最新 LLVM
brew install llvm
设置环境变量,这些变量在 brew
llvm 安装期间提供
如果您的 LLVM 安装正确并且您已成功设置环境变量,则您不需要像 pkg-config
文件这样的额外配置。Package.swift
会自动配置所有需要的项以正确构建,您无需再担心。
➡️ 如果您遇到问题,请查看 问题排查。
为了在 XCode 中正确开发,需要生成 package-config: llvm.pc
sh utils/llvm-pkg.swift
- 将生成 package config 并复制到您的默认 pkg-config
路径。之后,XCode 应该可以正确识别 LLVM 头文件路径,并可以构建项目。
如果在编译期间找不到 LLVM-C
头文件,请确保您已
llc --version
.zshrc
中)。要获取有关变量的说明,请运行brew info llvm
Package.swift
支持条件构建CLI_BUILD swift build
- 它从环境变量集中获取 LLVM 变量。swift build
- 如果存在 llvm.pc
package config