将 libc++ 和 OpenMP 包集成到 llvm-toolchain 中
此次集成旨在保留这些库的当前使用方式。新合并的包已采用 llvm-toolchain 版本号
libc++ 包
libc++ 包
- libc++1-7
- libc++-7-dev
- libc++abi1-7
- libc++abi-7-dev
- libomp5-7
- libomp-7-dev
- libomp-7-doc
libc++* 包的集成
libc++ 和 libc++abi 包均在同一时间构建,使用在此过程中构建的 clang 进行构建。Debian 和 Ubuntu 存储库中现有的 libc++ 和 libc++abi 包不会受到影响(它们将在某个时间点被删除)。新集成的 libcxx* 包与其不可同时安装。
已从原始位置提供符号链接,以保持库的用法相同。
例如: /usr/lib/x86_64-linux-gnu/libc++.so.1.0 -> /usr/lib/llvm-7/lib/libc++.so.1.0
libc++ 的用法仍然非常简单
用法
$ clang++-7 -std=c++11 -stdlib=libc++ foo.cpp
$ ldd ./a.out|grep libc++
libc++.so.1 => /usr/lib/x86_64-linux-gnu/libc++.so.1 (0x00007f62a1a90000)
libc++abi.so.1 => /usr/lib/x86_64-linux-gnu/libc++abi.so.1 (0x00007f62a1a59000)
为了测试 libc++ 中的新开发成果,我们还在构建实验性功能。
例如,以下命令将直接生效
$ clang++-7 -std=c++17 -stdlib=libc++ foo.cpp -lc++experimental -lc++fs
OpenMP 包的集成
尽管 OpenMP 包 一直存在于 Debian 和 Ubuntu 档案中,但仅提供了一个版本的包。
目前,新集成的包会从 /usr/lib/libomp.so.5 创建一个符号链接到 /usr/lib/llvm-7/lib/libomp.so.5,保持当前用法相同,并使其不可同时安装。
它可以通过 -fopenmp 标志与 clang 一起使用
$ clang -fopenmp foo.c
提供默认 libc++* 和 OpenMP 包的依赖包也已 集成到 llvm-defaults 中。这意味着以下命令将在当前版本中安装所有这些 新包:
$ apt-get install libc++-dev libc++abi-dev libomp-dev
LLVM 7 => 8 过渡
与 libc++ 和 OpenMP 工作并行进行的是, https://apt.llvm.org/ 已更新以 反映 7 从 trunk 分支的拆分。
因此,我们目前在平台上拥有
稳定 | 6.0 |
认证 | 7 |
开发 | 8 |
请注意,从 7 版本开始,包和库被称为 7(而不是 7.0)。
Cosmic 支持
为了确保 LLVM 工具链在 这个新版本中没有太多回归,我们还支持下一个 Ubuntu 版本 18.10,也称为 Cosmic。
关于同时安装的说明
我们尝试使它们能够同时安装,但在最终的包中,我们无法控制 运行时使用的库。这可能导致许多 不可预见 的问题。考虑到这些因素,我们决定使它们与其他版本冲突。
未来工作
- 新集成的包的代码覆盖率构建失败
- 迁移到两阶段构建,使用 clang 生成 clang 二进制文件
该项目的源代码可在 Debian 的 gitlab 实例上获取:https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/tree/7
Reshabh Sharma 和 Sylvestre Ledru