diff --git "a/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250Clang\347\274\226\350\257\221.md" "b/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250Clang\347\274\226\350\257\221.md" index 2d25fd54df82d76231dd303bae176647b60968fb..f15be048044d80055486f7c5f413edb601e849f2 100644 --- "a/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250Clang\347\274\226\350\257\221.md" +++ "b/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250Clang\347\274\226\350\257\221.md" @@ -1,13 +1,14 @@ # 使用LLVM/Clang编译 本章介绍LLVM/Clang编译的一些基本知识,并通过示例进行实际演示。更多Clang使用方法请通过**clang --help**命令查询。 + - [使用LLVM/Clang编译](#使用llvmclang编译) - - [简介](#简介) - - [LLVM/Clang安装](#llvmclang安装) - - [多版本共存支持](#多版本共存支持) - - [示例](#示例) + - [简介](#简介) + - [LLVM/Clang多版本安装](#LLVM/Clang多版本安装) + - [示例](#示例) + - [手动构建支持](#手动构建支持) @@ -15,89 +16,76 @@ LLVM是一种涵盖多种编程语言和目标处理器的编译器,使用Clang作为C和C++的编译和驱动程序。Clang不仅仅可以将C, C++程序编译为LLVM中间表示的IR,也会调用所有以代码生成为目标的LLVM优化遍,直到生成最终的二进制文件。 -## LLVM/Clang安装 +## LLVM/Clang多版本安装 -openEuler操作系统中通过yum源安装Clang和LLVM软件包。默认安装llvm-12 +在openEuler操作系统中,Clang/LLVM工具链可通过官方yum仓库进行标准化安装。为兼容不同场景对LLVM版本的需求,系统采用主副版本共存机制:默认安装稳定主版本的同时,支持部署更高版本的LLVM。 -```shell -yum install llvm -yum install clang -yum install lld // openEuler yum源中目前没有lld-12版本 -``` +| openEuler版本 | llvm主版本 | 安装方式 | llvm副版本 | 安装方式 | +|----------------|------------|--------------------------|---------------|--------------------------------------------------------------------------| +| 22.03-SP3 | llvm12 | yum install -y clang | llvm17、llvm18 | yum install -y llvm-toolset-17
yum install -y llvm-toolset-18| +| 22.03-SP4 | llvm12 | yum install -y clang | llvm17、llvm18 | yum install -y llvm-toolset-17
yum install -y llvm-toolset-18| +| 24.03 | llvm17 | yum install -y clang | NA | NA | +| 24.03-SP1 | llvm17 | yum install -y clang | llvm18 | yum install -y llvm-toolset-18| -验证安装是否成功 +以openEuler 22.03-SP4为例,验证主版本安装是否成功 ```shell clang -v -``` - -若返回结果中包含clang版本信息,说明安装成功。 - -## 多版本共存支持 - -openEuler LLVM/Clang 多版本支持的方式如下: - -```text -yum包名: -llvm{-*} -clang{-*} -lld{-*} -bolt{-*} -例如: -clang15 -llvm15-devel - -安装路径: -/usr/lib64/llvm -例如: -/usr/lib64/llvm15 - -/usr/bin目录下会安装带有-后缀的可执行文件 -例如: -/usr/bin/clang-15 -/usr/bin/lld-15 -``` - -目前支持的LLVM/Clang版本有 -```text -llvm //默认llvm12 -llvm-15 +clang version 12.0.1 (openEuler 12.0.1-6.oe2203sp4 f4a7df2c51fa9eb3679555ef2de92c638ba9f880) +Target: aarch64-unknown-linux-gnu +Thread model: posix +InstalledDir: /usr/bin +Found candidate GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/10.3.1 +Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/10.3.1 +Selected GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/10.3.1 +Candidate multilib: .;@m64 +Selected multilib: .;@m64 ``` -通过yum安装其他版本 +验证副版本安装是否成功 ```shell -yum install llvm15 -yum install clang15 -yum install lld15 -``` - -验证安装是否成功 +source /opt/openEuler/llvm-toolset-17/enable +clang -v -```shell -clang-15 -v +clang version 17.0.6 ( 17.0.6-4.oe2203sp4) +Target: aarch64-openEuler-linux-gnu +Thread model: posix +InstalledDir: /opt/openEuler/llvm-toolset-17/root/usr/bin +System configuration file directory: /etc/llvm-toolset-17-clang/ +Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/10.3.1 +Selected GCC installation: /usr/lib/gcc/aarch64-linux-gnu/10.3.1 +Candidate multilib: .;@m64 +Selected multilib: .;@m64 ``` +若返回结果中包含clang版本信息,说明安装成功。 + ## 示例 编译运行C/C++程序 ```shell -clang [command line flags] hello.c -o hello.o +clang [compiler-flags] hello.c -o hello.o ./hello.o ``` ```shell -clang++ [command line flags] hello.cpp -o hello.o +clang++ [compiler-flags] hello.cpp -o hello.o ./hello.o ``` 指定的链接器为LLVM的lld,若不指定它则使用默认的lld。 ```shell -clang [command line flags] -fuse-ld=lld hello.c -o hello.o +clang [compiler-flags] -fuse-ld=lld hello.c -o hello.o ./hello.o ``` -其他通用信息请参考LLVM的[用户指导](https://llvm.org/docs/UserGuides.html) +## 手动构建支持 + +请参考openEuler [llvm-project源码仓](https://gitee.com/openeuler/llvm-project) + +#### 更多信息请参考LLVM的[用户指导](https://llvm.org/docs/UserGuides.html) +