Windows 编译 LLVM 详细教程

本文详述了在Windows上编译LLVM的步骤,包括安装Visual Studio 2017社区版、Python3、CMake、Ninja、Perl等必要工具,以及从清华镜像下载源码,解决Visual Studio的编译问题,如atlbase.h缺失和UTF8编码问题。通过创建build目录,使用CMake配置并执行ninja进行编译,最终成功生成LLVM的编译产物。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

https://www.jianshu.com/p/cfe6c4b11d75

https://www.sunofbeach.net/a/1290427013433171968

https://bbs.pediy.com/thread-258370.htm

安装准备:

(a) 安装 visual studio 2017 community 版本

注:一开始使用 VS 2019 community 版本,结果编译的时候出现找不到 “atlbase.h" 文件问题;改为 VS 2017 没有此问题。

安装 VS 时选择桌面 C++,  VC for ATL 要勾上;

(b) 安装 python3 版本

(c) 安装 cmake 版本;

(d) 下载 ninjia 程序,放到 cmake.exe 所在目录;

(e) 安装 perl https://strawberryperl.com

 (f) 安装 getgnuwin32-0.6.3 https://sourceforge.net/projects/getgnuwin32/files/latest/download, 下载解压后,执行目录中的 download.bat 下载文件;

 

源码准备:

(1) 下载 llvm 源码,从 https://releases.llvm.org 网站上下载源码压缩包;压缩包来自于github,国内访问奇慢;

可以选择从清华的llvm mirror下载:https://mirrors.tuna.tsinghua.edu.cn/help/llvm-project.git/, 整个代码仓库大概1.3GB 左右,国内访问还是比github 快很多。

git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git

(2) 切换源码到指定版本,比如10.0

cd llvm-project
git checkout origin/release/10.x

(3) 编译代码

首先创建个build目录,然后在build目录内执行 vcvarsall.bat 文件,注意末尾的 x64。然后使用 cmake 创建编译文件。

mkdir build
cd build
E:\llvm\llvm-project\build>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat"  x64
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;clang-tools-extra;libunwind;compiler-rt" -DLLVM_ENABLE_ASSERTIONS=ON  ..\llvm
ninja

cmake 会输出很多warning信息,不影响编译,结束后执行 ninja 就开始编译了。

修复常量中有换行符错误:这是因为 VC 识别UTF8 代码有问题。

将文件编码改为utf-8-BOM, 使用 Notepad++ 打开文件,选择“编码”->"转换为UTF8-8 BOM 编码“。

E:\llvm\llvm-project\clang-tools-extra\clangd\Diagnostics.cpp(491): error C2001: 常量中有换行符
E:\llvm\llvm-project\clang-tools-extra\clangd\Hover.cpp(578): error C2001: 常量中有换行符
E:\llvm\llvm-project\clang-tools-extra\clangd\CodeComplete.h(81): error C2001: 常量中有换行符

目前就发现这三个文件需要转下编码,然后编译很长时间后,就编译成功了。bin目录下有输出的内容,如下:

 E:\llvm\llvm-project\build\bin 的目录

2021/05/14  14:01    <DIR>          .
2021/05/14  14:01    <DIR>          ..
2021/05/13  13:08        21,593,600 arcmt-test.exe
2021/05/13  13:08               381 arcmt-test.exe.manifest
2021/05/14  13:52        62,813,696 bugpoint.exe
2021/05/14  13:52               381 bugpoint.exe.manifest
2021/05/14  13:56            12,800 c-arcmt-test.exe
2021/05/14  13:56               381 c-arcmt-test.exe.manifest
2021/05/14  13:57        22,107,648 c-index-test.exe
2021/05/14  13:57               381 c-index-test.exe.manifest
2021/05/13  13:08        96,445,952 clang++.exe
2021/05/13  13:08         2,350,592 clang-apply-replacements.exe
2021/05/13  13:08               381 clang-apply-replacements.exe.manifest
2021/05/13  13:24        22,048,256 clang-change-namespace.exe
2021/05/13  13:24               381 clang-change-namespace.exe.manifest
2021/05/13  13:08        79,331,840 clang-check.exe
2021/05/13  13:08               381 clang-check.exe.manifest
2021/05/13  13:08        96,445,952 clang-cl.exe
2021/05/13  13:08        96,445,952 clang-cpp.exe
2021/05/13  13:08        21,302,272 clang-diff.exe
2021/05/13  13:08               381 clang-diff.exe.manifest
2021/05/13  13:24        21,493,760 clang-doc.exe
2021/05/13  13:24               381 clang-doc.exe.manifest
2021/05/13  13:08        21,040,640 clang-extdef-mapping.exe
2021/05/13  13:08               381 clang-extdef-mapping.exe.manifest
2021/05/13  13:07         2,321,920 clang-format.exe
2021/05/13  13:07               381 clang-format.exe.manifest
2021/05/13  13:08        27,616,768 clang-import-test.exe
2021/05/13  13:08               381 clang-import-test.exe.manifest
2021/05/13  13:25        21,661,184 clang-include-fixer.exe
2021/05/13  13:25               381 clang-include-fixer.exe.manifest
2021/05/13  13:25        22,029,312 clang-move.exe
2021/05/13  13:25               381 clang-move.exe.manifest
2021/05/13  13:07         3,552,256 clang-offload-bundler.exe
2021/05/13  13:07               381 clang-offload-bundler.exe.manifest
2021/05/13  13:08         2,303,488 clang-offload-wrapper.exe
2021/05/13  13:08               381 clang-offload-wrapper.exe.manifest
2021/05/13  13:25        22,519,296 clang-query.exe
2021/05/13  13:25               381 clang-query.exe.manifest
2021/05/13  13:08        22,261,248 clang-refactor.exe
2021/05/13  13:08               381 clang-refactor.exe.manifest
2021/05/13  13:08        21,466,624 clang-rename.exe
2021/05/13  13:08               381 clang-rename.exe.manifest
2021/05/13  13:09        21,453,312 clang-reorder-fields.exe
2021/05/13  13:09               381 clang-reorder-fields.exe.manifest
2021/05/13  13:08        21,086,720 clang-scan-deps.exe
2021/05/13  13:08               381 clang-scan-deps.exe.manifest
2021/05/12  21:53         1,622,016 clang-tblgen.exe
2021/05/12  21:53               381 clang-tblgen.exe.manifest
2021/05/13  13:24        47,110,656 clang-tidy.exe
2021/05/13  13:24               381 clang-tidy.exe.manifest
2021/05/13  13:08        96,445,952 clang.exe
2021/05/13  13:08               381 clang.exe.manifest
2021/05/14  13:55        21,535,744 clangd-indexer.exe
2021/05/14  13:55               381 clangd-indexer.exe.manifest
2021/05/14  13:56        28,812,288 clangd.exe
2021/05/14  13:56               381 clangd.exe.manifest
2021/05/12  21:51            12,288 count.exe
2021/05/12  21:51               381 count.exe.manifest
2021/05/14  13:56           908,800 dexp.exe
2021/05/14  13:56               381 dexp.exe.manifest
2021/05/13  13:07         4,789,248 diagtool.exe
2021/05/13  13:07               381 diagtool.exe.manifest
2021/05/14  13:57        52,143,104 dsymutil.exe
2021/05/14  13:57               381 dsymutil.exe.manifest
2021/05/12  21:51           524,288 FileCheck.exe
2021/05/12  21:51               381 FileCheck.exe.manifest
2021/05/13  13:25        21,539,840 find-all-symbols.exe
2021/05/13  13:25               381 find-all-symbols.exe.manifest
2021/05/12  21:53            10,270 hmaptool
2021/05/14  14:01           335,360 KillTheDoctor.exe
2021/05/14  14:01               381 KillTheDoctor.exe.manifest
2021/05/14  13:56        84,418,560 libclang.dll
2021/05/14  13:56               381 libclang.dll.manifest
2021/05/14  13:56        58,973,184 llc.exe
2021/05/14  13:56               381 llc.exe.manifest
2021/05/14  13:56           377,856 lli-child-target.exe
2021/05/14  13:56               381 lli-child-target.exe.manifest
2021/05/14  13:56        24,162,816 lli.exe
2021/05/14  13:56               381 lli.exe.manifest
2021/05/14  14:00         4,435,968 llvm-addr2line.exe
2021/05/12  21:52        20,395,008 llvm-ar.exe
2021/05/12  21:52               381 llvm-ar.exe.manifest
2021/05/14  13:56         3,329,024 llvm-as.exe
2021/05/14  13:56               381 llvm-as.exe.manifest
2021/05/14  13:56           422,400 llvm-bcanalyzer.exe
2021/05/14  13:56               381 llvm-bcanalyzer.exe.manifest
2021/05/14  13:56        52,752,896 llvm-c-test.exe
2021/05/14  13:56               381 llvm-c-test.exe.manifest
2021/05/14  14:01        67,165,696 LLVM-C.dll
2021/05/14  14:01               381 LLVM-C.dll.manifest
2021/05/14  13:56         3,075,072 llvm-cat.exe
2021/05/14  13:56               381 llvm-cat.exe.manifest
2021/05/14  13:57        24,151,552 llvm-cfi-verify.exe
2021/05/14  13:57               381 llvm-cfi-verify.exe.manifest
2021/05/12  21:52           322,560 llvm-config.exe
2021/05/12  21:52               381 llvm-config.exe.manifest
2021/05/14  13:57         4,153,344 llvm-cov.exe
2021/05/14  13:57               381 llvm-cov.exe.manifest
2021/05/14  13:57         3,550,208 llvm-cvtres.exe
2021/05/14  13:57               381 llvm-cvtres.exe.manifest
2021/05/14  13:57         3,579,392 llvm-cxxdump.exe
2021/05/14  13:57               381 llvm-cxxdump.exe.manifest
2021/05/14  13:57           423,424 llvm-cxxfilt.exe
2021/05/14  13:57               381 llvm-cxxfilt.exe.manifest
2021/05/14  13:57           492,032 llvm-cxxmap.exe
2021/05/14  13:57               381 llvm-cxxmap.exe.manifest
2021/05/14  13:57         2,831,872 llvm-diff.exe
2021/05/14  13:57               381 llvm-diff.exe.manifest
2021/05/14  13:57         2,522,624 llvm-dis.exe
2021/05/14  13:57               381 llvm-dis.exe.manifest
2021/05/12  21:52        20,395,008 llvm-dlltool.exe
2021/05/14  13:57        15,966,720 llvm-dwarfdump.exe
2021/05/14  13:57               381 llvm-dwarfdump.exe.manifest
2021/05/14  13:57        51,235,328 llvm-dwp.exe
2021/05/14  13:57               381 llvm-dwp.exe.manifest
2021/05/14  13:57         3,611,648 llvm-elfabi.exe
2021/05/14  13:57               381 llvm-elfabi.exe.manifest
2021/05/14  13:58        23,794,176 llvm-exegesis.exe
2021/05/14  13:58               381 llvm-exegesis.exe.manifest
2021/05/14  13:58         4,634,624 llvm-extract.exe
2021/05/14  13:58               381 llvm-extract.exe.manifest
2021/05/14  13:58         1,764,864 llvm-ifs.exe
2021/05/14  13:58               381 llvm-ifs.exe.manifest
2021/05/14  13:59         4,103,680 llvm-install-name-tool.exe
2021/05/14  13:58        55,566,336 llvm-isel-fuzzer.exe
2021/05/14  13:58               381 llvm-isel-fuzzer.exe.manifest
2021/05/14  13:57           420,352 llvm-itanium-demangle-fuzzer.exe
2021/05/14  13:57               381 llvm-itanium-demangle-fuzzer.exe.manifest
2021/05/14  13:58        16,581,120 llvm-jitlink.exe
2021/05/14  13:58               381 llvm-jitlink.exe.manifest
2021/05/12  21:52        20,395,008 llvm-lib.exe
2021/05/14  13:58         3,841,024 llvm-link.exe
2021/05/14  13:58               381 llvm-link.exe.manifest
2021/05/14  13:58         3,574,272 llvm-lipo.exe
2021/05/14  13:58               381 llvm-lipo.exe.manifest
2021/05/12  10:10             1,807 llvm-lit.py
2021/05/14  14:01            11,051 llvm-locstats
2021/05/12  21:53        61,766,656 llvm-lto.exe
2021/05/12  21:53               381 llvm-lto.exe.manifest
2021/05/14  13:58        63,990,784 llvm-lto2.exe
2021/05/14  13:58               381 llvm-lto2.exe.manifest
2021/05/14  13:58        21,020,160 llvm-mc.exe
2021/05/14  13:58               381 llvm-mc.exe.manifest
2021/05/14  13:58        18,053,120 llvm-mca.exe
2021/05/14  13:58               381 llvm-mca.exe.manifest
2021/05/14  13:52           393,216 llvm-microsoft-demangle-fuzzer.exe
2021/05/14  13:52               381 llvm-microsoft-demangle-fuzzer.exe.manifest
2021/05/14  13:51         3,150,336 llvm-modextract.exe
2021/05/14  13:51               381 llvm-modextract.exe.manifest
2021/05/14  13:51           290,304 llvm-mt.exe
2021/05/14  13:51               381 llvm-mt.exe.manifest
2021/05/14  13:52        20,587,008 llvm-nm.exe
2021/05/14  13:52               381 llvm-nm.exe.manifest
2021/05/14  13:59         4,103,680 llvm-objcopy.exe
2021/05/14  13:59               381 llvm-objcopy.exe.manifest
2021/05/14  13:59        19,801,088 llvm-objdump.exe
2021/05/14  13:59               381 llvm-objdump.exe.manifest
2021/05/14  13:59        57,371,648 llvm-opt-fuzzer.exe
2021/05/14  13:59               381 llvm-opt-fuzzer.exe.manifest
2021/05/14  13:59           612,864 llvm-opt-report.exe
2021/05/14  13:59               381 llvm-opt-report.exe.manifest
2021/05/14  14:00         5,419,520 llvm-pdbutil.exe
2021/05/14  14:00               381 llvm-pdbutil.exe.manifest
2021/05/12  21:51            28,672 llvm-PerfectShuffle.exe
2021/05/12  21:51               381 llvm-PerfectShuffle.exe.manifest
2021/05/12  21:53         1,844,736 llvm-profdata.exe
2021/05/12  21:52               381 llvm-profdata.exe.manifest
2021/05/12  21:52        20,395,008 llvm-ranlib.exe
2021/05/14  14:00           422,912 llvm-rc.exe
2021/05/14  14:00               381 llvm-rc.exe.manifest
2021/05/14  14:01         5,681,152 llvm-readelf.exe
2021/05/14  14:01         5,681,152 llvm-readobj.exe
2021/05/14  14:01               381 llvm-readobj.exe.manifest
2021/05/13  13:08         3,035,136 llvm-reduce.exe
2021/05/13  13:08               381 llvm-reduce.exe.manifest
2021/05/13  13:08        16,795,136 llvm-rtdyld.exe
2021/05/13  13:08               381 llvm-rtdyld.exe.manifest
2021/05/14  14:00         3,576,320 llvm-size.exe
2021/05/14  14:00               381 llvm-size.exe.manifest
2021/05/14  14:00           355,840 llvm-special-case-list-fuzzer.exe
2021/05/14  14:00               381 llvm-special-case-list-fuzzer.exe.manifest
2021/05/14  14:00         3,651,584 llvm-split.exe
2021/05/14  14:00               381 llvm-split.exe.manifest
2021/05/14  14:00         1,933,312 llvm-stress.exe
2021/05/14  14:00               381 llvm-stress.exe.manifest
2021/05/14  14:00           339,968 llvm-strings.exe
2021/05/14  14:00               381 llvm-strings.exe.manifest
2021/05/14  13:59         4,103,680 llvm-strip.exe
2021/05/14  14:00         4,435,968 llvm-symbolizer.exe
2021/05/14  14:00               381 llvm-symbolizer.exe.manifest
2021/05/12  10:28         3,421,696 llvm-tblgen.exe
2021/05/12  10:28               381 llvm-tblgen.exe.manifest
2021/05/14  14:00           387,584 llvm-undname.exe
2021/05/14  14:00               381 llvm-undname.exe.manifest
2021/05/14  14:00         4,788,736 llvm-xray.exe
2021/05/14  14:00               381 llvm-xray.exe.manifest
2021/05/14  14:00           353,792 llvm-yaml-numeric-parser-fuzzer.exe
2021/05/14  14:00               381 llvm-yaml-numeric-parser-fuzzer.exe.manifest
2021/05/12  21:53        64,603,648 LTO.dll
2021/05/12  21:53               381 LTO.dll.manifest
2021/05/13  13:09        21,147,648 modularize.exe
2021/05/13  13:09               381 modularize.exe.manifest
2021/05/12  21:51           219,136 not.exe
2021/05/12  21:51               381 not.exe.manifest
2021/05/14  14:01         5,296,128 obj2yaml.exe
2021/05/14  14:01               381 obj2yaml.exe.manifest
2021/05/14  14:01        64,059,904 opt.exe
2021/05/14  14:01               381 opt.exe.manifest
2021/05/13  13:25        21,052,416 pp-trace.exe
2021/05/13  13:25               381 pp-trace.exe.manifest
2021/05/14  14:01           387,072 Remarks.dll
2021/05/14  14:01               381 Remarks.dll.manifest
2021/05/14  14:01        19,348,992 sancov.exe
2021/05/14  14:01               381 sancov.exe.manifest
2021/05/14  14:01         4,393,984 sanstats.exe
2021/05/14  14:01               381 sanstats.exe.manifest
2021/05/12  21:53            58,440 scan-build
2021/05/12  21:53                23 scan-build.bat
2021/05/12  21:53             4,852 scan-view
2021/05/13  13:33        21,413,376 tool-template.exe
2021/05/13  13:33               381 tool-template.exe.manifest
2021/05/14  14:01         3,582,464 verify-uselistorder.exe
2021/05/14  14:01               381 verify-uselistorder.exe.manifest
2021/05/12  21:51           439,296 yaml-bench.exe
2021/05/12  21:51               381 yaml-bench.exe.manifest
2021/05/14  14:01         1,631,744 yaml2obj.exe
2021/05/14  14:01               381 yaml2obj.exe.manifest
             226 个文件  2,200,399,344 字节
               2 个目录 179,987,931,136 可用字节

E:\llvm\llvm-project\build\bin>

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值