29e7703d2c
This commit was SVN r22452.
138 строки
6.2 KiB
CMake
138 строки
6.2 KiB
CMake
# -*- cmake-script -*-
|
|
#
|
|
# Copyright (c) 2007-2010 High Performance Computing Center Stuttgart,
|
|
# University of Stuttgart. All rights reserved.
|
|
# $COPYRIGHT$
|
|
#
|
|
# Additional copyrights may follow
|
|
#
|
|
# $HEADER$
|
|
#
|
|
|
|
######################################################################
|
|
#
|
|
# OMPI_MICROSOFT_COMPILER
|
|
#
|
|
# Keep all the Windows checks in one place.
|
|
#
|
|
# USAGE:
|
|
# OMPI_MICROSOFT_COMPILER()
|
|
#
|
|
######################################################################
|
|
MACRO(OMPI_MICROSOFT_COMPILER)
|
|
|
|
IF(NOT MICROSOFT_CHECK_DONE)
|
|
|
|
MESSAGE( STATUS "Start Microsoft specific detection....")
|
|
|
|
# search for Microsoft VC tools
|
|
SET(VC_BIN_PATH ${VC_BIN_PATH}
|
|
"C:/Program Files/Microsoft Visual Studio 9.0/VC/bin"
|
|
"C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin"
|
|
"C:/Program Files/Microsoft Visual Studio 8/VC/BIN"
|
|
"C:/Program Files (x86)/Microsoft Visual Studio 8/VC/BIN"
|
|
"C:/Program Files/Microsoft Visual Studio .NET 2003/VC7/BIN"
|
|
"C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/VC7/BIN"
|
|
"$ENV{VS90COMNTOOLS}../../VC/bin"
|
|
"$ENV{VS80COMNTOOLS}../../VC/bin"
|
|
)
|
|
|
|
# If we are using one of the Microsoft compilers check that we are
|
|
# able to include windows.h. Most of the types that follow are defined
|
|
# in this file. If we check for it here it will get included in the
|
|
# default list of header files.
|
|
FIND_PROGRAM(CL_EXE cl PATHS ${VC_BIN_PATH})
|
|
|
|
# set the default include path for VC
|
|
GET_FILENAME_COMPONENT(CL_EXE_PATH "${CL_EXE}" PATH)
|
|
GET_FILENAME_COMPONENT(VC_INCLUDE_PATH "${CL_EXE_PATH}/../include" ABSOLUTE CACHE)
|
|
GET_FILENAME_COMPONENT(VC_LIB_PATH "${CL_EXE_PATH}/../lib" ABSOLUTE CACHE)
|
|
|
|
# the dumpbin path will be checked again when the f77 support is needed.
|
|
FIND_PROGRAM(DUMPBIN_EXE dumpbin PATHS ${VC_BIN_PATH})
|
|
|
|
# WHEN running dumpbin, it also needs the "Common7/IDE" directory in the
|
|
# PATH. It will already be in the PATH if being run from a Visual Studio
|
|
# command prompt. Add it to the PATH here in case we are running from a
|
|
# different command prompt.
|
|
GET_FILENAME_COMPONENT(DUMPBIN_EXE_DIR "${DUMPBIN_EXE}" PATH)
|
|
GET_FILENAME_COMPONENT(DUMPBIN_EXE_DLLS_DIR "${DUMPBIN_EXE_DIR}/../../Common7/IDE" ABSOLUTE)
|
|
|
|
IF(EXISTS "${DUMPBIN_EXE_DLLS_DIR}")
|
|
# only add to the path if it is not already in the path
|
|
IF(NOT "$ENV{PATH}" MATCHES "${DUMPBIN_EXE_DLLS_DIR}")
|
|
SET(ENV{PATH} "$ENV{PATH};${DUMPBIN_EXE_DLLS_DIR}")
|
|
ENDIF(NOT "$ENV{PATH}" MATCHES "${DUMPBIN_EXE_DLLS_DIR}")
|
|
ENDIF(EXISTS "${DUMPBIN_EXE_DLLS_DIR}")
|
|
|
|
FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/cl_test.c
|
|
"int main() {return 0;}")
|
|
|
|
TRY_COMPILE(CL_EXE_OK ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/
|
|
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/cl_test.c)
|
|
|
|
IF(CL_EXE_OK)
|
|
|
|
MESSAGE( STATUS "Found Microsoft compiler: ${CL_EXE}.")
|
|
|
|
# The atomic functions are defined in a very unuasual manner.
|
|
# Some of them are intrinsic defined in windows.h others are
|
|
# exported by kernel32.dll. If we force the usage of TRY_RUN
|
|
# here we will check for both in same time: compilation and run.
|
|
|
|
# path of foo test programs
|
|
SET (FOO_SOURCE_DIR ${OpenMPI_SOURCE_DIR}/CMakeTests)
|
|
|
|
IF(${CMAKE_SYSTEM_VERSION} GREATER 5.1)
|
|
SET(FUNCTION_LIST Exchange ExchangeAcquire ExchangeRelease Exchange64)
|
|
ELSE(${CMAKE_SYSTEM_VERSION} GREATER 5.1)
|
|
SET(FUNCTION_LIST Exchange ExchangeAcquire ExchangeRelease)
|
|
ENDIF(${CMAKE_SYSTEM_VERSION} GREATER 5.1)
|
|
|
|
FOREACH(FUNCTION ${FUNCTION_LIST})
|
|
MESSAGE( STATUS "Checking for InterlockedCompare${FUNCTION}...")
|
|
|
|
IF(FUNCTION STREQUAL "Exchange64")
|
|
SET(64BITS_TYPE "LONGLONG" CACHE INTERNAL "64bits type longlong")
|
|
ELSE(FUNCTION STREQUAL "Exchange64")
|
|
SET(64BITS_TYPE "LONG" CACHE INTERNAL "64bits type long")
|
|
ENDIF(FUNCTION STREQUAL "Exchange64")
|
|
|
|
STRING(TOUPPER ${FUNCTION} FUNCTION_NAME)
|
|
FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/InterlockedCompare${FUNCTION}_test.c
|
|
"#include <windows.h>\n"
|
|
"int main() {\n"
|
|
" ${64BITS_TYPE} dest = 0, exchange = 1, comperand = 0;\n"
|
|
" SetErrorMode(SEM_FAILCRITICALERRORS);\n"
|
|
" InterlockedCompare${FUNCTION}( &dest, exchange, comperand );\n"
|
|
" return (int)dest;\n"
|
|
" }\n")
|
|
|
|
TRY_RUN (HAVE_INTERLOCKEDCOMPARE${FUNCTION_NAME} COMPILE_RESULT
|
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/"
|
|
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/InterlockedCompare${FUNCTION}_test.c")
|
|
|
|
IF(HAVE_INTERLOCKEDCOMPARE${FUNCTION_NAME} STREQUAL "FAILED_TO_RUN" OR COMPILE_RESULT EQUAL FALSE)
|
|
SET (HAVE_INTERLOCKEDCOMPARE${FUNCTION_NAME} 0 CACHE INTERNAL "HAVE_INTERLOCKEDCOMPARE${FUNCTION_NAME}")
|
|
MESSAGE( STATUS "Checking for InterlockedCompare${FUNCTION}...failed")
|
|
ELSE(HAVE_INTERLOCKEDCOMPARE${FUNCTION_NAME} STREQUAL "FAILED_TO_RUN" OR COMPILE_RESULT EQUAL FALSE)
|
|
MESSAGE( STATUS "Checking for InterlockedCompare${FUNCTION}...done")
|
|
ENDIF(HAVE_INTERLOCKEDCOMPARE${FUNCTION_NAME} STREQUAL "FAILED_TO_RUN" OR COMPILE_RESULT EQUAL FALSE)
|
|
|
|
ENDFOREACH(FUNCTION)
|
|
|
|
ELSE(CL_EXE_OK)
|
|
MESSAGE(FATAL_ERROR "No working Microsoft compiler found. Please check if Visual Studio VC is correctly installed.")
|
|
ENDIF(CL_EXE_OK)
|
|
|
|
SET(MICROSOFT_CHECK_DONE TRUE CACHE INTERNAL "Microsoft check finished.")
|
|
|
|
ENDIF(NOT MICROSOFT_CHECK_DONE)
|
|
|
|
OMPI_DEF_VAR(HAVE_INTERLOCKEDCOMPAREEXCHANGE "Whether we support 32 bits atomic operations on Windows" 0 0)
|
|
OMPI_DEF_VAR(HAVE_INTERLOCKEDCOMPAREEXCHANGE64 "Whether we support 64 bits atomic operations on Windows" 0 0)
|
|
OMPI_DEF_VAR(HAVE_INTERLOCKEDCOMPAREEXCHANGEACQUIRE "Whether we support 32 bits atomic operations on Windows" 0 0)
|
|
OMPI_DEF_VAR(HAVE_INTERLOCKEDCOMPAREEXCHANGERELEASE "Whether we support 32 bits atomic operations on Windows" 0 0)
|
|
|
|
ENDMACRO(OMPI_MICROSOFT_COMPILER)
|