Skip to content

Commit be7471f

Browse files
harshuladougiesquire
authored andcommitted
CMakeLists.txt: add initial build system
* Generate a pkgconf pc file
1 parent 1823f75 commit be7471f

File tree

2 files changed

+143
-0
lines changed

2 files changed

+143
-0
lines changed

CMakeLists.txt

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# https://cmake.org/cmake/help/v3.6/module/FindPkgConfig.html
2+
# 3.11: add_library() doesn't require dummy source
3+
# 3.12: target_link_libraries() supports OBJECT targets
4+
# 3.20: cmake_path()
5+
cmake_minimum_required(VERSION 3.20)
6+
project(GFDLGTracers
7+
VERSION 2024.08.1
8+
DESCRIPTION "GFDLGTracers contains a collection of tracers and associated code for use with the MOM and GOLD ocean models."
9+
LANGUAGES Fortran
10+
)
11+
12+
include(GNUInstallDirs)
13+
14+
if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release|RelWithDebInfo|MinSizeRel)$")
15+
message(STATUS "Setting build type to 'Relwithdebinfo' as none was specified.")
16+
set(CMAKE_BUILD_TYPE
17+
"Relwithdebinfo"
18+
CACHE STRING "Choose the type of build." FORCE)
19+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
20+
endif()
21+
22+
if(NOT CMAKE_Fortran_COMPILER_ID MATCHES "^(Intel|GNU)$")
23+
message(
24+
WARNING "Compiler not officially supported: ${CMAKE_Fortran_COMPILER_ID}")
25+
endif()
26+
27+
cmake_path(APPEND CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR} "include")
28+
29+
################################################################################
30+
# Fortran
31+
################################################################################
32+
33+
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
34+
35+
# Copied from MOM5/bin/mkmf.template.nci.gfortran
36+
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fcray-pointer -fdefault-real-8 -ffree-line-length-none -fno-range-check -Waliasing -Wampersand -Warray-bounds -Wcharacter-truncation -Wconversion -Wline-truncation -Wintrinsics-std -Wsurprising -Wno-tabs -Wunderflow -Wunused-parameter -Wintrinsic-shadow -Wno-align-commons")
37+
set(CMAKE_Fortran_FLAGS_RELEASE "-O2")
38+
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-g")
39+
set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -W -fbounds-check")
40+
41+
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
42+
43+
# Copied from MOM5/bin/mkmf.template.nci
44+
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fno-alias -safe-cray-ptr -fpe0 -ftz -assume byterecl -i4 -r8 -traceback -nowarn -check noarg_temp_created -assume nobuffered_io -convert big_endian -grecord-gcc-switches -align all")
45+
set(CMAKE_Fortran_FLAGS_RELEASE "-g3 -O2 -xCORE-AVX2 -debug all -check none")
46+
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-g3 -O2 -xCORE-AVX2 -debug all -check none")
47+
set(CMAKE_Fortran_FLAGS_DEBUG "-g3 -O0 -debug all -check -check noarg_temp_created -check nopointer -warn -warn noerrors -ftrapuv")
48+
49+
elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
50+
51+
# Copied from MOM5/bin/mkmf.template.nci
52+
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fno-alias -safe-cray-ptr -fpe0 -ftz -assume byterecl -i4 -r8 -traceback -nowarn -check noarg_temp_created -assume nobuffered_io -convert big_endian -grecord-gcc-switches -align all")
53+
set(CMAKE_Fortran_FLAGS_RELEASE "-g3 -O2 -xCORE-AVX2 -debug all -check none")
54+
set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-g3 -O2 -xCORE-AVX2 -debug all -check none")
55+
set(CMAKE_Fortran_FLAGS_DEBUG "-g3 -O0 -debug all -check -check noarg_temp_created -check nopointer -warn -warn noerrors -ftrapuv")
56+
57+
else()
58+
message(WARNING "Fortran compiler with ID ${CMAKE_Fortran_COMPILER_ID} will be used with CMake default options")
59+
endif()
60+
61+
################################################################################
62+
63+
find_package(MPI REQUIRED COMPONENTS Fortran)
64+
find_package(PkgConfig REQUIRED)
65+
pkg_check_modules(FMS REQUIRED IMPORTED_TARGET "FMS")
66+
67+
add_library(gtracers STATIC)
68+
69+
target_sources(gtracers PRIVATE
70+
generic_tracers/FMS_coupler_util.F90
71+
generic_tracers/FMS_ocmip2_co2calc.F90
72+
generic_tracers/generic_abiotic.F90
73+
generic_tracers/generic_age.F90
74+
generic_tracers/generic_argon.F90
75+
generic_tracers/generic_BLING.F90
76+
generic_tracers/generic_blres.F90
77+
generic_tracers/generic_CFC.F90
78+
generic_tracers/generic_COBALT.F90
79+
generic_tracers/generic_ERGOM.F90
80+
generic_tracers/generic_miniBLING.F90
81+
generic_tracers/generic_SF6.F90
82+
generic_tracers/generic_TOPAZ.F90
83+
generic_tracers/generic_tracer.F90
84+
generic_tracers/generic_tracer_utils.F90
85+
generic_tracers/generic_WOMBATlite.F90
86+
generic_tracers/generic_WOMBATmid.F90
87+
mocsy/src/mocsy_buffesm.F90
88+
mocsy/src/mocsy_constants.F90
89+
mocsy/src/mocsy_depth2press.F90
90+
mocsy/src/mocsy_derivauto.F90
91+
mocsy/src/mocsy_derivnum.F90
92+
mocsy/src/mocsy_DNAD.F90
93+
mocsy/src/mocsy_errors.F90
94+
mocsy/src/mocsy_f2pCO2.F90
95+
mocsy/src/mocsy_gasx.F90
96+
mocsy/src/mocsy_p2fCO2.F90
97+
mocsy/src/mocsy_p80.F90
98+
mocsy/src/mocsy_phsolvers.F90
99+
mocsy/src/mocsy_rho.F90
100+
mocsy/src/mocsy_rhoinsitu.F90
101+
mocsy/src/mocsy_singledouble.F90
102+
mocsy/src/mocsy_sw_adtg.F90
103+
mocsy/src/mocsy_sw_ptmp.F90
104+
mocsy/src/mocsy_sw_temp.F90
105+
mocsy/src/mocsy_tis.F90
106+
mocsy/src/mocsy_tpot.F90
107+
mocsy/src/mocsy_vars.F90
108+
mocsy/src/mocsy_varsolver.F90
109+
)
110+
111+
target_include_directories(gtracers PRIVATE mocsy/src/mocsy_DNADHeaders.h)
112+
113+
target_link_libraries(gtracers PUBLIC
114+
PkgConfig::FMS
115+
PkgConfig::MOCSY)
116+
117+
install(TARGETS gtracers
118+
EXPORT GFDLGTracersTargets)
119+
120+
install(DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY}/ TYPE INCLUDE)
121+
122+
install(EXPORT GFDLGTracersTargets
123+
FILE GFDLGTracersTargets.cmake
124+
NAMESPACE GFDLGTracers::
125+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GFDLGTracers
126+
)
127+
128+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GFDLGTracers.pc.in
129+
${CMAKE_CURRENT_BINARY_DIR}/GFDLGTracers.pc @ONLY)
130+
131+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/GFDLGTracers.pc
132+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
133+
COMPONENT utilities)

GFDLGTracers.pc.in

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
prefix="@CMAKE_INSTALL_PREFIX@"
2+
exec_prefix="${prefix}"
3+
libdir="${prefix}/@CMAKE_INSTALL_LIBDIR@"
4+
includedir="${prefix}/include"
5+
6+
Name: GFDLGTracers
7+
Description: @CMAKE_PROJECT_DESCRIPTION@
8+
Version: @PROJECT_VERSION@
9+
Fflags: -I"${includedir}"
10+
Libs: -L"${libdir}" -lgtracers

0 commit comments

Comments
 (0)