在Windows平台使用VS2022的MSVC编译LLVM16

admin 2023年12月20日19:02:44评论55 views字数 1537阅读5分7秒阅读模式
前言
联动一下隔壁帖子,本文章仅作为一个补充:


如何优雅的在 Windows 上使用 LLVM Pass 插件进行代码混淆
https://bbs.kanxue.com/thread-272346.htm

[原创]让LLVM16在windows上再次优雅起来
https://bbs.kanxue.com/thread-279723.htm
本文的编译方法不需要对LLVM源码进行任何改动,除了VS2022以外不需要安装任何额外的软件或者依赖。


正文
首先,保证你的Windows上安装了VS2022。

在Windows平台使用VS2022的MSVC编译LLVM16

其次,保证你的VS2022安装了MSVC,一般勾选了使用C++的桌面开发就应该满足条件了。

在Windows平台使用VS2022的MSVC编译LLVM16
别忘了把这两个给勾上,虽然编译LLVM的时候用不上它们,但是编译完了我们可以把编译后的与自带的进行替换,然后就能使用MSBuild工具链调用我们自己的LLVM进行编译了(具体方法参考隔壁,这里不赘述了)。

在Windows平台使用VS2022的MSVC编译LLVM16

然后是重点,一定要从设置里把当前系统区域设置给改为英语(美国)并重启系统。
在Windows平台使用VS2022的MSVC编译LLVM16
准备好编译环境后,从GitHub上把LLVM的源码clone下来,选择LLVM16的branch,最后一个版本应该为16.0.6(VS2022自带的是16.0.5,不过基本没啥影响)。
git clone https://github.com/llvm/llvm-project.git -b release/16.x

在Windows平台使用VS2022的MSVC编译LLVM16

我们直接对着llvm-project右键=>使用 Visual Studio 打开
这时VS2022可能会弹窗,我们选择不启用。

在Windows平台使用VS2022的MSVC编译LLVM16

点击视图=>终端,打开VS2022的开发者命令行(一定要用这个,不能用别的)。

在Windows平台使用VS2022的MSVC编译LLVM16
使用VS2022自带的cmake进行构建,等待项目构建完毕。
cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=X86

这里指定的DLLVM_TARGETS_TO_BUILD=X86表示我们编译出来的LLVM只能编译为X86指令集(32位和64位),如果想支持更多的指令集可以去掉这个参数,但是会增大项目体积、增加编译时间。

在Windows平台使用VS2022的MSVC编译LLVM16

然后关闭当前的VS2022,找到生成的.sln文件并双击打开。

在Windows平台使用VS2022的MSVC编译LLVM16

可以看到解决方案已经被成功的构建了。

在Windows平台使用VS2022的MSVC编译LLVM16

下一步是可选的,将默认选中的Debug改为MinSizeRel,可以提高编译LLVM时的速度、减少编译产物的体积、提高LLVM的运行速度,但是如果后续是要进行LLVM本体魔改或者Pass开发的话,建议保持Debug不变。

在Windows平台使用VS2022的MSVC编译LLVM16

然后点击生成=>生成解决方案,开始漫长的等待,以这台i5-12500的机子为例,编译MinSizeRel耗时大概半小时。

在Windows平台使用VS2022的MSVC编译LLVM16

在对应目录下可以找到生成的可执行文件,我们将该目录添加到环境变量中。

在Windows平台使用VS2022的MSVC编译LLVM16

在VSCode的命令行中测试一下版本,确定是16.0.6。

在Windows平台使用VS2022的MSVC编译LLVM16

编写一个C++测试程序。

在Windows平台使用VS2022的MSVC编译LLVM16

使用clang++编译后运行,可以看到正确的输出。

在Windows平台使用VS2022的MSVC编译LLVM16

结语
到此为止,我们已经成功的编译了LLVM。

当然我们的目的肯定不是仅仅编译一下而已(不然为啥不用VS2022自带的),更多的是对LLVM的前端、中端和后端进行魔改,或者编写自己的Pass,最后将其整合到MSBuild工具链中。
得益于VS2022强大的解决方案,我们可以很轻松、很方便的对整个LLVM项目进行修改和增量编译。

在Windows平台编写、编译并使用Pass的教程网上已经有很多了,但是步骤也是比较复杂的,等有空了我再写一篇用优雅的方式编写New Pass的文章。


在Windows平台使用VS2022的MSVC编译LLVM16

看雪ID:古月浪子

https://bbs.kanxue.com/user-home-684293.htm

原文始发于微信公众号(看雪学苑):在Windows平台使用VS2022的MSVC编译LLVM16

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月20日19:02:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   在Windows平台使用VS2022的MSVC编译LLVM16https://cn-sec.com/archives/2321557.html

发表评论

匿名网友 填写信息