1
1

Make the compiler wrappers work correctly for MinGW build.

This commit was SVN r25051.
Этот коммит содержится в:
Shiqing Fan 2011-08-16 12:32:41 +00:00
родитель 3d96497581
Коммит 20ee92c16e
6 изменённых файлов: 74 добавлений и 38 удалений

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

@ -1,5 +1,5 @@
#
# Copyright (c) 2007-2010 High Performance Computing Center Stuttgart,
# Copyright (c) 2007-2011 High Performance Computing Center Stuttgart,
# University of Stuttgart. All rights reserved.
# $COPYRIGHT$
#
@ -28,7 +28,7 @@ IF(MSVC)
ELSE(CMAKE_CL_64)
SET(COMPILER_TYPE "win32")
ENDIF(CMAKE_CL_64)
ELSEIF(NOT "$ENV{MSYSTEM}" STREQUAL "")
ELSEIF("${CMAKE_GENERATOR}" STREQUAL "MinGW Makefiles")
SET(WINDOWS_MINGW TRUE CACHE INTERNAL "Windows MinGW env")
ENDIF(MSVC)

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

@ -1,6 +1,6 @@
# -*- cmake-script -*-
#
# Copyright (c) 2007-2010 High Performance Computing Center Stuttgart,
# Copyright (c) 2007-2011 High Performance Computing Center Stuttgart,
# University of Stuttgart. All rights reserved.
# $COPYRIGHT$
#
@ -47,6 +47,9 @@ IF(NOT MINGW_CHECK_DONE)
MESSAGE( STATUS "Start MinGW specific detection....")
GET_FILENAME_COMPONENT(CC ${CMAKE_C_COMPILER} NAME)
GET_FILENAME_COMPONENT(CXX ${CMAKE_CXX_COMPILER} NAME)
# Default compiler settings.
SET(OMPI_C_OPTION_COMPILE "-c" CACHE INTERNAL
"C compiler option for compiling without linking.")

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

@ -1,4 +1,4 @@
# Copyright (c) 2007-2010 High Performance Computing Center Stuttgart,
# Copyright (c) 2007-2011 High Performance Computing Center Stuttgart,
# University of Stuttgart. All rights reserved.
# Copyright (c) 2008 The University of Tennessee and The University
# of Tennessee Research Foundation. All rights
@ -127,7 +127,7 @@ SET_TARGET_PROPERTIES(libmpi PROPERTIES
# Set compile flags for this target
IF (BUILD_SHARED_LIBS)
SET_TARGET_PROPERTIES(libmpi PROPERTIES
COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}HAVE_CONFIG_H ${OMPI_C_DEF_PRE}OMPI_EXPORTS ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS ${OMPI_CXX_LAN_FLAG} PREFIX "" IMPORT_PREFIX """)
COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}HAVE_CONFIG_H ${OMPI_C_DEF_PRE}OMPI_EXPORTS ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS ${OMPI_CXX_LAN_FLAG}" PREFIX "" IMPORT_PREFIX "")
TARGET_LINK_LIBRARIES (libmpi ${OpenMPI_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event${CMAKE_DEBUG_POSTFIX}.lib
libopen-rte Ws2_32.lib shlwapi.lib ${EXTRA_LINK_LIBRARIES})
ELSE (BUILD_SHARED_LIBS)

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

@ -1,4 +1,4 @@
# Copyright (c) 2007-2010 High Performance Computing Center Stuttgart,
# Copyright (c) 2007-2011 High Performance Computing Center Stuttgart,
# University of Stuttgart. All rights reserved.
# $COPYRIGHT$
#
@ -23,7 +23,7 @@ ENDIF(NOT OMPI_PROVIDE_MPI_FILE_INTERFACE)
ADD_LIBRARY (libmpi_cxx ${CXX_SOURCE_FILES})
SET_TARGET_PROPERTIES (libmpi_cxx PROPERTIES LINKER_LANGUAGE CXX)
SET_TARGET_PROPERTIES (libmpi_cxx PROPERTIES LINKER_LANGUAGE CXX PREFIX "" IMPORT_PREFIX "")
# Set compile flags for this target
IF (BUILD_SHARED_LIBS)

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

@ -1,4 +1,4 @@
# Copyright (c) 2007-2009 High Performance Computing Center Stuttgart,
# Copyright (c) 2007-2011 High Performance Computing Center Stuttgart,
# University of Stuttgart. All rights reserved.
# Copyright (c) 2008 The University of Tennessee and The University
# of Tennessee Research Foundation. All rights
@ -23,12 +23,12 @@ MACRO(CONFIGURE_WRAPPER_DATA_FILE APP_NAME)
SET(INPUT_PREFIX ${APP_NAME})
ENDIF(${APP_NAME} STREQUAL "mpicxx")
FILE(READ ${OpenMPI_SOURCE_DIR}/ompi/tools/wrappers/${INPUT_PREFIX}-wrapper-data.txt.in FILE_STRING)
STRING(REGEX REPLACE "-l[-a-zA-Z0-9_]+ " "" OUTPUT ${FILE_STRING})
FILE(READ ${OpenMPI_SOURCE_DIR}/ompi/tools/wrappers/${INPUT_PREFIX}-wrapper-data.txt.in DATA_FILE)
STRING(REGEX REPLACE "-l[-a-zA-Z0-9_]+ " "" DATA_FILE ${DATA_FILE})
# create a temporary input file, for "write file" command only
# replace the variables in the first level. :(
FILE(WRITE ${OMPI_BINARY_DIR}/tools/wrappers/${APP_NAME}-wrapper-data.txt.in "${OUTPUT}")
FILE(WRITE ${OMPI_BINARY_DIR}/tools/wrappers/${APP_NAME}-wrapper-data.txt.in "${DATA_FILE}")
CONFIGURE_FILE(${OMPI_BINARY_DIR}/tools/wrappers/${APP_NAME}-wrapper-data.txt.in
${OMPI_BINARY_DIR}/tools/wrappers/${APP_NAME}${OMPI_EXE_DEBUG_POSTFIX}-wrapper-data.txt @ONLY)
@ -40,7 +40,9 @@ MACRO(CONFIGURE_WRAPPER_DATA_FILE APP_NAME)
DESTINATION share/openmpi)
ENDMACRO()
# select debug or release libraries at configure time
IF(WINDOWS_VS)
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_BASE_LIBS
"libmpid.lib libopen-pald.lib libopen-rted.lib advapi32.lib Ws2_32.lib shlwapi.lib")
@ -48,6 +50,13 @@ ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_BASE_LIBS
"libmpi.lib libopen-pal.lib libopen-rte.lib advapi32.lib Ws2_32.lib shlwapi.lib")
ENDIF(OMPI_DEBUG_BUILD)
ELSEIF(WINDOWS_MINGW)
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_BASE_LIBS "-lmpid")
ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_BASE_LIBS "-lmpi")
ENDIF(OMPI_DEBUG_BUILD)
ENDIF(WINDOWS_VS)
IF(BUILD_SHARED_LIBS)
SET(OMPI_WRAPPER_EXTRA_CFLAGS
@ -65,6 +74,22 @@ CONFIGURE_WRAPPER_DATA_FILE(mpicc)
UNSET(OMPI_WRAPPER_EXTRA_LIBS)
IF(OMPI_WANT_CXX_BINDINGS)
# select debug or release libraries at configure time
IF(WINDOWS_VS)
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_CXX_LIB "libmpi_cxxd.lib ${OMPI_WRAPPER_BASE_LIBS}")
ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_CXX_LIB "libmpi_cxx.lib ${OMPI_WRAPPER_BASE_LIBS}")
ENDIF(OMPI_DEBUG_BUILD)
ELSEIF(WINDOWS_MINGW)
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_CXX_LIB "-lmpi_cxxd ${OMPI_WRAPPER_BASE_LIBS}")
ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_CXX_LIB "-lmpi_cxx ${OMPI_WRAPPER_BASE_LIBS}")
ENDIF(OMPI_DEBUG_BUILD)
ENDIF(WINDOWS_VS)
IF(BUILD_SHARED_LIBS)
SET(OMPI_WRAPPER_EXTRA_CXXFLAGS
"${OMPI_CXX_LAN_FLAG} ${OMPI_CXX_EXCEPTION} ${OMPI_C_DEF_PRE}OMPI_IMPORTS ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS")
@ -76,18 +101,26 @@ IF(OMPI_WANT_CXX_BINDINGS)
ENDIF(OMPI_DEBUG_BUILD)
ENDIF(BUILD_SHARED_LIBS)
# select debug or release libraries at configure time
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_CXX_LIB "libmpi_cxxd.lib ${OMPI_WRAPPER_BASE_LIBS}")
ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_CXX_LIB "libmpi_cxx.lib ${OMPI_WRAPPER_BASE_LIBS}")
ENDIF(OMPI_DEBUG_BUILD)
CONFIGURE_WRAPPER_DATA_FILE(mpic++)
CONFIGURE_WRAPPER_DATA_FILE(mpicxx)
ENDIF(OMPI_WANT_CXX_BINDINGS)
IF(OMPI_WANT_F77_BINDINGS)
# select debug or release libraries at configure time
IF(WINDOWS_VS)
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_EXTRA_LIBS "libmpi_f77d.lib ${OMPI_WRAPPER_BASE_LIBS}")
ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_EXTRA_LIBS "libmpi_f77.lib ${OMPI_WRAPPER_BASE_LIBS}")
ENDIF(OMPI_DEBUG_BUILD)
ELSEIF(WINDOWS_MINGW)
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_EXTRA_LIBS "-lmpi_f77d ${OMPI_WRAPPER_BASE_LIBS}")
ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_EXTRA_LIBS "-lmpi_f77 ${OMPI_WRAPPER_BASE_LIBS}")
ENDIF(OMPI_DEBUG_BUILD)
ENDIF(WINDOWS_VS)
IF(BUILD_SHARED_LIBS)
SET(OMPI_WRAPPER_EXTRA_FFLAGS
"")
@ -99,12 +132,6 @@ IF(OMPI_WANT_F77_BINDINGS)
ENDIF(OMPI_DEBUG_BUILD)
ENDIF(BUILD_SHARED_LIBS)
# select debug or release libraries at configure time
IF(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_EXTRA_LIBS "libmpi_f77d.lib ${OMPI_WRAPPER_BASE_LIBS}")
ELSE(OMPI_DEBUG_BUILD)
SET(OMPI_WRAPPER_EXTRA_LIBS "libmpi_f77.lib ${OMPI_WRAPPER_BASE_LIBS}")
ENDIF(OMPI_DEBUG_BUILD)
CONFIGURE_WRAPPER_DATA_FILE(mpif77)
UNSET(OMPI_WRAPPER_EXTRA_LIBS)
ENDIF(OMPI_WANT_F77_BINDINGS)

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

@ -56,13 +56,13 @@
#include "opal/util/basename.h"
#include "opal/util/os_path.h"
#if !defined(__WINDOWS__)
#define OPAL_INCLUDE_FLAG "-I"
#define OPAL_LIBDIR_FLAG "-L"
#else
#if defined(__WINDOWS__) && defined(_MSC_VER)
#define OPAL_INCLUDE_FLAG "/I"
#define OPAL_LIBDIR_FLAG "/LIBPATH:"
#endif /* !defined(__WINDOWS__) */
#else
#define OPAL_INCLUDE_FLAG "-I"
#define OPAL_LIBDIR_FLAG "-L"
#endif /* !defined(__WINDOWS__) && defined(_MSC_VER) */
struct options_data_t {
char **compiler_args;
@ -358,14 +358,20 @@ data_callback(const char *key, const char *value)
} else if (0 == strcmp(key, "libdir")) {
if (NULL != value) options_data[parse_options_idx].path_libdir =
opal_install_dirs_expand(value);
#if defined(__WINDOWS__)
#if defined(__WINDOWS__) && defined(_MSC_VER)
opal_argv_append_nosize( &options_data[parse_options_idx].link_flags, "/link" );
#endif /* defined(__WINDOWS__) */
#endif /* defined(__WINDOWS__) && defined(_MSC_VER) */
if (0 != strcmp(options_data[parse_options_idx].path_libdir, "/usr/lib")) {
char *line;
#if defined(__WINDOWS__)
# if defined(_MSC_VER)
asprintf(&line, OPAL_LIBDIR_FLAG"\"%s\"",
options_data[parse_options_idx].path_libdir);
# else
/* linked DLLs are in bin for MinGW build*/
asprintf(&line, OPAL_LIBDIR_FLAG"\"%s/../bin\"",
options_data[parse_options_idx].path_libdir);
# endif /* defined(_MSC_VER) */
#else
asprintf(&line, OPAL_LIBDIR_FLAG"%s",
options_data[parse_options_idx].path_libdir);