HPCW 3.0
Loading...
Searching...
No Matches
xios.cmake
Go to the documentation of this file.
1# Copyright (c) 2019 - 2024 David Guibert
2# Copyright (c) 2024 Antoine Morvan
3# All rights reserved.
4#
5# SPDX-License-Identifier: Apache-2.0
6
7set_property(GLOBAL PROPERTY xios_can_use_system FALSE)
8set_property(GLOBAL PROPERTY xios_depends mpi netcdf libxml2)
9
10set(xios_cmake_args "" CACHE STRING "Custom CMake arguments for xios")
11set(xios_build_args "" CACHE STRING "Custom make_xios arguments for xios")
12
13if(xios_enabled)
14 include(macros)
15 add_library(xios_deps INTERFACE)
16 target_link_libraries(xios_deps INTERFACE MPI::MPI_Fortran netcdf::Fortran
17 LibXml2::LibXml2)
18
19 add_library(xios_options INTERFACE)
20 target_compile_options(
21 xios_options
22 INTERFACE $<$<STREQUAL:"${CMAKE_Fortran_COMPILER_ID}","GNU">:-g
23 -fdefault-real-8
24 -O3
25 -funroll-all-loops
26 -fcray-pointer
27 -ffree-line-length-none>
28 $<$<STREQUAL:"${CMAKE_Fortran_COMPILER_ID}","Intel">:-g
29 -xHost
30 -align
31 array64byte
32 -traceback
33 -i4
34 -r8
35 -O3
36 -fp-model
37 precise
38 -fno-alias
39 -diag-disable
40 1125
41 -diag-disable
42 279
43 -DBOOST_NO_CXX11_DEFAULTED_FUNCTIONS
44 -D
45 BOOST_NO_CXX11_DELETED_FUNCTIONS>)
46
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}")
51
52 set(xios_ep)
53 if(NOT USE_SYSTEM_libxml2)
54 list(APPEND xios_ep libxml2)
55 endif()
56
57 ExternalProject_Data_Add(
58 xios
59 ${xios_revision}
60 DEPENDS xios_options xios_deps ${xios_ep}
61 CONFIGURE_COMMAND
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
69 ${default_cmake_args}
70 ${xios_cmake_args}
71 COMMAND ${CMAKE_COMMAND} -E copy_directory <SOURCE_DIR>/ <BINARY_DIR>/
72 COMMAND
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
76 COMMAND
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}
84 INSTALL_COMMAND "")
85
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}"
92 "${XIOS_DIR}/lib")
93 set_if_not_present(ENV{PATH} "$ENV{PATH}" "${XIOS_DIR}/bin")
94
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
99 "${XIOS_DIR}/inc")
100 add_dependencies(XIOS::Fortran xios)
101
102endif()