1# Copyright (c) 2019 - 2024 David Guibert
2# Copyright (c) 2024 Antoine Morvan
5# SPDX-License-Identifier: Apache-2.0
7set_property(GLOBAL PROPERTY xios_can_use_system FALSE)
8set_property(GLOBAL PROPERTY xios_depends mpi netcdf libxml2)
10set(xios_cmake_args "" CACHE STRING "Custom CMake arguments for xios")
11set(xios_build_args "" CACHE STRING "Custom make_xios arguments for xios")
15 add_library(xios_deps INTERFACE)
16 target_link_libraries(xios_deps INTERFACE MPI::MPI_Fortran netcdf::Fortran
19 add_library(xios_options INTERFACE)
20 target_compile_options(
22 INTERFACE $<$<STREQUAL:"${CMAKE_Fortran_COMPILER_ID}","GNU">:-g
27 -ffree-line-length-none>
28 $<$<STREQUAL:"${CMAKE_Fortran_COMPILER_ID}","Intel">:-g
43 -DBOOST_NO_CXX11_DEFAULTED_FUNCTIONS
45 BOOST_NO_CXX11_DELETED_FUNCTIONS>)
47 add_link_lib(xios_deps)
48 message(STATUS "xios link_libs: ${link_libs}")
49 add_inc_dirs(xios_deps)
50 message(STATUS "xios inc_dirs: ${inc_dirs}")
53 if(NOT USE_SYSTEM_libxml2)
54 list(APPEND xios_ep libxml2)
57 ExternalProject_Data_Add(
60 DEPENDS xios_options xios_deps ${xios_ep}
62 ${CMAKE_COMMAND} ${cmake_params}
63 -DSOURCE_DIR=${PROJECT_SOURCE_DIR}
64 -DBINARY_DIR=${PROJECT_BINARY_DIR}
65 -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
66 -DXIOS_COMPILE_OPTIONS=$<TARGET_PROPERTY:xios_options,INTERFACE_COMPILE_OPTIONS>
67 -DXIOS_USER_INC=${inc_dirs} -DXIOS_USER_LIB=${link_libs} -P
68 ${CMAKE_SOURCE_DIR}/projects/xios-configure-files.cmake
71 COMMAND ${CMAKE_COMMAND} -E copy_directory <SOURCE_DIR>/ <BINARY_DIR>/
73 ${CMAKE_COMMAND} -E copy_if_different
74 ${CMAKE_BINARY_DIR}/projects/xios-arch-X86_hpcw.fcm
75 <BINARY_DIR>/arch/arch-X64_hpcw.fcm
77 ${CMAKE_COMMAND} -E copy_if_different
78 ${CMAKE_BINARY_DIR}/projects/xios-arch-X86_hpcw.path
79 <BINARY_DIR>/arch/arch-X64_hpcw.path
80 COMMAND ${CMAKE_SOURCE_DIR}/bin/patchShebangs <BINARY_DIR> || true
81 COMMAND ${CMAKE_SOURCE_DIR}/bin/patchShebangs <SOURCE_DIR> || true
82 BUILD_COMMAND ./make_xios --prod --arch X64_hpcw --job
83 ${XIOS_BUILD_PARALLEL_LEVEL} ${xios_build_args}
86 ExternalProject_Get_Property(xios BINARY_DIR)
87 set(XIOS_DIR ${BINARY_DIR})
88 message(STATUS "XIOS_DIR: ${XIOS_DIR}")
89 set_if_not_present(ENV{CPATH} "$ENV{CPATH}" "${XIOS_DIR}/include")
90 set_if_not_present(ENV{LIBRARY_PATH} "$ENV{LIBRARY_PATH}" "${XIOS_DIR}/lib")
91 set_if_not_present(ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}"
93 set_if_not_present(ENV{PATH} "$ENV{PATH}" "${XIOS_DIR}/bin")
95 add_library(XIOS::Fortran INTERFACE IMPORTED)
96 set_property(TARGET XIOS::Fortran PROPERTY INTERFACE_LINK_LIBRARIES
97 ${XIOS_DIR}/lib/libxios.a)
98 set_property(TARGET XIOS::Fortran PROPERTY INTERFACE_INCLUDE_DIRECTORIES
100 add_dependencies(XIOS::Fortran xios)