From 73063665bd6fca0c41f712ca618cb25146f949c5 Mon Sep 17 00:00:00 2001 From: Andrea Iob Date: Thu, 29 Oct 2020 08:41:04 +0100 Subject: [PATCH] cmake: add functions to define deprecated/experimental features Experimental feature are disabled by default, whereas deprecated features are enabled by default. Cmake variables related to experimental and deprecated functions are advanced variables and they will only be visible if the variables BITPIT_SHOW_EXPERIMENTAL or BITPIT_SHOW_DEPRECATED are set to ON. For each deprecated/experimental feature a corresponding preprocessor macro will be defined. Given the feature FEATURE in the module MODULE, the corresponding preprocessor macro will be called BITPIT_MODULE_FEATURE. The value of the macro will be set to 1 if the feature is enable or it will be set to 0 if the feature is disabled. --- CMakeLists.txt | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index aaa7481528..7d3b764c16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,6 +121,62 @@ function(addModuleIncludeDirectories MODULE_NAME) include_directories("${PROJECT_SOURCE_DIR}/src/${MODULE_NAME}") endfunction() +# Define an experimental feature +# +# Experimental features are disabled by default. +function(defineExperimentalFeature FEATURE_NAME FEATURE_DESCRIPTION) + defineFeature("EXPERIMENTAL_${FEATURE_NAME}" ${FEATURE_DESCRIPTION} 0) +endfunction() + +# Define a module experimental feature +# +# Experimental features are disabled by default. +function(defineExperimentalModuleFeature MODULE_NAME FEATURE_NAME FEATURE_DESCRIPTION) + string(TOUPPER ${MODULE_NAME} UPPERCASE_MODULE_NAME) + set(MODULE_FEATURE_NAME "${UPPERCASE_MODULE_NAME}_EXPERIMENTAL_${FEATURE_NAME}") + defineFeature("${MODULE_FEATURE_NAME}" ${FEATURE_DESCRIPTION} 0) +endfunction() + +# Define a deprecated feature +# +# Deprecated features are enabled by default. +function(defineDeprecatedFeature FEATURE_NAME FEATURE_DESCRIPTION) + defineFeature("DEPRECATED_${FEATURE_NAME}" ${FEATURE_DESCRIPTION} 1) +endfunction() + +# Define a module deprecated feature +# +# Deprecated features are enabled by default. +function(defineDeprecatedModuleFeature MODULE_NAME FEATURE_NAME FEATURE_DESCRIPTION) + string(TOUPPER ${MODULE_NAME} UPPERCASE_MODULE_NAME) + set(MODULE_FEATURE_NAME "${UPPERCASE_MODULE_NAME}_DEPRECATED_${FEATURE_NAME}") + defineFeature("${MODULE_FEATURE_NAME}" ${FEATURE_DESCRIPTION} 1) +endfunction() + +# Define a feature +# +# For each feature a corresponding preprocessor macro will be defined. Given +# the feature FEATURE the corresponding preprocessor macro will be called +# BITPIT_FEATURE. Ye value of the macro will be set to 1 if the feature is +# enable or it will be set to 0 if the feature is disabled. +function(defineFeature FEATURE_NAME FEATURE_DESCRIPTION DEFAULT_STATUS) + string(TOUPPER ${FEATURE_NAME} UPPER_FEATURE_NAME) + set(BITPIT_FEATURE_NAME BITPIT_${UPPER_FEATURE_NAME}) + set(${BITPIT_FEATURE_NAME} ${DEFAULT_STATUS} CACHE BOOL ${FEATURE_DESCRIPTION}) + mark_as_advanced(${BITPIT_FEATURE_NAME}) + + set(FEATURE_ENTRY "${BITPIT_FEATURE_NAME}") + if(NOT DEFINED ${BITPIT_FEATURE_NAME}) + set(FEATURE_ENTRY "${FEATURE_ENTRY}=0") + elseif(${BITPIT_FEATURE_NAME}) + set(FEATURE_ENTRY "${FEATURE_ENTRY}=1") + else () + set(FEATURE_ENTRY "${FEATURE_ENTRY}=0") + endif() + set_property(DIRECTORY "${PROJECT_SOURCE_DIR}" APPEND PROPERTY COMPILE_DEFINITIONS ${FEATURE_ENTRY}) + +endfunction() + #------------------------------------------------------------------------------------# # Link Time Optimization (LTO) #------------------------------------------------------------------------------------# @@ -318,6 +374,10 @@ set(DISCRETIZATION_EXTERNAL_DEPS "CBLAS;LAPACKE") set(LEVELSET_EXTERNAL_DEPS "") set(POD_EXTERNAL_DEPS "LAPACKE") +#------------------------------------------------------------------------------------# +# Experimental/deprecated features +#------------------------------------------------------------------------------------# + #------------------------------------------------------------------------------------# # Internal dependencies #------------------------------------------------------------------------------------#