1
1

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.
Этот коммит содержится в:
Shiqing Fan 2009-08-12 08:52:48 +00:00
родитель f50e25d0d2
Коммит fb4be6fad7
8 изменённых файлов: 200 добавлений и 36 удалений

Просмотреть файл

@ -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/

Просмотреть файл

@ -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 =