资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > C/C++/C#

LLVM系列(2)- LLVM的源码编译

C/C++/C# 更新时间: 发布时间: 计算机考试归档 最新发布

LLVM系列(2)- LLVM的源码编译

LLVM系列(2)- LLVM的源码编译

如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

文章目录
  • LLVM系列(2)- LLVM的源码编译
    • 前言
    • 1. 前置准备
      • 1.1 硬件
      • 1.2 软件
    • 2. 下载源码
    • 3. 编译
    • 3. 结果

环境:

系统: windows 10 64位
编译器:Visual Studio 2022
cmake【必须】: 3.22.5 (2022-06-02)
python【必须】: 3.6.8
系统: Ubuntu 20.04
编译器:gcc/g++ 9.3.0
cmake【必须】: 3.16.4
python【必须】: 3.8.5
ninja: 1.10.2

创建时间:2022-06-19
更新时间:2022-06-22

前言

LLVM 项目是模块化和可重用的编译器和工具链技术的集合。

LLVM 最初是伊利诺伊大学的一个研究项目,目标是提供一种现代的、基于 SSA 的编译策略,能够支持任意编程语言的静态和动态编译。

1. 前置准备 1.1 硬件
硬盘:建议使用SSD硬盘。仅编译LLVM需要1-3GB; LLVM和Clang完全编译需要15-20GB。
内存:建议16GB以上
1.2 软件
编译器:windows(vs2017及以上) linux(gcc 7.1.0及以上)
cmake: 3.13.4及以上(vs2022需要3.21及以上)
python: 3.6及以上
2. 下载源码
wget https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-12.0.1.tar.gz
3. 编译
  • windows

build_vs2022.bat

mkdir bin_vs2022
cd bin_vs2022

cmake ../llvm -G "Visual Studio 17 2022" -Thost=x64 ^
-DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install ^
-DLLVM_ENABLE_LLD=ON -DLLVM_TARGETS_TO_BUILD=host -DBUILD_SHARED_LIBS=OFF ^
-DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON ^
-DLLVM_ENABLE_DUMP=ON -DLLVM_ENABLE_CRASH_DUMPS=ON -DLLVM_ENABLE_PDB=ON ^
-DLLVM_BUILD_TOOLS=OFF -DLLVM_BUILD_UTILS=OFF ^
-DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF

echo cmake --build . --target INSTALL -j --config Debug

pause
  • linux

build_gcc.sh

mkdir bin_linux
cd bin_linux

cmake -B ~/build ../llvm -G Ninja 
-DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install 
-DLLVM_ENABLE_LLD=OFF -DLLVM_TARGETS_TO_BUILD=host -DBUILD_SHARED_LIBS=ON 
-DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EH=ON 
-DLLVM_ENABLE_DUMP=ON -DLLVM_ENABLE_CRASH_DUMPS=ON -DLLVM_ENABLE_PDB=ON 
-DLLVM_BUILD_TOOLS=OFF -DLLVM_BUILD_UTILS=OFF 
-DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF

echo cmake --build . -j --config Debug
echo ninja
  • 命令说明
-DCMAKE_BUILD_TYPE=Debug # 构建模式
-DCMAKE_INSTALL_PREFIX=install # 安装目录
-DLLVM_ENABLE_LLD=ON # 启动LLVM的链接器LLD,替代系统链接器,运行速度更快
-DLLVM_TARGETS_TO_BUILD=host # host表示当前处理器架构。all表示构建所有目标
-DBUILD_SHARED_LIBS=OFF # 生成动态库还是静态库。windows msvc无效
-DLLVM_ENABLE_ASSERTIONS=ON # 启用断言检查,Debug模式默认开启
-DLLVM_ENABLE_RTTI=ON # 启用运行时类型信息,可能与其他库有不兼容问题
-DLLVM_ENABLE_EH=ON # 启用C++异常处理,可能与其他库有不兼容问题
-DLLVM_ENABLE_DUMP=ON # Enable dump functions even when assertions are disabled
-DLLVM_ENABLE_CRASH_DUMPS=ON # Trun on memory dumps on crashes. Currently only implemented on Windows
-DLLVM_ENABLE_PDB=ON # release模式也生成pdb
-DLLVM_BUILD_TOOLS=OFF # 禁止构建LLVM工具(如llvm-as)
-DLLVM_BUILD_UTILS=OFF # 禁止构建llvm utils(如FileCheck)
-DLLVM_INCLUDE_BENCHMARKS=OFF # 禁止构建LLVM基准测试 
-DLLVM_INCLUDE_TESTS=OFF # 禁止LLVM单元测试添加到构建列表,此选项会连带禁用clang、lldb等单元测试
-DLLVM_INCLUDE_DOCS=OFF # 禁止LLVM文档添加到构建列表,此选项会连带禁用clang等文档

LLVM CMake选项的完整列表:
https://releases.llvm.org/12.0.1/docs/CMake.html#llvm-specific-variables

3. 结果
  • windows
install $ tree 
.
+--- bin
|   +--- LLVM-C.dll
|   +--- LTO.dll
|   +--- Remarks.dll
+--- include
|   +--- llvm
|   +--- llvm-c
+--- lib
|   +--- cmake
|   |   +--- llvm
|   +--- LLVM-C.lib
|   +--- LLVMAggressiveInstCombine.lib
|   +--- LLVMAnalysis.lib
|   +--- LLVMAsmParser.lib
|   +--- LLVMAsmPrinter.lib
|   +--- LLVMBinaryFormat.lib
|   +--- LLVMBitReader.lib
|   +--- LLVMBitstreamReader.lib
|   +--- LLVMBitWriter.lib
|   +--- LLVMCFGuard.lib
|   +--- LLVMCodeGen.lib
|   +--- LLVMCore.lib
|   +--- LLVMCoroutines.lib
|   +--- LLVMCoverage.lib
|   +--- LLVMDebugInfoCodeView.lib
|   +--- LLVMDebugInfoDWARF.lib
|   +--- LLVMDebugInfoGSYM.lib
|   +--- LLVMDebugInfoMSF.lib
|   +--- LLVMDebugInfoPDB.lib
|   +--- LLVMDemangle.lib
|   +--- LLVMDlltoolDriver.lib
|   +--- LLVMDWARFLinker.lib
|   +--- LLVMExecutionEngine.lib
|   +--- LLVMExtensions.lib
|   +--- LLVMFileCheck.lib
|   +--- LLVMFrontendOpenACC.lib
|   +--- LLVMFrontendOpenMP.lib
|   +--- LLVMFuzzMutate.lib
|   +--- LLVMGlobalISel.lib
|   +--- LLVMHelloNew.lib
|   +--- LLVMInstCombine.lib
|   +--- LLVMInstrumentation.lib
|   +--- LLVMInterfaceStub.lib
|   +--- LLVMInterpreter.lib
|   +--- LLVMipo.lib
|   +--- LLVMIRReader.lib
|   +--- LLVMJITLink.lib
|   +--- LLVMLibDriver.lib
|   +--- LLVMLineEditor.lib
|   +--- LLVMLinker.lib
|   +--- LLVMLTO.lib
|   +--- LLVMMC.lib
|   +--- LLVMMCA.lib
|   +--- LLVMMCDisassembler.lib
|   +--- LLVMMCJIT.lib
|   +--- LLVMMCParser.lib
|   +--- LLVMMIRParser.lib
|   +--- LLVMObjCARCOpts.lib
|   +--- LLVMObject.lib
|   +--- LLVMObjectYAML.lib
|   +--- LLVMOption.lib
|   +--- LLVMOrcJIT.lib
|   +--- LLVMOrcShared.lib
|   +--- LLVMOrcTargetProcess.lib
|   +--- LLVMPasses.lib
|   +--- LLVMProfileData.lib
|   +--- LLVMRemarks.lib
|   +--- LLVMRuntimeDyld.lib
|   +--- LLVMScalarOpts.lib
|   +--- LLVMSelectionDAG.lib
|   +--- LLVMSupport.lib
|   +--- LLVMSymbolize.lib
|   +--- LLVMTableGen.lib
|   +--- LLVMTarget.lib
|   +--- LLVMTextAPI.lib
|   +--- LLVMTransformUtils.lib
|   +--- LLVMVectorize.lib
|   +--- LLVMWindowsManifest.lib
|   +--- LLVMX86AsmParser.lib
|   +--- LLVMX86CodeGen.lib
|   +--- LLVMX86Desc.lib
|   +--- LLVMX86Disassembler.lib
|   +--- LLVMX86Info.lib
|   +--- LLVMXRay.lib
|   +--- LTO.lib
|   +--- Remarks.lib
+--- share
|   +--- opt-viewer
|   |   +--- opt-diff.py
|   |   +--- opt-stats.py
|   |   +--- opt-viewer.py
|   |   +--- optpmap.py
|   |   +--- optrecord.py
|   |   +--- style.css
  • linux
install $ tree 
.
├── include
│   ├── llvm
│   └── llvm-c
├── lib
│   ├── cmake
│   │   └── llvm
│   ├── libLLVMAggressiveInstCombine.so -> libLLVMAggressiveInstCombine.so.12
│   ├── libLLVMAggressiveInstCombine.so.12
│   ├── libLLVMAnalysis.so -> libLLVMAnalysis.so.12
│   ├── libLLVMAnalysis.so.12
│   ├── libLLVMAsmParser.so -> libLLVMAsmParser.so.12
│   ├── libLLVMAsmParser.so.12
│   ├── libLLVMAsmPrinter.so -> libLLVMAsmPrinter.so.12
│   ├── libLLVMAsmPrinter.so.12
│   ├── libLLVMBinaryFormat.so -> libLLVMBinaryFormat.so.12
│   ├── libLLVMBinaryFormat.so.12
│   ├── libLLVMBitReader.so -> libLLVMBitReader.so.12
│   ├── libLLVMBitReader.so.12
│   ├── libLLVMBitstreamReader.so -> libLLVMBitstreamReader.so.12
│   ├── libLLVMBitstreamReader.so.12
│   ├── libLLVMBitWriter.so -> libLLVMBitWriter.so.12
│   ├── libLLVMBitWriter.so.12
│   ├── libLLVMCFGuard.so -> libLLVMCFGuard.so.12
│   ├── libLLVMCFGuard.so.12
│   ├── libLLVMCodeGen.so -> libLLVMCodeGen.so.12
│   ├── libLLVMCodeGen.so.12
│   ├── libLLVMCore.so -> libLLVMCore.so.12
│   ├── libLLVMCore.so.12
│   ├── libLLVMCoroutines.so -> libLLVMCoroutines.so.12
│   ├── libLLVMCoroutines.so.12
│   ├── libLLVMCoverage.so -> libLLVMCoverage.so.12
│   ├── libLLVMCoverage.so.12
│   ├── libLLVMDebugInfoCodeView.so -> libLLVMDebugInfoCodeView.so.12
│   ├── libLLVMDebugInfoCodeView.so.12
│   ├── libLLVMDebugInfoDWARF.so -> libLLVMDebugInfoDWARF.so.12
│   ├── libLLVMDebugInfoDWARF.so.12
│   ├── libLLVMDebugInfoGSYM.so -> libLLVMDebugInfoGSYM.so.12
│   ├── libLLVMDebugInfoGSYM.so.12
│   ├── libLLVMDebugInfoMSF.so -> libLLVMDebugInfoMSF.so.12
│   ├── libLLVMDebugInfoMSF.so.12
│   ├── libLLVMDebugInfoPDB.so -> libLLVMDebugInfoPDB.so.12
│   ├── libLLVMDebugInfoPDB.so.12
│   ├── libLLVMDemangle.so -> libLLVMDemangle.so.12
│   ├── libLLVMDemangle.so.12
│   ├── libLLVMDlltoolDriver.so -> libLLVMDlltoolDriver.so.12
│   ├── libLLVMDlltoolDriver.so.12
│   ├── libLLVMDWARFLinker.so -> libLLVMDWARFLinker.so.12
│   ├── libLLVMDWARFLinker.so.12
│   ├── libLLVMExecutionEngine.so -> libLLVMExecutionEngine.so.12
│   ├── libLLVMExecutionEngine.so.12
│   ├── libLLVMExtensions.so -> libLLVMExtensions.so.12
│   ├── libLLVMExtensions.so.12
│   ├── libLLVMFileCheck.so -> libLLVMFileCheck.so.12
│   ├── libLLVMFileCheck.so.12
│   ├── libLLVMFrontendOpenACC.so -> libLLVMFrontendOpenACC.so.12
│   ├── libLLVMFrontendOpenACC.so.12
│   ├── libLLVMFrontendOpenMP.so -> libLLVMFrontendOpenMP.so.12
│   ├── libLLVMFrontendOpenMP.so.12
│   ├── libLLVMFuzzMutate.so -> libLLVMFuzzMutate.so.12
│   ├── libLLVMFuzzMutate.so.12
│   ├── libLLVMGlobalISel.so -> libLLVMGlobalISel.so.12
│   ├── libLLVMGlobalISel.so.12
│   ├── libLLVMHelloNew.so -> libLLVMHelloNew.so.12
│   ├── libLLVMHelloNew.so.12
│   ├── libLLVMInstCombine.so -> libLLVMInstCombine.so.12
│   ├── libLLVMInstCombine.so.12
│   ├── libLLVMInstrumentation.so -> libLLVMInstrumentation.so.12
│   ├── libLLVMInstrumentation.so.12
│   ├── libLLVMInterfaceStub.so -> libLLVMInterfaceStub.so.12
│   ├── libLLVMInterfaceStub.so.12
│   ├── libLLVMInterpreter.so -> libLLVMInterpreter.so.12
│   ├── libLLVMInterpreter.so.12
│   ├── libLLVMipo.so -> libLLVMipo.so.12
│   ├── libLLVMipo.so.12
│   ├── libLLVMIRReader.so -> libLLVMIRReader.so.12
│   ├── libLLVMIRReader.so.12
│   ├── libLLVMJITLink.so -> libLLVMJITLink.so.12
│   ├── libLLVMJITLink.so.12
│   ├── libLLVMLibDriver.so -> libLLVMLibDriver.so.12
│   ├── libLLVMLibDriver.so.12
│   ├── libLLVMLineEditor.so -> libLLVMLineEditor.so.12
│   ├── libLLVMLineEditor.so.12
│   ├── libLLVMLinker.so -> libLLVMLinker.so.12
│   ├── libLLVMLinker.so.12
│   ├── libLLVMLTO.so -> libLLVMLTO.so.12
│   ├── libLLVMLTO.so.12
│   ├── libLLVMMCA.so -> libLLVMMCA.so.12
│   ├── libLLVMMCA.so.12
│   ├── libLLVMMCDisassembler.so -> libLLVMMCDisassembler.so.12
│   ├── libLLVMMCDisassembler.so.12
│   ├── libLLVMMCJIT.so -> libLLVMMCJIT.so.12
│   ├── libLLVMMCJIT.so.12
│   ├── libLLVMMCParser.so -> libLLVMMCParser.so.12
│   ├── libLLVMMCParser.so.12
│   ├── libLLVMMC.so -> libLLVMMC.so.12
│   ├── libLLVMMC.so.12
│   ├── libLLVMMIRParser.so -> libLLVMMIRParser.so.12
│   ├── libLLVMMIRParser.so.12
│   ├── libLLVMObjCARCOpts.so -> libLLVMObjCARCOpts.so.12
│   ├── libLLVMObjCARCOpts.so.12
│   ├── libLLVMObject.so -> libLLVMObject.so.12
│   ├── libLLVMObject.so.12
│   ├── libLLVMObjectYAML.so -> libLLVMObjectYAML.so.12
│   ├── libLLVMObjectYAML.so.12
│   ├── libLLVMOption.so -> libLLVMOption.so.12
│   ├── libLLVMOption.so.12
│   ├── libLLVMOrcJIT.so -> libLLVMOrcJIT.so.12
│   ├── libLLVMOrcJIT.so.12
│   ├── libLLVMOrcShared.so -> libLLVMOrcShared.so.12
│   ├── libLLVMOrcShared.so.12
│   ├── libLLVMOrcTargetProcess.so -> libLLVMOrcTargetProcess.so.12
│   ├── libLLVMOrcTargetProcess.so.12
│   ├── libLLVMPasses.so -> libLLVMPasses.so.12
│   ├── libLLVMPasses.so.12
│   ├── libLLVMProfileData.so -> libLLVMProfileData.so.12
│   ├── libLLVMProfileData.so.12
│   ├── libLLVMRemarks.so -> libLLVMRemarks.so.12
│   ├── libLLVMRemarks.so.12
│   ├── libLLVMRuntimeDyld.so -> libLLVMRuntimeDyld.so.12
│   ├── libLLVMRuntimeDyld.so.12
│   ├── libLLVMScalarOpts.so -> libLLVMScalarOpts.so.12
│   ├── libLLVMScalarOpts.so.12
│   ├── libLLVMSelectionDAG.so -> libLLVMSelectionDAG.so.12
│   ├── libLLVMSelectionDAG.so.12
│   ├── libLLVMSupport.so -> libLLVMSupport.so.12
│   ├── libLLVMSupport.so.12
│   ├── libLLVMSymbolize.so -> libLLVMSymbolize.so.12
│   ├── libLLVMSymbolize.so.12
│   ├── libLLVMTableGen.so -> libLLVMTableGen.so.12
│   ├── libLLVMTableGen.so.12
│   ├── libLLVMTarget.so -> libLLVMTarget.so.12
│   ├── libLLVMTarget.so.12
│   ├── libLLVMTextAPI.so -> libLLVMTextAPI.so.12
│   ├── libLLVMTextAPI.so.12
│   ├── libLLVMTransformUtils.so -> libLLVMTransformUtils.so.12
│   ├── libLLVMTransformUtils.so.12
│   ├── libLLVMVectorize.so -> libLLVMVectorize.so.12
│   ├── libLLVMVectorize.so.12
│   ├── libLLVMWindowsManifest.so -> libLLVMWindowsManifest.so.12
│   ├── libLLVMWindowsManifest.so.12
│   ├── libLLVMX86AsmParser.so -> libLLVMX86AsmParser.so.12
│   ├── libLLVMX86AsmParser.so.12
│   ├── libLLVMX86CodeGen.so -> libLLVMX86CodeGen.so.12
│   ├── libLLVMX86CodeGen.so.12
│   ├── libLLVMX86Desc.so -> libLLVMX86Desc.so.12
│   ├── libLLVMX86Desc.so.12
│   ├── libLLVMX86Disassembler.so -> libLLVMX86Disassembler.so.12
│   ├── libLLVMX86Disassembler.so.12
│   ├── libLLVMX86Info.so -> libLLVMX86Info.so.12
│   ├── libLLVMX86Info.so.12
│   ├── libLLVMXRay.so -> libLLVMXRay.so.12
│   ├── libLLVMXRay.so.12
│   ├── libLTO.so -> libLTO.so.12
│   ├── libLTO.so.12
│   ├── libRemarks.so -> libRemarks.so.12
│   └── libRemarks.so.12
└── share
    └── opt-viewer
        ├── opt-diff.py
        ├── optpmap.py
        ├── optrecord.py
        ├── opt-stats.py
        ├── opt-viewer.py
        └── style.css

License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033


Reference:

  1. https://llvm.org/docs/GettingStarted.html
  2. http://www.aosabook.org/en/llvm.html
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/983030.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【LLVM系列(2)- LLVM的源码编译】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2