如何取消 Ninja 对并行 link 作业的限制?

How to remove Ninja's limit on parallel link jobs?

我在 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

我也查看了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

其他链接命令好像都有pool.

将我的评论变成答案

by default. But ninja allows to define pools到"allocate one or more rules or edges a finite number of concurrent jobs which is more tightly restricted than the default parallelism."

没有链接阶段限制

作为 uses to generate the build environment, I've checked the CMake code there:

 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()

所以你可以overwrite/preset LLVM_PARALLEL_LINK_JOBS 从命令行缓存变量:

> cmake -DLLVM_PARALLEL_LINK_JOBS=<your number of parallel link jobs here> ..

参考