summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorChris Mahoney <chris.mahoney@kitware.com>2023-08-09 14:28:25 (GMT)
committerChris Mahoney <chris.mahoney@kitware.com>2023-08-15 12:21:30 (GMT)
commitbc43398e72be08b55d7df1f5195f0c3fc37506da (patch)
tree042e77e41a12cfeebf759b6aff2f09640c9177e4 /Modules
parent99be022428dcbf505cf889ff5d6f8de62821f652 (diff)
downloadCMake-bc43398e72be08b55d7df1f5195f0c3fc37506da.zip
CMake-bc43398e72be08b55d7df1f5195f0c3fc37506da.tar.gz
CMake-bc43398e72be08b55d7df1f5195f0c3fc37506da.tar.bz2
ExternalProject: Enable Make Job Server with Explicit Build Command
Introduces `BUILD_JOB_SERVER_AWARE` option to `ExternalProject_Add` and `JOB_SERVER_AWARE` to `ExternalProject_Add_Step`. When using an explicit `BUILD_COMMAND` or `COMMAND`, the generated commands won't use `$(MAKE)` thus failing to connect to the outer make's job server. These new options enable explicit job server integration. Co-authored-by: Brad King <brad.king@kitware.com> Fixes: #16273
Diffstat (limited to 'Modules')
-rw-r--r--Modules/ExternalProject.cmake40
1 files changed, 40 insertions, 0 deletions
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index bec5c8e..dc9d2ce 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -684,6 +684,14 @@ pass ``-v`` to the external project's build step, even if it also uses
build step's own underlying call to :command:`add_custom_command`, which
has additional documentation.
+``BUILD_JOB_SERVER_AWARE <bool>``
+ .. versionadded:: 3.28
+
+ Specifies that the build step is aware of the GNU Make job server.
+ See the :command:`add_custom_command` documentation of its
+ ``JOB_SERVER_AWARE`` option for details. This option is relevant
+ only when an explicit ``BUILD_COMMAND`` is specified.
+
Install Step Options
""""""""""""""""""""
@@ -1021,6 +1029,13 @@ control needed to implement such step-level capabilities.
When enabled, this option specifies that the custom step should always be
run (i.e. that it is always considered out of date).
+ ``JOB_SERVER_AWARE <bool>``
+ .. versionadded:: 3.28
+
+ Specifies that the custom step is aware of the GNU Make job server.
+ See the :command:`add_custom_command` documentation of its
+ ``JOB_SERVER_AWARE`` option for details.
+
``EXCLUDE_FROM_MAIN <bool>``
When enabled, this option specifies that the external project's main target
does not depend on the custom step.
@@ -2366,6 +2381,7 @@ function(ExternalProject_Add_Step name step)
INDEPENDENT
BYPRODUCTS
ALWAYS
+ JOB_SERVER_AWARE
EXCLUDE_FROM_MAIN
WORKING_DIRECTORY
LOG
@@ -2545,6 +2561,16 @@ function(ExternalProject_Add_Step name step)
set(maybe_COMMAND_touch "COMMAND \${CMAKE_COMMAND} -E touch \${stamp_file}")
endif()
+ get_property(job_server_aware
+ TARGET ${name}
+ PROPERTY _EP_${step}_JOB_SERVER_AWARE
+ )
+ if(job_server_aware)
+ set(maybe_JOB_SERVER_AWARE "JOB_SERVER_AWARE 1")
+ else()
+ set(maybe_JOB_SERVER_AWARE "")
+ endif()
+
# Wrap with log script?
get_property(log TARGET ${name} PROPERTY _EP_${step}_LOG)
if(command AND log)
@@ -2571,6 +2597,7 @@ function(ExternalProject_Add_Step name step)
COMMENT \${comment}
COMMAND ${__cmdQuoted}
${maybe_COMMAND_touch}
+ ${maybe_JOB_SERVER_AWARE}
DEPENDS \${depends}
WORKING_DIRECTORY \${work_dir}
VERBATIM
@@ -3945,6 +3972,17 @@ function(_ep_add_build_command name)
PROPERTY _EP_BUILD_BYPRODUCTS
)
+ get_property(build_job_server_aware
+ TARGET ${name}
+ PROPERTY _EP_BUILD_JOB_SERVER_AWARE
+ )
+ if(build_job_server_aware)
+ set(maybe_JOB_SERVER_AWARE "JOB_SERVER_AWARE 1")
+ else()
+ set(maybe_JOB_SERVER_AWARE "")
+ endif()
+
+
set(__cmdQuoted)
foreach(__item IN LISTS cmd)
string(APPEND __cmdQuoted " [==[${__item}]==]")
@@ -3958,6 +3996,7 @@ function(_ep_add_build_command name)
DEPENDEES configure
DEPENDS \${file_deps}
ALWAYS \${always}
+ ${maybe_JOB_SERVER_AWARE}
${log}
${uses_terminal}
)"
@@ -4252,6 +4291,7 @@ function(ExternalProject_Add name)
BUILD_IN_SOURCE
BUILD_ALWAYS
BUILD_BYPRODUCTS
+ BUILD_JOB_SERVER_AWARE
#
# Install step options
#