diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b17c19a1..adc5c9436 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,9 +91,15 @@ FILE(TO_CMAKE_PATH ${PY} PY) # Set the name of the swiftest library SET(SWIFTEST_LIBRARY ${SKBUILD_PROJECT_NAME}) - -# This INCLUDE statement executes code that sets the compile flags for DEBUG, -# RELEASE, PROFILING, and TESTING. +# Determine compiler options +IF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90) + MESSAGE(FATAL_ERROR "Fortran compiler does not support F90") +ENDIF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90) +INCLUDE(SetParallelizationLibrary) + +IF (COMPILER_OPTIONS STREQUAL "Intel" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + INCLUDE(SetMKL) +ENDIF () INCLUDE(SetSwiftestFlags) # The source for the SWIFTEST binary and have it placed in the bin folder diff --git a/cmake/Modules/FindOpenMP_Fortran.cmake b/cmake/Modules/FindOpenMP_Fortran.cmake index 33eda8f5b..2b5b80ef4 100644 --- a/cmake/Modules/FindOpenMP_Fortran.cmake +++ b/cmake/Modules/FindOpenMP_Fortran.cmake @@ -34,7 +34,7 @@ IF (COMPILER_OPTIONS STREQUAL "Intel") ) ELSE () SET (OpenMP_Fortran_FLAG_CANDIDATES - "/Qopenmp-simd-" # Intel Windows + "/Qopenmp /Qopenmp-simd-" # Intel Windows ) ENDIF (USE_SIMD) ELSE () diff --git a/cmake/Modules/SetCompileFlag.cmake b/cmake/Modules/SetCompileFlag.cmake index 69e3526f8..f5644e266 100644 --- a/cmake/Modules/SetCompileFlag.cmake +++ b/cmake/Modules/SetCompileFlag.cmake @@ -36,6 +36,7 @@ INCLUDE(${CMAKE_ROOT}/Modules/CheckCCompilerFlag.cmake) INCLUDE(${CMAKE_ROOT}/Modules/CheckCXXCompilerFlag.cmake) +INCLUDE(${CMAKE_ROOT}/Modules/CheckFortranCompilerFlag.cmake) FUNCTION(SET_COMPILE_FLAG FLAGVAR FLAGVAL LANG) @@ -79,26 +80,7 @@ FUNCTION(SET_COMPILE_FLAG FLAGVAR FLAGVAL LANG) ELSEIF(LANG STREQUAL "CXX") CHECK_CXX_COMPILER_FLAG("${flag}" FLAG_WORKS) ELSEIF(LANG STREQUAL "Fortran") - # There is no nice function to do this for FORTRAN, so we must manually - # create a test program and check if it compiles with a given flag. - SET(TESTFILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}") - SET(TESTFILE "${TESTFILE}/CMakeTmp/testFortranFlags.f90") - FILE(WRITE "${TESTFILE}" -" -program dummyprog - i = 5 -end program dummyprog -") - TRY_COMPILE(FLAG_WORKS ${CMAKE_BINARY_DIR} ${TESTFILE} - COMPILE_DEFINITIONS "${flag}" OUTPUT_VARIABLE OUTPUT) - - # Check that the output message doesn't match any errors - FOREACH(rx ${FAIL_REGEX}) - IF("${OUTPUT}" MATCHES "${rx}") - SET(FLAG_WORKS FALSE) - ENDIF("${OUTPUT}" MATCHES "${rx}") - ENDFOREACH(rx ${FAIL_REGEX}) - + CHECK_Fortran_COMPILER_FLAG("${flag}" FLAG_WORKS) ELSE() MESSAGE(FATAL_ERROR "Unknown language in SET_COMPILE_FLAGS: ${LANG}") ENDIF(LANG STREQUAL "C") diff --git a/cmake/Modules/SetSwiftestFlags.cmake b/cmake/Modules/SetSwiftestFlags.cmake index e6166d787..470f5c210 100644 --- a/cmake/Modules/SetSwiftestFlags.cmake +++ b/cmake/Modules/SetSwiftestFlags.cmake @@ -504,11 +504,11 @@ IF (CMAKE_BUILD_TYPE STREQUAL "RELEASE" OR CMAKE_BUILD_TYPE STREQUAL "PROFILE") IF (WINOPT) # Unroll loops SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" - Fortran "/unroll" # Intel Windows + Fortran "/Qunroll" # Intel Windows ) # Inline functions SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" - Fortran "/Qinline" # Intel Windows + Fortran "/inline" # Intel Windows ) # Calls the Matrix Multiply library SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" @@ -520,7 +520,7 @@ IF (CMAKE_BUILD_TYPE STREQUAL "RELEASE" OR CMAKE_BUILD_TYPE STREQUAL "PROFILE") ) # No floating-point exceptions SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" - Fortran "/fp:no-except" # Intel Windows + Fortran "/fp:except-" # Intel Windows ) # Generate fused multiply-add instructions SET_COMPILE_FLAG(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 88b197744..a35d9a9ba 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,16 +12,6 @@ set(GLOBAL_MODULE_IN ${SRC}/globals/globals_module.f90.in) set(GLOBAL_MODULE_OUT ${SRC}/globals/globals_module.f90) CONFIGURE_FILE(${GLOBAL_MODULE_IN} ${GLOBAL_MODULE_OUT}) -IF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90) - MESSAGE(FATAL_ERROR "Fortran compiler does not support F90") -ENDIF(NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90) - -INCLUDE(SetParallelizationLibrary) -INCLUDE(SetUpNetCDF) -IF (COMPILER_OPTIONS STREQUAL "Intel" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") - INCLUDE(SetMKL) -ENDIF () - # Add the source files SET(STRICT_MATH_FILES ${SRC}/collision/collision_generate.f90 @@ -136,6 +126,7 @@ ADD_EXECUTABLE(${SWIFTEST_DRIVER} ${DRIVER_src}) # Add the needed libraries ##################################################### # Create a library from the source files, except the driver +INCLUDE(SetUpNetCDF) ADD_LIBRARY(${SWIFTEST_LIBRARY} ${SWIFTEST_src}) IF (NOT BUILD_SHARED_LIBS) SET_PROPERTY(TARGET ${SWIFTEST_LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE)