Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 91 additions & 45 deletions unstructured/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,9 @@ endif("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
endif()

# set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
# if(BUILD_SHARED_LIBS)
# set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
# endif()
message(STATUS "Found PETSc ${CMAKE_FIND_LIBRARY_SUFFIXES}")

# set(CMAKE_CXX_FLAGS "-Wall -Wextra")
# set(CMAKE_CXX_FLAGS_DEBUG "-g")
# set(CMAKE_CXX_FLAGS_RELEASE "-O3")
Expand All @@ -37,7 +31,7 @@ set(SOURCES
scorec_vector.f90
scorec_matrix.f90
scorec_adapt.f90
PETScInterface.cpp
# PETScInterface.cpp
physical_mesh.f90
read_vmec.f90
fftw_fortran.c
Expand All @@ -54,6 +48,7 @@ set(SOURCES
read_gyro.f90
read_neo.f90
region.f90
signal_handler.f90
radiation.f90
element.f90
field.f90
Expand Down Expand Up @@ -162,8 +157,10 @@ find_package(PkgConfig REQUIRED)

# pkg_check_modules (PETSC REQUIRED PETSc)
pkg_search_module(PETSC PETSc IMPORTED_TARGET REQUIRED)
message(STATUS "Found PETSc ${PETSC_VERSION}")
message(STATUS "Found PETSc ${CMAKE_Fortran_COMPILER_ID}")
message(STATUS "PETSc version: ${PETSC_VERSION}")
message(STATUS "PETSc prefix: ${PETSC_PREFIX}")
message(STATUS "PETSc include dirs: ${PETSC_INCLUDE_DIRS}")
message(STATUS "PETSc library dirs: ${PETSC_LIBRARY_DIRS}")

# foreach(ITR ${PETSC_LINK_LIBRARIES})
# if(ITR MATCHES "liblapack\.a")
Expand All @@ -179,8 +176,10 @@ message(STATUS "Found PETSc ${CMAKE_Fortran_COMPILER_ID}")
# list(INSERT PETSC_LINK_LIBRARIES ${IDX} ${LAPACK_LIBRARY})
# message(STATUS "Found PETSc ${PETSC_STATIC_LIBRARIES}")
set(PETSC_LINK_LIBRARIES "")
set(PETSC_LINK_OPTIONS "")
set(_petsc_search_paths "")
# message(STATUS "Found PETSc ${PETSC_LINK_LIBRARIES}")
message(STATUS "Found PETSc ${PETSC_STATIC_LDFLAGS}")
message(STATUS "PETSc static link flags from pkg-config: ${PETSC_STATIC_LDFLAGS}")
# list(FIND PETSC_STATIC_LDFLAGS "-lmetis" _index)
# math(EXPR _index "${_index}+1")
# message(STATUS "Found PETSc ${_index}")
Expand All @@ -192,43 +191,57 @@ message(STATUS "Found PETSc ${PETSC_STATIC_LDFLAGS}")
# endif()
foreach (flag IN LISTS PETSC_STATIC_LDFLAGS)
if (flag MATCHES "^-L(.*)")
list(APPEND _search_paths ${CMAKE_MATCH_1})
list(APPEND _petsc_search_paths "${CMAKE_MATCH_1}")
continue()
endif()

if (flag MATCHES "^-l(.*)")
set(_pkg_search "${CMAKE_MATCH_1}")
endif()

# if (${_pkg_search} IN_LIST STATIC_LIST)
# message(STATUS "Found PETSc ${_pkg_search}")
# set(_pkg_search "lib${_pkg_search}.a")
# endif()
# if (${_pkg_search} IN_LIST STATIC_LIST)
# message(STATUS "Found PETSc ${_pkg_search}")
# set(_pkg_search "lib${_pkg_search}.a")
# endif()

if(_search_paths)
if(_petsc_search_paths)
# Firstly search in -L paths
find_library(pkgcfg_lib_PETSC_${_pkg_search}
NAMES ${_pkg_search}
HINTS ${_search_paths} NO_DEFAULT_PATH)
endif()
find_library(pkgcfg_lib_PETSC_${_pkg_search}
NAMES ${_pkg_search})
if(pkgcfg_lib_PETSC_${_pkg_search})
list(APPEND PETSC_LINK_LIBRARIES "${pkgcfg_lib_PETSC_${_pkg_search}}")
HINTS ${_petsc_search_paths} NO_DEFAULT_PATH)
endif()
find_library(pkgcfg_lib_PETSC_${_pkg_search}
NAMES ${_pkg_search})
if(pkgcfg_lib_PETSC_${_pkg_search})
list(APPEND PETSC_LINK_LIBRARIES "${pkgcfg_lib_PETSC_${_pkg_search}}")
else()
list(APPEND PETSC_LINK_LIBRARIES ${_pkg_search})
endif()
elseif(flag MATCHES "^/.+\\.(a|so|dylib)$")
list(APPEND PETSC_LINK_LIBRARIES "${flag}")
elseif(flag MATCHES "^-")
list(APPEND PETSC_LINK_OPTIONS "${flag}")
else()
list(APPEND PETSC_LINK_LIBRARIES ${_pkg_search})
list(APPEND PETSC_LINK_LIBRARIES "${flag}")
endif()
endforeach()
# message(STATUS "Found PETSc ${PETSC_LIBRARIES}")
message(STATUS "Found PETSc ${PETSC_LINK_LIBRARIES}")
message(STATUS "PETSc link libraries: ${PETSC_LINK_LIBRARIES}")
message(STATUS "PETSc link options: ${PETSC_LINK_OPTIONS}")
# list(TRANSFORM PETSC_LINK_LIBRARIES REPLACE "libpthread\.a" "libpthread.so")
# list(FILTER PETSC_LINK_LIBRARIES EXCLUDE REGEX "libpthread")
list(FILTER PETSC_LINK_LIBRARIES EXCLUDE REGEX "libcuda\.so")
# list(FILTER PETSC_LINK_LIBRARIES EXCLUDE REGEX "libsci_cray\.a")
# list(REMOVE_DUPLICATES PETSC_LINK_LIBRARIES)
list(REMOVE_DUPLICATES PETSC_LINK_LIBRARIES)
list(REMOVE_DUPLICATES PETSC_LINK_OPTIONS)
set_property(TARGET PkgConfig::PETSC PROPERTY
INTERFACE_LINK_LIBRARIES "${PETSC_LINK_LIBRARIES}")
if(PETSC_LINK_OPTIONS)
set_property(TARGET PkgConfig::PETSC PROPERTY
INTERFACE_LINK_OPTIONS "${PETSC_LINK_OPTIONS}")
endif()

pkg_search_module(FFTW fftw3 IMPORTED_TARGET REQUIRED)
message(STATUS "Found fftw3 ${FFTW_LINK_LIBRARIES}")

pkg_search_module(GSL gsl IMPORTED_TARGET REQUIRED)
# list(FILTER GSL_LINK_LIBRARIES EXCLUDE REGEX "libm")
Expand All @@ -243,7 +256,8 @@ message(STATUS "Found gsl ${GSL_LINK_LIBRARIES}")
# set(POSTFIX "${POSTFIX}-trilinos")
# endif()

find_package(Scorec)
find_package(Zoltan REQUIRED)
find_package(Scorec REQUIRED)
# if(SCOREC_FOUND AND USESCOREC)
# if(TRILINOS_FOUND AND USETRILINOS)
# set(SCOREC_SOURCES
Expand Down Expand Up @@ -272,29 +286,65 @@ find_package(Scorec)
# list(APPEND DEFS -DMATRIX_DUMP)
# endif()

find_package(Zoltan)
#find_package(PARMETIS)
#find_package(METIS)

find_package(ZLIB)
message(STATUS "ZLIB found: ${ZLIB_LIBRARIES}")
set(HDF5_PREFER_PARALLEL ON)
find_package(HDF5 REQUIRED COMPONENTS Fortran HL)
message(STATUS "HDF5 found: ${HDF5_HL_LIBRARIES}")
if (HDF5_HL_LIBRARIES MATCHES "libhdf5_hl_fortran\.a")
set(HDF5_USE_STATIC_LIBRARIES TRUE)
find_package(HDF5 REQUIRED COMPONENTS Fortran HL)
message(STATUS "HDF5 found: ${HDF5_HL_LIBRARIES}")
endif()
if (HDF5_FOUND)
message(STATUS "HDF5 found: ${HDF5_VERSION}")
message(STATUS "HDF5 version: ${HDF5_VERSION}")
else ()
message(FATAL_ERROR "HDF5 not found.")
endif ()
message(STATUS "HDF5_IS_PARALLEL = ${HDF5_IS_PARALLEL}")
message(STATUS "HDF5_INCLUDE_DIRS = ${HDF5_INCLUDE_DIRS}")
message(STATUS "HDF5_LIBRARIES = ${HDF5_LIBRARIES}")

find_package(netCDF
HINTS ${CMAKE_PREFIX_PATH}
PATHS /usr /usr/local
PATH_SUFFIXES
cmake/netCDF_mpi
lib/cmake/netCDF_mpi
lib64/cmake/netCDF_mpi
lib/${CMAKE_LIBRARY_ARCHITECTURE}/cmake/netCDF_mpi
NO_DEFAULT_PATH)
if(NOT netCDF_FOUND)
find_package(netCDF)
endif()
if(netCDF_FOUND)
if(TARGET netCDF::netcdf)
set(M3DC1_NETCDF_TARGET netCDF::netcdf)
get_target_property(M3DC1_NETCDF_INTERFACE_LINK_LIBRARIES netCDF::netcdf INTERFACE_LINK_LIBRARIES)
else()
set(M3DC1_NETCDF_TARGET ${netCDF_LIBRARIES})
set(M3DC1_NETCDF_INTERFACE_LINK_LIBRARIES ${netCDF_LIBRARIES})
endif()
message(STATUS "Found NetCDF CMake config: ${netCDF_DIR}")
message(STATUS "Found NetCDF ${NetCDFVersion}")
message(STATUS "NetCDF include dirs: ${netCDF_INCLUDE_DIR}")
message(STATUS "NetCDF libraries: ${M3DC1_NETCDF_TARGET}")
message(STATUS "NetCDF interface link libraries: ${M3DC1_NETCDF_INTERFACE_LINK_LIBRARIES}")
else()
pkg_search_module(NETCDF netcdf-mpi netcdf IMPORTED_TARGET REQUIRED)
set(M3DC1_NETCDF_TARGET PkgConfig::NETCDF)
message(STATUS "Found NetCDF ${NETCDF_VERSION}")
message(STATUS "Found NetCDF module: ${NETCDF_MODULE_NAME}")
message(STATUS "NetCDF include dirs: ${NETCDF_INCLUDE_DIRS}")
message(STATUS "NetCDF libraries: ${NETCDF_LINK_LIBRARIES}")
endif()

pkg_search_module(NETCDF netcdf IMPORTED_TARGET REQUIRED)
message(STATUS "Found NetCDF ${NETCDF_VERSION}")
pkg_search_module(NETCDF-Fortran netcdf-fortran IMPORTED_TARGET REQUIRED)
set(M3DC1_NETCDF_FORTRAN_TARGET PkgConfig::NETCDF-Fortran)
message(STATUS "Found NetCDF-Fortran ${NETCDF-Fortran_VERSION}")
message(STATUS "Found NetCDF-Fortran module: ${NETCDF-Fortran_MODULE_NAME}")
message(STATUS "NetCDF-Fortran include dirs: ${NETCDF-Fortran_INCLUDE_DIRS}")
message(STATUS "NetCDF-Fortran libraries: ${NETCDF-Fortran_LINK_LIBRARIES}")

# find_package(netCDF-Fortran REQUIRED)
# if (netCDF_FOUND)
Expand Down Expand Up @@ -396,8 +446,7 @@ set_source_files_properties(
set_source_files_properties(
field.f90
PROPERTIES
OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${BIN_NAME}.dir/scorec_vector.f90.o
OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${BIN_NAME}.dir/scorec_matrix.f90.o
OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${BIN_NAME}.dir/scorec_vector.f90.o;${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${BIN_NAME}.dir/scorec_matrix.f90.o"
)

set_source_files_properties(
Expand All @@ -423,8 +472,8 @@ endif()
add_executable(${BIN_NAME} ${SOURCES})
# set_target_properties(${BIN_NAME} PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${BIN_NAME}_mods)
set_property(TARGET ${BIN_NAME} PROPERTY LINKER_LANGUAGE Fortran)
target_include_directories(${BIN_NAME} PRIVATE ${SCOREC_INCLUDE_DIRS})
target_link_libraries(${BIN_NAME} PRIVATE PkgConfig::NETCDF-Fortran PkgConfig::NETCDF
target_include_directories(${BIN_NAME} PRIVATE ${SCOREC_INCLUDE_DIRS} ${ZOLTAN_INCLUDE_DIRS} ${HDF5_INCLUDE_DIRS})
target_link_libraries(${BIN_NAME} PRIVATE ${M3DC1_NETCDF_FORTRAN_TARGET} ${M3DC1_NETCDF_TARGET}
${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES}
# netCDF::netcdff
${M3DC1_SCOREC_LIB_NAME} ${SCOREC_LIBRARIES} ${ZOLTAN_LIBRARIES}
Expand All @@ -447,9 +496,9 @@ install(TARGETS ${BIN_NAME} DESTINATION ".")
# INTERFACE_LINK_LIBRARIES)
list(FILTER CMAKE_C_IMPLICIT_LINK_LIBRARIES EXCLUDE REGEX "^c$")
list(FILTER CMAKE_CXX_IMPLICIT_LINK_LIBRARIES EXCLUDE REGEX "^c$")
message(STATUS ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
message(STATUS ${CMAKE_C_IMPLICIT_LINK_LIBRARIES})
message(STATUS ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES})
message(STATUS "Fortran implicit link libraries: ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}")
message(STATUS "C implicit link libraries: ${CMAKE_C_IMPLICIT_LINK_LIBRARIES}")
message(STATUS "CXX implicit link libraries: ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}")
# set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "")
# set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "")
# set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
Expand Down Expand Up @@ -482,6 +531,3 @@ endif()
#target_compile_definitions(a2cc PUBLIC ${DEFS})

#add_executable(kprad kprad.f90 kprad_test.f90)