simh-testsetgenerator/cmake/build_dep_matrix.cmake
B. Scott Michel 8b14bb69be
CMake build infrastructure II (#53)
* CMake build infrastructure

The squashed commit that builds and packages releases for the SIMH
simulator suite with CMake, version 3.14 or newer.

See README-CMake.md for documentation.
2023-05-17 20:18:42 -04:00

85 lines
3.4 KiB
CMake

#~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
# build_dep_matrix.cmake
#
# This is a minor hack to build all of the various library compile
# configurations. Might take a bit more time upfront to build the
# dependencies, but the user doesn't have to go backward and attempt
# to build the dependencies themselves.
#
# Author: B. Scott Michel
# "scooter me fecit"
#~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
function(BuildDepMatrix dep pretty)
cmake_parse_arguments(_BDM "" "RELEASE_BUILD;DEBUG_BUILD" "CMAKE_ARGS" ${ARGN})
set(cmake_cfg_args
"-G${CMAKE_GENERATOR}"
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}")
if (CMAKE_GENERATOR_PLATFORM)
list(APPEND cmake_cfg_args "-A" "${CMAKE_GENERATOR_PLATFORM}")
endif ()
if (CMAKE_GENERATOR_TOOLSET)
list(APPEND cmake_cfg_args "-T" "${CMAKE_GENERATOR_TOOLSET}")
endif ()
string(REPLACE ";" "$<SEMICOLON>" _amend_cmake_prefix_path "${SIMH_PREFIX_PATH_LIST}")
string(REPLACE ";" "$<SEMICOLON>" _amend_cmake_include_path "${SIMH_INCLUDE_PATH_LIST}")
list(APPEND cmake_cfg_args ${DEP_CMAKE_ARGS})
list(APPEND cmake_cfg_args -DCMAKE_PREFIX_PATH=${_amend_cmake_prefix_path}
-DCMAKE_INCLUDE_PATH=${_amend_cmake_include_path}
${_BDM_CMAKE_ARGS}
"<SOURCE_DIR>"
)
if (NOT _BDM_RELEASE_BUILD)
set(_BDM_RELEASE_BUILD "Release")
endif (NOT _BDM_RELEASE_BUILD)
if (NOT _BDM_DEBUG_BUILD)
set(_BDM_DEBUG_BUILD "Debug")
endif (NOT _BDM_DEBUG_BUILD)
set(dep_cmds)
foreach (cfg IN ITEMS ${_BDM_DEBUG_BUILD} ${_BDM_RELEASE_BUILD})
## Set the MSVC runtime. Can't use a generator expression here,
## have to "nail it down."
set(use_msvcrt "MultiThreaded")
if (cfg STREQUAL ${_BDM_DEBUG_BUILD})
string(APPEND use_msvcrt "Debug")
endif ()
if (BUILD_SHARED_DEPS)
string(APPEND use_msvcrt "DLL")
endif ()
list(APPEND dep_cmds COMMAND ${CMAKE_COMMAND} -E echo "-- Building ${pretty} '${cfg}' configuration")
list(APPEND dep_cmds COMMAND ${CMAKE_COMMAND} -E remove -f CMakeCache.txt)
list(APPEND dep_cmds COMMAND ${CMAKE_COMMAND} -E remove_directory CMakeFiles)
list(APPEND dep_cmds COMMAND ${CMAKE_COMMAND}
${cmake_cfg_args}
-DCMAKE_BUILD_TYPE:STRING=${cfg}
-DCMAKE_INSTALL_PREFIX:STRING=${SIMH_DEP_TOPDIR}
-DCMAKE_POLICY_DEFAULT_CMP0091:STRING=NEW
-DCMAKE_MSVC_RUNTIME_LIBRARY:STRING=${use_msvcrt}
)
list(APPEND dep_cmds COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config "${cfg}" --clean-first)
list(APPEND dep_cmds COMMAND ${CMAKE_COMMAND} --install <BINARY_DIR> --config ${cfg})
endforeach ()
## Unset CMAKE_MODULE_PATH temporarily for external projects
set(_saved_cmake_module_path ${CMAKE_MODULE_PATH})
set(CMAKE_MODULE_PATH "")
## message("${dep_cmds}")
ExternalProject_Add_Step(${dep} build-dbg-release
DEPENDEES configure
WORKING_DIRECTORY <BINARY_DIR>
${dep_cmds}
)
set(CMAKE_MODULE_PATH ${_saved_cmake_module_path})
unset(_saved_cmake_module_path)
endfunction ()