2008-12-10 20:59:20 +00:00
|
|
|
#
|
2009-02-10 17:20:13 +00:00
|
|
|
# Copyright (c) 2007-2009 High Performance Computing Center Stuttgart,
|
2008-12-10 20:59:20 +00:00
|
|
|
# University of Stuttgart. All rights reserved.
|
|
|
|
# $COPYRIGHT$
|
|
|
|
#
|
|
|
|
# Additional copyrights may follow
|
|
|
|
#
|
|
|
|
# $HEADER$
|
|
|
|
#
|
|
|
|
|
|
|
|
# list the sub directories of current directories
|
|
|
|
# save the list of subdirs in OUTPUT_VARIABLE
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
MACRO(CHECK_SUBDIRS CURRENT_DIR OUTPUT_VARIABLE)
|
2008-12-10 20:59:20 +00:00
|
|
|
|
|
|
|
EXECUTE_PROCESS (COMMAND cmd /C dir /AD /B
|
|
|
|
WORKING_DIRECTORY ${CURRENT_DIR}
|
|
|
|
OUTPUT_VARIABLE OUTPUT
|
|
|
|
RESULT_VARIABLE RESULT
|
|
|
|
ERROR_VARIABLE ERROR)
|
|
|
|
|
|
|
|
IF(NOT "${OUTPUT}" STREQUAL "")
|
|
|
|
STRING (REGEX MATCHALL "[a-zA-Z1-9_]+" ${OUTPUT_VARIABLE} ${OUTPUT})
|
|
|
|
ENDIF(NOT "${OUTPUT}" STREQUAL "")
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
ENDMACRO(CHECK_SUBDIRS CURRENT_DIR OUTPUT_VARIABLE)
|
2008-12-10 20:59:20 +00:00
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
SET(MCA_FRAMEWORK_LIST "")
|
|
|
|
CHECK_SUBDIRS("${PROJECT_SOURCE_DIR}/mca" MCA_FRAMEWORK_LIST)
|
|
|
|
#MESSAGE("MCA_FRAMEWORK_LIST:${MCA_FRAMEWORK_LIST}")
|
2008-12-10 20:59:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
FILE(GLOB ${PROJECT_NAME}_MCA_HEADER_FILES "mca/*.C" "mca/*.h")
|
|
|
|
SET(${PROJECT_NAME}_MCA_FILES ${${PROJECT_NAME}_MCA_FILES} ${${PROJECT_NAME}_MCA_HEADER_FILES})
|
|
|
|
SOURCE_GROUP(mca FILES ${${PROJECT_NAME}_MCA_HEADER_FILES})
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
# clear the variables first
|
|
|
|
SET(MCA_FRAMEWORK "")
|
|
|
|
SET(MCA_FRAMEWORK_FILES "")
|
|
|
|
SET(MCA_FILES "")
|
2008-12-10 20:59:20 +00:00
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
# parse each mca subdir
|
|
|
|
FOREACH (MCA_FRAMEWORK ${MCA_FRAMEWORK_LIST})
|
|
|
|
|
|
|
|
IF(NOT ${MCA_FRAMEWORK} STREQUAL "CMakeFiles" AND NOT ${MCA_FRAMEWORK} STREQUAL "svn")
|
|
|
|
#SET(CURRENT_PATH "mca/${${PROJECT_NAME}_MCA_SUBDIR}")
|
|
|
|
FILE(GLOB MCA_FRAMEWORK_FILES "mca/${MCA_FRAMEWORK}/*.C" "mca/${MCA_FRAMEWORK}/*.h"
|
|
|
|
"mca/${MCA_FRAMEWORK}/*.cc" "mca/${MCA_FRAMEWORK}/*.cpp")
|
|
|
|
SET(MCA_FILES ${MCA_FILES} ${MCA_FRAMEWORK_FILES})
|
|
|
|
SOURCE_GROUP(mca\\${MCA_FRAMEWORK} FILES ${MCA_FRAMEWORK_FILES})
|
2008-12-10 20:59:20 +00:00
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
SET(COMPONENT_LIST "")
|
|
|
|
CHECK_SUBDIRS("${PROJECT_SOURCE_DIR}/mca/${MCA_FRAMEWORK}" COMPONENT_LIST)
|
2008-12-10 20:59:20 +00:00
|
|
|
|
|
|
|
SET(CURRENT_COMPONENT_PRIORITY 0)
|
|
|
|
SET(BEST_COMPONENT_PRIORITY 0)
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
# parse each component subdir of current mca framework
|
|
|
|
FOREACH (MCA_COMPONENT ${COMPONENT_LIST})
|
|
|
|
|
|
|
|
IF(${MCA_COMPONENT} STREQUAL "base")
|
|
|
|
|
|
|
|
SET(CURRENT_PATH "${PROJECT_SOURCE_DIR}/mca/${MCA_FRAMEWORK}/base")
|
|
|
|
FILE(GLOB MCA_FRAMEWORK_BASE_FILES "${CURRENT_PATH}/*.c" "${CURRENT_PATH}/*.h"
|
|
|
|
"${CURRENT_PATH}/*.cc" "${CURRENT_PATH}/*.cpp")
|
|
|
|
|
2009-03-20 15:57:52 +00:00
|
|
|
IF(EXISTS "${CURRENT_PATH}/.windows")
|
2009-02-10 17:20:13 +00:00
|
|
|
|
|
|
|
#MESSAGE("MCA_FRAMEWORK_BASE_FILES:${MCA_FRAMEWORK_BASE_FILES}")
|
2009-03-20 15:57:52 +00:00
|
|
|
SET(EXCLUDE_LIST "")
|
|
|
|
FILE(STRINGS ${CURRENT_PATH}/.windows EXCLUDE_LIST REGEX "^exclude_list=")
|
2009-02-10 17:20:13 +00:00
|
|
|
|
|
|
|
IF(NOT EXCLUDE_LIST STREQUAL "")
|
|
|
|
STRING(REPLACE "exclude_list=" "" EXCLUDE_LIST ${EXCLUDE_LIST})
|
|
|
|
ENDIF(NOT EXCLUDE_LIST STREQUAL "")
|
|
|
|
|
|
|
|
# remove the files in the exclude list
|
|
|
|
FOREACH(FILE ${EXCLUDE_LIST})
|
2009-03-20 15:57:52 +00:00
|
|
|
LIST(REMOVE_ITEM MCA_FRAMEWORK_BASE_FILES "${CURRENT_PATH}/${FILE}")
|
2009-02-10 17:20:13 +00:00
|
|
|
ENDFOREACH(FILE)
|
|
|
|
|
2009-03-20 15:57:52 +00:00
|
|
|
ENDIF(EXISTS "${CURRENT_PATH}/.windows")
|
2009-02-10 17:20:13 +00:00
|
|
|
|
|
|
|
SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/mca/${MCA_FRAMEWORK}/base/static-components.h
|
|
|
|
PROPERTIES GENERATED true)
|
|
|
|
SET(MCA_FRAMEWORK_BASE_FILES ${MCA_FRAMEWORK_BASE_FILES}
|
|
|
|
${PROJECT_BINARY_DIR}/mca/${MCA_FRAMEWORK}/base/static-components.h)
|
|
|
|
SET(MCA_FILES ${MCA_FILES} ${MCA_FRAMEWORK_BASE_FILES})
|
|
|
|
|
|
|
|
SOURCE_GROUP(mca\\${MCA_FRAMEWORK}\\base FILES ${MCA_FRAMEWORK_BASE_FILES})
|
|
|
|
|
|
|
|
# Install help files if they are here.
|
|
|
|
INSTALL(DIRECTORY ${CURRENT_PATH}/ DESTINATION share/openmpi/
|
|
|
|
FILES_MATCHING PATTERN "*.txt" PATTERN ".svn" EXCLUDE)
|
|
|
|
|
|
|
|
ELSEIF(EXISTS "${PROJECT_SOURCE_DIR}/mca/${MCA_FRAMEWORK}/${MCA_COMPONENT}/.windows")
|
|
|
|
|
|
|
|
SET(COMPONENT_FILES "")
|
|
|
|
FILE(STRINGS ${PROJECT_SOURCE_DIR}/mca/${MCA_FRAMEWORK}/${MCA_COMPONENT}/.windows
|
2008-12-10 20:59:20 +00:00
|
|
|
VALUE REGEX "^not_single_shared_lib=")
|
|
|
|
IF(NOT VALUE STREQUAL "")
|
|
|
|
STRING(REPLACE "not_single_shared_lib=" "" NOT_SINGLE_SHARED_LIB ${VALUE})
|
|
|
|
ENDIF(NOT VALUE STREQUAL "")
|
|
|
|
|
2009-03-20 15:57:52 +00:00
|
|
|
SET(CURRENT_PATH ${PROJECT_SOURCE_DIR}/mca/${MCA_FRAMEWORK}/${MCA_COMPONENT})
|
|
|
|
FILE(GLOB COMPONENT_FILES "${CURRENT_PATH}/*.C" "${CURRENT_PATH}/*.h"
|
|
|
|
"${CURRENT_PATH}/*.cc" "${CURRENT_PATH}/*.cpp")
|
|
|
|
|
|
|
|
# check out if we have to exlude some source files.
|
|
|
|
SET(EXCLUDE_LIST "")
|
|
|
|
FILE(STRINGS ${CURRENT_PATH}/.windows EXCLUDE_LIST REGEX "^exclude_list=")
|
|
|
|
|
|
|
|
IF(NOT EXCLUDE_LIST STREQUAL "")
|
|
|
|
STRING(REPLACE "exclude_list=" "" EXCLUDE_LIST ${EXCLUDE_LIST})
|
|
|
|
ENDIF(NOT EXCLUDE_LIST STREQUAL "")
|
|
|
|
|
|
|
|
# remove the files in the exclude list
|
|
|
|
FOREACH(FILE ${EXCLUDE_LIST})
|
|
|
|
LIST(REMOVE_ITEM COMPONENT_FILES "${CURRENT_PATH}/${FILE}")
|
|
|
|
ENDFOREACH(FILE)
|
|
|
|
|
2008-12-10 20:59:20 +00:00
|
|
|
IF(NOT BUILD_SHARED_LIBS OR NOT_SINGLE_SHARED_LIB STREQUAL "1")
|
|
|
|
SET(NOT_SINGLE_SHARED_LIB "")
|
|
|
|
# add sources for static build or for the shared build when this is not a stand along library.
|
2009-02-10 17:20:13 +00:00
|
|
|
SET(MCA_FILES ${MCA_FILES} ${COMPONENT_FILES})
|
|
|
|
SOURCE_GROUP(mca\\${MCA_FRAMEWORK}\\${MCA_COMPONENT} FILES ${COMPONENT_FILES})
|
|
|
|
|
2009-03-20 15:57:52 +00:00
|
|
|
IF(EXISTS "${CURRENT_PATH}/configure.params")
|
|
|
|
FILE(STRINGS "${CURRENT_PATH}/configure.params"
|
2008-12-10 20:59:20 +00:00
|
|
|
CURRENT_COMPONENT_PRIORITY REGEX "PRIORITY")
|
|
|
|
IF(NOT CURRENT_COMPONENT_PRIORITY STREQUAL "")
|
|
|
|
STRING(REGEX REPLACE "[A-Z_]+=" "" CURRENT_COMPONENT_PRIORITY ${CURRENT_COMPONENT_PRIORITY})
|
|
|
|
ENDIF(NOT CURRENT_COMPONENT_PRIORITY STREQUAL "")
|
2009-03-20 15:57:52 +00:00
|
|
|
ENDIF(EXISTS "${CURRENT_PATH}/configure.params")
|
2008-12-10 20:59:20 +00:00
|
|
|
|
|
|
|
IF(CURRENT_COMPONENT_PRIORITY GREATER BEST_COMPONENT_PRIORITY)
|
|
|
|
# I have a higher priority for this mca, put me at the very beginning.
|
|
|
|
SET (OUTFILE_EXTERN
|
2009-02-10 17:20:13 +00:00
|
|
|
"extern const mca_base_component_t mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component"
|
2008-12-10 20:59:20 +00:00
|
|
|
"\n${OUTFILE_EXTERN}")
|
2009-02-10 17:20:13 +00:00
|
|
|
SET(FRAMEWORK_STRUCT_DEF
|
|
|
|
"&mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component,\n"
|
|
|
|
${FRAMEWORK_STRUCT_DEF})
|
2008-12-10 20:59:20 +00:00
|
|
|
SET(BEST_COMPONENT_PRIORITY ${CURRENT_COMPONENT_PRIORITY})
|
|
|
|
ELSE(CURRENT_COMPONENT_PRIORITY GREATER BEST_COMPONENT_PRIORITY)
|
|
|
|
SET (OUTFILE_EXTERN ${OUTFILE_EXTERN}
|
2009-02-10 17:20:13 +00:00
|
|
|
"\nextern const mca_base_component_t mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component;")
|
|
|
|
SET(FRAMEWORK_STRUCT_DEF ${FRAMEWORK_STRUCT_DEF}
|
|
|
|
"&mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component,\n")
|
2008-12-10 20:59:20 +00:00
|
|
|
ENDIF(CURRENT_COMPONENT_PRIORITY GREATER BEST_COMPONENT_PRIORITY)
|
|
|
|
ELSE(NOT BUILD_SHARED_LIBS OR NOT_SINGLE_SHARED_LIB STREQUAL "1")
|
|
|
|
|
|
|
|
# get the dependencies for this component.
|
|
|
|
SET(MCA_DEPENDENCIES "")
|
|
|
|
FILE(STRINGS ${CURRENT_PATH}/.windows VALUE REGEX "^mca_dependencies=")
|
|
|
|
IF(NOT VALUE STREQUAL "")
|
|
|
|
STRING(REPLACE "mca_dependencies=" "" MCA_DEPENDENCIES ${VALUE})
|
|
|
|
ENDIF(NOT VALUE STREQUAL "")
|
|
|
|
|
|
|
|
# get the libraries required for this component.
|
|
|
|
SET(MCA_LINK_LIBRARIES "")
|
|
|
|
FILE(STRINGS ${CURRENT_PATH}/.windows VALUE REGEX "^mca_link_libraries=")
|
|
|
|
IF(NOT VALUE STREQUAL "")
|
|
|
|
STRING(REPLACE "mca_link_libraries=" "" MCA_LINK_LIBRARIES ${VALUE})
|
|
|
|
ENDIF(NOT VALUE STREQUAL "")
|
|
|
|
|
2009-03-05 14:57:35 +00:00
|
|
|
# the mca_common_* libraries should be installed into bin,
|
|
|
|
# this will avoid the runtime open module failure.
|
|
|
|
IF("${MCA_FRAMEWORK}" STREQUAL "common")
|
|
|
|
SET(LIB_NAME_PREFIX "lib")
|
|
|
|
SET(INSTALL_DEST "RUNTIME DESTINATION bin
|
|
|
|
LIBRARY DESTINATION lib
|
|
|
|
ARCHIVE DESTINATION lib")
|
|
|
|
ELSE("${MCA_FRAMEWORK}" STREQUAL "common")
|
|
|
|
SET(LIB_NAME_PREFIX "")
|
2009-03-19 17:11:47 +00:00
|
|
|
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
SET(INSTALL_DEST "RUNTIME DESTINATION lib/openmpi/debug
|
|
|
|
LIBRARY DESTINATION lib/openmpi/debug
|
|
|
|
ARCHIVE DESTINATION lib/openmpi/debug")
|
|
|
|
ELSE(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
SET(INSTALL_DEST "RUNTIME DESTINATION lib/openmpi
|
|
|
|
LIBRARY DESTINATION lib/openmpi
|
|
|
|
ARCHIVE DESTINATION lib/openmpi")
|
|
|
|
ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
2009-03-05 14:57:35 +00:00
|
|
|
ENDIF("${MCA_FRAMEWORK}" STREQUAL "common")
|
|
|
|
|
|
|
|
|
2008-12-10 20:59:20 +00:00
|
|
|
# generate CMakeLists.txt for each component for shared build.
|
2009-02-10 17:20:13 +00:00
|
|
|
FILE (WRITE "${PROJECT_BINARY_DIR}/mca/${MCA_FRAMEWORK}/${MCA_COMPONENT}/CMakeLists.txt"
|
2008-12-10 20:59:20 +00:00
|
|
|
"
|
|
|
|
#
|
|
|
|
# Copyright (c) 2007-2008 High Performance Computing Center Stuttgart,
|
|
|
|
# University of Stuttgart. All rights reserved.
|
|
|
|
# $COPYRIGHT$
|
|
|
|
#
|
|
|
|
# Additional copyrights may follow
|
|
|
|
#
|
|
|
|
# $HEADER$
|
|
|
|
#
|
|
|
|
|
|
|
|
# make new project for shared build
|
|
|
|
|
2009-03-20 15:57:52 +00:00
|
|
|
SET_SOURCE_FILES_PROPERTIES(\${COMPONENT_FILES}
|
2008-12-10 20:59:20 +00:00
|
|
|
PROPERTIES LANGUAGE CXX)
|
|
|
|
|
2009-03-05 14:57:35 +00:00
|
|
|
ADD_LIBRARY(${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} SHARED
|
2009-03-20 15:57:52 +00:00
|
|
|
\${COMPONENT_FILES})
|
2008-12-10 20:59:20 +00:00
|
|
|
|
2009-03-05 14:57:35 +00:00
|
|
|
SET_TARGET_PROPERTIES(${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}
|
2008-12-10 20:59:20 +00:00
|
|
|
PROPERTIES COMPILE_FLAGS \"-D_USRDLL -DOPAL_IMPORTS -DOMPI_IMPORTS -DORTE_IMPORTS\")
|
|
|
|
|
2009-03-05 14:57:35 +00:00
|
|
|
TARGET_LINK_LIBRARIES (${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} ${MCA_LINK_LIBRARIES})
|
2008-12-10 20:59:20 +00:00
|
|
|
|
2009-03-05 14:57:35 +00:00
|
|
|
ADD_DEPENDENCIES(${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} libopen-pal ${MCA_DEPENDENCIES})
|
2008-12-10 20:59:20 +00:00
|
|
|
|
2009-03-05 14:57:35 +00:00
|
|
|
INSTALL(TARGETS ${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} ${INSTALL_DEST})
|
2008-12-10 20:59:20 +00:00
|
|
|
")
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
ADD_SUBDIRECTORY (${PROJECT_BINARY_DIR}/mca/${MCA_FRAMEWORK}/${MCA_COMPONENT} mca/${MCA_FRAMEWORK}/${MCA_COMPONENT})
|
2008-12-10 20:59:20 +00:00
|
|
|
ENDIF(NOT BUILD_SHARED_LIBS OR NOT_SINGLE_SHARED_LIB STREQUAL "1")
|
|
|
|
|
|
|
|
# Install help files if they are here.
|
|
|
|
INSTALL(DIRECTORY ${CURRENT_PATH}/ DESTINATION share/openmpi/
|
|
|
|
FILES_MATCHING PATTERN "*.txt" PATTERN ".svn" EXCLUDE)
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
ENDIF(${MCA_COMPONENT} STREQUAL "base")
|
|
|
|
ENDFOREACH(MCA_COMPONENT)
|
|
|
|
|
|
|
|
STRING(LENGTH "${FRAMEWORK_STRUCT_DEF}" STRUCT_STRING_LENTH)
|
2008-12-10 20:59:20 +00:00
|
|
|
IF(STRUCT_STRING_LENTH GREATER 0)
|
2009-02-10 17:20:13 +00:00
|
|
|
STRING (REPLACE ";" "" OUTFILE_STRUCT ${FRAMEWORK_STRUCT_DEF})
|
2008-12-10 20:59:20 +00:00
|
|
|
ENDIF(STRUCT_STRING_LENTH GREATER 0)
|
|
|
|
# write out static-component.h for this mca.
|
2009-02-10 17:20:13 +00:00
|
|
|
FILE(WRITE "${PROJECT_BINARY_DIR}/mca/${MCA_FRAMEWORK}/base/static-components.h"
|
2008-12-10 20:59:20 +00:00
|
|
|
"/*
|
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
extern \"C\" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
${OUTFILE_EXTERN}
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
const mca_base_component_t *mca_${MCA_FRAMEWORK}_base_static_components[] = {
|
2008-12-10 20:59:20 +00:00
|
|
|
${OUTFILE_STRUCT}
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
")
|
|
|
|
|
2009-02-10 17:20:13 +00:00
|
|
|
SET(OUTFILE_EXTERN "")
|
|
|
|
SET(OUTFILE_STRUCT "")
|
|
|
|
SET(FRAMEWORK_STRUCT_DEF "")
|
|
|
|
ENDIF(NOT ${MCA_FRAMEWORK} STREQUAL "CMakeFiles" AND NOT ${MCA_FRAMEWORK} STREQUAL "svn")
|
|
|
|
ENDFOREACH (MCA_FRAMEWORK)
|