|
| 1 | +# `LIBROOT` is defined by CIME under normal circumstances. |
1 | 2 | ifeq ($(strip $(LIBROOT)),)
|
2 | 3 | $(warning `LIBROOT` should not be empty. Defaulting to `..`)
|
3 | 4 |
|
4 |
| - LIBROOT = .. |
| 5 | + LIBROOT := .. |
5 | 6 | endif
|
6 | 7 |
|
| 8 | +# `SRCROOT` is defined by CIME under normal circumstances. |
7 | 9 | ifeq ($(strip $(SRCROOT)),)
|
8 | 10 | $(warning `SRCROOT` should not be empty. Defaulting to `..`)
|
9 | 11 |
|
10 |
| - SRCROOT = .. |
11 |
| - MPAS_SRC_ROOT = $(SRCROOT) |
| 12 | + SRCROOT := .. |
| 13 | + MPAS_SRC_ROOT := $(SRCROOT) |
12 | 14 | else
|
13 |
| - MPAS_SRC_ROOT = $(SRCROOT)/src/dynamics/mpas/dycore |
| 15 | + MPAS_SRC_ROOT := $(SRCROOT)/src/dynamics/mpas/dycore |
| 16 | +endif |
| 17 | + |
| 18 | +# `PIO_VERSION` is defined by CIME under normal circumstances. |
| 19 | +ifeq ($(filter 1 2,$(PIO_VERSION)),) |
| 20 | + $(warning `PIO_VERSION` should have a value of `1` or `2`. Defaulting to `2`) |
| 21 | + |
| 22 | + PIO_VERSION := 2 |
14 | 23 | endif
|
15 | 24 |
|
16 | 25 | #
|
17 | 26 | # Define and export variables used by MPAS build infrastructure.
|
18 | 27 | #
|
19 | 28 |
|
20 |
| -export CP = cp -afv |
21 |
| -export LN = ln -fsv |
22 |
| -export MKDIR = mkdir -pv |
23 |
| -export RM = rm -frv |
| 29 | +export CP := cp -afv |
| 30 | +export LN := ln -fsv |
| 31 | +export MKDIR := mkdir -pv |
| 32 | +export RM := rm -frv |
24 | 33 |
|
25 | 34 | # Constants.
|
26 |
| -export AUTOCLEAN = false |
27 |
| -export BUILD_TARGET = N/A |
28 |
| -export CORE = atmosphere |
29 |
| -export EXE_NAME = atmosphere_model |
30 |
| -export GEN_F90 = false |
31 |
| -export GIT_VERSION = $(shell git -C "$(MPAS_SRC_ROOT)" describe --always --dirty --tags || echo "N/A") |
32 |
| -export NAMELIST_SUFFIX = atmosphere |
| 35 | +export AUTOCLEAN := false |
| 36 | +export BUILD_TARGET := N/A |
| 37 | +export CORE := atmosphere |
| 38 | +export EXE_NAME := atmosphere_model |
| 39 | +export GEN_F90 := false |
| 40 | +export GIT_VERSION := $(shell git -C "$(MPAS_SRC_ROOT)" describe --always --dirty --tags || echo "N/A") |
| 41 | +export NAMELIST_SUFFIX := atmosphere |
33 | 42 |
|
34 | 43 | # Customize variables (e.g., build options) for use with CESM.
|
35 |
| -export AR := ar |
36 |
| -export ARFLAGS := -M |
37 |
| -export CPP := cpp -P -traditional |
38 |
| -export CPPFLAGS := -D_MPI \ |
39 |
| - -DMPAS_BUILD_TARGET="$(BUILD_TARGET)" \ |
40 |
| - -DMPAS_CAM_DYCORE \ |
41 |
| - -DMPAS_EXE_NAME="$(EXE_NAME)" \ |
42 |
| - -DMPAS_EXTERNAL_ESMF_LIB \ |
43 |
| - -DMPAS_GIT_VERSION="$(GIT_VERSION)" \ |
44 |
| - -DMPAS_NAMELIST_SUFFIX="$(NAMELIST_SUFFIX)" \ |
45 |
| - -DMPAS_NATIVE_TIMERS \ |
46 |
| - -DMPAS_NO_ESMF_INIT \ |
47 |
| - -DMPAS_PIO_SUPPORT |
48 |
| -# `PIODEF` is defined by CIME Makefile (i.e., `cime/CIME/Tools/Makefile`). Its value can be empty or `-DUSE_PIO2`. |
49 |
| -ifneq ($(strip $(PIODEF)),) |
50 |
| - export CPPFLAGS += $(strip $(PIODEF)) |
| 44 | +export AR := ar |
| 45 | +export ARFLAGS := -M |
| 46 | +export CPP := cpp -P -traditional |
| 47 | +export CPPFLAGS := -D_MPI \ |
| 48 | + -DMPAS_BUILD_TARGET="$(BUILD_TARGET)" \ |
| 49 | + -DMPAS_CAM_DYCORE \ |
| 50 | + -DMPAS_EXE_NAME="$(EXE_NAME)" \ |
| 51 | + -DMPAS_GIT_VERSION="$(GIT_VERSION)" \ |
| 52 | + -DMPAS_NAMELIST_SUFFIX="$(NAMELIST_SUFFIX)" \ |
| 53 | + -DMPAS_PIO_SUPPORT |
| 54 | +ifeq ($(strip $(PIO_VERSION)),2) |
| 55 | + export CPPFLAGS += -DUSE_PIO2 |
| 56 | +endif |
| 57 | +export LINKER := $(strip $(FC)) |
| 58 | +export SCC := $(strip $(CC)) |
| 59 | +export SCXX := $(strip $(CXX)) |
| 60 | +export SFC := $(strip $(FC)) |
| 61 | + |
| 62 | +# Check for optional features. |
| 63 | +is-enabled = $(if $(filter +$(1),$(sort $(strip $(OPTIONAL_MPAS_FEATURES)))),true,false) |
| 64 | + |
| 65 | +ifeq ($(call is-enabled,ESMF_LIBRARY),true) |
| 66 | + export CPPFLAGS += -DMPAS_EXTERNAL_ESMF_LIB \ |
| 67 | + -DMPAS_NO_ESMF_INIT |
| 68 | +endif |
| 69 | +ifeq ($(call is-enabled,MPI_F08_INTERFACE),true) |
| 70 | + export CPPFLAGS += -DMPAS_USE_MPI_F08 |
| 71 | +endif |
| 72 | +ifeq ($(call is-enabled,PERF_MOD_LIBRARY),true) |
| 73 | + export CPPFLAGS += -DMPAS_PERF_MOD_TIMERS |
| 74 | +else |
| 75 | + export CPPFLAGS += -DMPAS_NATIVE_TIMERS |
| 76 | +endif |
| 77 | +ifeq ($(call is-enabled,SINGLE_PRECISION),true) |
| 78 | + export CPPFLAGS += -DSINGLE_PRECISION |
51 | 79 | endif
|
52 |
| -# Uncomment below for MPI Fortran 2008 interface support. There is currently no corresponding option in CIME to enable this. |
53 |
| -# export CPPFLAGS += -DMPAS_USE_MPI_F08 |
54 |
| -# Uncomment below for single precision mode support. There is currently no corresponding option in CIME to enable this. |
55 |
| -# export CPPFLAGS += -DSINGLE_PRECISION |
56 |
| -export LINKER := $(strip $(FC)) |
57 |
| -export SCC := $(strip $(CC)) |
58 |
| -export SCXX := $(strip $(CXX)) |
59 |
| -export SFC := $(strip $(FC)) |
60 | 80 |
|
61 | 81 | #
|
62 | 82 | # Targets.
|
|
67 | 87 | @echo 'Supplemental Makefile for MPAS Dynamical Core in CESM'
|
68 | 88 | @echo ''
|
69 | 89 | @echo 'MPAS will be built as a static library located at `$${LIBROOT}/libmpas.a`.'
|
70 |
| - @echo 'Users are responsible to provide all necessary build options via environment variables or command line arguments.' |
| 90 | + @echo 'Users are responsible for providing all necessary build options via environment variables or command line arguments.' |
71 | 91 | @echo ''
|
72 | 92 | @echo 'Usage hints:'
|
73 |
| - @echo ' `make libmpas-prepare ESM="CESM" LIBROOT="..." SRCROOT="..."`' |
74 |
| - @echo ' `make libmpas-build ESM="CESM" LIBROOT="..." SRCROOT="..."`' |
75 |
| - @echo ' `make libmpas-clean ESM="CESM" LIBROOT="..." SRCROOT="..."`' |
| 93 | + @echo ' `make libmpas-prepare ESM="CESM" LIBROOT="..." SRCROOT="..." PIO_VERSION="1|2"`' |
| 94 | + @echo ' `make libmpas-build ESM="CESM" LIBROOT="..." SRCROOT="..." PIO_VERSION="1|2"`' |
| 95 | + @echo ' `make libmpas-clean ESM="CESM" LIBROOT="..." SRCROOT="..." PIO_VERSION="1|2"`' |
76 | 96 |
|
77 | 97 | .PHONY: libmpas-prepare
|
78 | 98 | libmpas-prepare: libmpas-apply-patch libmpas-archiver-script.txt libmpas-preview
|
@@ -135,6 +155,9 @@ libmpas-clean: clean
|
135 | 155 |
|
136 | 156 | .PHONY: externals
|
137 | 157 | externals: $(AUTOCLEAN_DEPS)
|
| 158 | +ifeq ($(call is-enabled,ESMF_LIBRARY),false) |
| 159 | + ( cd external; $(MAKE) FC="$(FC)" SFC="$(SFC)" CC="$(CC)" SCC="$(SCC)" FFLAGS="$(FFLAGS)" CFLAGS="$(CFLAGS)" CPP="$(CPP)" NETCDF="$(NETCDF)" CORE="$(CORE)" esmf_time ) |
| 160 | +endif |
138 | 161 | ( cd external; $(MAKE) FC="$(FC)" SFC="$(SFC)" CC="$(CC)" SCC="$(SCC)" FFLAGS="$(FFLAGS)" CFLAGS="$(CFLAGS)" CPP="$(CPP)" NETCDF="$(NETCDF)" CORE="$(CORE)" ezxml-lib )
|
139 | 162 |
|
140 | 163 | .PHONY: subdrv
|
|
0 commit comments