OpenHarmony开发者论坛

标题: llvm工具链编译 [打印本页]

作者: 润开鸿_闻飞    时间: 2024-6-11 19:17
标题: llvm工具链编译
[md][itopen组织](https://gitee.com/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
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5