如何解除 Ninja 对并行链接作业的限制?

Jia*_* Xu 6 ninja

我在 Debian 9 上使用 Ninja 1.8.2 来使用 llvm-5.0 构建 llvm-6.0。

当我检查系统的CPU使用率时,我发现CPU并没有100%使用,而且还有足够的内存。

检查 cmake 的输出后,我发现它将并行链接作业限制为 2 个,因为在我的机器上运行的 llvm 也是并行运行的。

我想尝试解除该限制是否会使我的构建速度更快,但几乎没有任何相关文档。

编辑:

我检查了构建目录中的rules.ninja 文件的内容,并发现了这些:

#############################################
# Pools defined by global property JOB_POOLS

pool link_job_pool
  depth = 2
Run Code Online (Sandbox Code Playgroud)

我还检查了 build.ninja 的内容并发现了这一点:

build lib/libLLVMDemangle.a: CXX_STATIC_LIBRARY_LINKER__LLVMDemangle lib/Demangle/CMakeFiles/LLVMDemangle.dir/ItaniumDemangle.cpp.o
  LANGUAGE_COMPILE_FLAGS = -Ofast -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -std=c++1y -Wal       l -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -W       non-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fcolor-diagnostics -ffunction-sections -fdata-sections -flto=thin -O3 -D       NDEBUG
  OBJECT_DIR = lib/Demangle/CMakeFiles/LLVMDemangle.dir
  POST_BUILD = :
  PRE_LINK = :
  TARGET_FILE = lib/libLLVMDemangle.a
  TARGET_PDB = LLVMDemangle.a.dbg
  pool = link_job_pool
Run Code Online (Sandbox Code Playgroud)

似乎其他用于链接的命令都有 arg pool。

Flo*_*ian 6

将我的评论变成答案

没有链接阶段限制。但ninja允许定义池来“分配一个或多个规则或边缘有限数量的并发作业,这比默认并行性受到更严格的限制”。

由于使用生成构建环境,我检查了那里的CMake 代码:

 if(NOT LLVM_PARALLEL_LINK_JOBS AND uppercase_LLVM_ENABLE_LTO STREQUAL "THIN")
  message(STATUS "ThinLTO provides its own parallel linking - limiting parallel link jobs to 2.")
  set(LLVM_PARALLEL_LINK_JOBS "2")
endif()
Run Code Online (Sandbox Code Playgroud)

LLVM_PARALLEL_LINK_JOBS因此,您可以从命令行覆盖/预设缓存变量:

> cmake -DLLVM_PARALLEL_LINK_JOBS=<your number of parallel link jobs here> ..
Run Code Online (Sandbox Code Playgroud)

参考