Skip to content

Commit 5519988

Browse files
committed
improve NBL_UPDATE_SUBMODULES, introduce NBL_WRAPPER_COMMAND_INCLUSIVE and split logic into smaller macros - less git invocations & config cmd references to change submodules' update behaviour during cmd execution, specify max available jobs amount for submodule update operation
1 parent 2816212 commit 5519988

File tree

1 file changed

+69
-23
lines changed

1 file changed

+69
-23
lines changed

cmake/common.cmake

Lines changed: 69 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,7 +1270,17 @@ macro(write_source_definitions NBL_FILE NBL_WRAPPER_CODE_TO_WRITE)
12701270
endmacro()
12711271

12721272
function(NBL_UPDATE_SUBMODULES)
1273-
macro(NBL_WRAPPER_COMMAND GIT_RELATIVE_ENTRY GIT_SUBMODULE_PATH SHOULD_RECURSIVE EXCLUDE_SUBMODULE_PATH)
1273+
ProcessorCount(_GIT_SUBMODULES_JOBS_AMOUNT_)
1274+
1275+
macro(NBL_IMPL_SHALLOW_CHECK)
1276+
if(NBL_CI_GIT_SUBMODULES_SHALLOW)
1277+
set(NBL_SHALLOW "--depth=1")
1278+
else()
1279+
set(NBL_SHALLOW "")
1280+
endif()
1281+
endmacro()
1282+
1283+
macro(NBL_WRAPPER_COMMAND_EXCLUSIVE GIT_RELATIVE_ENTRY GIT_SUBMODULE_PATH SHOULD_RECURSIVE EXCLUDE_SUBMODULE_PATH)
12741284
set(SHOULD_RECURSIVE ${SHOULD_RECURSIVE})
12751285

12761286
if("${EXCLUDE_SUBMODULE_PATH}" STREQUAL "")
@@ -1279,43 +1289,79 @@ function(NBL_UPDATE_SUBMODULES)
12791289
set(NBL_EXCLUDE "-c submodule.\"${EXCLUDE_SUBMODULE_PATH}\".update=none")
12801290
endif()
12811291

1282-
if(NBL_CI_GIT_SUBMODULES_SHALLOW)
1283-
set(NBL_SHALLOW "--depth=1")
1284-
else()
1285-
set(NBL_SHALLOW "")
1286-
endif()
1292+
NBL_IMPL_SHALLOW_CHECK()
12871293

12881294
if(SHOULD_RECURSIVE)
1289-
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" ${NBL_EXCLUDE} -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init --recursive ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
1295+
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" ${NBL_EXCLUDE} -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} --recursive ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
12901296
else()
1291-
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
1297+
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} ${NBL_SHALLOW} ${GIT_SUBMODULE_PATH}\n")
12921298
endif()
12931299
endmacro()
12941300

1301+
macro(NBL_WRAPPER_COMMAND_INCLUSIVE GIT_RELATIVE_ENTRY INCLUDE_SUBMODULE_PATHS)
1302+
set(INCLUDE_SUBMODULE_PATHS ${INCLUDE_SUBMODULE_PATHS})
1303+
1304+
if("${INCLUDE_SUBMODULE_PATHS}" STREQUAL "")
1305+
set(NBL_SUBMODULE_UPDATE_CONFIG_ENTRY "")
1306+
else()
1307+
execute_process(COMMAND "${GIT_EXECUTABLE}" -C "${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}" config --file .gitmodules --get-regexp path
1308+
OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE
1309+
)
1310+
1311+
string(REGEX REPLACE "\n" ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE}")
1312+
1313+
foreach(NBL_SUBMODULE_PATH ${NBL_SUBMODULE_CONFIG_LIST})
1314+
string(REGEX REPLACE "^[^ ]+ (.*)" "\\1" NBL_SUBMODULE_PATH "${NBL_SUBMODULE_PATH}")
1315+
list(FIND INCLUDE_SUBMODULE_PATHS "${NBL_SUBMODULE_PATH}" NBL_FOUND)
1316+
1317+
if("${NBL_FOUND}" STREQUAL "-1")
1318+
string(APPEND NBL_CONFIG_SETUP_CMD "-c submodule.\"${NBL_SUBMODULE_PATH}\".update=none ") # if a submodule is not on the INCLUDE_SUBMODULE_PATHS list of a currently handedled submodule - do not let it to be updated
1319+
endif()
1320+
endforeach()
1321+
1322+
string(REPLACE "\n" "" NBL_CONFIG_SETUP_CMD "${NBL_CONFIG_SETUP_CMD}")
1323+
string(STRIP "${NBL_CONFIG_SETUP_CMD}" NBL_CONFIG_SETUP_CMD)
1324+
endif()
1325+
1326+
NBL_IMPL_SHALLOW_CHECK()
1327+
1328+
string(APPEND _NBL_UPDATE_SUBMODULES_COMMANDS_ "\"${GIT_EXECUTABLE}\" ${NBL_CONFIG_SETUP_CMD} -C \"${NBL_ROOT_PATH}/${GIT_RELATIVE_ENTRY}\" submodule update --init -j ${_GIT_SUBMODULES_JOBS_AMOUNT_} --recursive ${NBL_SHALLOW}\n")
1329+
endmacro()
1330+
12951331
if(NBL_UPDATE_GIT_SUBMODULE)
12961332
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "All submodules are about to get updated and initialized in repository because NBL_UPDATE_GIT_SUBMODULE is turned ON!")
12971333
set(_NBL_UPDATE_SUBMODULES_CMD_NAME_ "nbl-update-submodules")
12981334
set(_NBL_UPDATE_SUBMODULES_CMD_FILE_ "${NBL_ROOT_PATH_BINARY}/${_NBL_UPDATE_SUBMODULES_CMD_NAME_}.cmd")
1299-
1335+
13001336
include("${THIRD_PARTY_SOURCE_DIR}/boost/dep/wave.cmake")
13011337

1302-
if(NBL_UPDATE_GIT_SUBMODULE_INCLUDE_PRIVATE)
1303-
NBL_WRAPPER_COMMAND("" "" TRUE "")
1304-
else()
1338+
macro(NBL_IMPL_INIT_COMMON_SUBMODULES)
13051339
# 3rdparty except boost
1306-
NBL_WRAPPER_COMMAND("" ./3rdparty TRUE "3rdparty/boost/superproject")
1340+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./3rdparty TRUE 3rdparty/boost/superproject)
13071341

1308-
# boost 3rdaprty
1309-
NBL_WRAPPER_COMMAND(3rdparty/boost "./superproject" FALSE "")
1310-
NBL_WRAPPER_COMMAND(3rdparty/boost/superproject "./libs/wave" TRUE "") # boost's wave
1311-
foreach(BOOST_LIB IN LISTS NBL_BOOST_LIBS) # deps of the wave
1312-
NBL_WRAPPER_COMMAND(3rdparty/boost/superproject "./libs/${BOOST_LIB}" TRUE "")
1342+
# boost's 3rdaprties, special case
1343+
NBL_WRAPPER_COMMAND_EXCLUSIVE(3rdparty/boost ./superproject FALSE "")
1344+
set(NBL_BOOST_LIBS_TO_INIT ${NBL_BOOST_LIBS} wave)
1345+
foreach(NBL_TARGET ${NBL_BOOST_LIBS_TO_INIT})
1346+
list(APPEND NBL_BOOST_SUBMODULES_TO_INIT libs/${NBL_TARGET})
13131347
endforeach()
1314-
1315-
#NBL_WRAPPER_COMMAND("" ./ci TRUE "") TODO: enable it once we merge Ditt, etc
1316-
NBL_WRAPPER_COMMAND("" ./examples_tests FALSE "")
1317-
NBL_WRAPPER_COMMAND(examples_tests ./media FALSE "")
1318-
NBL_WRAPPER_COMMAND("" ./tests FALSE "")
1348+
NBL_WRAPPER_COMMAND_INCLUSIVE(3rdparty/boost/superproject "${NBL_BOOST_SUBMODULES_TO_INIT}")
1349+
1350+
# tests
1351+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./tests FALSE "")
1352+
endmacro()
1353+
1354+
if(NBL_UPDATE_GIT_SUBMODULE_INCLUDE_PRIVATE)
1355+
NBL_IMPL_INIT_COMMON_SUBMODULES()
1356+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./examples_tests TRUE "")
1357+
else()
1358+
NBL_IMPL_INIT_COMMON_SUBMODULES()
1359+
1360+
# NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./ci TRUE "") TODO: enable it once we merge Ditt, etc
1361+
1362+
# examples and their media
1363+
NBL_WRAPPER_COMMAND_EXCLUSIVE("" ./examples_tests FALSE "")
1364+
NBL_WRAPPER_COMMAND_EXCLUSIVE(examples_tests ./media FALSE "")
13191365
endif()
13201366

13211367
file(WRITE "${_NBL_UPDATE_SUBMODULES_CMD_FILE_}" "${_NBL_UPDATE_SUBMODULES_COMMANDS_}")

0 commit comments

Comments
 (0)