【清羽】Windows10下编译OLLVM-14.x

 前言

  1. OLLVM是什么就不详细说了,懂的自然懂,不懂的也不会来到这篇文章;
  2. 目前网上暂时没有关于最新版ollvm的移植和食用过程,都是几年前的老文章,搬来搬去;
  3. 笔者写这篇文章的时候 llvm 的最新版是14.x,适不适合以后的版本就不清楚了;

  4. 在这里感谢 heroims 大佬的 ollvm-13.x 的移植教程和修改

话不多说,直接开撸(❁´◡`❁)


准备环境

  • cmake

    大项目都离不开它,大家最熟悉不过了,去官网下载安装就行。
    Tips:用 AndroidStudio 提供的也行,直接配置环境变量即可
     
    • llvm-mingw64

      笔者不用传统的gcc,个人喜欢 llvm 的 clang 工具

       
      去github里下载文件并解压
      解压后配置环境变量(笔者已经重命名了)
powershell里测试clang安装成功

        如果你用的是 AndroidStudio 里的 Cmake 并配置了环境变量的话,这步可以忽略,否则点击上方链接下载并配置环境变量(方法同上)。

        随便夸一下 ninja ,比 make 好用多了,编译起来嘎嘎滴爽!(笔者个人看法)


克隆并移植代码

        官方llvm-project:https://github.com/llvm/llvm-project

        个人移植的ollvm-project:https://github.com/yangyiyu08/ollvm-project

        小声求个 star 哈哈

        移植教程就不写了,去仓库里的 14.x 分支看 commit 会一清二楚~


编译

      来了,最重要的编译流程,一步步下来如果姿势正确都会编译通过的

  1. 进入到 (o)llvm-project 文件夹(官方的没有o这个字母)
  2. 按住 shift + 鼠标右键后打开 PS ,输入命令行进行构建 Cmake 配置
    cmake -S llvm -B build -G Ninja -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF

    这里解释一下参数
    -G Ninja:使用 ninja 进行编译源码
    -DLLVM_ENABLE_PROJECTS="clang":启用clang,有多个选择 但我们只需要clang,官方文档有说明
    -DCMAKE_BUILD_TYPE=Release:构建 release 版本,比 debug 版本编译快很多
    -DLLVM_INCLUDE_TESTS=OFF:关闭 llvm 的头文件测试,也是为了加快编译速度
    -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF:这个非常重要,llvm-12.x 开始默认使用 newPM进行编译源码,导致 ollvm 不起作用!因此,需要加上这个参数禁用掉 newPM。(虽然可以用 -flegacy-pass-manager  让 llvm 不走 newPM 编译,但是...你不觉得在你的源码上加一串怎么长的命令很难受吗)

  3. 执行以上命令后若显示 Configuration done. 则配置成功
    注意:执行命令前必须安装好 git 和 python ,特别是python。
              别问为什么,问就是不安装不让编译!!

  4. 接下来就是漫长的源码编译了,主要是看电脑配置吧

    cmake --build build -j16

    -j16:线程数,根据自己的电脑配置进行修改,别太高了
    总共 4k+ 个obj,等待编译完成即可

  5. 漫长的等待后,没意外的话编译完成了,接下来为 AndroidStudio 的 NDK 配置 ollvm

整合进NDK

  1. 覆盖 NDK 里的 clang.exe clang++.exe clang-cl.exe





    细心的人可能会发现两个问题:其一是文件大小一样,其二就是文件很大。
    首先,这三个文件就是同一个文件复制出来的,没错,漫长的等待就为了clang.exe;
    其次,文件太大是因为没有将其“瘦身”,可以使用 strip clang.exe clang++.exe clang-cl 命令来压缩体积。
  2. 复制 lib 库
    经第一步覆盖后,打开AS编译项目会报找不到 libunwind 等库的错,原因就是缺少lib/clang/...这些库
    其实这些库 NDK 里面已经存在,只是路径不对,ctrl c+v就能解决了



    将 lib64 里的 clang 复制到 lib 目录后,还需要注意一个细节,就是 clang 的版本。
    我的最新 NDK 里的 clang 版本是14.0.1(不知道哪来的14.0.1,官方也就14.0.0)
    因此需要重命名一下版本文件夹,版本相同的可以忽略,如下图:

写在最后

至此,OLLVM已经完成编译和整合,具体用法可以到网上搜。

如果你觉得编译很麻烦,那你可以到我移植好的仓库直接下载成品,将 clang.exe 多复制出 clang++.exe和clang-cl.exe 后替换即可。

如果你觉得这篇文章对你有帮助,可否给仓库一个 star 嘿嘿

  • 14
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

buffcow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值