From b59cd794274c8c007b2ef16c3a06fecf30c0aef1 Mon Sep 17 00:00:00 2001 From: Maxim Moskalets Date: Mon, 3 Mar 2025 22:30:38 +0300 Subject: [PATCH] Add support of compile/link jobs pooling --- .../InitializeFreeCADBuildOptions.cmake | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake index 6b19043f77..6e8c8e42b0 100644 --- a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake +++ b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake @@ -13,6 +13,8 @@ macro(InitializeFreeCADBuildOptions) option(FREECAD_USE_FREETYPE "Builds the features using FreeType libs" ON) option(FREECAD_BUILD_DEBIAN "Prepare for a build of a Debian package" OFF) option(FREECAD_CHECK_PIVY "Check for pivy version using Python at build time" ON) + option(FREECAD_PARALLEL_COMPILE_JOBS "Compilation jobs pool size to fit memory limitations.") + option(FREECAD_PARALLEL_LINK_JOBS "Linkage jobs pool size to fit memory limitations.") option(BUILD_WITH_CONDA "Set ON if you build FreeCAD with conda" OFF) option(BUILD_DYNAMIC_LINK_PYTHON "If OFF extension-modules do not link against python-libraries" ON) option(INSTALL_TO_SITEPACKAGES "If ON the freecad root namespace (python) is installed into python's site-packages" ON) @@ -206,4 +208,22 @@ macro(InitializeFreeCADBuildOptions) "Please choose another build directory! Or disable the option BUILD_FORCE_DIRECTORY.") endif() endif() + + if(FREECAD_PARALLEL_COMPILE_JOBS) + if(CMAKE_GENERATOR MATCHES "Ninja") + set_property(GLOBAL APPEND PROPERTY JOB_POOLS compile_job_pool=${FREECAD_PARALLEL_COMPILE_JOBS}) + set(CMAKE_JOB_POOL_COMPILE compile_job_pool) + else() + message(WARNING "Job pooling is only available with Ninja generators.") + endif() + endif() + + if(FREECAD_PARALLEL_LINK_JOBS) + if(CMAKE_GENERATOR MATCHES "Ninja") + set_property(GLOBAL APPEND PROPERTY JOB_POOLS link_job_pool=${FREECAD_PARALLEL_LINK_JOBS}) + set(CMAKE_JOB_POOL_LINK link_job_pool) + else() + message(WARNING "Job pooling is only available with Ninja generators.") + endif() + endif() endmacro(InitializeFreeCADBuildOptions)