Skip to content
This repository was archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
Made a number of improvements to the Windows build
Browse files Browse the repository at this point in the history
  • Loading branch information
daminton committed Aug 28, 2023
1 parent 06833e0 commit 8dbecd6
Show file tree
Hide file tree
Showing 5 changed files with 596 additions and 387 deletions.
8 changes: 8 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.6.0...3.27.1)
FILE(READ "version.txt" VERSION)
PROJECT(swiftest VERSION ${VERSION} LANGUAGES C Fortran)

IF (CMAKE_Fortran_COMPILER_ID MATCHES "^Intel")
SET(COMPILER_OPTIONS "Intel" CACHE STRING "Compiler identified as Intel")
ELSEIF (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
SET(COMPILER_OPTIONS "GNU" CACHE STRING "Compiler identified as gfortran")
ELSE ()
MESSAGE(FATAL_ERROR "Compiler ${CMAKE_Fortran_COMPILER_ID} not recognized!")
ENDIF ()

# Set some options the user may choose
OPTION(USE_COARRAY "Use Coarray Fortran for parallelization of test particles" OFF)
OPTION(USE_OPENMP "Use OpenMP for parallelization" ON)
Expand Down
61 changes: 57 additions & 4 deletions cmake/Modules/FindNETCDF.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,14 @@

# - Finds the NetCDF libraries

IF (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
FILE(TO_CMAKE_PATH "${CMAKE_SOURCE_DIR}/_dependencies/${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}_${COMPILER_OPTIONS}" NXPREFIX_CANDIDATE)
IF (EXISTS ${NXPREFIX_CANDIDATE})
SET(NCPREFIX_DIR ${NXPREFIX_CANDIDATE} CACHE PATH "Location of provided NetCDF-C dependencies")
SET(NFPREFIX_DIR ${NXPREFIX_CANDIDATE} CACHE PATH "Location of provided NetCDF-Fortran dependencies")
SET(H5PREFIX_DIR ${NXPREFIX_CANDIDATE} CACHE PATH "Location of provided HDF5 dependencies")
SET(ZPREFIX_DIR ${NXPREFIX_CANDIDATE} CACHE PATH "Location of provided zlib dependencies")
SET(NFINCLUDE_DIR "${NFPREFIX_DIR}/include" CACHE PATH "Location of provided netcdf.mod")
ELSEIF(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
FIND_PATH(NFBIN
NAMES nf-config
HINTS
Expand Down Expand Up @@ -67,14 +74,19 @@ MESSAGE(STATUS "NetCDF-Fortran include directory: ${NETCDF_INCLUDE_DIR}")

IF (BUILD_SHARED_LIBS)
SET(NETCDFF "netcdff")
SET(NETCDF "netcdf")
ELSE ()
IF (CMAKE_SYSTEM_NAME STREQUAL "Windows")
SET(NETCDFF "netcdff.lib")
SET(NETCDF "netcdf.lib")
SET(HDF5 "libhdf5.lib")
SET(HDF5_HL "libhdf5_hl.lib")
SET(ZLIB "zlibstatic.lib")
ELSE ()
SET(NETCDFF "libnetcdff.a")
SET(NETCDF "libnetcdf.a")
SET(HDF5 "libhdf5.a")
SET(HDF5_HL "libhdf5_hl.a")
SET(ZLIB "libz.a")
ENDIF()
ENDIF()

Expand All @@ -99,6 +111,7 @@ ELSE ()
FIND_LIBRARY(NETCDF_LIBRARY
NAMES ${NETCDF}
HINTS
${NCPREFIX_DIR}
ENV NETCDF_HOME
ENV LD_LIBRARY_PATH
PATH_SUFFIXES
Expand All @@ -108,7 +121,46 @@ ELSE ()
)

MESSAGE(STATUS "NetCDF-C Library: ${NETCDF_LIBRARY}")
IF (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
IF (CMAKE_SYSTEM_NAME STREQUAL "Windows")
FIND_LIBRARY(HDF5_LIBRARY
NAMES ${HDF5}
HINTS
${H5PREFIX_DIR}
ENV HDF5_ROOT
ENV LD_LIBRARY_PATH
PATH_SUFFIXES
lib
${CMAKE_LIBRARY_ARCHITECTURE}
REQUIRED
)

FIND_LIBRARY(HDF5_HL_LIBRARY
NAMES ${HDF5_HL}
HINTS
${H5PREFIX_DIR}
ENV HDF5_ROOT
ENV LD_LIBRARY_PATH
PATH_SUFFIXES
lib
${CMAKE_LIBRARY_ARCHITECTURE}
REQUIRED
)

FIND_LIBRARY(Z_LIBRARY
NAMES ${ZLIB}
HINTS
${ZPREFIX_DIR}
ENV ZLIB_ROOT
ENV LD_LIBRARY_PATH
PATH_SUFFIXES
lib
${CMAKE_LIBRARY_ARCHITECTURE}
REQUIRED
)

LIST(APPEND EXTRA_FLAGS ${HDF5_LIBRARY} ${HDF5_HL_LIBRARY} ${Z_LIBRARY})

ELSE ()
FIND_PATH(NCBIN
NAMES nc-config
HINTS
Expand Down Expand Up @@ -143,13 +195,14 @@ ELSE ()

IF (DEFINED ENV{LIBS})
STRING(STRIP "$ENV{LIBS}" LIBS)
SEPARATE_ARGUMENTS(LIBS NATIVE_COMMAND "$LIBS")
SEPARATE_ARGUMENTS(LIBS NATIVE_COMMAND "${LIBS}")
LIST(APPEND EXTRA_FLAGS ${LIBS})
ENDIF()

# Note for posterity: When building static libraries, NETCDF_FORTRAN_LIBRARY must come *before* NETCDF_LIBRARY. Otherwise you get a bunch of "undefined reference to" errors
SET(NETCDF_LIBRARIES ${NETCDF_FORTRAN_LIBRARY} ${NETCDF_LIBRARY} ${EXTRA_FLAGS} CACHE STRING "NetCDF Fortran and dependant static libraries")
ENDIF ()
MESSAGE(STATUS "NetCDF dependencies: ${NETCDF_LIBRARIES}")

SET(NETCDF_FOUND TRUE)
MARK_AS_ADVANCED(NETCDF_LIBRARIES NETCDF_INCLUDE_DIR)
5 changes: 4 additions & 1 deletion cmake/Modules/SetCompileFlag.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ FUNCTION(SET_COMPILE_FLAG FLAGVAR FLAGVAL LANG)

# Now, loop over each flag
FOREACH(flag ${FLAGLIST})

EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E echo_append "Checking compiler option ${flag}: ")
UNSET(FLAG_WORKS)
# Check the flag for the given language
IF(LANG STREQUAL "C")
Expand Down Expand Up @@ -105,11 +105,14 @@ end program dummyprog

# If this worked, use these flags, otherwise use other flags
IF(FLAG_WORKS)
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E echo "OK")
# Append this flag to the end of the list that already exists
SET(${FLAGVAR} "${FLAGVAL} ${flag}" CACHE STRING
"Set the ${FLAGVAR} flags" FORCE)
SET(FLAG_FOUND TRUE)
BREAK() # We found something that works, so exit
ELSE(FLAG_WORKS)
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E echo "NO")
ENDIF(FLAG_WORKS)

ENDFOREACH(flag ${FLAGLIST})
Expand Down
Loading

0 comments on commit 8dbecd6

Please sign in to comment.