MinGW GCC 12.2.0 源码编译 LLVM 15.0.7和clang

MinGW GCC 12.2.0 源码编译 LLVM 15.0.7和clang

目标

以MinGW-w64中的GCC为基础,在Windows平台上较完整编译llvm 15.0.7以及其组件clang。

笔者推测,同样的编译命令,应该仍然适用于Linux平台上的GCC。

说明

由于编译LLVM的libc过程中,会出现由于static_assert断言中两个变量类型的sizeof不匹配而报错,故而无法用GCC以及已经编译好的clang进行编译的情况,在本文中不去编译libc libcxx libcxxabi。

亦不能编译flang openmp libunwind。

流程

安装cmake

CMake下载安装,也可以到Github搜索。

安装MinGW

可以直接安装TDM-GCC;或者从MinGW解压,并将两个bin文件夹的路径加入环境变量PATH中,将lib路径放入LD_LIBRARY_PATH中,将include放入C_INCLUDE_PATH中。

这里假设mingw64位置在D:\p\C下(这样其中一个bin就在D:\p\C\mingw64\bin)。

编译

解压llvm源码到llvm-15.0.7-clang

如果要编译flang,似乎应该在-DCMAKE_CXX_FLAGS里面添加-Wa,-mbig-obj,但是尝试过后仍然没用,会在FortranLower那里在IterationSpace.cpp.obj(大概编译进度91%的时候)报错,file too big。

cd llvm-15.0.7-src\..
mkdir build
cd build
cmake ..\llvm-15.0.7-src\llvm -DCMAKE_INSTALL_PREFIX=D:\p\C\llvm-15.0.7 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-march=native" -DCMAKE_CXX_FLAGS="-march=native" -DLLVM_ENABLE_PROJECTS="bolt;clang;clang-tools-extra;compiler-rt;cross-project-tests;libclc;lld;lldb;mlir;polly;pstl" -G "MinGW Makefiles"
cmake --build .

将build/tools/bolt/tools/driver/cmake_install.cmake中最后一段注释掉(每行开头加#)。

cmake --install .

额外说明

有时候编译选项加入-lpthread到CMAKE_C_FLAGS和CMAKE_CXX_FLAGS是因为有一些LLVM组件的编译(比如libLLVMSupport)在LLVM_ENABLE_PROJECTS中加入openmp的情况下,需要链接到pthread的一些函数。如果不加-lpthread的话会在编译过程中报错。加入-lpthread之后,几乎在编译过程中所有的文件编译都会抛出warning

clang++: warning: -lpthread: 'linker' input unused [-Wunused-command-line-argument]

没有在第二次编译LLVM的时候使用-DLLVM_ENABLE_ASSERTIONS=ON选项。在Windows平台下编译过程中会提示一些runtimes的编译(报错)不建议启用debug选项。

本文所采用的是MinGW-w64,GCC版本为12.2.0,LLVM版本为15.0.7。如果版本不同可能编译方法有所差异。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值