求教移植ollvm到最新的llvm版本

移植ollvm到llvm13生成toolchain编译项目能成功,但是编译之后的Macho文件没有加混淆(ps:指令-mllvm -fla…已经添加)

2 个赞

可能LLVM13默认用的是NewPM,你用的网上的移植教程只有OldPM

PostLLVM11的Canonical PassRegistration应该是这个add_llvm_pass_plugin
你的移植教程应该老了

不算很老啊,移植到llvm12都是可以的。看的这个人的https://github.com/0x3f97/ollvm-12.x

11 12 13之间Pass相关改了很多东西, 主要是NewPM导致了

你在OldPM的初始化函数里面打个Log看看

好的感谢张总

llvm 13之前默认都用的legacy pass manager,最新版本pass都是要基于new pass manager,不过可以加上参数 -flegacy-pass-manager来启用legacy pass manger

1 个赞

不用。CMake我记得有个选项是全局默认OldPM

1 个赞

找到了 cmake -DLLVM_USE_NEWPM=OFF

还是赶紧把光移植到newpm​:grinning_face_with_smiling_eyes:

冷知识,给OldPM的Pass套个壳就可以了

带佬,我也移植到 llvm-13上了。 但是 用 clang编译 test.c的时候,出现头文件未找到问题。fatal error: ‘stdio.h’ file not found.

…/llvm_build_13/bin/clang test.c
clang-13: error: no input files

#include <stdio.h>
 
/* 函数声明 */
int max(int num1, int num2);
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   int ret;
 
   /* 调用函数来获取最大值 */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2)
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
  result = num1;
   else
  result = num2;
 
   return result;
}

一般都是打包成Toolchain用

1 个赞

参数指定sdk就行
-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
你使用 -### 对比一下原始clang的编译命令,缺什么补什么

1 个赞

可以用 xcrun 指定 SDK(前提是已安装 Command Line Tools

$ xcrun --show-sdk-version
10.15

$ xcrun -sdk macosx10.15 …/llvm_build_13/bin/clang test.c
1 个赞

:pray:,张总:ox::beer:

可行。非常感谢:pray:

可行。非常感谢:pray: +1

这种方式我们实际业务中发现会因为前端参数传递的区别导致跨版本Xcode出各种匪夷所思的报错, 我们一般都是拉到Swift那边用Swift打Toolchain.

不过不用Xcode的话应该这样也可以

1 个赞