在Windows下源码编译LLVM(MingW)

 

 

前言——由于最近工作项目需要,需要在windows下基于mingw(即使用gcc编译器,非vc的编译器)编译LLVM,踩坑无数,仅此一记。

 

环境:

 

win10 64位专业版

 

准备:

 

试过很多种编译方式,最终发现还是msys2比较靠谱,即在windows平台下类linux开发环境的工具。

 

 

1.到msys2官网下载64位版本,一路下一步安装。

打开它的shell窗口,即C:\msys64\msys2_shell.cmd

 

以防意外可以先更新一下,依此执行

 

pacman -Sy

 

pacman -Su

 

2.安装编译工具链

 

pacman -S mingw-w64-x86_64-toolchain

 

 

这里我只装了64位机器的编译链(可能会根据实际情况安装pacman -S base-devel,这个包含了大部分的基本包)

如果这里太慢,自行百度msys2换国内更新源。

 

3.LLVM官网下载相应版本源码,这里说两个版本3.4和比较新的6.0版。

 

我在e盘中解压llvm-3.4.src.tar.gz了这个文件。(6.0版类似)

 

编译3.4版本

 

1.打开C:\msys64\mingw64.exe,虽然和刚刚的shell窗口基本类似,但是最好直接打开这个,原因是这个shell窗口本身设置好了对应的gcc等环境变量。

 

cd /e/llvm-3.4

 

mkdir build

 

cd build

 

 

进入了编译目录

echo'ac_cv_have_decl_strerror_s=${ac_cv_have_decl_strerror_s=no}' > config.cache

 

../configure -C --prefix=/e/llvm-3.4.mingw64/build--host= x86_64-w64-mingw32--enable-optimized --disable-assertions --disable-pthreads --enable-targets=x86_64--enable-bindings=none --disable-libffi --with-c-include-dirs=/usr/x86_64-w64-mingw32--with-gcc-toolchain=/usr/x86_64-w64-mingw32 --with-default-sysroot=/usr/x86_64-w64-mingw32

 

 

等待一会生成相应的makefile。

 

 

make -j8

 

大概5分钟后编译完成

 

 

 

编译6.0版本

 

 

 

1.和编译3.4版类似进入cd到源码的build文件夹后,新建一个build.sh脚本,拷贝如下内容

 

LLVMSRC="/e/llvm-6.0.0.mingw"
LLVMINS="/e/llvm-6.0.0.mingw/build"
 
cmake
    -G"MinGW Makefiles" \
   -DCMAKE_INSTALL_PREFIX="$LLVMINS" \
   -DCMAKE_BUILD_TYPE="Release" \
   -DLLVM_TARGETS_TO_BUILD="X86_64" \
   -DLLVM_INCLUDE_TESTS=OFF \
   -DLLVM_ENABLE_CXX1Y=ON \
   -DLLVM_ENABLE_ASSERTIONS=ON \
   -DSPHINX_OUTPUT_HTML=OFF \
   -DSPHINX_OUTPUT_MAN=OFF \
   "$LLVMSRC"
 
cmake--build .
cmake--build .  --target install

 

 

在文件管理器中可以看到build下生成了release文件夹

 

 

将Release下的lib中的所有生成的库全选复制到build下的lib文件夹中

 

 

再将源码文件夹中的include整个文件夹复制到build文件夹中,提示是否替换选择全部。

 

 

 

此时基于MingW的LLVM3.4的版本全部编译成功,如果想在msys2中使用它,导入环境变量中即可。

 

export LLVM=/e/llvm-3.4/build

或者写入bashrc永久生效。其他环境类似。

 

 

 

 

LLVM是一个开源的编译器优化框架,而mingw是一个Windows平台上的轻量级跨平台工具链。如果你想编写一个使用LLVM-MINGWLLVMMinGW的集成环境)的程序,通常会涉及以下几个步骤: 1. **安装LLVM-MINGW**:首先,你需要在你的Windows系统上安装LLVMMingw-w64工具链。可以从LLVM官方网站下载预编译的二进制包,或者选择从源码编译。 2. **设置开发环境**:配置环境变量,比如添加`LLVM_DIR`和`MINGW_HOME`到PATH中,以便编译器能找到相应的库文件。 3. **了解API文档**:熟悉LLVM提供的C/C++ API,特别是IRBuilder、Module、PassManager等核心模块。LLVM提供了一个详细的开发者指南和参考文档。 4. **创建项目**:新建一个C++项目,并在项目的CMakeLists.txt中指定使用LLVM作为构建系统。例如: ```cmake add_executable(your_program your_program.cpp) target_link_libraries(your_program PUBLIC LLVM::LinkAllDynamic) ``` 5. **编写代码**:在C++代码中,你可以通过`llvm::orc::jit_compiler_t`创建JIT编译器实例,处理LLVM IR代码并生成机器码。 6. **示例代码片段**: ```cpp // 创建LLVM IR字符串 std::string llvm_code = ...; // 解析IR llvm::orc::jit_compiler_t compiler; llvm::orc::ExecutionSession session(compiler); llvm::orc::CompileUnit unit(llvm_code); // 编译并获取函数指针 auto function = session.jit(unit.getFunction()); void* result_function = function.getAddress(); ``` 7. **测试运行**:编译并运行你的程序,检查是否成功加载和执行了LLVM编译的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值