From 2942e286c478ba4c8d421f34790287464c7cd4ab Mon Sep 17 00:00:00 2001 From: David Minton Date: Mon, 21 Aug 2023 17:10:48 -0400 Subject: [PATCH] Made adjustments to CMake files to work with Windows --- CMakeLists.txt | 12 +-- cmake/Modules/FindNETCDF.cmake | 131 +++++++++++++------------ cmake/Modules/FindOpenMP_Fortran.cmake | 31 ++++-- 3 files changed, 95 insertions(+), 79 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b3bde946e..4baee4020 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,11 +55,11 @@ ENDIF() LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/") # Define some directories that are important to the build -SET(SRC ${CMAKE_SOURCE_DIR}/src) -SET(LIB ${CMAKE_SOURCE_DIR}/lib) -SET(BIN ${CMAKE_SOURCE_DIR}/bin) -SET(MOD ${CMAKE_SOURCE_DIR}/include) -SET(PY ${CMAKE_SOURCE_DIR}/swiftest) +SET(SRC "${CMAKE_SOURCE_DIR}/src" CACHE FILEPATH "Location of source files") +SET(LIB "${CMAKE_SOURCE_DIR}/lib" CACHE FILEPATH "Library file location") +SET(BIN "${CMAKE_SOURCE_DIR}/bin" CACHE FILEPATH "Binary file location") +SET(MOD "${CMAKE_SOURCE_DIR}/include" CACHE FILEPATH "Include directory") +SET(PY "${CMAKE_SOURCE_DIR}/swiftest" CACHE FILEPATH "Python source directory") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB}) @@ -75,5 +75,5 @@ ADD_SUBDIRECTORY(${PY}) # Add a distclean target to the Makefile ADD_CUSTOM_TARGET(distclean - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/distclean.cmake + COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/distclean.cmake" ) diff --git a/cmake/Modules/FindNETCDF.cmake b/cmake/Modules/FindNETCDF.cmake index 18be98d07..2eca345b8 100644 --- a/cmake/Modules/FindNETCDF.cmake +++ b/cmake/Modules/FindNETCDF.cmake @@ -9,48 +9,51 @@ # - Finds the NetCDF libraries -FIND_PATH(NFBIN -NAMES nf-config -HINTS - ENV NETCDF_FORTRAN_HOME - ENV PATH -PATH_SUFFIXES - bin -) +IF (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + FIND_PATH(NFBIN + NAMES nf-config + HINTS + ENV NETCDF_FORTRAN_HOME + ENV PATH + PATH_SUFFIXES + bin + ) -IF (NFBIN) - SET(CMD "${NFBIN}/nf-config") - LIST(APPEND CMD "--includedir") - MESSAGE(STATUS "Searching for NetCDF-Fortran include directory using ${CMD}") - EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFINCLUDE_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (NFINCLUDE_DIR) - MESSAGE(STATUS "Found in ${NFINCLUDE_DIR}") - ELSE () - MESSAGE(STATUS "Cannot execute ${CMD}") - MESSAGE(STATUS "OUTPUT: ${NFINCLUDE_DIR}") - MESSAGE(STATUS "RESULT: ${RES}") - MESSAGE(STATUS "ERROR : ${ERR}") - ENDIF () + IF (NFBIN) + SET(CMD "${NFBIN}/nf-config") + LIST(APPEND CMD "--includedir") + MESSAGE(STATUS "Searching for NetCDF-Fortran include directory using ${CMD}") + EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFINCLUDE_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (NFINCLUDE_DIR) + MESSAGE(STATUS "Found in ${NFINCLUDE_DIR}") + ELSE () + MESSAGE(STATUS "Cannot execute ${CMD}") + MESSAGE(STATUS "OUTPUT: ${NFINCLUDE_DIR}") + MESSAGE(STATUS "RESULT: ${RES}") + MESSAGE(STATUS "ERROR : ${ERR}") + ENDIF () - SET(CMD "${NFBIN}/nf-config") - LIST(APPEND CMD "--prefix") - MESSAGE(STATUS "Searching for NetCDF-Fortran library directory using ${CMD}") - EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFPREFIX_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (NFPREFIX_DIR) - MESSAGE(STATUS "Found in ${NFPREFIX_DIR}") - ELSE () - MESSAGE(STATUS "Cannot execute ${CMD}") - MESSAGE(STATUS "OUTPUT: ${NFPREFIX_DIR}") - MESSAGE(STATUS "RESULT: ${RES}") - MESSAGE(STATUS "ERROR : ${ERR}") - ENDIF () + SET(CMD "${NFBIN}/nf-config") + LIST(APPEND CMD "--prefix") + MESSAGE(STATUS "Searching for NetCDF-Fortran library directory using ${CMD}") + EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE NFPREFIX_DIR ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (NFPREFIX_DIR) + MESSAGE(STATUS "Found in ${NFPREFIX_DIR}") + ELSE () + MESSAGE(STATUS "Cannot execute ${CMD}") + MESSAGE(STATUS "OUTPUT: ${NFPREFIX_DIR}") + MESSAGE(STATUS "RESULT: ${RES}") + MESSAGE(STATUS "ERROR : ${ERR}") + ENDIF () + ENDIF() ENDIF() +MESSAGE(STATUS "\nNETCDF_INCLUDE: $ENV{NETCDF_INCLUDE}\nNETCDF_FORTRAN_HOME: $ENV{NETCDF_FORTRAN_HOME}\n") FIND_PATH(NETCDF_INCLUDE_DIR NAMES netcdf.mod HINTS ${NFINCLUDE_DIR} - ENV NETCDF_INCLUDE_DIR + ENV NETCDF_INCLUDE ENV NETCDF_FORTRAN_HOME ENV CPATH PATH_SUFFIXES @@ -62,7 +65,7 @@ FIND_PATH(NETCDF_INCLUDE_DIR MESSAGE(STATUS "NetCDF-Fortran include directory: ${NETCDF_INCLUDE_DIR}") -IF (BUILD_SHARED_LIBS) +IF (BUILD_SHARED_LIBS OR CMAKE_SYSTEM_NAME STREQUAL "Windows") SET(NETCDFF "netcdff") ELSE () SET(NETCDFF "libnetcdff.a") @@ -99,37 +102,39 @@ ELSE () ) MESSAGE(STATUS "NetCDF-C Library: ${NETCDF_LIBRARY}") + IF (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + FIND_PATH(NCBIN + NAMES nc-config + HINTS + ENV NETCDF_HOME + ENV PATH + PATH_SUFFIXES + bin + ) - FIND_PATH(NCBIN - NAMES nc-config - HINTS - ENV NETCDF_HOME - ENV PATH - PATH_SUFFIXES - bin - ) - - IF (NCBIN) # The nc-config utility is available. Parse its output for unique flags - SET(CMD "${NCBIN}/nc-config") - LIST(APPEND CMD "--libs") - LIST(APPEND CMD "--static") - MESSAGE(STATUS "NetCDF configuration command: ${CMD}") - EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE EXTRA_FLAGS ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (EXTRA_FLAGS) - SEPARATE_ARGUMENTS(EXTRA_FLAGS NATIVE_COMMAND "${EXTRA_FLAGS}") - LIST(REMOVE_DUPLICATES EXTRA_FLAGS) - LIST(FILTER EXTRA_FLAGS EXCLUDE REGEX "netcdf+") - MESSAGE(STATUS "Extra library flags: ${EXTRA_FLAGS}") + IF (NCBIN) # The nc-config utility is available. Parse its output for unique flags + SET(CMD "${NCBIN}/nc-config") + LIST(APPEND CMD "--libs") + LIST(APPEND CMD "--static") + MESSAGE(STATUS "NetCDF configuration command: ${CMD}") + EXECUTE_PROCESS(COMMAND ${CMD} OUTPUT_VARIABLE EXTRA_FLAGS ERROR_VARIABLE ERR RESULT_VARIABLE RES OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (EXTRA_FLAGS) + SEPARATE_ARGUMENTS(EXTRA_FLAGS NATIVE_COMMAND "${EXTRA_FLAGS}") + LIST(REMOVE_DUPLICATES EXTRA_FLAGS) + LIST(FILTER EXTRA_FLAGS EXCLUDE REGEX "netcdf+") + MESSAGE(STATUS "Extra library flags: ${EXTRA_FLAGS}") + ELSE () + MESSAGE(STATUS "Cannot execute ${CMD}") + MESSAGE(STATUS "OUTPUT: ${EXTRA_FLAGS}") + MESSAGE(STATUS "RESUL : ${RES}") + MESSAGE(STATUS "ERROR : ${ERR}") + MESSAGE(FATAL_ERROR "Cannot configure NetCDF for static") + ENDIF () ELSE () - MESSAGE(STATUS "Cannot execute ${CMD}") - MESSAGE(STATUS "OUTPUT: ${EXTRA_FLAGS}") - MESSAGE(STATUS "RESUL : ${RES}") - MESSAGE(STATUS "ERROR : ${ERR}") - MESSAGE(FATAL_ERROR "Cannot configure NetCDF for static") + MESSAGE(FATAL_ERROR "Cannot find nc-config") ENDIF () - ELSE () - MESSAGE(FATAL_ERROR "Cannot find nc-config") - ENDIF () + ENDIF() + IF (DEFINED ENV{LIBS}) STRING(STRIP "$ENV{LIBS}" LIBS) SEPARATE_ARGUMENTS(LIBS NATIVE_COMMAND "$LIBS") diff --git a/cmake/Modules/FindOpenMP_Fortran.cmake b/cmake/Modules/FindOpenMP_Fortran.cmake index 012b7ac75..33eda8f5b 100644 --- a/cmake/Modules/FindOpenMP_Fortran.cmake +++ b/cmake/Modules/FindOpenMP_Fortran.cmake @@ -26,17 +26,28 @@ INCLUDE (FindPackageHandleStandardArgs) IF (COMPILER_OPTIONS STREQUAL "Intel") - IF (USE_SIMD) - SET (OpenMP_Fortran_FLAG_CANDIDATES - "-qopenmp" # Intel - "/Qopenmp" # Intel Windows - ) + MESSAGE(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") + IF (CMAKE_SYSTEM_NAME STREQUAL "Windows") + IF (USE_SIMD) + SET (OpenMP_Fortran_FLAG_CANDIDATES + "/Qopenmp" # Intel Windows + ) + ELSE () + SET (OpenMP_Fortran_FLAG_CANDIDATES + "/Qopenmp-simd-" # Intel Windows + ) + ENDIF (USE_SIMD) ELSE () - SET (OpenMP_Fortran_FLAG_CANDIDATES - "-qopenmp -qno-openmp-simd" # Intel - "/Qopenmp-simd-" # Intel Windows - ) - ENDIF (USE_SIMD) + IF (USE_SIMD) + SET (OpenMP_Fortran_FLAG_CANDIDATES + "-qopenmp" # Intel + ) + ELSE () + SET (OpenMP_Fortran_FLAG_CANDIDATES + "-qopenmp -qno-openmp-simd" # Intel + ) + ENDIF (USE_SIMD) + ENDIF () ELSEIF (COMPILER_OPTIONS STREQUAL "GNU") IF (USE_SIMD) SET (OpenMP_Fortran_FLAG_CANDIDATES