Swifty-LLVM

codecov

Swifty-LLVM 是一个用于 LLVM 编译器基础设施的 Swift 接口,目前封装了 LLVM 的 C API。

另请参阅:swift-llvm-bindings

开发/使用要求

Swift

此软件包需要 Swift 5.9

LLVM

此软件包需要 LLVM 17。LLVM 的主要版本不具有互换性或向后兼容性。

如果您使用此软件包进行开发,我们强烈建议使用启用了断言的 LLVM,例如 这些;否则,很容易在不知情的情况下违反 LLVM 的前提条件。此软件包的 devcontainer(位于 .devcontainer 子目录中)已预先安装了启用断言的 LLVM 构建版本,分别位于 /opt/llvm-Debug/opt/llvm-MinSizeRel 中。

如果 您想使用 Swift Package Manager 构建,并且选择以其他方式获取 LLVM,则需要安装包含 llvm-config 可执行文件的 LLVM,我们将使用它为 LLVM 创建一个 pkg-config 文件。

使用 CMake 和 Ninja 构建

  1. 配置:选择一个构建目录和一个 CMake构建类型(通常为 DebugRelease),然后,其中 <LLVM> 是 LLVM 安装的根目录路径,

    cmake -D CMAKE_BUILD_TYPE=<build-type> \
      -D LLVM_DIR=<LLVM>/lib/cmake/llvm   \
      -G Ninja -S . -B <build-directory>
    

    (在 Windows 上,将 shell 的行延续字符替换为 \,或者直接删除换行符和反斜杠)。

    如果要运行测试,请添加 -DBUILD_TESTING=1

    注意: 在 macOS 上,如果您没有使用 Xcode 的默认工具链,您可能需要 -D CMAKE_Swift_COMPILER=swiftc 以防止 CMake 使用 Xcode 的默认 swift

    如果此命令失败,可能是因为您安装的 LLVM 没有 CMake 支持;我们建议您尝试使用 这些 软件包之一。

  2. 构建:

    cmake --build <build-directory>
    
  3. 测试(在步骤 1 中需要 -DBUILD_TESTING=1

    ctest --parallel --test-dir <build-directory>
    

使用 CMake 和 Xcode 构建

  1. 生成 Xcode 项目:选择一个构建目录,然后,其中 <LLVM> 是 LLVM 安装的根目录路径,

    cmake -D LLVM_DIR=<LLVM>/lib/cmake/llvm \
      -G Xcode -S . -B <build-directory>
    

    如果要运行测试,请添加 -DBUILD_TESTING=1

  2. 开始使用:在构建目录中打开 .xcodeproj 文件,并使用 Xcode 的 UI 进行构建和测试。

使用 Swift Package Manager 构建

注意: 至少在 Swift 6.0 发布之前,Windows 上不支持 SPM 构建。

首先,您需要创建一个特定于您安装的 pkgconfig 文件,并使其对您的构建工具可见。我们使用以下 bash 脚本,位于此项目的顶层目录中

./Tools/make-pkgconfig.sh ./llvm.pc

如果您在 Windows 上,您的 git 安装(Swift 所需)包含一个 bash 可执行文件,因此您可以执行以下操作

C:\Program Files\Git\bin\bash ./Tools/make-pkgconfig.sh ./llvm.pc

上面的命令会在当前目录中生成 llvm.pc,并将内容打印到终端。您可以将其目录添加到 PKG_CONFIG_PATH 环境变量中,以便与命令行工具一起使用

export PKG_CONFIG_PATH=$PWD

或者您可以将其放在 pkg_config 已经搜索的位置(需要与 Xcode 一起使用)

sudo mkdir -p /usr/local/lib/pkgconfig && sudo mv llvm.pc /usr/local/lib/pkgconfig/

设置好 llvm.pc 后,您应该能够使用 Swift Package Manager 构建此项目

swift build -c release

要测试您的编译器,

swift test -c release --parallel

macOS 用户注意事项

  1. platforms: [.macOS("xxx")] 添加到 Package.swift,其中 xxx 是您的 macOS 版本,以解决有关“对象文件是为比链接的版本更新的 macOS 版本构建的”的警告。
  2. 您可能需要在 llvm.pc 中添加 zstd 库的路径。