From d60bf4f15fd5b382a36fa85bb005c5a4bf390748 Mon Sep 17 00:00:00 2001 From: dpasukhi Date: Mon, 15 Dec 2025 13:06:56 +0000 Subject: [PATCH] Configuration - Parallel installing and improve catching cmake version - Added macros for version-gated boolean options in CMake. - Updated CMakeLists.txt to conditionally enable precompiled headers and parallel installation based on CMake version. - Enhanced documentation for new build options in vardescr.cmake. --- CMakeLists.txt | 28 +++++++++++++--------------- adm/cmake/occt_macros.cmake | 17 +++++++++++++++++ adm/cmake/vardescr.cmake | 4 ++++ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e8e743430e4..4d21e4e1584 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,21 +206,23 @@ if (BUILD_FORCE_RelWithDebInfo) set (CMAKE_CONFIGURATION_TYPES Release Debug CACHE INTERNAL "" FORCE) endif() -# option to enable or disable use of precompiled headers -if (NOT DEFINED BUILD_USE_PCH) - set (BUILD_USE_PCH OFF CACHE BOOL "${BUILD_USE_PCH_DESCR}") -endif() +# Version-gated build options (enabled by default when CMake version is sufficient) +OCCT_VERSION_GATED_OPTION (BUILD_USE_PCH "3.16" ON "${BUILD_USE_PCH_DESCR}") +OCCT_VERSION_GATED_OPTION (BUILD_INCLUDE_SYMLINK "3.14" ON "${BUILD_INCLUDE_SYMLINK_DESCR}") +OCCT_VERSION_GATED_OPTION (BUILD_INSTALL_PARALLEL "3.30" ON "${BUILD_INSTALL_PARALLEL_DESCR}") -if (CMAKE_VERSION VERSION_LESS "3.16") - OCCT_CHECK_AND_UNSET (BUILD_USE_PCH) -elseif (NOT BUILD_USE_PCH) - set (CMAKE_DISABLE_PRECOMPILE_HEADERS ON) -else () +# Apply precompiled headers setting +if (BUILD_USE_PCH) set (CMAKE_DISABLE_PRECOMPILE_HEADERS OFF) +elseif (DEFINED BUILD_USE_PCH) + set (CMAKE_DISABLE_PRECOMPILE_HEADERS ON) endif() -if (NOT DEFINED BUILD_INCLUDE_SYMLINK) - set (BUILD_INCLUDE_SYMLINK OFF CACHE BOOL "${BUILD_INCLUDE_SYMLINK_DESCR}") +# Apply parallel installation setting +if (BUILD_INSTALL_PARALLEL) + set_property (GLOBAL PROPERTY INSTALL_PARALLEL ON) +elseif (DEFINED BUILD_INSTALL_PARALLEL) + set_property (GLOBAL PROPERTY INSTALL_PARALLEL OFF) endif() # Overview @@ -237,10 +239,6 @@ if (NOT DEFINED INSTALL_DOC_RefMan) set (INSTALL_DOC_RefMan OFF CACHE BOOL "${INSTALL_DOC_RefMan_DESCR}") endif() -if (CMAKE_VERSION VERSION_LESS "3.14") - OCCT_CHECK_AND_UNSET (BUILD_INCLUDE_SYMLINK) -endif() - # copy samples to install directory set (INSTALL_SAMPLES OFF CACHE BOOL "${INSTALL_SAMPLES_DESCR}") diff --git a/adm/cmake/occt_macros.cmake b/adm/cmake/occt_macros.cmake index 360a5306cf8..698f6a83c34 100644 --- a/adm/cmake/occt_macros.cmake +++ b/adm/cmake/occt_macros.cmake @@ -12,6 +12,23 @@ macro (OCCT_CHECK_AND_UNSET VARNAME) endif() endmacro() +# Macro to define a version-gated boolean option. +# If CMake version is sufficient, option defaults to DEFAULT_ON value. +# If CMake version is too old, option is unset and unavailable. +# VARNAME - variable name +# MIN_VERSION - minimum CMake version required +# DEFAULT_ON - default value when version is sufficient (ON/OFF) +# DESCRIPTION - variable description +macro (OCCT_VERSION_GATED_OPTION VARNAME MIN_VERSION DEFAULT_ON DESCRIPTION) + if (CMAKE_VERSION VERSION_LESS "${MIN_VERSION}") + OCCT_CHECK_AND_UNSET (${VARNAME}) + else() + if (NOT DEFINED ${VARNAME}) + set (${VARNAME} ${DEFAULT_ON} CACHE BOOL "${DESCRIPTION}") + endif() + endif() +endmacro() + macro (OCCT_CHECK_AND_UNSET_GROUP GROUPNAME) get_cmake_property(VARS VARIABLES) string (REGEX MATCHALL "(^|;)${GROUPNAME}[A-Za-z0-9_]*" GROUPNAME_VARS "${VARS}") diff --git a/adm/cmake/vardescr.cmake b/adm/cmake/vardescr.cmake index f874b18a00c..c7b4d3ed11f 100644 --- a/adm/cmake/vardescr.cmake +++ b/adm/cmake/vardescr.cmake @@ -49,6 +49,10 @@ set (BUILD_INCLUDE_SYMLINK_DESCR OFF - using a reference file with direct include to the origin, ON - symbolic link to the origin file are created") +set (BUILD_INSTALL_PARALLEL_DESCR +"Enable parallel installation (requires CMake 3.30+). +When enabled, cmake --install can use -j option to install in parallel.") + # install variables set (INSTALL_DIR_DESCR "The place where built OCCT libraries, headers, test cases (INSTALL_TEST_CASES variable),