@@ -16,9 +16,11 @@ function _usage() {
16
16
Builds all of the global-workflow components by calling the individual build
17
17
scripts in sequence.
18
18
19
- Usage: ${BASH_SOURCE[0]} [-a UFS_app][-c build_config][-h][-j n][-v][-w]
19
+ Usage: ${BASH_SOURCE[0]} [-a UFS_app][-c build_config][-d][- h][-j n][-v][-w]
20
20
-a UFS_app:
21
21
Build a specific UFS app instead of the default
22
+ -d:
23
+ Build in debug mode
22
24
-g:
23
25
Build GSI
24
26
-h:
@@ -29,26 +31,29 @@ Usage: ${BASH_SOURCE[0]} [-a UFS_app][-c build_config][-h][-j n][-v][-w]
29
31
Build UFS-DA
30
32
-v:
31
33
Execute all build scripts with -v option to turn on verbose where supported
32
- -w:
33
- Use unstructured wave grid
34
+ -w:
35
+ Use unstructured wave grid
34
36
EOF
35
37
exit 1
36
38
}
37
39
38
- script_dir=$( cd " $( dirname " ${BASH_SOURCE[0]} " ) " & > /dev/null && pwd)
39
- cd " ${script_dir} " || exit 1
40
+ # shellcheck disable=SC2155
41
+ readonly HOMEgfs=$( cd " $( dirname " $( readlink -f -n " ${BASH_SOURCE[0]} " ) " ) /.." && pwd -P)
42
+ cd " ${HOMEgfs} /sorc" || exit 1
40
43
41
44
_build_ufs_opt=" "
42
45
_build_ufsda=" NO"
43
46
_build_gsi=" NO"
47
+ _build_debug=" "
44
48
_verbose_opt=" "
45
49
_wave_unst=" "
46
50
_build_job_max=20
47
51
# Reset option counter in case this script is sourced
48
52
OPTIND=1
49
- while getopts " :a:ghj :uvw" option; do
53
+ while getopts " :a:dghj :uvw" option; do
50
54
case " ${option} " in
51
55
a) _build_ufs_opt+=" -a ${OPTARG} " ;;
56
+ d) _build_debug=" -d" ;;
52
57
g) _build_gsi=" YES" ;;
53
58
h) _usage;;
54
59
j) _build_job_max=" ${OPTARG} " ;;
68
73
69
74
shift $(( OPTIND- 1 ))
70
75
71
- logs_dir=" ${script_dir} /logs"
76
+ logs_dir=" ${HOMEgfs} /sorc /logs"
72
77
if [[ ! -d " ${logs_dir} " ]]; then
73
78
echo " Creating logs folder"
74
- mkdir " ${logs_dir} " || exit 1
79
+ mkdir -p " ${logs_dir} " || exit 1
75
80
fi
76
81
77
82
# Check final exec folder exists
78
- if [[ ! -d " .. /exec" ]]; then
79
- echo " Creating .. /exec folder"
80
- mkdir .. /exec
83
+ if [[ ! -d " ${HOMEgfs} /exec" ]]; then
84
+ echo " Creating ${HOMEgfs} /exec folder"
85
+ mkdir -p " ${HOMEgfs} /exec"
81
86
fi
82
87
83
88
# ------------------------------------
84
89
# GET MACHINE
85
90
# ------------------------------------
86
91
export COMPILER=" intel"
87
- source gfs_utils.fd /ush/detect_machine.sh
88
- source gfs_utils.fd /ush/module-setup.sh
92
+ source " ${HOMEgfs} /ush/detect_machine.sh"
93
+ source " ${HOMEgfs} /ush/module-setup.sh"
89
94
if [[ -z " ${MACHINE_ID} " ]]; then
90
95
echo " FATAL: Unable to determine target machine"
91
96
exit 1
@@ -117,19 +122,19 @@ declare -A build_opts
117
122
big_jobs=0
118
123
build_jobs[" ufs" ]=8
119
124
big_jobs=$(( big_jobs+ 1 ))
120
- build_opts[" ufs" ]=" ${_wave_unst} ${_verbose_opt} ${_build_ufs_opt} "
125
+ build_opts[" ufs" ]=" ${_wave_unst} ${_verbose_opt} ${_build_ufs_opt} ${_build_debug} "
121
126
122
127
build_jobs[" upp" ]=2
123
- build_opts[" upp" ]=" "
128
+ build_opts[" upp" ]=" ${_build_debug} "
124
129
125
130
build_jobs[" ufs_utils" ]=2
126
- build_opts[" ufs_utils" ]=" ${_verbose_opt} "
131
+ build_opts[" ufs_utils" ]=" ${_verbose_opt} ${_build_debug} "
127
132
128
133
build_jobs[" gfs_utils" ]=1
129
- build_opts[" gfs_utils" ]=" ${_verbose_opt} "
134
+ build_opts[" gfs_utils" ]=" ${_verbose_opt} ${_build_debug} "
130
135
131
136
build_jobs[" ww3prepost" ]=2
132
- build_opts[" ww3prepost" ]=" ${_wave_unst} ${_verbose_opt} ${_build_ufs_opt} "
137
+ build_opts[" ww3prepost" ]=" ${_wave_unst} ${_verbose_opt} ${_build_ufs_opt} ${_build_debug} "
133
138
134
139
# Optional DA builds
135
140
if [[ " ${_build_ufsda} " == " YES" ]]; then
@@ -138,21 +143,21 @@ if [[ "${_build_ufsda}" == "YES" ]]; then
138
143
else
139
144
build_jobs[" gdas" ]=8
140
145
big_jobs=$(( big_jobs+ 1 ))
141
- build_opts[" gdas" ]=" ${_verbose_opt} "
146
+ build_opts[" gdas" ]=" ${_verbose_opt} ${_build_debug} "
142
147
fi
143
148
fi
144
149
if [[ " ${_build_gsi} " == " YES" ]]; then
145
150
build_jobs[" gsi_enkf" ]=8
146
- build_opts[" gsi_enkf" ]=" ${_verbose_opt} "
151
+ build_opts[" gsi_enkf" ]=" ${_verbose_opt} ${_build_debug} "
147
152
fi
148
153
if [[ " ${_build_gsi} " == " YES" || " ${_build_ufsda} " == " YES" ]] ; then
149
154
build_jobs[" gsi_utils" ]=1
150
- build_opts[" gsi_utils" ]=" ${_verbose_opt} "
155
+ build_opts[" gsi_utils" ]=" ${_verbose_opt} ${_build_debug} "
151
156
if [[ " ${MACHINE_ID} " == " hercules" ]]; then
152
157
echo " NOTE: The GSI Monitor is not supported on Hercules. Disabling build."
153
158
else
154
159
build_jobs[" gsi_monitor" ]=1
155
- build_opts[" gsi_monitor" ]=" ${_verbose_opt} "
160
+ build_opts[" gsi_monitor" ]=" ${_verbose_opt} ${_build_debug} "
156
161
fi
157
162
fi
158
163
@@ -196,13 +201,10 @@ while [[ ${builds_started} -lt ${#build_jobs[@]} ]]; do
196
201
if [[ -n " ${build_jobs[${build}]+0} " && -z " ${build_ids[${build}]+0} " ]]; then
197
202
# Do we have enough processors to run it?
198
203
if [[ ${_build_job_max} -ge $(( build_jobs[build] + procs_in_use )) ]]; then
199
- if [[ " ${build} " != " upp" ]]; then
200
- " ./build_${build} .sh" -j " ${build_jobs[${build}]} " " ${build_opts[${build}]:- } " > \
201
- " ${logs_dir} /build_${build} .log" 2>&1 &
202
- else
203
- " ./build_${build} .sh" " ${build_opts[${build}]} " > \
204
- " ${logs_dir} /build_${build} .log" 2>&1 &
205
- fi
204
+ # double-quoting build_opts here will not work since it is a string of options
205
+ # shellcheck disable=SC2086
206
+ " ./build_${build} .sh" ${build_opts[${build}]:- } -j " ${build_jobs[${build}]} " > \
207
+ " ${logs_dir} /build_${build} .log" 2>&1 &
206
208
build_ids[" ${build} " ]=$!
207
209
echo " Starting build_${build} .sh"
208
210
procs_in_use=$(( procs_in_use + build_jobs[${build} ] ))
0 commit comments