First step to enable DSO build on Windows.
- add a cmake module for searching libltdl libraries and headers - a configure option to enable DSO build, default OFF. - update a few source files for including correct header and loading correct mca libraries path/suffix. This commit was SVN r21804.
Этот коммит содержится в:
родитель
f50e25d0d2
Коммит
fb4be6fad7
@ -121,6 +121,13 @@ FOREACH (MCA_FRAMEWORK ${MCA_FRAMEWORK_LIST})
|
||||
|
||||
IF(BUILD_COMPONENT)
|
||||
|
||||
# check the library build type
|
||||
FILE(STRINGS ${CURRENT_PATH}/.windows
|
||||
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 "")
|
||||
|
||||
# check out if we have to exlude some source files.
|
||||
SET(EXCLUDE_LIST "")
|
||||
FILE(STRINGS ${CURRENT_PATH}/.windows EXCLUDE_LIST REGEX "^exclude_list=")
|
||||
@ -134,35 +141,108 @@ FOREACH (MCA_FRAMEWORK ${MCA_FRAMEWORK_LIST})
|
||||
LIST(REMOVE_ITEM COMPONENT_FILES "${CURRENT_PATH}/${FILE}")
|
||||
ENDFOREACH(FILE)
|
||||
|
||||
# add sources for static build or for the shared build when this is not a stand along library.
|
||||
SET(MCA_FILES ${MCA_FILES} ${COMPONENT_FILES})
|
||||
SOURCE_GROUP(mca\\${MCA_FRAMEWORK}\\${MCA_COMPONENT} FILES ${COMPONENT_FILES})
|
||||
IF(NOT OPAL_WANT_LIBLTDL 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.
|
||||
SET(MCA_FILES ${MCA_FILES} ${COMPONENT_FILES})
|
||||
SOURCE_GROUP(mca\\${MCA_FRAMEWORK}\\${MCA_COMPONENT} FILES ${COMPONENT_FILES})
|
||||
|
||||
INCLUDE_DIRECTORIES(${EXTRA_INCLUDE_PATH})
|
||||
INCLUDE_DIRECTORIES(${EXTRA_INCLUDE_PATH})
|
||||
|
||||
IF(EXISTS "${CURRENT_PATH}/configure.params")
|
||||
FILE(STRINGS "${CURRENT_PATH}/configure.params"
|
||||
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 "")
|
||||
ENDIF(EXISTS "${CURRENT_PATH}/configure.params")
|
||||
|
||||
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
|
||||
"extern const mca_base_component_t mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component"
|
||||
"\n${OUTFILE_EXTERN}")
|
||||
SET(FRAMEWORK_STRUCT_DEF
|
||||
"&mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component,\n"
|
||||
${FRAMEWORK_STRUCT_DEF})
|
||||
SET(BEST_COMPONENT_PRIORITY ${CURRENT_COMPONENT_PRIORITY})
|
||||
ELSE(CURRENT_COMPONENT_PRIORITY GREATER BEST_COMPONENT_PRIORITY)
|
||||
SET (OUTFILE_EXTERN ${OUTFILE_EXTERN}
|
||||
"\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")
|
||||
ENDIF(CURRENT_COMPONENT_PRIORITY GREATER BEST_COMPONENT_PRIORITY)
|
||||
IF(EXISTS "${CURRENT_PATH}/configure.params")
|
||||
FILE(STRINGS "${CURRENT_PATH}/configure.params"
|
||||
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 "")
|
||||
ENDIF(EXISTS "${CURRENT_PATH}/configure.params")
|
||||
|
||||
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
|
||||
"extern const mca_base_component_t mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component"
|
||||
"\n${OUTFILE_EXTERN}")
|
||||
SET(FRAMEWORK_STRUCT_DEF
|
||||
"&mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}_component,\n"
|
||||
${FRAMEWORK_STRUCT_DEF})
|
||||
SET(BEST_COMPONENT_PRIORITY ${CURRENT_COMPONENT_PRIORITY})
|
||||
ELSE(CURRENT_COMPONENT_PRIORITY GREATER BEST_COMPONENT_PRIORITY)
|
||||
SET (OUTFILE_EXTERN ${OUTFILE_EXTERN}
|
||||
"\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")
|
||||
ENDIF(CURRENT_COMPONENT_PRIORITY GREATER BEST_COMPONENT_PRIORITY)
|
||||
|
||||
|
||||
ELSE(NOT OPAL_WANT_LIBLTDL 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 "")
|
||||
|
||||
# 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 "")
|
||||
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")
|
||||
ENDIF("${MCA_FRAMEWORK}" STREQUAL "common")
|
||||
|
||||
|
||||
# generate CMakeLists.txt for each component for DSO build.
|
||||
FILE (WRITE "${PROJECT_BINARY_DIR}/mca/${MCA_FRAMEWORK}/${MCA_COMPONENT}/CMakeLists.txt"
|
||||
"
|
||||
#
|
||||
# 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
|
||||
|
||||
INCLUDE_DIRECTORIES(\${EXTRA_INCLUDE_PATH})
|
||||
|
||||
ADD_LIBRARY(${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} SHARED
|
||||
\${COMPONENT_FILES})
|
||||
|
||||
SET_TARGET_PROPERTIES(${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT}
|
||||
PROPERTIES COMPILE_FLAGS \"-D_USRDLL -DOPAL_IMPORTS -DOMPI_IMPORTS -DORTE_IMPORTS /TP\")
|
||||
|
||||
TARGET_LINK_LIBRARIES (${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} ${MCA_LINK_LIBRARIES})
|
||||
|
||||
ADD_DEPENDENCIES(${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} libopen-pal ${MCA_DEPENDENCIES})
|
||||
|
||||
INSTALL(TARGETS ${LIB_NAME_PREFIX}mca_${MCA_FRAMEWORK}_${MCA_COMPONENT} ${INSTALL_DEST})
|
||||
")
|
||||
|
||||
ADD_SUBDIRECTORY (${PROJECT_BINARY_DIR}/mca/${MCA_FRAMEWORK}/${MCA_COMPONENT} mca/${MCA_FRAMEWORK}/${MCA_COMPONENT})
|
||||
ENDIF(NOT OPAL_WANT_LIBLTDL OR NOT_SINGLE_SHARED_LIB STREQUAL "1")
|
||||
|
||||
# Install help files if they are here.
|
||||
INSTALL(DIRECTORY ${CURRENT_PATH}/ DESTINATION share/openmpi/
|
||||
|
53
contrib/platform/win32/CMakeModules/find_libltdl.cmake
Обычный файл
53
contrib/platform/win32/CMakeModules/find_libltdl.cmake
Обычный файл
@ -0,0 +1,53 @@
|
||||
#
|
||||
# Copyright (c) 2009 High Performance Computing Center Stuttgart,
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# LIBLTDL_PATH - path to libltdl dir
|
||||
# LIBLTDL_LIB_PATH - path to ltdl.lib
|
||||
# LIBLTDL_INCLUDE_PATH - path to ltdl.h
|
||||
# LIBLTDL_FOUND - system has Libltdl
|
||||
#
|
||||
SET(EXTRA_INCLUDE_PATH "")
|
||||
SET(LIBLTDL_PATH "" CACHE PATH "Path to libltdl root directory.")
|
||||
|
||||
IF(NOT OPAL_WANT_LIBLTDL)
|
||||
SET(LIBLTDL_FOUND FALSE CACHE INTERNAL "find result of libltdl.")
|
||||
ELSE(NOT OPAL_WANT_LIBLTDL)
|
||||
|
||||
IF(NOT LIBLTDL_FOUND OR NOT "${LIBLTDL_PATH}" STREQUAL "${LIBLTDL_OLD_PATH}")
|
||||
MESSAGE(STATUS "looking for libltdl...")
|
||||
|
||||
# set the default search path
|
||||
IF("${LIBLTDL_PATH}" STREQUAL "")
|
||||
SET(LIBLTDL_PATH "$ENV{ProgramFiles}/GnuWin32")
|
||||
ENDIF("${LIBLTDL_PATH}" STREQUAL "")
|
||||
|
||||
# clear the old find results and start a new search
|
||||
UNSET(LIBLTDL_INCLUDE_PATH CACHE)
|
||||
UNSET(LIBLTDL_LIB_PATH CACHE)
|
||||
|
||||
FIND_FILE(LIBLTDL_LIB ltdl.lib PATHS ${LIBLTDL_PATH}/lib)
|
||||
FIND_PATH(LIBLTDL_INCLUDE_PATH ltdl.h PATHS ${LIBLTDL_PATH}/include)
|
||||
|
||||
IF(LIBLTDL_LIB AND LIBLTDL_INCLUDE_PATH)
|
||||
SET(LIBLTDL_FOUND TRUE CACHE INTERNAL "find result of libltdl.")
|
||||
SET(LIBLTDL_OLD_PATH ${LIBLTDL_PATH} CACHE INTERNAL "Store the old libltdl path.")
|
||||
MESSAGE(STATUS "looking for libltdl...found.")
|
||||
ELSE(LIBLTDL_LIB AND LIBLTDL_INCLUDE_PATH)
|
||||
SET(LIBLTDL_FOUND FALSE CACHE INTERNAL "find result of libltdl.")
|
||||
MESSAGE(STATUS "looking for libltdl...failed.")
|
||||
ENDIF(LIBLTDL_LIB AND LIBLTDL_INCLUDE_PATH)
|
||||
|
||||
ELSE(NOT LIBLTDL_FOUND OR NOT "${LIBLTDL_PATH}" STREQUAL "${LIBLTDL_OLD_PATH}")
|
||||
SET(LIBLTDL_FOUND TRUE CACHE INTERNAL "find result of libltdl.")
|
||||
ENDIF(NOT LIBLTDL_FOUND OR NOT "${LIBLTDL_PATH}" STREQUAL "${LIBLTDL_OLD_PATH}")
|
||||
|
||||
ENDIF(NOT OPAL_WANT_LIBLTDL)
|
@ -134,9 +134,6 @@ SET(OMPI_F90_ABSOLUTE "\"none\"")
|
||||
|
||||
SET(OMPI_F90_BUILD_SIZE "\"small\"")
|
||||
|
||||
# we don't support libtool on Windows.
|
||||
SET(OPAL_WANT_LIBLTDL 0)
|
||||
|
||||
# set the im/export decleration here.
|
||||
# Don't bother with OMPI_IMPORTS
|
||||
IF(BUILD_SHARED_LIBS)
|
||||
@ -401,6 +398,19 @@ OPTION(OMPI_WANT_CCP
|
||||
SET (OMPI_EXT_COMPONENTS Example CACHE STRING
|
||||
"Specify user defined MPI Extended Interface Components." FORCE)
|
||||
|
||||
OPTION(OPAL_WANT_LIBLTDL "Whether we want to enable DSO build for Windows." OFF)
|
||||
IF(NOT OPAL_WANT_LIBLTDL)
|
||||
SET(OPAL_WANT_LIBLTDL 0)
|
||||
ELSE(NOT OPAL_WANT_LIBLTDL)
|
||||
INCLUDE(find_libltdl)
|
||||
IF(LIBLTDL_FOUND)
|
||||
SET (OPAL_WANT_LIBLTDL 1)
|
||||
ELSE(LIBLTDL_FOUND)
|
||||
SET(OPAL_WANT_LIBLTDL 0)
|
||||
ENDIF(LIBLTDL_FOUND)
|
||||
ENDIF(NOT OPAL_WANT_LIBLTDL)
|
||||
|
||||
|
||||
###################################################################
|
||||
# Check headers #
|
||||
###################################################################
|
||||
|
@ -740,9 +740,7 @@ int ompi_mpi_init(int argc, char **argv, int requested, int *provided)
|
||||
}
|
||||
|
||||
/* Do we need to wait for a debugger? */
|
||||
#ifndef __WINDOWS__
|
||||
ompi_wait_for_debugger();
|
||||
#endif
|
||||
|
||||
/* check for timing request - get stop time and report elapsed
|
||||
time if so, then start the clock again */
|
||||
|
@ -111,7 +111,12 @@ ADD_LIBRARY (libopen-pal ${OPAL_SOURCE_FILES})
|
||||
# Set compile flags for this target
|
||||
IF (BUILD_SHARED_LIBS)
|
||||
SET_TARGET_PROPERTIES(libopen-pal PROPERTIES COMPILE_FLAGS "-D_USRDLL -DOPAL_EXPORTS")
|
||||
TARGET_LINK_LIBRARIES (libopen-pal Ws2_32.lib shlwapi.lib)
|
||||
IF(OPAL_WANT_LIBLTDL AND LIBLTDL_FOUND)
|
||||
INCLUDE_DIRECTORIES(${LIBLTDL_INCLUDE_PATH})
|
||||
TARGET_LINK_LIBRARIES (libopen-pal Ws2_32.lib shlwapi.lib ${LIBLTDL_LIB})
|
||||
ELSE(OPAL_WANT_LIBLTDL AND LIBLTDL_FOUND)
|
||||
TARGET_LINK_LIBRARIES (libopen-pal Ws2_32.lib shlwapi.lib)
|
||||
ENDIF(OPAL_WANT_LIBLTDL AND LIBLTDL_FOUND)
|
||||
ELSE (BUILD_SHARED_LIBS)
|
||||
SET_TARGET_PROPERTIES(libopen-pal PROPERTIES COMPILE_FLAGS "-D_LIB")
|
||||
ENDIF(BUILD_SHARED_LIBS)
|
||||
|
@ -41,7 +41,11 @@
|
||||
#endif
|
||||
|
||||
#if OPAL_WANT_LIBLTDL
|
||||
#include "opal/libltdl/ltdl.h"
|
||||
#ifndef __WINDOWS__
|
||||
#include "opal/libltdl/ltdl.h"
|
||||
#else
|
||||
#include "ltdl.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "opal/util/output.h"
|
||||
@ -314,6 +318,12 @@ static void find_dyn_components(const char *path, const char *type_name,
|
||||
file->filename[OPAL_PATH_MAX] = '\0';
|
||||
file->status = UNVISITED;
|
||||
|
||||
#if defined(__WINDOWS__) && defined(_DEBUG)
|
||||
/* remove the debug suffix 'd', otherwise we will fail to
|
||||
load the module in later phase. */
|
||||
file->name[strlen(file->name)-1] = '\0';
|
||||
#endif
|
||||
|
||||
opal_list_append(&found_files, (opal_list_item_t *)
|
||||
file);
|
||||
}
|
||||
|
@ -27,7 +27,11 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#if OPAL_WANT_LIBLTDL
|
||||
#include "opal/libltdl/ltdl.h"
|
||||
#ifndef __WINDOWS__
|
||||
#include "opal/libltdl/ltdl.h"
|
||||
#else
|
||||
#include "ltdl.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "opal/class/opal_list.h"
|
||||
|
@ -69,7 +69,11 @@ int mca_base_open(void)
|
||||
#if OPAL_WANT_HOME_CONFIG_FILES
|
||||
asprintf(&value, "%s%c%s"OPAL_PATH_SEP".openmpi"OPAL_PATH_SEP"components", opal_install_dirs.pkglibdir, OPAL_ENV_SEP, opal_home_directory() );
|
||||
#else
|
||||
asprintf(&value, "%s", opal_install_dirs.pkglibdir);
|
||||
# if defined(__WINDOWS__) && defined(_DEBUG)
|
||||
asprintf(&value, "%s/debug", opal_install_dirs.pkglibdir);
|
||||
# else
|
||||
asprintf(&value, "%s", opal_install_dirs.pkglibdir);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
mca_base_param_component_path =
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user