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

Commit

Permalink
Rearranged cmake files
Browse files Browse the repository at this point in the history
  • Loading branch information
daminton committed Sep 20, 2023
1 parent 11ef7a3 commit 9a628b5
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 133 deletions.
19 changes: 11 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ IF (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.27")
CMAKE_POLICY(SET CMP0148 OLD)
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)
OPTION(USE_SIMD "Use SIMD vectorization" ON)
OPTION(BUILD_SHARED_LIBS "Build using shared libraries" ON)

INCLUDE(GNUInstallDirs)
IF (SKBUILD)
SET(INSTALL_BINDIR ${SKBUILD_PLATLIB_DIR}/${SKBUILD_PROJECT_NAME})
Expand Down Expand Up @@ -55,17 +61,13 @@ 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)
OPTION(USE_SIMD "Use SIMD vectorization" ON)
OPTION(BUILD_SHARED_LIBS "Build using shared libraries" ON)

# The following section is modified from Numpy f2py documentation
IF(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
MESSAGE(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there.\n")
ENDIF()

FIND_PACKAGE(NETCDF_FORTRAN REQUIRED)

# Ensure scikit-build modules
FIND_PACKAGE(Python COMPONENTS Interpreter Development.Module REQUIRED)

Expand All @@ -76,13 +78,14 @@ SET(PY "${CMAKE_SOURCE_DIR}/swiftest")
#####################################
# Tell how to install this executable
#####################################
IF(WIN32)
IF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
SET(CMAKE_INSTALL_PREFIX "C:\\Program Files\\swiftest")
FILE(TO_CMAKE_PATH ${CMAKE_INSTALL_PREFIX} CMAKE_INSTALL_PREFIX)
SET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Path for install")
ELSE()
SET(CMAKE_INSTALL_PREFIX /usr/local CACHE PATH "Path for install")
ENDIF(WIN32)
ENDIF()


# Make sure paths are correct for Unix or Windows style
FILE(TO_CMAKE_PATH ${SRC} SRC)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Windows")
ENDIF ()

IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
FIND_PATH(NFBIN
FIND_FILE(NFBIN
NAMES nf-config
HINTS
NFPREFIX_DIR
Expand All @@ -61,7 +61,7 @@ IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
)

IF (NFBIN)
SET(CMD "${NFBIN}/nf-config")
SET(CMD "${NFBIN}")
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)
Expand All @@ -74,7 +74,7 @@ IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
MESSAGE(STATUS "ERROR : ${ERR}")
ENDIF ()

SET(CMD "${NFBIN}/nf-config")
SET(CMD "${NFBIN}")
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)
Expand All @@ -89,7 +89,7 @@ IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
ENDIF()
ENDIF()

FIND_PATH(NETCDF_INCLUDE_DIR
FIND_PATH(NETCDF_FORTRAN_INCLUDE_DIR
NAMES netcdf.mod
HINTS
${NFINCLUDE_DIR}
Expand Down Expand Up @@ -121,7 +121,7 @@ ELSE ()
ENDIF()
ENDIF()

FIND_LIBRARY(NETCDF_FORTRAN_LIBRARY
FIND_LIBRARY(NFLIB
NAMES ${NETCDFF}
PATHS
${NFPREFIX_DIR}
Expand All @@ -133,105 +133,33 @@ FIND_LIBRARY(NETCDF_FORTRAN_LIBRARY
${CMAKE_LIBRARY_ARCHITECTURE}
REQUIRED
)

IF (BUILD_SHARED_LIBS)
SET(NETCDF_LIBRARIES ${NETCDF_FORTRAN_LIBRARY} CACHE STRING "NetCDF Fortran library")
ELSE ()
FIND_LIBRARY(NETCDF_LIBRARY
NAMES ${NETCDF}
HINTS
${NCPREFIX_DIR}
ENV NETCDF_HOME
ENV LD_LIBRARY_PATH
ADD_LIBRARY(NETCDF_FORTRAN_LIBRARY SHARED IMPORTED)
IF (CMAKE_SYSTEM_NAME STREQUAL "Windows")
# Get the DLL added in
FIND_FILE(NFDLL
NAMES "netcdff.dll"
HINTS
NFPREFIX_DIR
ENV NETCDF_FORTRAN_HOME
ENV PATH
PATH_SUFFIXES
lib
${CMAKE_LIBRARY_ARCHITECTURE}
REQUIRED
bin
)
SET_TARGET_PROPERTIES(NETCDF_FORTRAN_LIBRARY PROPERTIES
IMPORTED_IMPLIB "${NFLIB}"
IMPORTED_LOCATION "${NFDLL}"
INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_FORTRAN_INCLUDE_DIR}"
)
MESSAGE(STATUS "NetCDF-Fortran dll: ${NFDLL}")
ELSE ()
SET_TARGET_PROPERTIES(NETCDF_FORTRAN_LIBRARY PROPERTIES
IMPORTED_LOCATION "${NFLIB}"
INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_FORTRAN_INCLUDE_DIR}"
)
ENDIF()

MESSAGE(STATUS "NetCDF-Fortran library: ${NFLIB}")
MESSAGE(STATUS "NetCDF-Fortran include directory: ${NETCDF_FORTRAN_INCLUDE_DIR}")

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
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}")
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(FATAL_ERROR "Cannot find nc-config")
ENDIF ()
ENDIF()

IF (DEFINED ENV{LIBS})
STRING(STRIP "$ENV{LIBS}" 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 libraries: ${NETCDF_LIBRARIES}")
MESSAGE(STATUS "NetCDF include directory: ${NETCDF_INCLUDE_DIR}")

SET(NETCDF_FOUND TRUE)
MARK_AS_ADVANCED(NETCDF_LIBRARIES NETCDF_INCLUDE_DIR)
SET(NETCDF_FORTRAN_FOUND TRUE)
MARK_AS_ADVANCED(NETCDF_FORTRAN_LIBRARY NETCDF_FORTRAN_INCLUDE_DIR)
15 changes: 0 additions & 15 deletions cmake/Modules/SetUpNetCDF.cmake

This file was deleted.

10 changes: 5 additions & 5 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -126,16 +126,16 @@ 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)
ENDIF ()

TARGET_INCLUDE_DIRECTORIES(${SWIFTEST_LIBRARY} PUBLIC ${NETCDF_INCLUDE_DIR})
TARGET_INCLUDE_DIRECTORIES(${SWIFTEST_DRIVER} PUBLIC ${NETCDF_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(${SWIFTEST_LIBRARY} PUBLIC ${NETCDF_LIBRARIES})
TARGET_LINK_LIBRARIES(${SWIFTEST_DRIVER} PUBLIC ${SWIFTEST_LIBRARY} ${NETCDF_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES(${SWIFTEST_LIBRARY} PUBLIC ${NETCDF_FORTRAN_INCLUDE_DIR})
TARGET_INCLUDE_DIRECTORIES(${SWIFTEST_DRIVER} PUBLIC ${NETCDF_FORTRAN_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(${SWIFTEST_LIBRARY} PUBLIC ${NETCDF_FORTRAN_LIBRARY})
TARGET_LINK_LIBRARIES(${SWIFTEST_DRIVER} PUBLIC ${SWIFTEST_LIBRARY} ${NETCDF_FORTRAN_LIBRARY})

IF(USE_OPENMP OR USE_SIMD)
SET_PROPERTY(TARGET ${SWIFTEST_LIBRARY} ${SWIFTEST_DRIVER} APPEND_STRING PROPERTY COMPILE_FLAGS "${OpenMP_Fortran_FLAGS} ")
Expand Down
2 changes: 1 addition & 1 deletion swiftest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ PYTHON_ADD_LIBRARY(${SWIFTEST_BINDINGS} MODULE "${CMAKE_CURRENT_BINARY_DIR}/${SW

IF (NOT BUILD_SHARED_LIBS)
SET_PROPERTY(TARGET ${SWIFTEST_BINDINGS} PROPERTY POSITION_INDEPENDENT_CODE)
TARGET_LINK_LIBRARIES(${SWIFTEST_BINDINGS} PUBLIC ${SWIFTEST_LIBRARY} ${NETCDF_LIBRARIES})
TARGET_LINK_LIBRARIES(${SWIFTEST_BINDINGS} PUBLIC ${SWIFTEST_LIBRARY} ${NETCDF_FORTRAN_LIBRARY})
ELSE ()
TARGET_LINK_LIBRARIES(${SWIFTEST_BINDINGS} PUBLIC ${SWIFTEST_LIBRARY})
ENDIF ()
Expand Down

0 comments on commit 9a628b5

Please sign in to comment.