积分305 / 贡献0

提问7答案被采纳4文章45

[经验分享] llvm工具链编译 原创

润开鸿_闻飞 显示全部楼层 发表于 2024-6-11 19:17:33

itopen组织 1、提供OpenHarmony优雅实用的小工具 2、手把手适配riscv + qemu + linux的三方库移植 3、未来计划riscv + qemu + ohos的三方库移植 + 小程序开发 4、一切拥抱开源,拥抱国产化

本次编译的是官方的llvm工具链

一、代码下载

本次编译的是llvmorg-15.0.4分支

git clone https://github.com/llvm/llvm-project.git
cd llvm-project
git checkout -b llvmorg-15.0.4 llvmorg-15.0.4

二、工具链编译

llvm源码编译在ld链接阶段默认会无限吃内存,根据测试最大能消耗256G系统内存+200G的swap分区才能正常编译,所以为了避免内存不够,需要设置并行链接任务数,即 -DLLVM_PARALLEL_LINK_JOBS=2,编译命令如下

cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2 -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_INSTALL_PREFIX="/home/wen_fei/llvm/install" ../llvm

三、编译选项介绍

  • -G Ninja cmake默认导出是make项目,速度极度慢,要好几个小时,导出Ninja项目可以缩短时间
  • -DCMAKE_BUILD_TYPE=Release 构建发行版,大小约1G,默认debug版,大小达到惊人的20G!
  • -DLLVM_ENABLE_LLD=ON 使用lld链接器
  • -DCMAKE_C_COMPILER=clang 使用clang 做c编译器
  • -DCMAKE_CXX_COMPILER 使用clang++ 做c++编译器
  • -DLLVM_TARGETS_TO_BUILD="ARM;X86;AMDGPU;RISCV;WebAssembly" 指定后端编译架构
  • ../llvm-9.0.0.src/ 源代码的目录
  • -DCMAKE_INSTALL_PREFIX 最终文件安装的目录
  • -DLLVM_BUILD_LLVM_DYLIB=on 动态链接库
  • -DLLVM_LINK_LLVM_DYLIB=on
  • -DLLVM_ENABLE_RUNTIMS 使用当前构建的工具
  • -DLLVM_DISTRIBUTION_COMPONENTS 同时构建的组件
  • -DLLVM_TUNTIME_DISTRIBUTION_COMPONENTS 运行时组件
  • -DLLVM_DYLIB_COMPONENTS 动态库的组件
  • -DLLVM_INSTALL_TOOLCHAIN_ONLY 不安装开发LLVM本身的相关工具
  • -DCMAKE_BUILD_TYPE: 构建类型,Release、Debug、RelWithDebInfo、MinSizeRel
  • -DCMAKE_INSTALL_PREFIX: 安装路径
  • -DLLVM_LIBDIR_SUFFIX: 库后缀,/usr/lib64
  • -DCMKAE_C_FLAGS: C选项
  • -DCMAKE_CXX_FLAGS: C++选项
  • -DCMAKE_CXX_STANDARD: C++标准,14、17、20
  • -DLLVM_TAGETS_TO_BUILD: 平台目标,X86、PowerPC
  • -DLLVM_BUILD_TOOLS: 生成工具构建文件(默认),make llvm-ar 等
  • -DLLVM_INCLUDE_TOOLS: 包含工具
  • -DLLVM_INSTALL_CCTOOLS_SYMLINKS: 生成符号链接,lipo -> llvm-lipo 等
  • -DLLVM_BUILD_EXAMPLES: 生成示例构建文件(默认)
  • -DLLVM_INCLUDE_EXAMPLES: 包含示例
  • -DLLVM_INSTALL_BINUTILS_SYMLINKS: 生成工具的符号链接,ar -> llvm-ar 等
  • -DLLVM_BUILD_TESTS: 生成测试构建文件
  • -DLLVM_INCLUDE_BENCHMARKS: 包含基准测试
  • -DLLVM_APPEND_VC_REV: 嵌入版本修订
  • -DLLVM_BUILD_BENCHMARKS: 生成基准构建文件
  • -DLLVM_ENABLE_THREADS: 多线程(默认)
  • -DLLVM_ENABLE_UNWIND_TABLES:展开表(默认)
  • -DLLVM_ENABLE_ASSERTIONS:代码声明
  • -DLLVM_ENABLE_EH: 异常处理
  • -DLLVM_ENABLE_EXPENSIVE_CHECKS: 内存检查
  • -DLLVM_ENABLE_IDE: IDE支持
  • -DLLVM_ENABLE_PIC: -fPIC 标志(默认)
  • -DLLVM_ENABLE_RTTI: 运行时类型信息
  • -DLLVM_ENABLE_WARNINGS: 警告(默认)
  • -DLLVM_EMABLE_PEDANTIC: 学步模式(默认)
  • -DLLVM_ABI_BREAKING_CHECKS: ABI中断检查(默认)
  • -DLLVM_BUILD_32_BITS: 32位
  • -DLLVM_TARGET_ARCH: 目标体系结构,用于交叉编译
  • -DLLVM_TABLEGEN: llvm-tblgen,用于交叉编译
  • -DLLVM_LIT_ARGS:
  • -DLLVM_LIT_TOOLS_DIR:
  • -DLLVM_ENABLE_FFI: 外部函数接口库libffi
  • -DLLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR: 外部项目的源代码目录,如clang、lld、polly工具的源代码目录
  • -DLLVM_ENABLE_PROJECTS: 同级目录的相关项目:clang、clang-tools-extra、compiler-rt、debuginfo-tests、libc、libclc、libcxx、libcxxabi、libunwind、lld、lldb、llgo、openmp、parallel-libs、polly、pstl
  • -DLLVM_EXTERNAL_PROJECTS: 同时构建的外部项目
  • -DLLVM_USE_OPROFILE: 启用OProfile JIT
  • -DLLVM_PROFDATA_FILE: -fprofile-instr-use=profdataDIR
  • -DLLVM_USE_INTEL_JITEVENTS: 启用Intel Events API
  • -DLLVM_ENABLE_LIBPFM: 使用libpfm计量(默认)
  • -DLLVM_USE_PERF: 启用Perf JIT
  • -DLLVM_ENABLE_ZLIB: 启用压缩(默认)
  • -DLLVM_ENABLE_DIA_SDK: 支持MSVC DIA SDK(默认)
  • -DLLVM_USE_SANITIZER: 清理程序
  • -DLLVM_ENABLE_LTO: 启用连接时间优化 -flto
  • -DLLVM_USE_LINKER: 链接器,搜索优化 lld -> ld.lld
  • -DLLVM_ENABLE_LIBCXX: 启用 -stdlib=libc++,而非默认的stdlibc++库
  • -DLLVM_STATIC_LINK_CXX_STDLIB: 静态链接c++标准库
  • -DLLVM_ENABLE_LLD: 启用ld.lld链接器
  • -DLLVM_PARALLEL_COMPILE_JOBS: 并行编译线程数
  • -DLLVM_PARALLEL_LINK_JOBS: 并行链接线程数
  • -DLLVM_BUILD_DOCS: 生成文档构建文件,doxygen和sphinx
  • -DLLVM_ENABLE_DOXYGEN:
  • -DLLVM_ENABLE_DOXYGEN_QT_HELP
  • -DLLVM_DOXYGEN_QCH_FILENAME
  • -DLLVM_DOXYGEN_QHP_NAMESPACE
  • -DLLVM_DOXYGEN_QHP_CUST_FILTER_NAME
  • -DLLVM_DOXYGEN_QHELPGENERATOR_PATH
  • -DLLVM_DOXYGEN_SVG
  • -DLLVM_INSTALL_DOXYGEN_HTML_DIR
  • -DLLVM_ENABLE_SPHINX
  • -DSPHINX_EXECUTABLE
  • -DSPHINX_OUTPUT_MAN
  • -DSPHINX_OUTPUT_HTML
  • -DSPHINX_WARNINGS_AS_ERRORS
  • -DLLVM_INSTALL_SPHINX_HTML_DIR
  • -DLLVM_INSTALL_OCAMLDOC_HTML_DIR
  • -DLLVM_CREATE_XCODE_TOOLCHAIN: 支持macOS xcode
  • -DLLVM_BUILD_LLVM_DYLIB: 构建共享库
  • -DLLVM_LINK_LLVM_DYLIB: 将工具链接到共享库
  • -DBUILD_SHARED_LIBS: (不建议)
  • -DLLVM_OPTIMIZED_TABLEGEN: 优化调试构建时间
  • -DLLVM_REVERSE_ITERATION: 逆序无序容器
  • -DLLVM_BUILD_INSTRUMENTED_COVERAGE: 代码覆盖测试
  • -DLLVM_CCACHE_BUILD: 缓冲LLVM,加速重建LLVM
  • -DLLVM_FORCE_USE_OLD_TOOLCHAIN: 不检查编译器和标准库版本
  • -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN: 旧版本工具只是警告
  • -DLLVM_USE_NEWPM:启用新通行证管理器
  • -DLLVM_ENABLE_BINDINGS: OCaml绑定
  • -DLLVM_ENABLE_Z3_SOLVER: 启用clang静态分析器Z3约束求解器
  • -DLLVM_INCLUDE_TESTS: 包含测试
  • -DLLVM_ENABLE_WERROR: 警告即停止编译
  • -DLLVM_ENABLE_RUNTIMES: 使用刚构建的运行库,libcxx、compiler-rt、libcxxabi、libunwind 等
  • -DLLVM_DISTRIBUTION_COMPONENTS: 构建运行时组件
  • -DLLVM_DYLIB_COMPONENTS: 动态链接库的组件
  • -DLLVM_INSTALL_TOOLCHAIN_ONLY: 只安装工具链
  • -DPYTHON_EXECUTABLE: 强制指定python

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部