0
点赞
收藏
分享

微信扫一扫

Windows10下编译OLLVM-14.x By--清羽

软件共享软件 2022-03-11 阅读 146

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


准备环境

  • cmake

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

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

    下载和配置:

    去github里下载文件并解压

    解压后配置环境变量(笔者已经重命名了)

powershell里测试clang安装成功

  •  ninja

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

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


克隆并移植代码

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

        个人移植的ollvm-project:https://gitee.com/qingyu_yyy/ollvm-project

        小声求个start 哈哈

        移植教程就不写了,去仓库里的 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 后替换即可。

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

举报

相关推荐

0 条评论