diff --git a/.github/workflows/github_cmake_gnu.yml b/.github/workflows/github_cmake_gnu.yml index 7a45fe80c..9f8719f02 100644 --- a/.github/workflows/github_cmake_gnu.yml +++ b/.github/workflows/github_cmake_gnu.yml @@ -19,6 +19,7 @@ jobs: image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0 env: CMAKE_FLAGS: "${{ matrix.build-type }} ${{ matrix.omp-flags }} ${{ matrix.libyaml-flag }}" + PKG_CONFIG_PATH: "/opt/views/view/lib64/pkgconfig:/opt/views/view/lib/pkgconfig:/opt/views/view/share/pkgconfig" steps: - name: Checkout code uses: actions/checkout@v4.2.2 @@ -26,7 +27,7 @@ jobs: run: | mkdir build cd build - cmake $CMAKE_FLAGS -DNetCDF_ROOT=/opt/view -DLIBYAML_ROOT=/opt/view .. + cmake $CMAKE_FLAGS -DNetCDF_ROOT=/opt/view .. - name: Build the library run: make -C build @@ -41,6 +42,7 @@ jobs: image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0-arm env: CMAKE_FLAGS: "${{ matrix.build-type }} ${{ matrix.omp-flags }} ${{ matrix.libyaml-flag }}" + PKG_CONFIG_PATH: "/opt/views/view/lib64/pkgconfig:/opt/views/view/lib/pkgconfig:/opt/views/view/share/pkgconfig" steps: - name: Checkout code uses: actions/checkout@v4.2.2 @@ -48,6 +50,6 @@ jobs: run: | mkdir build cd build - cmake $CMAKE_FLAGS -DNetCDF_ROOT=/opt/view -DLIBYAML_ROOT=/opt/view .. + cmake $CMAKE_FLAGS -DNetCDF_ROOT=/opt/view .. - name: Build the library run: make -C build diff --git a/CMAKE_INSTRUCTIONS.md b/CMAKE_INSTRUCTIONS.md index cb6e927a2..d715a5854 100644 --- a/CMAKE_INSTRUCTIONS.md +++ b/CMAKE_INSTRUCTIONS.md @@ -22,11 +22,6 @@ MPI compiler wrappers may be named different on your system, so its best to ensu export NetCDF_ROOT=`nc-config --prefix` ``` -#### If building with yaml parser (-DWITH_YAML) -``` -export LIBYAML_ROOT= -``` - ### Running CMake It's best to create a build directory inside of the FMS folder to avoid building on top of the source code. Once that is done, CMake can be ran to generate the necessary build files: diff --git a/CMakeLists.txt b/CMakeLists.txt index 64c5c5f82..ff4364c36 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,8 +88,8 @@ if (OPENMP) endif() if (WITH_YAML) - find_package(libyaml REQUIRED COMPONENTS C) - include_directories(${LIBYAML_INCLUDE_DIR}) + find_package(PkgConfig REQUIRED) + pkg_check_modules(YAML REQUIRED IMPORTED_TARGET "yaml-0.1") endif () # Enables position independent code (i.e., -fPIC) @@ -417,6 +417,10 @@ foreach(kind ${kinds}) NetCDF::NetCDF_Fortran MPI::MPI_Fortran) + if(YAML_FOUND) + target_link_libraries(${libTgt} PRIVATE PkgConfig::YAML) + endif() + if(OpenMP_Fortran_FOUND) target_link_libraries(${libTgt} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_Fortran) endif() @@ -450,12 +454,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}) @@ -560,6 +558,10 @@ if(NOT kinds) NetCDF::NetCDF_Fortran MPI::MPI_Fortran) + if(YAML_FOUND) + target_link_libraries(${libTgt} PRIVATE PkgConfig::YAML) + endif() + if(OpenMP_Fortran_FOUND) target_link_libraries(${libTgt} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_Fortran) endif() @@ -785,7 +787,7 @@ foreach (testFile ${TEST_SRC_SINGLE_TARGET}) ) if(WITH_YAML) - target_link_libraries(${TName} PRIVATE yaml ${LIBYAML_LIBRARIES}) + target_link_libraries(${TName} PRIVATE PkgConfig::YAML) endif() if(OPENMP) @@ -821,8 +823,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 PkgConfig::YAML) + target_link_libraries(${TName}_r8 PRIVATE PkgConfig::YAML) endif() if(OPENMP) diff --git a/cmake/FMSConfig.cmake.in b/cmake/FMSConfig.cmake.in index 8d3c50a4d..b758eb123 100644 --- a/cmake/FMSConfig.cmake.in +++ b/cmake/FMSConfig.cmake.in @@ -24,6 +24,10 @@ endif() list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) find_dependency(NetCDF COMPONENTS C Fortran) +if(@WITH_YAML@) + find_dependency(PkgConfig REQUIRED) + pkg_check_modules(YAML REQUIRED IMPORTED_TARGET "yaml-0.1") +endif() list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) diff --git a/cmake/Findlibyaml.cmake b/cmake/Findlibyaml.cmake deleted file mode 100644 index 029447c70..000000000 --- a/cmake/Findlibyaml.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# Try to find libyaml includes and library. -# The following variables are set: -# LIBYAML_INCLUDE_DIR -# LIBYAML_LIBRARIES - -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") -endif() -MARK_AS_ADVANCED(LIBYAML_INCLUDE_DIR LIBYAML_LIBRARIES)