LLVM 项目博客

LLVM 项目新闻和来自前线的细节

将 libc++ 和 OpenMP 包集成到 llvm-toolchain 中

一年前我们发布了 apt.llvm.org 的最新变更. 自那时起,我们注意到这项服务的利用率显著提高。仅仅在上个月,我们发现从我们的 CDN 转移了超过 16.5TB 的数据。
由于 2018 年的 Google 代码之夏以及众多需求,我们决定将精力集中于将 LLVM 生态系统中一些优秀的项目引入 apt.llvm.org.

从 7 版本开始,libc++、libc++abi 和 OpenMP 包已可用于 llvm-toolchain 包中。这意味着,与 clang、lldb 或 lldb 一样,libc++、libc++abi 和 OpenMP 包也在 https://apt.llvm.org/. 上进行了构建、测试和发布。

此次集成旨在保留这些库的当前使用方式。新合并的包已采用 llvm-toolchain 版本号

libc++ 包
  • libc++1-7
  • libc++-7-dev
libc++abi 包
  • libc++abi1-7
  • libc++abi-7-dev
OpenMP 包
  • libomp5-7
  • libomp-7-dev
  • libomp-7-doc
这些包每天两次针对 trunk 进行构建。对于 7 版本,仅当 SVN 分支出现新变更时才会构建。
    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)。

    LLVM 工具链的稳定版包已正式发布 在 Debian Buster 中在 Ubuntu Cosmic 中.

    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