diff --git a/CMakeLists.txt b/CMakeLists.txt index 963fe32bfe..39a3233710 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/contrib/platform/win32/CMakeModules/ompi_check_MinGW.cmake b/contrib/platform/win32/CMakeModules/ompi_check_MinGW.cmake index f39932e801..87fbb67003 100644 --- a/contrib/platform/win32/CMakeModules/ompi_check_MinGW.cmake +++ b/contrib/platform/win32/CMakeModules/ompi_check_MinGW.cmake @@ -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.") diff --git a/ompi/CMakeLists.txt b/ompi/CMakeLists.txt index 6a8f896225..42d9832cc5 100644 --- a/ompi/CMakeLists.txt +++ b/ompi/CMakeLists.txt @@ -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) diff --git a/ompi/mpi/cxx/CMakeLists.txt b/ompi/mpi/cxx/CMakeLists.txt index 01fc694576..d465d01dd1 100644 --- a/ompi/mpi/cxx/CMakeLists.txt +++ b/ompi/mpi/cxx/CMakeLists.txt @@ -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) diff --git a/ompi/tools/CMakeLists.txt b/ompi/tools/CMakeLists.txt index 8d8d091044..76a8dce203 100644 --- a/ompi/tools/CMakeLists.txt +++ b/ompi/tools/CMakeLists.txt @@ -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,14 +40,23 @@ MACRO(CONFIGURE_WRAPPER_DATA_FILE APP_NAME) DESTINATION share/openmpi) ENDMACRO() + # select debug or release libraries at configure time -IF(OMPI_DEBUG_BUILD) - SET(OMPI_WRAPPER_BASE_LIBS - "libmpid.lib libopen-pald.lib libopen-rted.lib advapi32.lib Ws2_32.lib shlwapi.lib") -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) +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") + 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) diff --git a/opal/tools/wrappers/opal_wrapper.c b/opal/tools/wrappers/opal_wrapper.c index 7cf94a78c1..434d31b0ba 100644 --- a/opal/tools/wrappers/opal_wrapper.c +++ b/opal/tools/wrappers/opal_wrapper.c @@ -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);