License: MIT Swift CI

mrLSD/llvm-api-swift

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?

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 树,从而将库结构划分为子目录。并使用相应的 LLVM-C API 填充组件。在实现 Swift 类型时,我们以从 C 类型中抽象出来的思路为指导,将其完全转换为 Swift 类型。同时,坚持安全可靠的实现原则 - 没有显式的内存管理,采用 Swift 提供的安全技术和功能。

要求

brew install llvm

➡️ 如果您遇到问题,请查看 问题排查

支持的 LLVM 版本

XCode 支持

为了在 XCode 中正确开发,需要生成 package-config: llvm.pc

之后,XCode 应该可以正确识别 LLVM 头文件路径,并可以构建项目。

问题排查

如果在编译期间找不到 LLVM-C 头文件,请确保您已

llc --version
brew info llvm

许可证:MIT