Skip to content
Snippets Groups Projects
Commit 7f4e1335 authored by Siddhant Tibrewal's avatar Siddhant Tibrewal
Browse files

cleaned up the partial building of deps via yac and made it entirely a user...

cleaned up the partial building of deps via yac and made it entirely a user responsibility to manage the yaco deps enforced via the icon-stack
parent 73fe198b
No related branches found
No related tags found
1 merge request!46Build process for multiple compilers across different machines
......@@ -2,12 +2,3 @@
#
# SPDX-License-Identifier: BSD-3-Clause
[submodule "yac"]
path = external/yac
url = https://gitlab.dkrz.de/dkrz-sw/yac.git
[submodule "yaxt"]
path = external/yaxt
url = https://gitlab.dkrz.de/dkrz-sw/yaxt.git
[submodule "external/libcdi"]
path = external/libcdi
url = https://gitlab.dkrz.de/mpim-sw/libcdi.git
......@@ -6,9 +6,9 @@ cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(YACO VERSION 0.1.0)
#set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
function(set_build_defaults TARGET)
if(NOT CMAKE_BUILD_TYPE)
......@@ -76,7 +76,7 @@ function(set_build_defaults TARGET)
)
endif()
endif()
target_compile_options(${TARGET} PRIVATE -Wall -Wextra -pedantic -Werror ${ADDITIONAL_WARNINGS})
target_compile_options(${TARGET} PRIVATE -Wall -Wextra -pedantic ${ADDITIONAL_WARNINGS})
endfunction()
add_library(
......@@ -94,15 +94,16 @@ add_library(
)
option(ENABLE_FDB "Enable FDB support" ON)
option(ENABLE_NETCDF "Enable NetCDF support" ON)
option(ENABLE_NETCDF "Enable NetCDF support" OFF)
if(ENABLE_FDB)
find_package(eccodes PATHS cmake NO_DEFAULT_PATH REQUIRED)
find_package(eckit PATHS cmake NO_DEFAULT_PATH REQUIRED)
find_package(fdb PATHS cmake NO_DEFAULT_PATH REQUIRED)
set(fdb5_DIR '/Users/stibrew/Workspace/libs/idp_deps/install/')
find_package(eccodes REQUIRED)
find_package(eckit REQUIRED)
find_package(fdb5 REQUIRED)
target_compile_definitions(libyaco PUBLIC YACO_ENABLE_FDB)
target_sources(libyaco PRIVATE src/data_handler/fdb_writer.cpp)
target_link_libraries(libyaco PUBLIC eccodes fdb eckit)
target_link_libraries(libyaco PUBLIC eccodes eckit fdb)
endif()
if(ENABLE_NETCDF)
......@@ -121,10 +122,10 @@ target_include_directories(
)
find_package(MPI REQUIRED)
find_package(healpix_cxx PATHS cmake NO_DEFAULT_PATH REQUIRED)
find_package(yac PATHS cmake NO_DEFAULT_PATH REQUIRED)
find_package(fyaml PATHS cmake REQUIRED)
target_link_libraries(libyaco PUBLIC healpix::healpix_cxx MPI::MPI_CXX yac fyaml::fyaml)
find_package(YAC REQUIRED)
find_package(healpix_cxx REQUIRED)
find_package(fyaml REQUIRED)
target_link_libraries(libyaco PUBLIC healpix::healpix_cxx MPI::MPI_CXX YAC::YAC fyaml)
add_executable(yaco src/main.cpp)
target_link_libraries(yaco PUBLIC libyaco)
......
# SPDX-FileCopyrightText: 2023 Max Planck Institute for Meteorology, Yaco authors
#
# SPDX-License-Identifier: BSD-3-Clause
find_package(PkgConfig REQUIRED)
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
pkg_check_modules(ECCODES_PKGCONFIG REQUIRED eccodes)
if(ECCODES_INCLUDE_DIR AND ECCODES_LIBRARY)
set(ECCODES_FIND_QUIETLY TRUE)
endif()
find_path(ECCODES_INCLUDE_DIR NAMES eccodes.h)
find_library(ECCODES_LIBRARY NAMES eccodes)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(eccodes DEFAULT_MSG ECCODES_INCLUDE_DIR ECCODES_LIBRARY)
mark_as_advanced(ECCODES_INCLUDE_DIR ECCODES_LIBRARY)
set(ECCODES_LIBRARIES ${ECCODES_LIBRARY})
set(ECCODES_INCLUDE_DIRS ${ECCODES_INCLUDE_DIR})
if(ECCODES_FOUND AND NOT TARGET eccodes)
if(ECCODES_PKGCONFIG_FOUND)
add_library(eccodes UNKNOWN IMPORTED)
set_target_properties(eccodes PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ECCODES_INCLUDE_DIRS}")
set_target_properties(eccodes PROPERTIES IMPORTED_LOCATION "${ECCODES_LIBRARIES}")
get_filename_component(ECCODES_LIBRARIES_EXT "${ECCODES_LIBRARIES}" EXT)
endif()
set_target_properties(eccodes PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ECCODES_PKGCONFIG_INCLUDE_DIRS}")
set_target_properties(eccodes PROPERTIES IMPORTED_LOCATION "${ECCODES_PKGCONFIG_ALL_LIBS}")
get_filename_component(ECCODES_LIBRARIES_EXT "${ECCODES_PKGCONFIG_ALL_LIBS}" EXT)
endif()
\ No newline at end of file
# SPDX-FileCopyrightText: 2023 Max Planck Institute for Meteorology, Yaco authors
#
# SPDX-License-Identifier: BSD-3-Clause
find_package(PkgConfig REQUIRED)
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
pkg_check_modules(ECKIT_PKGCONFIG REQUIRED eckit)
if(ECKIT_INCLUDE_DIR AND ECKIT_LIBRARY)
set(ECKIT_FIND_QUIETLY TRUE)
endif()
find_path(ECKIT_INCLUDE_DIR NAMES eckit/runtime/Main.h)
find_library(ECKIT_LIBRARY NAMES eckit)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(eckit DEFAULT_MSG ECKIT_INCLUDE_DIR ECKIT_LIBRARY)
mark_as_advanced(ECKIT_INCLUDE_DIR ECKIT_LIBRARY)
set(ECKIT_LIBRARIES ${ECKIT_LIBRARY})
set(ECKIT_INCLUDE_DIRS ${ECKIT_INCLUDE_DIR})
if(ECKIT_FOUND AND NOT TARGET eckit)
if(ECKIT_PKGCONFIG_FOUND)
add_library(eckit UNKNOWN IMPORTED)
set_target_properties(eckit PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ECKIT_INCLUDE_DIRS}")
set_target_properties(eckit PROPERTIES IMPORTED_LOCATION "${ECKIT_LIBRARIES}")
get_filename_component(ECKIT_LIBRARIES_EXT "${ECKIT_LIBRARIES}" EXT)
endif()
set_target_properties(eckit PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ECKIT_PKGCONFIG_INCLUDE_DIRS}")
set_target_properties(eckit PROPERTIES IMPORTED_LOCATION "${ECKIT_PKGCONFIG_ALL_LIBS}")
get_filename_component(ECKIT_LIBRARIES_EXT "${ECKIT_PKGCONFIG_ALL_LIBS}" EXT)
endif()
\ No newline at end of file
# SPDX-FileCopyrightText: 2023 Max Planck Institute for Meteorology, Yaco authors
#
# SPDX-License-Identifier: BSD-3-Clause
find_package(PkgConfig REQUIRED)
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
pkg_check_modules(LIBFYAML_PKGCONFIG REQUIRED libfyaml)
if(LIBFYAML_PKGCONFIG_FOUND)
message(STATUS "Found fyaml: ${LIBFYAML_PKGCONFIG_ALL_LIBS}")
add_library(fyaml UNKNOWN IMPORTED)
set_target_properties(fyaml PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBFYAML_PKGCONFIG_INCLUDE_DIRS}")
set_target_properties(fyaml PROPERTIES IMPORTED_LOCATION "${LIBFYAML_PKGCONFIG_ALL_LIBS}")
get_filename_component(LIBFYAML_LIBRARIES_EXT "${LIBFYAML_PKGCONFIG_ALL_LIBS}" EXT)
endif()
\ No newline at end of file
# SPDX-FileCopyrightText: 2023 Max Planck Institute for Meteorology, Yaco authors
#
# SPDX-License-Identifier: BSD-3-Clause
find_package(PkgConfig REQUIRED)
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
pkg_check_modules(HEALPIX_PKGCONFIG REQUIRED eccodes)
if(HEALPIX_CXX_INCLUDE_DIR AND HEALPIX_CXX_LIBRARY)
set(HEALPIX_CXX_FIND_QUIETLY TRUE)
endif()
find_path(HEALPIX_CXX_INCLUDE_DIR healpix_cxx/healpix_base.h
HINTS
ENV HEALPIX_CXX_DIR
${HEALPIX_CXX_DIR}
PATH_SUFFIXES include
)
find_library(HEALPIX_CXX_LIBRARY healpix_cxx
HINTS
ENV HEALPIX_CXX_DIR
${HEALPIX_CXX_DIR}
PATH_SUFFIXES lib
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(healpix_cxx DEFAULT_MSG HEALPIX_CXX_INCLUDE_DIR HEALPIX_CXX_LIBRARY)
mark_as_advanced(HEALPIX_CXX_INCLUDE_DIR HEALPIX_CXX_LIBRARY)
set(HEALPIX_CXX_LIBRARIES ${HEALPIX_CXX_LIBRARY})
set(HEALPIX_CXX_INCLUDE_DIRS ${HEALPIX_CXX_INCLUDE_DIR})
if(HEALPIX_CXX_FOUND AND NOT TARGET healpix::healpix_cxx)
if(HEALPIX_PKGCONFIG_FOUND)
add_library(healpix::healpix_cxx UNKNOWN IMPORTED)
set_target_properties(healpix::healpix_cxx PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${HEALPIX_CXX_INCLUDE_DIRS}")
set_target_properties(healpix::healpix_cxx PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${HEALPIX_CXX_PKGCONFIG_INCLUDE_DIRS}")
set_target_properties(healpix::healpix_cxx PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX")
set_target_properties(healpix::healpix_cxx PROPERTIES IMPORTED_LOCATION "${HEALPIX_CXX_LIBRARIES}")
get_filename_component(HEALPIX_CXX_LIBRARIES_EXT "${HEALPIX_CXX_LIBRARIES}" EXT)
if (NOT HEALPIX_CXX_FIND_QUIETLY)
message(STATUS "Found HEALPix C++: ${HEALPIX_CXX_LIBRARIES}")
endif()
endif()
set_target_properties(healpix::healpix_cxx PROPERTIES IMPORTED_LOCATION "${HEALPIX_CXX_PKGCONFIG_LIBRARIES}")
get_filename_component(HEALPIX_CXX_LIBRARIES_EXT "${HEALPIX_CXX_PKGCONFIG_LIBRARIES}" EXT)
message(STATUS "Found HEALPix C++: ${HEALPIX_CXX_PKGCONFIG_LIBRARIES}")
endif()
\ No newline at end of file
find_package(PkgConfig REQUIRED)
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
pkg_check_modules(YAC_PKGCONFIG REQUIRED yac)
if(YAC_PKGCONFIG_FOUND)
add_library(YAC::YAC INTERFACE IMPORTED)
set(YAC_PKGCONFIG_ALL_LIBS ${YAC_PKGCONFIG_LINK_LIBRARIES} ${YAC_PKGCONFIG_LDFLAGS_OTHER})
set_target_properties(YAC::YAC PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
INTERFACE_INCLUDE_DIRECTORIES "${YAC_PKGCONFIG_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "${YAC_PKGCONFIG_ALL_LIBS}"
INTERFACE_COMPILE_OPTIONS "${YAC_PKGCONFIG_CFLAGS_OTHER}"
)
# the pkg-config may state to use mpicc as compiler. Instead we link MPI here explicitly.
# As we include yac.h (which includes mpi.h) from CXX we need to link against MPI_CXX instead of MPI_C
target_link_libraries(YAC::YAC INTERFACE MPI::MPI_CXX)
endif()
\ No newline at end of file
File moved
# SPDX-FileCopyrightText: 2023 Max Planck Institute for Meteorology, Yaco authors
#
# SPDX-License-Identifier: BSD-3-Clause
if(FYAML_INCLUDE_DIR AND FYAML_LIBRARY)
set(FYAML_FIND_QUIETLY TRUE)
endif()
find_path(FYAML_INCLUDE_DIR libfyaml.h)
find_library(FYAML_LIBRARY fyaml)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(fyaml DEFAULT_MSG FYAML_INCLUDE_DIR FYAML_LIBRARY)
mark_as_advanced(FYAML_INCLUDE_DIR FYAML_LIBRARY)
set(FYAML_LIBRARIES ${FYAML_LIBRARY})
set(FYAML_INCLUDE_DIRS ${FYAML_INCLUDE_DIR})
if(FYAML_FOUND AND NOT TARGET fyaml::fyaml)
add_library(fyaml::fyaml UNKNOWN IMPORTED)
set_target_properties(fyaml::fyaml PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FYAML_INCLUDE_DIRS}")
set_target_properties(fyaml::fyaml PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C")
set_target_properties(fyaml::fyaml PROPERTIES IMPORTED_LOCATION "${FYAML_LIBRARIES}")
if (NOT FYAML_FIND_QUIETLY)
message(STATUS "Found fyaml: ${FYAML_LIBRARIES}")
endif()
endif()
# SPDX-FileCopyrightText: 2023 Max Planck Institute for Meteorology, Yaco authors
#
# SPDX-License-Identifier: BSD-3-Clause
include(ExternalProject)
include(GNUInstallDirs)
option(EXTERNAL_LAPACK "Use external LAPACK" OFF)
if(NOT TARGET yac-proj)
set(YAC_PATH ${CMAKE_CURRENT_LIST_DIR}/../external/yac)
enable_language(Fortran)
find_package(
MPI
COMPONENTS C Fortran
REQUIRED
)
if(EXTERNAL_LAPACK)
find_package(LAPACK REQUIRED)
set(LAPACK_CONFIG_VALUE yes)
else()
set(LAPACK_CONFIG_VALUE no)
endif()
find_package(fyaml REQUIRED PATHS ${CMAKE_CURRENT_LIST_DIR})
find_package(yaxt PATHS ${CMAKE_CURRENT_LIST_DIR} NO_DEFAULT_PATH REQUIRED)
get_filename_component(FYAML_LIB_PATH ${FYAML_LIBRARIES} DIRECTORY)
externalproject_add(
yac-proj
EXCLUDE_FROM_ALL TRUE
SOURCE_DIR ${YAC_PATH}
BINARY_DIR ${CMAKE_BINARY_DIR}/external-build/yac
INSTALL_DIR ${CMAKE_BINARY_DIR}/external
DEPENDS yaxt-proj
CONFIGURE_COMMAND
bash -c " \
${YAC_PATH}/configure \
CC=${MPI_C_COMPILER} \
FC=${MPI_Fortran_COMPILER} \
--srcdir=${YAC_PATH} --prefix=<INSTALL_DIR> \
--disable-mpi-checks --disable-netcdf --enable-lib-only --with-yaxt-include=${yaxt_INSTALL_DIR}/include \
--with-yaxt-lib=${yaxt_INSTALL_DIR}/lib --with-fyaml-include=${FYAML_INCLUDE_DIRS} \
--with-fyaml-lib=${FYAML_LIB_PATH} --with-external-lapack=${LAPACK_CONFIG_VALUE} \
|| ( \
cat ${CMAKE_BINARY_DIR}/external-build/yac/config.log && exit 1 \
)"
)
endif()
externalproject_get_property(yac-proj INSTALL_DIR)
set(yac_INSTALL_DIR ${INSTALL_DIR})
if(NOT TARGET yac_mtime)
add_library(yac_mtime STATIC IMPORTED)
add_dependencies(yac_mtime yac-proj)
file(MAKE_DIRECTORY ${yac_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
target_include_directories(yac_mtime INTERFACE ${YAC_PATH}/mtime/include)
set_property(
TARGET yac_mtime
PROPERTY IMPORTED_LOCATION
${yac_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}yac_mtime${CMAKE_STATIC_LIBRARY_SUFFIX}
)
endif()
if(NOT EXTERNAL_LAPACK)
if(NOT TARGET yac_clapack)
add_library(yac_clapack STATIC IMPORTED)
add_dependencies(yac_clapack yac-proj)
file(MAKE_DIRECTORY ${yac_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
set_property(
TARGET yac_clapack
PROPERTY IMPORTED_LOCATION
${yac_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}yac_clapack${CMAKE_STATIC_LIBRARY_SUFFIX}
)
endif()
endif()
if(NOT TARGET yac)
add_library(yac STATIC IMPORTED)
add_dependencies(yac yac-proj)
file(MAKE_DIRECTORY ${yac_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
target_include_directories(yac INTERFACE ${yac_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
target_link_libraries(yac INTERFACE MPI::MPI_C yac_mtime yaxt_c fyaml::fyaml)
if(EXTERNAL_LAPACK)
target_link_libraries(yac INTERFACE LAPACK::LAPACK)
else()
target_link_libraries(yac INTERFACE yac_clapack)
endif()
set_property(
TARGET yac PROPERTY IMPORTED_LOCATION
${yac_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}yac${CMAKE_STATIC_LIBRARY_SUFFIX}
)
endif()
mark_as_advanced(yac_DIR)
# SPDX-FileCopyrightText: 2023 Max Planck Institute for Meteorology, Yaco authors
#
# SPDX-License-Identifier: BSD-3-Clause
include(ExternalProject)
if(NOT TARGET yaxt-proj)
set(YAXT_PATH ${CMAKE_CURRENT_LIST_DIR}/../external/yaxt)
enable_language(Fortran)
find_package(
MPI
COMPONENTS C Fortran
REQUIRED
)
externalproject_add(
yaxt-proj
EXCLUDE_FROM_ALL TRUE
SOURCE_DIR ${YAXT_PATH}
BINARY_DIR ${CMAKE_BINARY_DIR}/external-build/yaxt
INSTALL_DIR ${CMAKE_BINARY_DIR}/external
CONFIGURE_COMMAND
bash -c " \
( \
${YAXT_PATH}/configure \
CC=${MPI_C_COMPILER} \
FC=${MPI_Fortran_COMPILER} \
--srcdir=${YAXT_PATH} --prefix=<INSTALL_DIR> \
--disable-shared --enable-static --without-regard-for-quality \
--with-on-demand-check-programs --without-example-programs --without-perf-programs \
|| ( \
cat ${CMAKE_BINARY_DIR}/external-build/yaxt/config.log && exit 1 \
) \
)"
)
endif()
externalproject_get_property(yaxt-proj INSTALL_DIR)
set(yaxt_INSTALL_DIR ${INSTALL_DIR})
if(NOT TARGET yaxt)
add_library(yaxt STATIC IMPORTED)
add_dependencies(yaxt yaxt-proj)
file(MAKE_DIRECTORY ${yaxt_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
target_include_directories(yaxt INTERFACE ${yaxt_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
target_link_libraries(yaxt INTERFACE MPI::MPI_C)
set_property(
TARGET yaxt PROPERTY IMPORTED_LOCATION
${yaxt_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}yaxt${CMAKE_STATIC_LIBRARY_SUFFIX}
)
endif()
if(NOT TARGET yaxt_c)
add_library(yaxt_c STATIC IMPORTED)
add_dependencies(yaxt_c yaxt-proj)
file(MAKE_DIRECTORY ${yaxt_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
target_include_directories(yaxt_c INTERFACE ${yaxt_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
target_link_libraries(yaxt_c INTERFACE MPI::MPI_C)
set_property(
TARGET yaxt_c PROPERTY IMPORTED_LOCATION
${yaxt_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}yaxt_c${CMAKE_STATIC_LIBRARY_SUFFIX}
)
endif()
mark_as_advanced(yaxt_DIR)
Subproject commit 42d13a2f7c8711205cab9e7ed71616b89b673fdd
Subproject commit 7c9ba8ee176cf109107367b2f5fb4eacf22a9026
Subproject commit 4fe0b102513b568bd5eac72ccb25825e3111b8df
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment