美文网首页
OLLVM in Android Studio

OLLVM in Android Studio

作者: chensem | 来源:发表于2020-08-14 16:16 被阅读0次

0x01 Ollvm编译

  • 系统: macos 10.15.6
git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/
make -j7

在之前的macos系统上,编译ollvm还是比较流畅的,整个过程也没出现任何error。自从升级了macos的版本,ollvm的编译就报错了。根据报错信息修改相应的文件即可,奈何C++太差了。请了notifybibi师傅帮忙了。

obfuscator/tools/clang/lib/CodeGen/CGOpenMPRuntime.cpp

报错文件位置,如不同,需自行修改


image.png image.png
image.png

把三处注释掉就可以顺利编译出了。

ubuntu 16.04以及ubuntu 18.04可以直接进行编译,无任何报错,只不过需要关闭DEBUG。

0x02 Android Studio配置

  • 方案online
    • 在ndk/toolchains/下面新建编译链,把ollvm build下的文件拷贝进去,然后修改android.mk和setup.mk,这种方式已经过时了,android studio现在用的是cmake不合适这个方案。
    • 拷贝ollvm中的clang、clang++、clang-format到llvm/prebuilt/darwin-x86_64的bin目录中,然而拷贝过后需要解决一大堆头文件not found问题。
    • 我的解决方案,我采用了低版本的ndk,现在最新下载的ndk是21版本,下载ndk r16b版本,具体步骤:
  1. preferences - - > Android sdk -- > SDK Tools -- > NDK(Side by side) --> 打开show package detail,然后勾选16就可以下载好了。


    image.png
  2. 下载完成之后需要将项目配置成为ndk 16b编译。位置为File --> Project Structure -- > sdk location -- > Android Ndk Location 设置下载好的ndk 16b。
  3. 下一步需要修改rules.ninja,具体位置:

AndroidStudioProjects/项目名称/app/.cxx/cmake/debug/arm64-v8a

其中cmake下是分为debug和release,然后每个文件夹中是不同架构的编译规则。如果在编译的时候没有指定abiFilter,则会默认编译不同架构的,建议加一个abiFilter,位置在build.gradle(Module:app),

 cmake{
    cppFlags ""
}
ndk{
    abiFilters "arm64-v8a"
}

这样就只会编译arm64版本的了,然后修改/app/.cxx/cmake/debug/arm64-v8a中的rule.ninja,找到其中的clang位置,修改为我们ollvm的clang位置,然后rebuild project,其中会有报错,找不到asm/types.h的位置,这时候需要将ndk sysroot中的aarch-linux-android中的asm文件夹拷贝到Sysroot下即可。


image.png
  • ollvm flag选项在CMakeLists.txt中可以添加,也可以写在cppFlags中
set(CMAKE_CXX_FLAGS "-mllvm -fla")
  • 另外的方法,替换clang。然后拷贝缺失的头文件到sysroot即可。


    image.png

相关文章

网友评论

      本文标题:OLLVM in Android Studio

      本文链接:https://www.haomeiwen.com/subject/hqngdktx.html