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

被折叠的 条评论
为什么被折叠?



