From 4490fdbd34e43c0081771fb1bb5aa3c2865e0be3 Mon Sep 17 00:00:00 2001 From: Shiqing Fan Date: Fri, 29 Apr 2011 14:42:07 +0000 Subject: [PATCH] Add the initial support for MinGW and MSYS. Correctly check the dependencies of MSYS env. Set up configure include and lib path for building the package. update a few more CMake scripts. This commit was SVN r24663. --- CMakeLists.txt | 16 +- .../f77_find_ext_symbol_convention.cmake | 34 ++-- .../CMakeModules/f77_get_value_true.cmake | 10 +- .../win32/CMakeModules/find_ccp.cmake | 2 +- .../win32/CMakeModules/find_ofed_sdk.cmake | 2 +- .../win32/CMakeModules/find_winverbs.cmake | 2 +- .../CMakeModules/ompi_check_Microsoft.cmake | 27 ++- .../win32/CMakeModules/ompi_configure.cmake | 82 ++++---- .../CMakeModules/opal_event_config.cmake | 184 ++++++++++-------- opal/CMakeLists.txt | 26 ++- opal/include/opal/opal_socket_errno.h | 2 +- opal/tools/opal-checkpoint/CMakeLists.txt | 4 +- opal/tools/opal-restart/CMakeLists.txt | 4 +- opal/tools/wrappers/CMakeLists.txt | 4 +- opal/util/os_dirpath.c | 4 + opal/util/output.h | 2 + opal/win32/ompi_time.h | 4 +- opal/win32/win_compat.h | 88 ++++++--- orte/CMakeLists.txt | 17 +- orte/mca/plm/process/plm_process_module.c | 22 ++- 20 files changed, 334 insertions(+), 202 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1eea12bc4e..30f132166b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,16 @@ ENDIF(WIN32) # create top-level target(solution file) PROJECT("OpenMPI" C CXX) +IF(MSVC) + SET(WINDOWS_VS TRUE CACHE INTERNAL "Windows Visual Studio env") + IF(CMAKE_CL_64) + SET(COMPILER_TYPE "x64") + ELSE(CMAKE_CL_64) + SET(COMPILER_TYPE "win32") + ENDIF(CMAKE_CL_64) +ELSEIF(NOT "$ENV{MSYSTEM}" STREQUAL "") + SET(WINDOWS_MINGW TRUE CACHE INTERNAL "Windows MinGW env") +ENDIF(MSVC) SET (OpenMPI_VERSION $(OpenMPI_MAJOR_VERSION).$(OpenMPI_MINOR_VERSION).$(OpenMPI_PATCH_VERSION)) SET (CMAKE_MODULE_PATH "${OpenMPI_SOURCE_DIR}/contrib/platform/win32/CMakeModules;${CMAKE_MODULE_PATH}") @@ -80,12 +90,6 @@ SET (CMAKE_SUPPRESS_REGENERATION true) # Dynamic/shared build, the default is set to static(OFF) OPTION(BUILD_SHARED_LIBS "Whether we want to build shared libraries." ON) -IF(CMAKE_CL_64) - SET(COMPILER_TYPE "x64") -ELSE(CMAKE_CL_64) - SET(COMPILER_TYPE "win32") -ENDIF(CMAKE_CL_64) - #store current environment variables SET(PATH_OLD "$ENV{PATH}") SET(LIB_OLD "$ENV{LIB}") diff --git a/contrib/platform/win32/CMakeModules/f77_find_ext_symbol_convention.cmake b/contrib/platform/win32/CMakeModules/f77_find_ext_symbol_convention.cmake index 8afa9e6ead..4dd2c6719f 100644 --- a/contrib/platform/win32/CMakeModules/f77_find_ext_symbol_convention.cmake +++ b/contrib/platform/win32/CMakeModules/f77_find_ext_symbol_convention.cmake @@ -28,7 +28,7 @@ MACRO(OMPI_F77_FIND_EXT_SYMBOL_CONVENTION) "\t a = 1 \n" "\t return \n" "\t end \n") - + EXECUTE_PROCESS(COMMAND ${F77} ${F77_OPTION_COMPILE} conftest.f ${F77_OUTPUT_OBJ}conftest.lib WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp OUTPUT_VARIABLE OUTPUT @@ -38,24 +38,17 @@ MACRO(OMPI_F77_FIND_EXT_SYMBOL_CONVENTION) SET(OUTPUT_OBJ_FILE "conftest.lib") # now run dumpbin to generate an output file - EXECUTE_PROCESS(COMMAND ${DUMP_UTIL} ${OUTPUT_OBJ_FILE} /symbols /out:conftest_out + EXECUTE_PROCESS(COMMAND ${DUMP_UTIL} ${OUTPUT_OBJ_FILE} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp - OUTPUT_VARIABLE OUTPUT + OUTPUT_VARIABLE DUMP_OUTPUT RESULT_VARIABLE RESULT ERROR_VARIABLE ERROR) - - # find out the external symbol convention - FILE(STRINGS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/conftest_out - DOUBLE_UNDERSCORE REGEX "foo_bar__$") - FILE(STRINGS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/conftest_out - SINGLE_UNDERSCORE REGEX "foo_bar_$") - FILE(STRINGS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/conftest_out - MIXED_CASE REGEX "FOO_bar$") - FILE(STRINGS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/conftest_out - NO_UNDERSCORE REGEX "foo_bar$") - FILE(STRINGS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/conftest_out - UPPER_CASE REGEX "FOO_BAR$") + STRING(REGEX MATCH foo_bar__\n DOUBLE_UNDERSCORE ${DUMP_OUTPUT}) + STRING(REGEX MATCH foo_bar_\n SINGLE_UNDERSCORE ${DUMP_OUTPUT}) + STRING(REGEX MATCH FOO_bar\n MIXED_CASE ${DUMP_OUTPUT}) + STRING(REGEX MATCH foo_bar\n NO_UNDERSCORE ${DUMP_OUTPUT}) + STRING(REGEX MATCH FOO_BAR\n UPPER_CASE ${DUMP_OUTPUT}) # set up the corresponding values IF(NOT DOUBLE_UNDERSCORE STREQUAL "") @@ -105,6 +98,7 @@ MACRO(OMPI_F77_FIND_EXT_SYMBOL_CONVENTION) "IF(NOT \"${F77_LIB_PATH}\" STREQUAL \"\")\n" " LINK_DIRECTORIES(\"${F77_LIB_PATH}\")\n" "ENDIF(NOT \"${F77_LIB_PATH}\" STREQUAL \"\")\n" + "LINK_DIRECTORIES(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/)\n" "ADD_EXECUTABLE(conftest_c conftest_c.c)\n" "TARGET_LINK_LIBRARIES(conftest_c ${OUTPUT_OBJ_FILE})\n") @@ -117,14 +111,14 @@ MACRO(OMPI_F77_FIND_EXT_SYMBOL_CONVENTION) #MESSAGE("MY_OUTPUT:${MY_OUTPUT}") - SET(SYMBOL_CONVENTION_CHECK_DONE TRUE CACHE INTERNAL "Symbol convention check done.") - - IF(NOT TEST_OK) + IF(TEST_OK) + SET(SYMBOL_CONVENTION_CHECK_DONE TRUE CACHE INTERNAL "Symbol convention check done.") + ELSE(TEST_OK) UNSET(SYMBOL_CONVENTION_CHECK_DONE CACHE) MESSAGE(STATUS "${MY_OUTPUT}") MESSAGE(STATUS "*** Probably you have to setup the library path of the Fortran compiler.") MESSAGE(FATAL_ERROR "C and Fortran 77 compilers are not link compatible. Cannot continue.") - ENDIF(NOT TEST_OK) + ENDIF(TEST_OK) ENDIF(NOT SYMBOL_CONVENTION_CHECK_DONE) @@ -149,7 +143,7 @@ MACRO(OMPI_F77_MAKE_C_FUNCTION OUTPUT_VARIABLE FUNCTION_NAME) ENDIF("${RESULT}" STREQUAL "") ELSEIF("${ompi_cv_f77_external_symbol}" STREQUAL "single underscore") STRING(TOLOWER ${FUNCTION_NAME} ${OUTPUT_VARIABLE}) - SET(${OUTPUT_VARIABLE} "${OUTPUT_VARIABLE}_") + SET(${OUTPUT_VARIABLE} "${${OUTPUT_VARIABLE}}_") ELSEIF("${ompi_cv_f77_external_symbol}" STREQUAL "mixed case") SET(${OUTPUT_VARIABLE} ${FUNCTION_NAME}) ELSEIF("${ompi_cv_f77_external_symbol}" STREQUAL "no underscore") diff --git a/contrib/platform/win32/CMakeModules/f77_get_value_true.cmake b/contrib/platform/win32/CMakeModules/f77_get_value_true.cmake index 8001696862..9d01988ab5 100644 --- a/contrib/platform/win32/CMakeModules/f77_get_value_true.cmake +++ b/contrib/platform/win32/CMakeModules/f77_get_value_true.cmake @@ -59,7 +59,11 @@ MACRO(OMPI_F77_GET_VALUE_TRUE) "\tCALL print(value)\n" "\tend\n") - EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} ${OMPI_C_OPTION_COMPILE} conftest_c.c ${OMPI_C_INCLUDE_DIR}${C_COMPILER_INCLUDE} + IF(NOT "${C_COMPILER_INCLUDE}" STREQUAL "") + SET(EXECUTE_OPT "${OMPI_C_INCLUDE_DIR}${C_COMPILER_INCLUDE}") + ENDIF(NOT "${C_COMPILER_INCLUDE}" STREQUAL "") + + EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} ${OMPI_C_OPTION_COMPILE} conftest_c.c ${EXECUTE_OPT} ${OMPI_C_OUTPUT_OBJ}conftest_c.obj WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp OUTPUT_VARIABLE OUTPUT RESULT_VARIABLE RESULT @@ -70,7 +74,7 @@ MACRO(OMPI_F77_GET_VALUE_TRUE) MESSAGE(FATAL_ERROR "Could not determine value of Fortran .TRUE.. Aborting.") ENDIF(RESULT) - EXECUTE_PROCESS(COMMAND ${F77} ${F77_OPTION_COMPILE} conftest_f.f + EXECUTE_PROCESS(COMMAND ${F77} ${F77_OPTION_COMPILE} conftest_f.f ${F77_OUTPUT_OBJ}conftest_f.obj WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp OUTPUT_VARIABLE OUTPUT RESULT_VARIABLE RESULT @@ -81,7 +85,7 @@ MACRO(OMPI_F77_GET_VALUE_TRUE) MESSAGE(FATAL_ERROR "Could not determine value of Fortran .TRUE.. Aborting.") ENDIF(RESULT) - EXECUTE_PROCESS(COMMAND ${F77} conftest_f.obj conftest_c.obj ${F77_OUTPUT_EXE}conftest + EXECUTE_PROCESS(COMMAND ${F77} conftest_f.obj conftest_c.obj ${F77_OUTPUT_EXE}conftest.exe WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp OUTPUT_VARIABLE OUTPUT RESULT_VARIABLE RESULT diff --git a/contrib/platform/win32/CMakeModules/find_ccp.cmake b/contrib/platform/win32/CMakeModules/find_ccp.cmake index e3b3b64fe7..0d376370ff 100644 --- a/contrib/platform/win32/CMakeModules/find_ccp.cmake +++ b/contrib/platform/win32/CMakeModules/find_ccp.cmake @@ -33,7 +33,7 @@ ELSEIF(NOT CCP_FOUND) ELSE(CCP_LIB_PATH) SET(CCP_FOUND FALSE CACHE INTERNAL "find result of CCP.") SET(RESULT FALSE) - MESSAGE(STATUS "looking for ccp...failed.") + MESSAGE(STATUS "looking for ccp...not found.") ENDIF(CCP_LIB_PATH) ELSE(NOT CCP_FOUND) diff --git a/contrib/platform/win32/CMakeModules/find_ofed_sdk.cmake b/contrib/platform/win32/CMakeModules/find_ofed_sdk.cmake index da221a55f8..fffbbdf9f9 100644 --- a/contrib/platform/win32/CMakeModules/find_ofed_sdk.cmake +++ b/contrib/platform/win32/CMakeModules/find_ofed_sdk.cmake @@ -81,7 +81,7 @@ ELSE(NOT OMPI_WANT_OFED) ELSE(OFED_SDK_INCLUDE_PATH AND OFED_SDK_LIBIBVERBS) SET(OFED_SDK_FOUND FALSE CACHE INTERNAL "find result of OFED SDK.") SET(RESULT FALSE) - MESSAGE(STATUS "looking for OFED SDK...failed.") + MESSAGE(STATUS "looking for OFED SDK...not found.") ENDIF(OFED_SDK_INCLUDE_PATH AND OFED_SDK_LIBIBVERBS) ELSE(NOT OFED_SDK_FOUND) diff --git a/contrib/platform/win32/CMakeModules/find_winverbs.cmake b/contrib/platform/win32/CMakeModules/find_winverbs.cmake index 1d516d8851..81076045d0 100644 --- a/contrib/platform/win32/CMakeModules/find_winverbs.cmake +++ b/contrib/platform/win32/CMakeModules/find_winverbs.cmake @@ -67,7 +67,7 @@ ELSE(NOT OMPI_WANT_WINVERBS) ELSE(WINVERBS_INCLUDE_PATH AND WINVERBS_LIBIBVERBS) SET(WINVERBS_FOUND FALSE CACHE INTERNAL "find result of Winverbs.") SET(RESULT FALSE) - MESSAGE(STATUS "looking for Wiinverbs...failed.") + MESSAGE(STATUS "looking for Winverbs...not found.") ENDIF(WINVERBS_INCLUDE_PATH AND WINVERBS_LIB) ELSE(NOT WINVERBS_FOUND) diff --git a/contrib/platform/win32/CMakeModules/ompi_check_Microsoft.cmake b/contrib/platform/win32/CMakeModules/ompi_check_Microsoft.cmake index fd0e3b26c4..f8e7290532 100644 --- a/contrib/platform/win32/CMakeModules/ompi_check_Microsoft.cmake +++ b/contrib/platform/win32/CMakeModules/ompi_check_Microsoft.cmake @@ -15,11 +15,30 @@ # # Keep all the Windows checks in one place. # -# USAGE: -# OMPI_MICROSOFT_COMPILER() -# ###################################################################### +# Get current time and date. +EXECUTE_PROCESS(COMMAND cmd /C time /t + OUTPUT_VARIABLE CURRENT_TIME) +EXECUTE_PROCESS(COMMAND cmd /C date /t + OUTPUT_VARIABLE CURRENT_DATE) + +STRING (REPLACE "\n" "" CURRENT_TIME ${CURRENT_TIME}) +STRING (REPLACE "\n" "" CURRENT_DATE ${CURRENT_DATE}) +STRING (REGEX MATCH [.-/\0-9]+ CURRENT_DATE ${CURRENT_DATE}) +SET (OPAL_CONFIGURE_DATE "${CURRENT_TIME} ${CURRENT_DATE}" CACHE INTERNAL "OPAL_CONFIGURE_DATE") +SET (OMPI_BUILD_DATE "${CURRENT_TIME} ${CURRENT_DATE}" CACHE INTERNAL "OMPI_BUILD_DATE") + +OMPI_DEF(OPAL_CONFIGURE_DATE "${CURRENT_TIME} ${CURRENT_DATE}" "Configuration date." 1 1) +OMPI_DEF(OMPI_BUILD_DATE "${CURRENT_TIME} ${CURRENT_DATE}" "Build date." 1 1) + +# Set up compiler information. +OMPI_DEF(COMPILER_FAMILYNAME MICROSOFT "Compiler family name" 1 1) +OMPI_DEF(COMPILER_VERSION ${MSVC_VERSION} "Compiler version" 0 1) +OMPI_DEF(OPAL_BUILD_PLATFORM_COMPILER_FAMILYID 14 "Compiler family ID" 0 1) +OMPI_DEF(OPAL_BUILD_PLATFORM_COMPILER_FAMILYNAME ${COMPILER_FAMILYNAME} "Compiler family name" 0 1) +OMPI_DEF(OPAL_BUILD_PLATFORM_COMPILER_VERSION_STR ${MSVC_VERSION} "Compiler version" 0 1) + IF(NOT MICROSOFT_CHECK_DONE) MESSAGE( STATUS "Start Microsoft specific detection....") @@ -117,6 +136,7 @@ IF(NOT MICROSOFT_CHECK_DONE) "Output option for making static libraries.") SET(DUMP_UTIL "${VC_BIN_PATH}/dumpbin.exe" CACHE INTERNAL "the dumpbin application.") + SET(DUMP_UTIL_OPT "/symbols /out:" CACHE INTERNAL "the dumpbin application options.") FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/cl_test.c "int main() {return 0;}") @@ -186,6 +206,7 @@ OMPI_DEF_VAR(HAVE_INTERLOCKEDCOMPAREEXCHANGERELEASE "Whether we support 32 bits OMPI_DEF(MCA_COMMON_SM_WINDOWS 1 "Whether we have shared memory support for Windows or not." 0 1) OMPI_DEF(MCA_COMMON_SM_SYSV 0 "Whether we have shared memory support for SYSV or not." 0 1) OMPI_DEF(MCA_COMMON_SM_POSIX 0 "Whether we have shared memory support for POSIX or not." 0 1) +OMPI_DEF(OPAL_HAVE_POSIX_THREADS 0 "Do we have POSIX threads." 0 1) OMPI_CHECK_INCLUDE_FILE (windows.h HAVE_WINDOWS_H) diff --git a/contrib/platform/win32/CMakeModules/ompi_configure.cmake b/contrib/platform/win32/CMakeModules/ompi_configure.cmake index 8a298f5ff4..3eecd602ed 100644 --- a/contrib/platform/win32/CMakeModules/ompi_configure.cmake +++ b/contrib/platform/win32/CMakeModules/ompi_configure.cmake @@ -86,8 +86,22 @@ OMPI_DEF(OMPI_BUILD_USER $ENV{USERNAME} "User who has built the package." 1 1) OMPI_DEF(OMPI_BUILD_HOST $ENV{COMPUTERNAME} "Host on which the package has been built." 1 1) -OMPI_DEF(OPAL_ARCH "${CMAKE_SYSTEM_PROCESSOR} ${CMAKE_SYSTEM}" "OMPI architecture string" 1 1) +#detect the compiler bit +OMPI_CHECK_TYPES("void *" VOID_P none c) +IF(${SIZEOF_VOID_P} EQUAL 4) + SET(OMPI_COMPILER_BIT "86 bit") + SET(IS_32_BIT TRUE CACHE INTERNAL "32 bit compiler") +ELSE(${SIZEOF_VOID_P} EQUAL 4) + SET(OMPI_COMPILER_BIT "64 bit") + SET(IS_64_BIT TRUE CACHE INTERNAL "64 bit compiler") +ENDIF(${SIZEOF_VOID_P} EQUAL 4) +OMPI_DEF(OPAL_ARCH "${CMAKE_SYSTEM} ${OMPI_COMPILER_BIT}" "OMPI architecture string" 1 1) +IF(WINDOWS_VS) + INCLUDE(ompi_check_Microsoft) +ELSEIF(WINDOWS_MINGW) + INCLUDE(ompi_check_MinGW) +ENDIF(WINDOWS_VS) INCLUDE(opal_get_version) @@ -101,25 +115,8 @@ OMPI_DEF(PACKAGE_VERSION ${OPAL_VERSION} "Define to the version of this package. OMPI_DEF(PACKAGE_STRING "Open MPI ${PACKAGE_VERSION}" "Define to the full name and version of this package." 1 1) - -# Get current time and date. -EXECUTE_PROCESS(COMMAND cmd /C time /t - OUTPUT_VARIABLE CURRENT_TIME) - -EXECUTE_PROCESS(COMMAND cmd /C date /t - OUTPUT_VARIABLE CURRENT_DATE) - -STRING (REPLACE "\n" "" CURRENT_TIME ${CURRENT_TIME}) -STRING (REPLACE "\n" "" CURRENT_DATE ${CURRENT_DATE}) -STRING (REGEX MATCH [.-/\0-9]+ CURRENT_DATE ${CURRENT_DATE}) -SET (OPAL_CONFIGURE_DATE "${CURRENT_TIME} ${CURRENT_DATE}" CACHE INTERNAL "OPAL_CONFIGURE_DATE") -SET (OMPI_BUILD_DATE "${CURRENT_TIME} ${CURRENT_DATE}" CACHE INTERNAL "OMPI_BUILD_DATE") - -OMPI_DEF(OPAL_CONFIGURE_DATE "${CURRENT_TIME} ${CURRENT_DATE}" "Configuration date." 1 1) -OMPI_DEF(OMPI_BUILD_DATE "${CURRENT_TIME} ${CURRENT_DATE}" "Build date." 1 1) - -OMPI_DEF(OMPI_BUILD_CFLAGS "/Od /Gm /EHsc /RTC1 /MDd" "C flags" 1 1) - +#OMPI_DEF(OMPI_BUILD_CFLAGS "/Od /Gm /EHsc /RTC1 /MDd" "C flags" 1 1) +OMPI_DEF(OMPI_BUILD_CFLAGS "${CMAKE_C_FLAGS} " "C flags" 1 1) SET(OMPI_BUILD_CPPFLAGS "\"-I${OpenMPI_SOURCE_DIR}/ -I${OpenMPI_SOURCE_DIR}/opal @@ -138,7 +135,8 @@ SET(OMPI_BUILD_CPPFLAGS "\"-I${OpenMPI_SOURCE_DIR}/ -I${OpenMPI_SOURCE_DIR}/contrib/platform/win32\"") -OMPI_DEF(OMPI_BUILD_CXXFLAGS "/Od /Gm /EHsc /RTC1 /MDd" "C++ flags" 1 1) +#OMPI_DEF(OMPI_BUILD_CXXFLAGS "/Od /Gm /EHsc /RTC1 /MDd" "C++ flags" 1 1) +OMPI_DEF(OMPI_BUILD_CXXFLAGS "${CMAKE_CXX_FLAGS} " "C++ flags" 1 1) SET(OMPI_BUILD_CXXCPPFLAGS ${OMPI_BUILD_CPPFLAGS}) @@ -154,14 +152,7 @@ OMPI_DEF(OMPI_F90_BUILD_SIZE "small" "F90 build size." 1 1) OMPI_DEF(OMPI_BTL_SM_HAVE_KNEM 0 "If btl sm has knem." 0 1) -IF(WIN32 AND MSVC) - INCLUDE(ompi_check_Microsoft) - OMPI_DEF(COMPILER_FAMILYNAME MICROSOFT "Compiler family name" 1 1) - OMPI_DEF(COMPILER_VERSION ${MSVC_VERSION} "Compiler version" 0 1) - OMPI_DEF(OPAL_BUILD_PLATFORM_COMPILER_FAMILYID 14 "Compiler family ID" 0 1) - OMPI_DEF(OPAL_BUILD_PLATFORM_COMPILER_FAMILYNAME ${COMPILER_FAMILYNAME} "Compiler family name" 0 1) - OMPI_DEF(OPAL_BUILD_PLATFORM_COMPILER_VERSION_STR ${MSVC_VERSION} "Compiler version" 0 1) -ENDIF(WIN32 AND MSVC) + ################################################################### @@ -268,7 +259,6 @@ IF (NOT MSVC) # Check headers # ################################################################### - OMPI_CHECK_INCLUDE_FILE (alloca.h HAVE_ALLOCA_H) OMPI_CHECK_INCLUDE_FILE (arpa/inet.h HAVE_ARPA_INET_H) @@ -383,7 +373,6 @@ OMPI_CHECK_INCLUDE_FILE (termios.h HAVE_TERMIOS_H) OMPI_CHECK_INCLUDE_FILE (sys/time.h HAVE_TIMERADD) - OMPI_CHECK_INCLUDE_FILE (ucontext.h HAVE_UCONTEXT_H) OMPI_CHECK_INCLUDE_FILE (ulimit.h HAVE_ULIMIT_H) @@ -396,6 +385,35 @@ OMPI_CHECK_INCLUDE_FILE (utmp.h HAVE_UTMP_H) OMPI_CHECK_INCLUDE_FILE (mx_extension.h MX_HAVE_EXTENSIONS_H) +OMPI_CHECK_INCLUDE_FILE (malloc.h HAVE_MALLOC_H) + +OMPI_CHECK_INCLUDE_FILE (memory.h HAVE_MEMORY_H) + +OMPI_CHECK_INCLUDE_FILE (signal.h HAVE_SIGNAL_H) + +OMPI_CHECK_INCLUDE_FILE (stdarg.h HAVE_STDARG_H) + +OMPI_CHECK_INCLUDE_FILE (stdint.h HAVE_STDINT_H) + +OMPI_CHECK_INCLUDE_FILE (stdlib.h HAVE_STDLIB_H) + +OMPI_CHECK_INCLUDE_FILE (string.h HAVE_STRING_H) + +OMPI_CHECK_INCLUDE_FILE (sys/stat.h HAVE_SYS_STAT_H) + +OMPI_CHECK_INCLUDE_FILE (sys/types.h HAVE_SYS_TYPES_H) + +OMPI_CHECK_INCLUDE_FILE (time.h HAVE_TIME_H) + +OMPI_CHECK_INCLUDE_FILE(stddef.h OPAL_STDC_HEADERS) + +OMPI_CHECK_FUNCTION_EXISTS (ceil HAVE_CEIL) + +OMPI_CHECK_FUNCTION_EXISTS (execve HAVE_EXECVE) + +OMPI_CHECK_FUNCTION_EXISTS (isatty HAVE_ISATTY) + +OMPI_CHECK_FUNCTION_EXISTS (vsnprintf HAVE_VSNPRINTF) ################################################################### # Check functions # @@ -716,8 +734,6 @@ IF(WIN32) OMPI_DEF(OPAL_ASSEMBLY_ARCH "OMPI_WINDOWS" "Architecture type of assembly to use for atomic operations." 0 1) - OMPI_DEF(OPAL_HAVE_POSIX_THREADS 0 "Do we have POSIX threads." 0 1) - OMPI_DEF(OPAL_HAVE_WEAK_SYMBOLS 0 "Whether we have weak symbols or not" 0 1) OMPI_DEF(OPAL_HAVE_SOLARIS_THREADS 0 "Do we have native Solaris threads." 0 1) diff --git a/contrib/platform/win32/CMakeModules/opal_event_config.cmake b/contrib/platform/win32/CMakeModules/opal_event_config.cmake index 9c3e19637c..d404cecc80 100644 --- a/contrib/platform/win32/CMakeModules/opal_event_config.cmake +++ b/contrib/platform/win32/CMakeModules/opal_event_config.cmake @@ -17,100 +17,118 @@ IF(IN_USE STREQUAL "0") ELSE(IN_USE STREQUAL "0") - IF(LIBEVENT_CONFIG_DONE) - MESSAGE(STATUS "multiple libevent selected, only one is configured.") - SET(RESULT FALSE) + SET(LIBEVENT_FOUND TRUE CACHE INTERNAL "allow only one event mca.") - ELSE(LIBEVENT_CONFIG_DONE) - SET(LIBEVENT_FOUND TRUE CACHE INTERNAL "allow only one event mca.") + MESSAGE(STATUS "configure libevent.") - MESSAGE(STATUS "configure libevent.") + # set up event include directories. + INCLUDE_DIRECTORIES ("${CURRENT_PATH}/libevent/compat" + "${CURRENT_PATH}/libevent/WIN32-Code/" + "${CURRENT_PATH}/libevent/include/" + "${CURRENT_PATH}/libevent" + "${PROJECT_BINARY_DIR}/mca/event/libevent207/libevent/include/") - # set up event include directories. - INCLUDE_DIRECTORIES ("${CURRENT_PATH}/libevent/compat" - "${CURRENT_PATH}/libevent/WIN32-Code/" - "${CURRENT_PATH}/libevent/include/" - "${CURRENT_PATH}/libevent" - "${PROJECT_BINARY_DIR}/mca/event/libevent207/libevent/include/") + SET(LIBEVENT_INCLUDE_DIRS ${CURRENT_PATH}/libevent/compat;${CURRENT_PATH}/libevent/WIN32-Code/;${CURRENT_PATH}/libevent/include/;${CURRENT_PATH}/libevent;${PROJECT_BINARY_DIR}/mca/event/libevent207/libevent/include/ + CACHE INTERNAL "the libevent dirs that have to be included on the top level.") - SET(LIBEVENT_INCLUDE_DIRS ${CURRENT_PATH}/libevent/compat;${CURRENT_PATH}/libevent/WIN32-Code/;${CURRENT_PATH}/libevent/include/;${CURRENT_PATH}/libevent;${PROJECT_BINARY_DIR}/mca/event/libevent207/libevent/include/ - CACHE INTERNAL "the libevent dirs that have to be included on the top level.") - - IF(WIN32) + IF(WIN32) - # generating config.h - # windows doesn't need this file, just make an empty one - FILE(WRITE ${PROJECT_BINARY_DIR}/mca/event/libevent207/libevent/include/config.h - " /* config.h. Generated automatically by CMake. */ ") + # generating config.h + # windows doesn't need this file, just make an empty one + FILE(WRITE ${PROJECT_BINARY_DIR}/mca/event/libevent207/libevent/include/config.h + " /* config.h. Generated automatically by CMake. */ ") - SET(RESULT_COMPONENT_FILES - ${RESULT_COMPONENT_FILES} - ${CURRENT_PATH}/libevent207_component.c - ${CURRENT_PATH}/libevent207_module.c - #system sources - ${CURRENT_PATH}/libevent/win32select.c - ${CURRENT_PATH}/libevent/evthread_win32.c - ${CURRENT_PATH}/libevent/buffer_iocp.c - ${CURRENT_PATH}/libevent/event_iocp.c - ${CURRENT_PATH}/libevent/bufferevent_async.c - #core sources - ${CURRENT_PATH}/libevent/event.c - ${CURRENT_PATH}/libevent/evthread.c - ${CURRENT_PATH}/libevent/buffer.c - ${CURRENT_PATH}/libevent/bufferevent.c - ${CURRENT_PATH}/libevent/bufferevent_sock.c - ${CURRENT_PATH}/libevent/bufferevent_filter.c - ${CURRENT_PATH}/libevent/bufferevent_pair.c - ${CURRENT_PATH}/libevent/listener.c - ${CURRENT_PATH}/libevent/bufferevent_ratelim.c - ${CURRENT_PATH}/libevent/evmap.c - ${CURRENT_PATH}/libevent/log.c - ${CURRENT_PATH}/libevent/evutil.c - ${CURRENT_PATH}/libevent/evutil_rand.c - ${CURRENT_PATH}/libevent/strlcpy.c - ${CURRENT_PATH}/libevent/signal.c - ${CURRENT_PATH}/libevent/event_tagging.c - ) + SET(RESULT_COMPONENT_FILES + ${RESULT_COMPONENT_FILES} + ${CURRENT_PATH}/libevent207_component.c + ${CURRENT_PATH}/libevent207_module.c + #system sources + ${CURRENT_PATH}/libevent/win32select.c + ${CURRENT_PATH}/libevent/evthread_win32.c + ${CURRENT_PATH}/libevent/buffer_iocp.c + ${CURRENT_PATH}/libevent/event_iocp.c + ${CURRENT_PATH}/libevent/bufferevent_async.c + #core sources + ${CURRENT_PATH}/libevent/event.c + ${CURRENT_PATH}/libevent/evthread.c + ${CURRENT_PATH}/libevent/buffer.c + ${CURRENT_PATH}/libevent/bufferevent.c + ${CURRENT_PATH}/libevent/bufferevent_sock.c + ${CURRENT_PATH}/libevent/bufferevent_filter.c + ${CURRENT_PATH}/libevent/bufferevent_pair.c + ${CURRENT_PATH}/libevent/listener.c + ${CURRENT_PATH}/libevent/bufferevent_ratelim.c + ${CURRENT_PATH}/libevent/evmap.c + ${CURRENT_PATH}/libevent/log.c + ${CURRENT_PATH}/libevent/evutil.c + ${CURRENT_PATH}/libevent/evutil_rand.c + ${CURRENT_PATH}/libevent/strlcpy.c + ${CURRENT_PATH}/libevent/signal.c + ${CURRENT_PATH}/libevent/event_tagging.c + ) + IF(WINDOWS_MINGW) + SET_SOURCE_FILES_PROPERTIES(${CURRENT_PATH}/libevent/win32select.c + ${CURRENT_PATH}/libevent/evthread_win32.c + ${CURRENT_PATH}/libevent/buffer_iocp.c + ${CURRENT_PATH}/libevent/bufferevent_async.c + ${CURRENT_PATH}/libevent/event.c + ${CURRENT_PATH}/libevent/evthread.c + ${CURRENT_PATH}/libevent/bufferevent.c + ${CURRENT_PATH}/libevent/bufferevent_sock.c + ${CURRENT_PATH}/libevent/bufferevent_filter.c + ${CURRENT_PATH}/libevent/bufferevent_pair.c + ${CURRENT_PATH}/libevent/bufferevent_ratelim.c + ${CURRENT_PATH}/libevent/evmap.c + ${CURRENT_PATH}/libevent/log.c + ${CURRENT_PATH}/libevent/evutil_rand.c + ${CURRENT_PATH}/libevent/strlcpy.c + ${CURRENT_PATH}/libevent/signal.c + ${CURRENT_PATH}/libevent/event_tagging.c + PROPERTIES COMPILE_FLAGS "-D intptr_t=int -D _INTPTR_T_DEFINED") + SET(OBJ_PATH "${PROJECT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/libopen-pal.dir/mca/event/libevent207/libevent") + SET(EVENT_OBJ_FILES "${OBJ_PATH}/*.obj" CACHE INTERNAL "event obj files") + ELSEIF(WINDOWS_VS) + SET(OBJ_PATH "${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}") + # for generating the static library, as opal will not export event API any more. + SET(EVENT_OBJ_FILES + ${OBJ_PATH}/win32select.obj + ${OBJ_PATH}/evthread_win32.obj + ${OBJ_PATH}/buffer_iocp.obj + ${OBJ_PATH}/event_iocp.obj + ${OBJ_PATH}/bufferevent_async.obj + ${OBJ_PATH}/event.obj + ${OBJ_PATH}/evthread.obj + ${OBJ_PATH}/buffer.obj + ${OBJ_PATH}/bufferevent.obj + ${OBJ_PATH}/bufferevent_sock.obj + ${OBJ_PATH}/bufferevent_filter.obj + ${OBJ_PATH}/bufferevent_pair.obj + ${OBJ_PATH}/listener.obj + ${OBJ_PATH}/bufferevent_ratelim.obj + ${OBJ_PATH}/evmap.obj + ${OBJ_PATH}/log.obj + ${OBJ_PATH}/evutil.obj + ${OBJ_PATH}/evutil_rand.obj + ${OBJ_PATH}/strlcpy.obj + ${OBJ_PATH}/signal.obj + ${OBJ_PATH}/event_tagging.obj + CACHE INTERNAL "event obj files") + ENDIF(WINDOWS_MINGW) - OMPI_DEF(OPAL_HAVE_WORKING_EVENTOPS 1 - "Whether our event component has working event operations or not if not, then assumedly it only has working timers and signals)." 0 1) + OMPI_DEF(OPAL_HAVE_WORKING_EVENTOPS 1 + "Whether our event component has working event operations or not if not, then assumedly it only has working timers and signals)." 0 1) - OMPI_DEF(MCA_event_IMPLEMENTATION_HEADER "${CURRENT_PATH}/libevent207.h" - "Header to include for event implementation" 1 1) + OMPI_DEF(MCA_event_IMPLEMENTATION_HEADER "${CURRENT_PATH}/libevent207.h" + "Header to include for event implementation" 1 1) - # for generating the static library, as opal will not export event API any more. - SET(EVENT_OBJ_FILES - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/win32select.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/evthread_win32.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/buffer_iocp.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/event_iocp.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/bufferevent_async.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/event.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/evthread.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/buffer.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/bufferevent.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/bufferevent_sock.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/bufferevent_filter.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/bufferevent_pair.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/listener.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/bufferevent_ratelim.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/evmap.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/log.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/evutil.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/evutil_rand.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/strlcpy.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/signal.obj - ${PROJECT_BINARY_DIR}/libopen-pal.dir/${CMAKE_CFG_INTDIR}/event_tagging.obj - ) + SET(LIBEVENT_CONFIG_DONE TRUE CACHE INTERNAL "Libevent config done.") - ELSE(WIN32) - SET(RESULT_COMPONENT_FILES - ${RESULT_COMPONENT_FILES} - ) - ENDIF(WIN32) + ELSE(WIN32) + SET(RESULT_COMPONENT_FILES + ${RESULT_COMPONENT_FILES} + ) + ENDIF(WIN32) SET(RESULT TRUE) - ENDIF(LIBEVENT_CONFIG_DONE) - ENDIF(IN_USE STREQUAL "0") \ No newline at end of file diff --git a/opal/CMakeLists.txt b/opal/CMakeLists.txt index a3e24ae7b6..2c2087a338 100644 --- a/opal/CMakeLists.txt +++ b/opal/CMakeLists.txt @@ -89,15 +89,29 @@ SET (OPAL_SOURCE_FILES ${OPAL_SOURCE_FILES} ${MCA_FILES}) ADD_LIBRARY (libopen-pal ${OPAL_SOURCE_FILES}) + +IF(WINDOWS_MINGW) + SET(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIRARIES} -lpthread") + SET(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIRARIES} -lpthread") +ENDIF(WINDOWS_MINGW) + # Set compile flags for this target IF (BUILD_SHARED_LIBS) - ADD_CUSTOM_COMMAND(TARGET libopen-pal POST_BUILD - COMMAND ${OMPI_LIB_CMD} ${EVENT_OBJ_FILES} ${OMPI_LIB_CMD_OUTPUT}${OpenMPI_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event${CMAKE_DEBUG_POSTFIX}.lib - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Generating static event library." - ) + IF(WINDOWS_MINGW) + ADD_CUSTOM_COMMAND(TARGET libopen-pal POST_BUILD + COMMAND ar -rcs ${OpenMPI_BINARY_DIR}/event${CMAKE_DEBUG_POSTFIX}.lib ${EVENT_OBJ_FILES} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMENT "Generating static event library." + ) + ELSEIF(WINDOWS_VS) + ADD_CUSTOM_COMMAND(TARGET libopen-pal POST_BUILD + COMMAND ${OMPI_LIB_CMD} ${OMPI_LIB_CMD_OUTPUT}${OpenMPI_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event${CMAKE_DEBUG_POSTFIX}.lib ${EVENT_OBJ_FILES} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMENT "Generating static event library." + ) + ENDIF(WINDOWS_MINGW) - SET_TARGET_PROPERTIES(libopen-pal PROPERTIES COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_EXPORTS") + SET_TARGET_PROPERTIES(libopen-pal PROPERTIES COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_EXPORTS" PREFIX "" IMPORT_PREFIX "") IF(OPAL_WANT_LIBLTDL AND LIBLTDL_FOUND) INCLUDE_DIRECTORIES(${LIBLTDL_INCLUDE_PATH}) TARGET_LINK_LIBRARIES (libopen-pal Ws2_32.lib shlwapi.lib ${LIBLTDL_LIB}) diff --git a/opal/include/opal/opal_socket_errno.h b/opal/include/opal/opal_socket_errno.h index 347d1ce53f..1d6edf6a0b 100644 --- a/opal/include/opal/opal_socket_errno.h +++ b/opal/include/opal/opal_socket_errno.h @@ -33,7 +33,7 @@ #define opal_socket_errno opal_get_socket_errno() /* some of these have been defined in newer version of errno.h*/ -#if defined(_MSC_VER) && _MSC_VER < 1600 +#if (defined(__WINDOWS__) && !defined(_MSC_VER)) || _MSC_VER < 1600 #define EWOULDBLOCK WSAEWOULDBLOCK #define EINPROGRESS WSAEINPROGRESS diff --git a/opal/tools/opal-checkpoint/CMakeLists.txt b/opal/tools/opal-checkpoint/CMakeLists.txt index 4f64708b7a..4ec0c63c0a 100644 --- a/opal/tools/opal-checkpoint/CMakeLists.txt +++ b/opal/tools/opal-checkpoint/CMakeLists.txt @@ -14,9 +14,7 @@ ADD_EXECUTABLE (opal-checkpoint ${OPAL_CHECKPOINT_SOURCE_FILES}) ADD_DEPENDENCIES(opal-checkpoint libopen-pal) IF(BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(opal-checkpoint PROPERTIES - COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_IMPORTS - ${OMPI_C_DEF_PRE}OMPI_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS - ${OMPI_CXX_LAN_FLAG}") + COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_C_DEF_PRE}OMPI_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS ${OMPI_CXX_LAN_FLAG}") ENDIF(BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(opal-checkpoint PROPERTIES diff --git a/opal/tools/opal-restart/CMakeLists.txt b/opal/tools/opal-restart/CMakeLists.txt index 376de21f0a..9d7e1cd3ee 100644 --- a/opal/tools/opal-restart/CMakeLists.txt +++ b/opal/tools/opal-restart/CMakeLists.txt @@ -14,9 +14,7 @@ ADD_EXECUTABLE (opal-restart ${OPAL_RESTART_SOURCE_FILES}) ADD_DEPENDENCIES(opal-restart libopen-pal) IF(BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(opal-restart PROPERTIES - COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_IMPORTS - ${OMPI_C_DEF_PRE}OMPI_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS - ${OMPI_CXX_LAN_FLAG}") + COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_C_DEF_PRE}OMPI_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS ${OMPI_CXX_LAN_FLAG}") ENDIF(BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(opal-restart PROPERTIES diff --git a/opal/tools/wrappers/CMakeLists.txt b/opal/tools/wrappers/CMakeLists.txt index abfdc61146..af0acd7454 100644 --- a/opal/tools/wrappers/CMakeLists.txt +++ b/opal/tools/wrappers/CMakeLists.txt @@ -14,9 +14,7 @@ ADD_EXECUTABLE (opal-wrapper ${OPAL_WRAPPER_SOURCE_FILES}) ADD_DEPENDENCIES(opal-wrapper libopen-pal) IF(BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(opal-wrapper PROPERTIES - COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_IMPORTS - ${OMPI_C_DEF_PRE}OMPI_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS - ${OMPI_CXX_LAN_FLAG}") + COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_C_DEF_PRE}OMPI_IMPORTS ${OMPI_C_DEF_PRE}ORTE_IMPORTS ${OMPI_CXX_LAN_FLAG}") ENDIF(BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(opal-wrapper PROPERTIES diff --git a/opal/util/os_dirpath.c b/opal/util/os_dirpath.c index ffb42ccc3a..fa3896d157 100644 --- a/opal/util/os_dirpath.c +++ b/opal/util/os_dirpath.c @@ -416,7 +416,11 @@ int opal_os_dirpath_access(const char *path, const mode_t in_mode ) { #ifndef __WINDOWS__ struct stat buf; #else +# ifndef _MSC_VER + struct stat buf; +# else struct __stat64 buf; +# endif #endif mode_t loc_mode = S_IRWXU; /* looking for full rights */ diff --git a/opal/util/output.h b/opal/util/output.h index 397a40f4e4..ba7cd45c4c 100644 --- a/opal/util/output.h +++ b/opal/util/output.h @@ -145,6 +145,8 @@ struct opal_output_stream_t { */ #if !defined(__WINDOWS__) char *lds_syslog_ident; +#elif !defined(_MSC_VER) + char *lds_syslog_ident; #else HANDLE lds_syslog_ident; #endif /* !defined(__WINDOWS__) */ diff --git a/opal/win32/ompi_time.h b/opal/win32/ompi_time.h index 440d1d0f79..fd21cd8367 100644 --- a/opal/win32/ompi_time.h +++ b/opal/win32/ompi_time.h @@ -155,12 +155,14 @@ struct clockinfo { #define TIMER_RELTIME 0x0 /* relative timer */ #define TIMER_ABSTIME 0x1 /* absolute timer */ - +#ifndef OMPI_TIMESPEC +#define OMPI_TIMESPEC struct timespec { long tv_sec; long tv_nsec; }; +#endif /* diff --git a/opal/win32/win_compat.h b/opal/win32/win_compat.h index 317ebbed9a..dbee354d69 100644 --- a/opal/win32/win_compat.h +++ b/opal/win32/win_compat.h @@ -85,6 +85,7 @@ /* for alloca */ #include +#ifdef _MSC_VER #if defined(OMPI_BUILDING) && OMPI_BUILDING #include "opal/win32/ompi_uio.h" #include "opal/win32/ompi_time.h" @@ -95,9 +96,6 @@ #include "opal/win32/ompi_socket.h" #endif -#define MAXPATHLEN _MAX_PATH -#define MAXHOSTNAMELEN _MAX_PATH -#define PATH_MAX _MAX_PATH #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 @@ -114,12 +112,6 @@ typedef unsigned int uint; #define X_OK R_OK /* no execution right on Windows */ #define S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC) -#define WTERMSIG(EXIT_CODE) (1) -#define WIFEXITED(EXIT_CODE) (1) -#define WEXITSTATUS(EXIT_CODE) (EXIT_CODE) -#define WIFSIGNALED(EXIT_CODE) (0) -#define WIFSTOPPED(EXIT_CODE) (0) -#define WSTOPSIG(EXIT_CODE) (11) /** * Microsoft compiler complain about non conformance of the default UNIX function. @@ -131,7 +123,6 @@ typedef unsigned int uint; #define strdup _strdup #define putenv _putenv #define getcwd _getcwd -#define mkdir(PATH, MODE) _mkdir((PATH)) #define rmdir _rmdir #define chdir _chdir #define chmod _chmod @@ -146,7 +137,6 @@ typedef unsigned int uint; #define fileno _fileno #define isatty _isatty #define execvp _execvp -#define pipe(array_fd) _pipe(array_fd, 1024, O_BINARY ) #define S_ISDIR(STAT_MODE) ((STAT_MODE) & _S_IFDIR) #define S_ISREG(STAT_MODE) ((STAT_MODE) & _S_IFREG) #define strncasecmp _strnicmp @@ -157,39 +147,87 @@ typedef unsigned int uint; #define strtok_r strtok_s #define srand48 srand #define lrand48 rand -#define nanosleep(tp, rem) Sleep(*tp.tv_sec*1000+*tp.tv_nsec/1000000) #define usleep(t) Sleep(t/1000) #define posix_memalign(p, a, s) *p=_aligned_malloc(s,a) +#else + +#undef WSABASEERR +#include +#if defined(OMPI_BUILDING) && OMPI_BUILDING +#include "opal/win32/ompi_uio.h" +#include "opal/win32/ompi_utsname.h" +#include "opal/win32/ompi_util.h" +#include "opal/win32/ompi_inet.h" +#include "opal/win32/ompi_misc.h" +#include "opal/win32/ompi_socket.h" +#endif + +#define strtok_r(s,d,p) *p = strtok(s,d) + +#endif + +#define MAXPATHLEN _MAX_PATH +#define MAXHOSTNAMELEN _MAX_PATH +#define PATH_MAX _MAX_PATH +#define WTERMSIG(EXIT_CODE) (1) +#define WIFEXITED(EXIT_CODE) (1) +#define WEXITSTATUS(EXIT_CODE) (EXIT_CODE) +#define WIFSIGNALED(EXIT_CODE) (0) +#define WIFSTOPPED(EXIT_CODE) (0) +#define WSTOPSIG(EXIT_CODE) (11) + +#define mkdir(PATH, MODE) _mkdir((PATH)) +#define nanosleep(tp, rem) Sleep(*tp.tv_sec*1000+*tp.tv_nsec/1000000) +#define pipe(array_fd) _pipe(array_fd, 1024, O_BINARY ) + +#ifndef UINT64_MAX +#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */ +#endif +#ifndef UINT64_MIN +#define UINT64_MIN 0 +#endif +#ifndef INT64_MAX +#define INT64_MAX 0x7fffffffffffffffLL /*9223372036854775807LL*/ +#endif +#ifndef INT64_MIN +#define INT64_MIN (-0x7fffffffffffffffLL - 1) /* (-9223372036854775807 - 1) */ +#endif #ifndef UINT32_MAX -#define UINT32_MAX _UI32_MAX +#define UINT32_MAX 0xffffffff /* 4294967295U */ #endif #ifndef UINT32_MIN -#define UINT32_MIN _UI32_MIN +#define UINT32_MIN 0 #endif #ifndef INT32_MAX -#define INT32_MAX _I32_MAX +#define INT32_MAX 0x7fffffff /* 2147483647 */ #endif #ifndef INT32_MIN -#define INT32_MIN _I32_MIN -#endif -#ifndef UINT16_MIN -#define UINT16_MIN _UI16_MIN +#define INT32_MIN (-0x7fffffff - 1) /* (-2147483647 - 1) */ #endif #ifndef UINT16_MAX -#define UINT16_MAX _UI16_MAX +#define UINT16_MAX 0xffff /* 65535U */ #endif -#ifndef INT16_MIN -#define INT16_MIN _I16_MIN +#ifndef UINT16_MIN +#define UINT16_MIN 0 #endif #ifndef INT16_MAX -#define INT16_MAX _I16_MAX +#define INT16_MAX 0x7fff /* 32767 */ +#endif +#ifndef INT16_MIN +#define INT16_MIN (-0x7fff - 1) /* (-32768) */ #endif #ifndef UINT8_MAX -#define UINT8_MAX _UI8_MAX +#define UINT8_MAX 0xff /* 255U */ #endif #ifndef UINT8_MIN -#define UINT8_MIN _UI8_MIN +#define UINT8_MIN 0 +#endif +#ifndef INT8_MAX +#define INT8_MAX 0x7f /* 127 */ +#endif +#ifndef INT8_MIN +#define INT8_MIN (-0x7f - 1) /* (-128) */ #endif /* Make sure we let the compiler know that we support __func__ */ diff --git a/orte/CMakeLists.txt b/orte/CMakeLists.txt index 814409bc55..3a0b8d4a4c 100644 --- a/orte/CMakeLists.txt +++ b/orte/CMakeLists.txt @@ -53,12 +53,23 @@ ADD_LIBRARY (libopen-rte ${ORTE_SOURCE_FILES}) ADD_DEPENDENCIES(libopen-rte libopen-pal) +IF(WINDOWS_MINGW) + SET(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIRARIES} -lpthread") + SET(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIRARIES} -lpthread") +ENDIF(WINDOWS_MINGW) + # Set compile flags for this target IF (BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(libopen-rte PROPERTIES - COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}ORTE_EXPORTS ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_CXX_LAN_FLAG}") - TARGET_LINK_LIBRARIES(libopen-rte ${OpenMPI_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event${CMAKE_DEBUG_POSTFIX}.lib - libopen-pal Ws2_32.lib shlwapi.lib) + COMPILE_FLAGS "${OMPI_C_DEF_PRE}_USRDLL ${OMPI_C_DEF_PRE}ORTE_EXPORTS ${OMPI_C_DEF_PRE}OPAL_IMPORTS ${OMPI_CXX_LAN_FLAG}" PREFIX "" IMPORT_PREFIX "") + + IF(WINDOWS_MINGW) + TARGET_LINK_LIBRARIES(libopen-rte ${OpenMPI_BINARY_DIR}/event${CMAKE_DEBUG_POSTFIX}.lib + libopen-pal Ws2_32.lib shlwapi.lib) + ELSEIF(WINDOWS_VS) + TARGET_LINK_LIBRARIES(libopen-rte ${OpenMPI_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event${CMAKE_DEBUG_POSTFIX}.lib + libopen-pal Ws2_32.lib shlwapi.lib) + ENDIF(WINDOWS_MINGW) ELSE (BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(libopen-rte PROPERTIES COMPILE_FLAGS "${OMPI_C_DEF_PRE}_LIB ${OMPI_CXX_LAN_FLAG}") ENDIF(BUILD_SHARED_LIBS) diff --git a/orte/mca/plm/process/plm_process_module.c b/orte/mca/plm/process/plm_process_module.c index 1593d57e82..19b45b038c 100644 --- a/orte/mca/plm/process/plm_process_module.c +++ b/orte/mca/plm/process/plm_process_module.c @@ -57,6 +57,7 @@ #include #endif +#ifdef _MSC_VER #include #include #include @@ -65,6 +66,7 @@ #pragma comment(lib, "wbemuuid.lib") #pragma comment(lib, "comsuppw.lib") #pragma comment(lib, "Credui.lib") +#endif #include "opal/mca/installdirs/installdirs.h" #include "opal/mca/base/mca_base_param.h" @@ -141,6 +143,13 @@ static const char * orte_plm_process_shell_name[] = { "unknown" }; +/* local global storage of timing variables */ +static struct timeval joblaunchstart, joblaunchstop; + +/* global storage of active jobid being launched */ +static orte_jobid_t active_job = ORTE_JOBID_INVALID; + +#ifdef _MSC_VER /* * local functions */ @@ -150,9 +159,6 @@ static int get_credential(char *node_name); static char *read_remote_registry(uint32_t root, char *sub_key, char *key, char *remote_node, char *ntlm_auth); -/* local global storage of timing variables */ -static struct timeval joblaunchstart, joblaunchstop; - /* local global storage of user credential */ static char user_name[CREDUI_MAX_USERNAME_LENGTH+1]; static char user_password[CREDUI_MAX_PASSWORD_LENGTH+1]; @@ -164,8 +170,6 @@ IWbemServices *pSvc_registry = NULL; /* namespace for \hostname\root\cimv2 */ IWbemServices *pSvc_cimv2 = NULL; -/* global storage of active jobid being launched */ -static orte_jobid_t active_job = ORTE_JOBID_INVALID; /** * Init the module @@ -664,7 +668,7 @@ cleanup: return pid; } - +#endif /** * Check the Shell variable on the specified node @@ -1287,8 +1291,12 @@ int orte_plm_process_launch(orte_job_t *jdata) if (NULL != param) free(param); } +#ifdef _MSC_VER /* launch remote process */ pid = wmi_launch_child(prefix_dir, nodes[nnode]->name, argc, exec_argv); +#else + pid = _spawnve( _P_NOWAIT, exec_path, exec_argv, env); +#endif if (pid < 0) { failed_launch = true; @@ -1396,6 +1404,7 @@ int orte_plm_process_finalize(void) { int rc; +#ifdef _MSC_VER /* release the locator and service objects*/ if(NULL!=pLoc) { pLoc->Release(); @@ -1410,6 +1419,7 @@ int orte_plm_process_finalize(void) } CoUninitialize(); +#endif /* cleanup any pending recvs */ if (ORTE_SUCCESS != (rc = orte_plm_base_comm_stop())) {