From: ski Date: Wed, 23 Aug 2017 09:35:34 +0000 (+0300) Subject: 0029039: Configuration - allow to choose and to have separate install directory... X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2FCR29039_710;p=occt-copy.git 0029039: Configuration - allow to choose and to have separate install directory for every RTL Added option to choose RTL type using Cmake GUI. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c2510ee1b..7674685a8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,14 @@ set_property (GLOBAL PROPERTY OCC_VERSION_MAINTENANCE ${OCC_VERSION_MAINTENANCE} set (INSTALL_TEST_CASES OFF CACHE BOOL "${INSTALL_TEST_CASES_DESCR}") +if (MSVC) + # overwrite type of used RTL libraries + if (NOT BUILD_CHANGE_USED_RTL_TYPE) + set (BUILD_CHANGE_USED_RTL_TYPE "default" CACHE STRING "${BUILD_CHANGE_USED_RTL_TYPE_DESCR}" FORCE) + set_property(CACHE BUILD_CHANGE_USED_RTL_TYPE PROPERTY STRINGS "default" "static/release RTL" "static/debug RTL" "dynamic/release RTL" "dynamic/debug RTL") + endif() +endif() + # Regeneration of OCCT resource files set (BUILD_RESOURCES OFF CACHE BOOL "${BUILD_RESOURCES_DESCR}") @@ -201,6 +209,26 @@ if (NOT DEFINED INSTALL_DIR_LIB) endif() endif() +if (MSVC) + if (NOT DEFINED BUILD_CHANGE_USED_RTL_TYPE_PREV) + set (BUILD_CHANGE_USED_RTL_TYPE_PREV "${BUILD_CHANGE_USED_RTL_TYPE}" CACHE INTERNAL "" FORCE) + elseif (NOT "${BUILD_CHANGE_USED_RTL_TYPE_PREV}" STREQUAL "${BUILD_CHANGE_USED_RTL_TYPE}") + if ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/release RTL") + set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/release_rtl/static_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE) + set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/release_rtl/static_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE) + elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/debug RTL") + set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/debug_rtl/static_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE) + set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/debug_rtl/static_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE) + elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/release RTL") + set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/release_rtl/dynamic_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE) + set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/release_rtl/dynamic_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE) + elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/debug RTL") + set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/debug_rtl/dynamic_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE) + set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/debug_rtl/dynamic_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE) + endif() + endif() +endif() + # OCCT headers: /inc for windows, # /include/opencascade-7.0.0 for unix if (NOT DEFINED INSTALL_DIR_INCLUDE) diff --git a/adm/cmake/occt_defs_flags.cmake b/adm/cmake/occt_defs_flags.cmake index 65fff6e721..2db1209344 100644 --- a/adm/cmake/occt_defs_flags.cmake +++ b/adm/cmake/occt_defs_flags.cmake @@ -134,3 +134,76 @@ endif() set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception") set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception") + +# unset unused configurations variables and update CACHE variables +get_cmake_property(ALL_CACHE_VARIABLES CACHE_VARIABLES) +string (REGEX MATCHALL "(^|;)CMAKE_[A-Z_]+_FLAGS[^;]*" CACHE_VARIABLES_FLAGS "${ALL_CACHE_VARIABLES}") +foreach (CACHE_FLAG ${CACHE_VARIABLES_FLAGS}) + if (NOT "x${${CACHE_FLAG}}" STREQUAL "x") + OCCT_REMOVE_DUPLICATES_SUBSTRING(${${CACHE_FLAG}} ${CACHE_FLAG}) + endif() + string (REGEX MATCH "CMAKE_[A-Z_]+_FLAGS_([^;]+)" CONFIGURATION_NAME "${CACHE_FLAG}") + string (TOLOWER "${CMAKE_MATCH_1}" CMAKE_MATCH_1) + set (ISFOUND OFF) + if (NOT "x${CMAKE_MATCH_1}" STREQUAL "x") + foreach (conf ${CMAKE_CONFIGURATION_TYPES}) + string (TOLOWER "${conf}" conf) + if ( "${conf}" STREQUAL "${CMAKE_MATCH_1}" ) + set (ISFOUND ON) + endif() + endforeach() + if (NOT ISFOUND AND MSVC) + unset("${CACHE_FLAG}" CACHE) + else() + set (${CACHE_FLAG} "${${CACHE_FLAG}}" CACHE STRING "" FORCE) + endif() + else() + set (${CACHE_FLAG} "${${CACHE_FLAG}}" CACHE STRING "" FORCE) + endif() +endforeach() + +if (MSVC) + # Update CRT defines if BUILD_CHANGE_USED_RTL_TYPE variable was changed + if (NOT "${BUILD_CHANGE_USED_RTL_TYPE_PREV}" STREQUAL "${BUILD_CHANGE_USED_RTL_TYPE}") + set (BUILD_CHANGE_USED_RTL_TYPE_PREV "${BUILD_CHANGE_USED_RTL_TYPE}" CACHE INTERNAL "" FORCE) + + get_cmake_property(ALL_CACHE_VARIABLES CACHE_VARIABLES) + string (REGEX MATCHALL "(^|;)CMAKE_C[X]*_FLAGS[^;]*" CACHE_VARIABLES_C_FLAGS "${ALL_CACHE_VARIABLES}") + + foreach(CMAKE_C_FLAG ${CACHE_VARIABLES_C_FLAGS}) + OCCT_REMOVE_CRL_DEFINES (${CMAKE_C_FLAG}) + endforeach() + + if ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/release RTL") + message (STATUS "Info. Release Static RTLs are used.") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MT") + elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/debug RTL") + message (STATUS "Info. Debug Static RTLs are used.") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MTd") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MTd") + elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/release RTL") + message (STATUS "Info. Release Dynamic RTLs are used.") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MD") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MD") + elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/debug RTL") + message (STATUS "Info. Debug Dynamic RTLs are used.") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MDd") + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MDd") + else() + string (REGEX MATCHALL "(^|;)CMAKE_C[X]*_FLAGS_[^;]+" CACHE_VARIABLES_C_FLAGS_WITH_CONF "${ALL_CACHE_VARIABLES}") + foreach(CMAKE_C_FLAG ${CACHE_VARIABLES_C_FLAGS_WITH_CONF}) + string (REGEX MATCH "CMAKE_C[X]*_FLAGS_([^;]+)" CONFIGURATION_NAME "${CMAKE_C_FLAG}") + if ( "x${CMAKE_MATCH_1}" STREQUAL "xDEBUG") + set (${CMAKE_C_FLAG} "${${CMAKE_C_FLAG}} /MDd") + else() + set (${CMAKE_C_FLAG} "${${CMAKE_C_FLAG}} /MD") + endif() + endforeach() + endif() + + foreach(CMAKE_C_FLAG ${CACHE_VARIABLES_C_FLAGS}) + set (${CMAKE_C_FLAG} "${${CMAKE_C_FLAG}}" CACHE STRING "" FORCE) + endforeach() + endif() +endif() diff --git a/adm/cmake/occt_macros.cmake b/adm/cmake/occt_macros.cmake index 1381625eb1..2a64aa3f7a 100644 --- a/adm/cmake/occt_macros.cmake +++ b/adm/cmake/occt_macros.cmake @@ -602,3 +602,17 @@ macro (OCCT_CREATE_SYMLINK_TO_FILE LIBRARY_NAME LINK_NAME) ") endif() endmacro() + +macro (OCCT_REMOVE_CRL_DEFINES VARIABLE_NAME) + set( CompilerFlags /MDd /MTd /MD /MT ) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "${CompilerFlag}" "" ${VARIABLE_NAME} "${${VARIABLE_NAME}}") + endforeach() +endmacro() + +function(OCCT_REMOVE_DUPLICATES_SUBSTRING INPUT_STRING OUTPUT_STRING) + separate_arguments(INPUT_STRING) + list(REMOVE_DUPLICATES INPUT_STRING) + string(REPLACE ";" " " INPUT_STRING "${INPUT_STRING}") + set(${OUTPUT_STRING} "${INPUT_STRING}" PARENT_SCOPE) +endfunction() diff --git a/adm/cmake/vardescr.cmake b/adm/cmake/vardescr.cmake index bf578f87e5..a1ba72564b 100644 --- a/adm/cmake/vardescr.cmake +++ b/adm/cmake/vardescr.cmake @@ -122,6 +122,10 @@ leads to automatic search of Doxygen binaries. Building of it will be call Doxyg to generate the documentation in HTML format. The documentation will be available in the installation directory (overview.bat script) if INSTALL_DOC_Overview variable is checked") +set (BUILD_CHANGE_USED_RTL_TYPE_DESCR +"Indicates whether a multithreaded module is a DLL or static and specifies retail or debug versions of the run-time library. +In case of default value define /MDd will be used for Debug configuration and define /MD will be used for other configurations.") + set (3RDPARTY_DIR_DESCR "The root directory where all required third-party products will be searched. If a third-party product have been found - corresponding CMake variables will be specified