diff --git a/contrib/platform/win32/CMakeModules/check_bool.cmake b/contrib/platform/win32/CMakeModules/check_bool.cmake new file mode 100644 index 0000000000..5da5129db2 --- /dev/null +++ b/contrib/platform/win32/CMakeModules/check_bool.cmake @@ -0,0 +1,56 @@ +# +# Copyright (c) 2010 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + + +# check compiler support of bool and +# possibly get its size and alignment +MACRO(OMPI_CHECK_BOOL) + + FOREACH(LANG c cxx) + + STRING(TOUPPER ${LANG} LANG_U) + + IF(NOT DEFINED SIZEOF_${LANG_U}_BOOL) + + MESSAGE( STATUS "Checking size of ${LANG} bool...") + + FILE (WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_sizeof_bool.${LANG}" + "#include + int main() {return sizeof(bool);} + ") + + TRY_RUN(SIZEOF_${LANG_U}_BOOL COMPILE_RESULT "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_sizeof_bool.${LANG}") + + IF(SIZEOF_${LANG_U}_BOOL GREATER 0) + MESSAGE(STATUS "Checking size of ${LANG} bool...${SIZEOF_${LANG_U}_BOOL}") + C_GET_ALIGNMENT(bool ${LANG} BOOL) + SET(OPAL_ALIGNMENT_${LANG_U}_BOOL ${OPAL_ALIGNMENT_BOOL} CACHE INTERNAL "Sizeof ${LANG} bool.") + ELSE(SIZEOF_${LANG_U}_BOOL GREATER 0) + MESSAGE(STATUS "Checking size of ${LANG} bool...failed") + SET(SIZEOF_${LANG_U}_BOOL 1 CACHE INTERNAL "Sizeof ${LANG} bool.") + SET(OPAL_ALIGNMENT_${LANG_U}_BOOL 1 CACHE INTERNAL "Sizeof ${LANG} bool.") + SET(OPAL_NEED_${LANG_U}_BOOL 1 CACHE INTERNAL "true if compiler doesn't support bool.") + ENDIF(SIZEOF_${LANG_U}_BOOL GREATER 0) + + ENDIF(NOT DEFINED SIZEOF_${LANG_U}_BOOL) + + OMPI_DEF_VAR(OPAL_NEED_${LANG_U}_BOOL + "Define to 1 if the C compiler doesn't support bool\n without any other help (such as )." 0 0) + OMPI_DEF_VAR(SIZEOF_${LANG_U}_BOOL "The size of ${LANG} `bool'." 0 1) + OMPI_DEF_VAR(OPAL_ALIGNMENT_${LANG_U}_BOOL "Alignment of ${LANG} `bool'." 0 1) + + ENDFOREACH(LANG c cxx) + + # Opal defines these without language type.... + OMPI_DEF(SIZEOF_BOOL 1 "The size of `bool'." 0 1) + OMPI_DEF(OPAL_ALIGNMENT_BOOL 1 "Sizeof bool." 0 1) + +ENDMACRO(OMPI_CHECK_BOOL) \ No newline at end of file diff --git a/contrib/platform/win32/CMakeModules/ompi_base_checks.cmake b/contrib/platform/win32/CMakeModules/ompi_base_checks.cmake new file mode 100644 index 0000000000..2ecd882945 --- /dev/null +++ b/contrib/platform/win32/CMakeModules/ompi_base_checks.cmake @@ -0,0 +1,98 @@ +# +# Copyright (c) 2010 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# this file contains +# 1. several wrappers for CMake macros, so that they will +# do the job and write the configure temeplate file too. +# 2. a few macros that checks the + +# check include file +MACRO(OMPI_CHECK_INCLUDE_FILE FILE_NAME VAR_NAME) + + CHECK_INCLUDE_FILE(${FILE_NAME} ${VAR_NAME}) + OMPI_DEF_VAR(${VAR_NAME} "Define to 1 if you have <${FILE_NAME}> header file." 0 0) + +ENDMACRO(OMPI_CHECK_INCLUDE_FILE FILE_NAME VAR_NAME) + + +# check if function exists +MACRO(OMPI_CHECK_FUNCTION_EXISTS FUNCTION_NAME VAR_NAME) + + CHECK_FUNCTION_EXISTS(${FUNCTION_NAME} ${VAR_NAME}) + OMPI_DEF_VAR(${VAR_NAME} "Define to 1 if you have the `${FUNCTION_NAME}' function." 0 0) + +ENDMACRO(OMPI_CHECK_FUNCTION_EXISTS FUNCTION_NAME VAR_NAME) + + +# check if symbol exists +MACRO(OMPI_CHECK_SYMBOL_EXISTS SYMBOL_NAME FILE_NAMES VAR_NAME) + + CHECK_SYMBOL_EXISTS(${SYMBOL_NAME} "${FILE_NAMES}" ${VAR_NAME}) + OMPI_DEF_VAR(${VAR_NAME} "Define to 1 if you have the `${SYMBOL_NAME}' function." 0 0) + +ENDMACRO(OMPI_CHECK_SYMBOL_EXISTS SYMBOL_NAME FILE_NAMES VAR_NAME) + + +# check if structure has member +MACRO(OMPI_CHECK_STRUCT_HAS_MEMBER STRUC_NAME MEMBER_NAME FILE_NAMES VAR_NAME) + + CHECK_SYMBOL_EXISTS(${STRUC_NAME} ${MEMBER_NAME} "${FILE_NAMES}" ${VAR_NAME}) + OMPI_DEF_VAR(${VAR_NAME} "Define to 1 if `${MEMBER_NAME}' is member of ${STRUC_NAME}." 0 0) + +ENDMACRO(OMPI_CHECK_STRUCT_HAS_MEMBER STRUC_NAME MEMBER_NAME FILE_NAMES VAR_NAME) + + +# check type size and alignment +MACRO(OMPI_CHECK_TYPES TYPE_NAME VAR_NAME DEFAULT_TYPE LAN) + + CHECK_TYPE_SIZE(${TYPE_NAME} ${VAR_NAME}) + + IF(NOT ${VAR_NAME}_CHECK_DONE) + + IF (HAVE_${VAR_NAME}) + SET(SIZEOF_${VAR_NAME} ${${VAR_NAME}} CACHE INTERNAL "Size of `${TYPE_NAME}'") + C_GET_ALIGNMENT(${TYPE_NAME} ${LAN} ${VAR_NAME}) + ELSE(HAVE_${VAR_NAME}) + IF(NOT ${DEFAULT_TYPE} STREQUAL "" AND NOT ${DEFAULT_TYPE} STREQUAL "none") + + #Get the variable name of the default type size. + STRING(TOUPPER "${DEFAULT_TYPE}" DEFAULT_TYPE_VAR) + STRING(REPLACE " " "_" DEFAULT_TYPE_VAR ${DEFAULT_TYPE_VAR}) + + IF(${SIZEOF_${DEFAULT_TYPE_VAR}} GREATER 0) + MESSAGE(STATUS "Define it as '${DEFAULT_TYPE}'.") + + SET(${TYPE_NAME} ${DEFAULT_TYPE} CACHE INTERNAL "System support type for `${TYPE_NAME}'") + SET(SIZEOF_${VAR_NAME} ${SIZEOF_${DEFAULT_TYPE_VAR}} CACHE INTERNAL "Size of `${TYPE_NAME}'") + SET(OPAL_ALIGNMENT_${VAR_NAME} ${OPAL_ALIGNMENT_${DEFAULT_TYPE_VAR}}) + ENDIF(${SIZEOF_${DEFAULT_TYPE_VAR}} GREATER 0) + + ENDIF(NOT ${DEFAULT_TYPE} STREQUAL "" AND NOT ${DEFAULT_TYPE} STREQUAL "none") + ENDIF (HAVE_${VAR_NAME}) + + SET(${VAR_NAME}_CHECK_DONE 1 CACHE INTERNAL "check for `${VAR_NAME}' is done.") + + ENDIF(NOT ${VAR_NAME}_CHECK_DONE) + + IF(NOT ${DEFAULT_TYPE} STREQUAL "" AND NOT ${DEFAULT_TYPE} STREQUAL "none") + OMPI_DEF_VAR(${TYPE_NAME} "Define to `${DEFAULT_TYPE}' if system types does not define." 0 0) + ENDIF(NOT ${DEFAULT_TYPE} STREQUAL "" AND NOT ${DEFAULT_TYPE} STREQUAL "none") + + #CMake automatically sets the HAVE_type to TURE or FALSE, + #but we need a number. + IF(HAVE_${VAR_NAME}) + SET(HAVE_${VAR_NAME} 1) + ENDIF(HAVE_${VAR_NAME}) + + OMPI_DEF_VAR(SIZEOF_${VAR_NAME} "The size of `${TYPE_NAME}'" 0 0) + OMPI_DEF_VAR(HAVE_${VAR_NAME} "Define to 1 if the system has the type `${TYPE_NAME}'" 0 0) + OMPI_DEF_VAR(OPAL_ALIGNMENT_${VAR_NAME} "Alignment of type `${TYPE_NAME}'." 0 0) + +ENDMACRO(OMPI_CHECK_TYPES TYPE VAR_NAME DEFAULT_TYPE LAN) diff --git a/contrib/platform/win32/CMakeModules/ompi_define.cmake b/contrib/platform/win32/CMakeModules/ompi_define.cmake new file mode 100644 index 0000000000..27b6c72638 --- /dev/null +++ b/contrib/platform/win32/CMakeModules/ompi_define.cmake @@ -0,0 +1,123 @@ +# +# Copyright (c) 2010 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +#Generate content for opal_config.h.cmake +# +# NAME: name of the variable to be defined in configure file +# VALUE: value to be defined for the variable +# DESC: description of the definition +# IS_STR: whether this variable should be defined with quotation marks +# FORCE_DEF: whether use "#cmakedefiine" or just "#define" in the line +# VAR_FORMAT: whether we should use the variable name instead of the value +# in the template file. + +MACRO(APPEND_CONFIG_FILE NAME VALUE DESC IS_STR FORCE_DEF VAR_FORMAT) + + #We don't want to always generate the template file, but only when required. + IF(NOT WRITE_CONFIG_DONE) + + UNSET(APPEND_STRING) + + IF(${VAR_FORMAT}) + IF(${IS_STR}) + IF(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#define ${NAME} \"\${${NAME}}\"\n\n") + ELSE(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#cmakedefine ${NAME} \"\${${NAME}}\"\n\n") + ENDIF(${FORCE_DEF}) + ELSE(${IS_STR}) + IF(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#define ${NAME} \${${NAME}}\n\n") + ELSE(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#cmakedefine ${NAME} \${${NAME}}\n\n") + ENDIF(${FORCE_DEF}) + ENDIF(${IS_STR}) + ELSE(${VAR_FORMAT}) + IF(${IS_STR}) + IF(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#define ${NAME} \"${VALUE}\"\n\n") + ELSE(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#cmakedefine ${NAME} \"${VALUE}\"\n\n") + ENDIF(${FORCE_DEF}) + ELSE(${IS_STR}) + IF(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#define ${NAME} ${VALUE}\n\n") + ELSE(${FORCE_DEF}) + SET(APPEND_STRING "/* ${DESC} */\n#cmakedefine ${NAME} ${VALUE}\n\n") + ENDIF(${FORCE_DEF}) + ENDIF(${IS_STR}) + ENDIF(${VAR_FORMAT}) + + FILE(APPEND ${OpenMPI_BINARY_DIR}/opal/include/opal_config.h.cmake + ${APPEND_STRING}) + ENDIF(NOT WRITE_CONFIG_DONE) + +ENDMACRO(APPEND_CONFIG_FILE NAME VALUE DESC IS_STR FORCE_DEF VAR_FORMAT) + + +#define a name with value and +#write the line in template file. +MACRO(OMPI_DEF NAME VALUE DESC IS_STR FORCE_DEF) + + SET(${NAME} ${VALUE}) + + APPEND_CONFIG_FILE(${NAME} ${VALUE} ${DESC} ${IS_STR} ${FORCE_DEF} 0) + +ENDMACRO(OMPI_DEF NAME VALUE DESC IS_STR FORCE_DEF) + + +#define a name with variable and +#write the line in template file. +MACRO(OMPI_DEF_VAR NAME DESC IS_STR FORCE_DEF) + + APPEND_CONFIG_FILE(${NAME} "" ${DESC} ${IS_STR} ${FORCE_DEF} 1) + +ENDMACRO(OMPI_DEF_VAR NAME DESC IS_STR FORCE_DEF) + + +#define/cache a name with value and +#write the line in template file. +MACRO(OMPI_DEF_CACHE NAME VALUE CACHE_TYPE DESC IS_STR FORCE_DEF) + + SET(${NAME} ${VALUE} CACHE ${CACHE_TYPE} "${DESC}") + + APPEND_CONFIG_FILE(${NAME} ${VALUE} ${DESC} ${IS_STR} ${FORCE_DEF} 0) + +ENDMACRO(OMPI_DEF_CACHE NAME VALUE OPT DESC IS_STR FORCE_DEF) + + +#define/cache a name with variable and +#write the line in template file. +MACRO(OMPI_DEF_CACHE_VAR NAME VALUE CACHE_TYPE DESC IS_STR FORCE_DEF) + + SET(${NAME} ${VALUE} CACHE ${CACHE_TYPE} "${DESC}") + + APPEND_CONFIG_FILE(${NAME} "" ${DESC} ${IS_STR} ${FORCE_DEF} 1) + +ENDMACRO(OMPI_DEF_CACHE_VAR NAME VALUE OPT DESC IS_STR FORCE_DEF) + + +#add an configure option and +#write the line in template file. +MACRO(OMPI_DEF_OPT NAME DESC DEFAULT_VAL) + + UNSET(APPEND_STRING) + + OPTION(${NAME} "${DESC}" ${DEFAULT_VAL}) + + IF(${${NAME}} STREQUAL "OFF") + SET(${NAME} 0) + ELSE(${${NAME}} STREQUAL "OFF") + SET(${NAME} 1) + ENDIF(${${NAME}} STREQUAL "OFF") + + OMPI_DEF_VAR(${NAME} "${DESC}" 0 1) + +ENDMACRO(OMPI_DEF_OPT NAME DESC DEFAULT_VAL)