如何在 Centos 7 上构建 Sorbet(缺失 llvm_toolchain)

How to build Sorbet on Centos 7 (missing llvm_toolchain)

我正在尝试在 Centos 7.5 上构建 Stripe 的 Sorbet 二进制文件,并且我安装了 bazel 0.28.1。

我尝试使用 bazel build //main:sorbet --config=dbg 构建,但失败了:

WARNING: The following configs were expanded more than once: [debugsymbols]. 
For repeatable flags, repeats are counted twice and may lead to unexpected behavior.
INFO: Invocation ID: 1b2a6940-59ff-419f-ae57-f6e4129c2102
ERROR: /data/home/elemental/sorbet/main/BUILD:9:1: every rule of type cc_binary 
implicitly depends upon the target '@llvm_toolchain//:toolchain',
but this target could not be found because of: 
  no such package '@llvm_toolchain//': Traceback (most recent call last):
...

看起来我只是缺少 llvm 和 llvm-toolset-7,但安装它们并没有帮助。我错过了什么?

需要修改的位置是 实际上 https://github.com/DarkDimius/bazel-toolchain/blob/dp-srb-now/toolchain/internal/llvm_distributions.bzl#L52

Sorbet 需要 LLVM 8.0 来构建(因为我们正在使用 C++ 语言和标准库的一些最新部分),因此我们下载 LLVM 以获得我们用来开发的工具链。

正如在 http://releases.llvm.org/ 中看到的那样,LLVM 不再发布 CentOS 构建,因此,我希望您可以更轻松地在 ubuntu docker 中构建它容器而不是使用自定义版本的 llvm。

或者,您可以尝试传递 --crosstool_top=@bazel_tools//tools/cpp:toolchain --host_crosstool_top=@bazel_tools//tools/cpp:toolchain 以强制我们的构建使用您本地的 C++ 工具链,而不是我们尝试下载的工具链。请注意,如果您的工具链不够新,它可能无法编译 Sorbet。我们也没有在 LLVM8 以外的任何其他工具链上测试性能,并且我们在过去使用 GCC 编译时已经看到了显着的回归。