Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
28 changes: 17 additions & 11 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,7 @@ if (OPENMP)
endif()

if (WITH_YAML)
find_package(libyaml REQUIRED COMPONENTS C)
include_directories(${LIBYAML_INCLUDE_DIR})
find_package(libyaml REQUIRED)
endif ()

# Enables position independent code (i.e., -fPIC)
Expand Down Expand Up @@ -417,6 +416,10 @@ foreach(kind ${kinds})
NetCDF::NetCDF_Fortran
MPI::MPI_Fortran)

if(libyaml_FOUND)
target_link_libraries(${libTgt} PRIVATE libyaml::yaml)
endif()

if(OpenMP_Fortran_FOUND)
target_link_libraries(${libTgt} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_Fortran)
endif()
Expand Down Expand Up @@ -450,12 +453,6 @@ if(NOT kinds)
target_link_libraries(${libTgt}_c PRIVATE OpenMP::OpenMP_C)
endif()

if(WITH_YAML)
target_link_libraries(${libTgt}_c PRIVATE libyaml_C)
set_target_properties(${libTgt}_c PROPERTIES COMPILE_FLAGS "-L${LIBYAML_LIBRARIES} -lyaml")
endif()


# Fortran
add_library(${libTgt}_f OBJECT ${fms_fortran_src_files})

Expand Down Expand Up @@ -560,6 +557,10 @@ if(NOT kinds)
NetCDF::NetCDF_Fortran
MPI::MPI_Fortran)

if(libyaml_FOUND)
target_link_libraries(${libTgt} PRIVATE libyaml::yaml)
endif()

if(OpenMP_Fortran_FOUND)
target_link_libraries(${libTgt} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_Fortran)
endif()
Expand Down Expand Up @@ -785,7 +786,7 @@ foreach (testFile ${TEST_SRC_SINGLE_TARGET})
)

if(WITH_YAML)
target_link_libraries(${TName} PRIVATE yaml ${LIBYAML_LIBRARIES})
target_link_libraries(${TName} PRIVATE libyaml::yaml)
endif()

if(OPENMP)
Expand Down Expand Up @@ -821,8 +822,8 @@ foreach (testFile ${TEST_SRC_MULTI_TARGET})
)

if(WITH_YAML)
target_link_libraries(${TName}_r4 PRIVATE yaml ${LIBYAML_LIBRARIES})
target_link_libraries(${TName}_r8 PRIVATE yaml ${LIBYAML_LIBRARIES})
target_link_libraries(${TName}_r4 PRIVATE libyaml::yaml)
target_link_libraries(${TName}_r8 PRIVATE libyaml::yaml)
endif()

if(OPENMP)
Expand Down Expand Up @@ -896,6 +897,11 @@ configure_package_config_file(
install(FILES ${CMAKE_SOURCE_DIR}/cmake/FindNetCDF.cmake ${CMAKE_CURRENT_BINARY_DIR}/fms-config.cmake
DESTINATION ${CONFIG_INSTALL_DESTINATION})

if(WITH_YAML)
install(FILES ${CMAKE_SOURCE_DIR}/cmake/Findlibyaml.cmake
DESTINATION ${CONFIG_INSTALL_DESTINATION})
endif()

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/fms-config-version.cmake
VERSION ${PROJECT_VERSION}
Expand Down
3 changes: 3 additions & 0 deletions cmake/FMSConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ endif()

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
find_dependency(NetCDF COMPONENTS C Fortran)
if(@WITH_YAML@)
find_dependency(libyaml)
endif()
list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})


Expand Down
58 changes: 51 additions & 7 deletions cmake/Findlibyaml.cmake
Original file line number Diff line number Diff line change
@@ -1,11 +1,55 @@
# Try to find libyaml includes and library.
# The following variables are set:
# LIBYAML_INCLUDE_DIR
# LIBYAML_LIBRARIES
# libyaml_FOUND
# LIBYAML_INCLUDE_DIRS
# LIBYAML_LIBRARIES
#
# Imported targets:
# libyaml::yaml
#
# Hints:
# LIBYAML_ROOT or ENV{LIBYAML_ROOT}

FIND_PATH(LIBYAML_INCLUDE_DIR NAMES yaml.h PATHS ${LIBYAML_ROOT}/include $ENV{LIBYAML_ROOT}/include )
FIND_LIBRARY(LIBYAML_LIBRARIES NAMES yaml PATHS ${LIBYAML_ROOT}/lib $ENV{LIBYAML_ROOT}/lib )
if(NOT LIBYAML_INCLUDE_DIR OR NOT LIBYAML_LIBRARIES)
message(SEND_ERROR "libyaml library/include file not found, set LIBYAML_ROOT")
include(FindPackageHandleStandardArgs)

# Allow user to hint the install prefix
set(_LIBYAML_HINTS
${LIBYAML_ROOT}
$ENV{LIBYAML_ROOT}
)

# Find the header
find_path(LIBYAML_INCLUDE_DIR
NAMES yaml.h
HINTS ${_LIBYAML_HINTS}
PATH_SUFFIXES include
)

# Find the library
find_library(LIBYAML_LIBRARIES
NAMES yaml
HINTS ${_LIBYAML_HINTS}
PATH_SUFFIXES lib lib64
)

# Standard handling of REQUIRED / QUIET and *_FOUND
find_package_handle_standard_args(libyaml
REQUIRED_VARS
LIBYAML_INCLUDE_DIR
LIBYAML_LIBRARIES
)

if(libyaml_FOUND)
if(NOT TARGET libyaml::yaml)
add_library(libyaml::yaml UNKNOWN IMPORTED)
set_target_properties(libyaml::yaml PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${LIBYAML_INCLUDE_DIR}
IMPORTED_LOCATION ${LIBYAML_LIBRARIES}
)
endif()
endif()
MARK_AS_ADVANCED(LIBYAML_INCLUDE_DIR LIBYAML_LIBRARIES)

mark_as_advanced(
LIBYAML_INCLUDE_DIR
LIBYAML_LIBRARIES
)
Loading