xcode替换LLVM插件

一、查找LLVM

1、当前你使用的xcode对应的LLVM版本

复制代码
✗ swift --version
swift-driver version: 1.127.14.1 Apple Swift version 6.2.1 (swiftlang-6.2.1.4.8 clang-1700.4.4.1)
Target: arm64-apple-macosx15.0

可以看出我们使用的swift版本在6.2之后

复制代码
✗ clang --version
Apple clang version 17.0.0 (clang-1700.4.4.1)
Target: arm64-apple-darwin24.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

说明我们使用的clang在17.0

2、找到相同的版本源码

查看https://github.com/swiftlang/llvm-project/blob/swift-6.0-RELEASE/llvm/utils/gn/secondary/llvm/version.gni

可以看到其使用的llvm版本为17

复制代码
llvm_version_major = 17
llvm_version_minor = 0
llvm_version_patch = 6
llvm_version = "$llvm_version_major.$llvm_version_minor.$llvm_version_patch"

https://github.com/swiftlang/llvm-project/tags?after=swift-6.3-DEVELOPMENT-SNAPSHOT-2025-12-01-a

选择我们的的llvm源码下载:

https://github.com/swiftlang/llvm-project/releases/tag/swift-6.2.3-RELEASE 现在zip后解压出llvm-project-swift-6.2.3-RELEASE文件

二、编译llvm和插件

1、插件

插件放在在llvm-project-swift-6.2.3-RELEASE/llvm/lib/Transforms目录下,如果是有我们自己定义的插件(MyPlugin),需要在CMakeLists.txt增加add_subdirectory(MyPlugin)

2、cmake

在根目录下创建build目录,cd到该目录下,执行命令(或者写一个sh文件去运行):

复制代码
cmake -G Xcode\
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra' \
  -DLLVM_ENABLE_PLUGINS=ON \
  -DLLVM_BUILD_LLVM_DYLIB=ON \
  -DCLANG_BUILD_EXAMPLES=OFF \
  -DLLVM_TARGETS_TO_BUILD=Native \
  -DCMAKE_INSTALL_PREFIX=/usr/local/llvm-26 \
  ../llvm

会在目录下生成一个xcode工程

3、编译

打开LLVM.xcodeproj文件,选中Manage Schemes ,选择llvm、MyPlugin创建target

然后分别build,编译出产物

复制代码
build/Release/lib/MyPlugin.dylib
build/Release/bin/clang
build/Release/bin/clang++

三、替换xcode编译器

在我们业务工程的podfie中设置post hook,在pod install后修改xcconfig配置环境变量,指定为我们编译出来的clang产物

复制代码
 # 获取插件路径
  llvm_plugin_path = "....llvm-project-swift-6.2.3-RELEASE/build/Release/lib/MyIRPlugin.dylib"
  llvm_clang_path = "...llvm-project-swift-6.2.3-RELEASE/build/Release/bin/clang"
  llvm_clangpp_path = "...lllvm-project-swift-6.2.3-RELEASE/build/Release/bin/clang++"
  
  # 遍历所有 Pod 目标
  installer.pods_project.targets.each do |target|

    # 为每个目标设置编译器和插件选项
    target.build_configurations.each do |config|
      # 获取当前配置
      xcconfig_path = config.base_configuration_reference.real_path
      xcconfig = File.read(xcconfig_path)
      
      # 添加 LLVM 插件配置
      new_xcconfig = xcconfig + <<~EOF
      
        CC=#{llvm_clang_path}
        CXX=#{llvm_clangpp_path}
        OTHER_CFLAGS = $(inherited) -fpass-plugin=#{llvm_plugin_path} -O1
        OTHER_CPLUSPLUSFLAGS = $(inherited) -fpass-plugin=#{llvm_plugin_path} -O1
        
      EOF
      
      # 写回配置文件
      File.write(xcconfig_path, new_xcconfig)
    end
  end

pod install后重启xcode生效

相关推荐
Freak嵌入式1 天前
LVGL基础知识和概念:视觉样式与资源系统
ide·驱动开发·嵌入式·lvgl·micropython·upypi
追风20191 天前
PowerShell 7 解决 Codex 中文乱码:完整经验总结(VsCode 背景)
ide·vscode·编辑器
aosky1 天前
手机远程畅玩OpenAI Codex
macos·智能手机·cocoa
深挖派1 天前
IntelliJ IDEA 2026.1 安装配置与高效开发环境搭建 (保姆级图文教程)
java·ide·intellij-idea
vonlycn1 天前
Android Studio 5.3.3 新项目编译报错解决
android·ide·android studio
qq_427506081 天前
vscode使用claude code的简单经验分享(一)
ide·vscode·ai
宁静致远20211 天前
Mermaid VSCode插件制作流程图保存方法
ide·vscode·流程图
宇飞林海1 天前
在 JetBrains 的 IDE 里使用中文语言
ide
A懿轩A1 天前
【2026 最新】Python 下载与安装:在 macOS 下使用 Homebrew 和 pyenv 完美管理多版本 Python
python·macos·mac
IKaros_α‌1 天前
mac上安装openclaw从入门到删除
macos