diff --git a/sorc/build_all.sh b/sorc/build_all.sh index 261c245142..3de13b7b60 100755 --- a/sorc/build_all.sh +++ b/sorc/build_all.sh @@ -16,9 +16,11 @@ function _usage() { Builds all of the global-workflow components by calling the individual build scripts in sequence. -Usage: ${BASH_SOURCE[0]} [-a UFS_app][-c build_config][-h][-j n][-v][-w] +Usage: ${BASH_SOURCE[0]} [-a UFS_app][-c build_config][-d][-h][-j n][-v][-w] -a UFS_app: Build a specific UFS app instead of the default + -d: + Build in debug mode -g: Build GSI -h: @@ -29,26 +31,29 @@ Usage: ${BASH_SOURCE[0]} [-a UFS_app][-c build_config][-h][-j n][-v][-w] Build UFS-DA -v: Execute all build scripts with -v option to turn on verbose where supported - -w: - Use unstructured wave grid + -w: + Use unstructured wave grid EOF exit 1 } -script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) -cd "${script_dir}" || exit 1 +# shellcheck disable=SC2155 +readonly HOMEgfs=$(cd "$(dirname "$(readlink -f -n "${BASH_SOURCE[0]}" )" )/.." && pwd -P) +cd "${HOMEgfs}/sorc" || exit 1 _build_ufs_opt="" _build_ufsda="NO" _build_gsi="NO" +_build_debug="" _verbose_opt="" _wave_unst="" _build_job_max=20 # Reset option counter in case this script is sourced OPTIND=1 -while getopts ":a:ghj:uvw" option; do +while getopts ":a:dghj:uvw" option; do case "${option}" in a) _build_ufs_opt+="-a ${OPTARG} ";; + d) _build_debug="-d" ;; g) _build_gsi="YES" ;; h) _usage;; j) _build_job_max="${OPTARG} ";; @@ -68,24 +73,24 @@ done shift $((OPTIND-1)) -logs_dir="${script_dir}/logs" +logs_dir="${HOMEgfs}/sorc/logs" if [[ ! -d "${logs_dir}" ]]; then echo "Creating logs folder" - mkdir "${logs_dir}" || exit 1 + mkdir -p "${logs_dir}" || exit 1 fi # Check final exec folder exists -if [[ ! -d "../exec" ]]; then - echo "Creating ../exec folder" - mkdir ../exec +if [[ ! -d "${HOMEgfs}/exec" ]]; then + echo "Creating ${HOMEgfs}/exec folder" + mkdir -p "${HOMEgfs}/exec" fi #------------------------------------ # GET MACHINE #------------------------------------ export COMPILER="intel" -source gfs_utils.fd/ush/detect_machine.sh -source gfs_utils.fd/ush/module-setup.sh +source "${HOMEgfs}/ush/detect_machine.sh" +source "${HOMEgfs}/ush/module-setup.sh" if [[ -z "${MACHINE_ID}" ]]; then echo "FATAL: Unable to determine target machine" exit 1 @@ -117,19 +122,19 @@ declare -A build_opts big_jobs=0 build_jobs["ufs"]=8 big_jobs=$((big_jobs+1)) -build_opts["ufs"]="${_wave_unst} ${_verbose_opt} ${_build_ufs_opt}" +build_opts["ufs"]="${_wave_unst} ${_verbose_opt} ${_build_ufs_opt} ${_build_debug}" build_jobs["upp"]=2 -build_opts["upp"]="" +build_opts["upp"]="${_build_debug}" build_jobs["ufs_utils"]=2 -build_opts["ufs_utils"]="${_verbose_opt}" +build_opts["ufs_utils"]="${_verbose_opt} ${_build_debug}" build_jobs["gfs_utils"]=1 -build_opts["gfs_utils"]="${_verbose_opt}" +build_opts["gfs_utils"]="${_verbose_opt} ${_build_debug}" build_jobs["ww3prepost"]=2 -build_opts["ww3prepost"]="${_wave_unst} ${_verbose_opt} ${_build_ufs_opt}" +build_opts["ww3prepost"]="${_wave_unst} ${_verbose_opt} ${_build_ufs_opt} ${_build_debug}" # Optional DA builds if [[ "${_build_ufsda}" == "YES" ]]; then @@ -138,21 +143,21 @@ if [[ "${_build_ufsda}" == "YES" ]]; then else build_jobs["gdas"]=8 big_jobs=$((big_jobs+1)) - build_opts["gdas"]="${_verbose_opt}" + build_opts["gdas"]="${_verbose_opt} ${_build_debug}" fi fi if [[ "${_build_gsi}" == "YES" ]]; then build_jobs["gsi_enkf"]=8 - build_opts["gsi_enkf"]="${_verbose_opt}" + build_opts["gsi_enkf"]="${_verbose_opt} ${_build_debug}" fi if [[ "${_build_gsi}" == "YES" || "${_build_ufsda}" == "YES" ]] ; then build_jobs["gsi_utils"]=1 - build_opts["gsi_utils"]="${_verbose_opt}" + build_opts["gsi_utils"]="${_verbose_opt} ${_build_debug}" if [[ "${MACHINE_ID}" == "hercules" ]]; then echo "NOTE: The GSI Monitor is not supported on Hercules. Disabling build." else build_jobs["gsi_monitor"]=1 - build_opts["gsi_monitor"]="${_verbose_opt}" + build_opts["gsi_monitor"]="${_verbose_opt} ${_build_debug}" fi fi @@ -196,13 +201,10 @@ while [[ ${builds_started} -lt ${#build_jobs[@]} ]]; do if [[ -n "${build_jobs[${build}]+0}" && -z "${build_ids[${build}]+0}" ]]; then # Do we have enough processors to run it? if [[ ${_build_job_max} -ge $(( build_jobs[build] + procs_in_use )) ]]; then - if [[ "${build}" != "upp" ]]; then - "./build_${build}.sh" -j "${build_jobs[${build}]}" "${build_opts[${build}]:-}" > \ - "${logs_dir}/build_${build}.log" 2>&1 & - else - "./build_${build}.sh" "${build_opts[${build}]}" > \ - "${logs_dir}/build_${build}.log" 2>&1 & - fi + # double-quoting build_opts here will not work since it is a string of options + #shellcheck disable=SC2086 + "./build_${build}.sh" ${build_opts[${build}]:-} -j "${build_jobs[${build}]}" > \ + "${logs_dir}/build_${build}.log" 2>&1 & build_ids["${build}"]=$! echo "Starting build_${build}.sh" procs_in_use=$(( procs_in_use + build_jobs[${build}] )) diff --git a/sorc/build_gdas.sh b/sorc/build_gdas.sh index b1a17c33dd..43c503ab4d 100755 --- a/sorc/build_gdas.sh +++ b/sorc/build_gdas.sh @@ -2,11 +2,12 @@ set -eux OPTIND=1 +_opts="-f " # forces a clean build while getopts ":j:dv" option; do case "${option}" in - d) export BUILD_TYPE="DEBUG";; - j) export BUILD_JOBS=${OPTARG};; - v) export BUILD_VERBOSE="YES";; + d) _opts+="-c -DCMAKE_BUILD_TYPE=Debug " ;; + j) BUILD_JOBS=${OPTARG};; + v) _opts+="-v ";; :) echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" usage @@ -19,12 +20,10 @@ while getopts ":j:dv" option; do done shift $((OPTIND-1)) -# TODO: GDASApp does not presently handle BUILD_TYPE - -BUILD_TYPE=${BUILD_TYPE:-"Release"} \ -BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ +# double quoting opts will not work since it is a string of options +# shellcheck disable=SC2086 BUILD_JOBS="${BUILD_JOBS:-8}" \ WORKFLOW_BUILD="ON" \ -./gdas.cd/build.sh +./gdas.cd/build.sh ${_opts} -f exit diff --git a/sorc/build_gfs_utils.sh b/sorc/build_gfs_utils.sh index 09bd4a9656..e53f71ddcd 100755 --- a/sorc/build_gfs_utils.sh +++ b/sorc/build_gfs_utils.sh @@ -18,14 +18,12 @@ EOF exit 1 } -cwd=$(pwd) - OPTIND=1 while getopts ":j:dvh" option; do case "${option}" in - d) export BUILD_TYPE="DEBUG";; - v) export BUILD_VERBOSE="YES";; - j) export BUILD_JOBS="${OPTARG}";; + d) BUILD_TYPE="Debug";; + v) BUILD_VERBOSE="YES";; + j) BUILD_JOBS="${OPTARG}";; h) usage ;; @@ -44,6 +42,6 @@ shift $((OPTIND-1)) BUILD_TYPE=${BUILD_TYPE:-"Release"} \ BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ BUILD_JOBS=${BUILD_JOBS:-8} \ -"${cwd}/gfs_utils.fd/ush/build.sh" +"./gfs_utils.fd/ush/build.sh" exit diff --git a/sorc/build_gsi_enkf.sh b/sorc/build_gsi_enkf.sh index 9ba278e3ec..ba24cefa81 100755 --- a/sorc/build_gsi_enkf.sh +++ b/sorc/build_gsi_enkf.sh @@ -4,9 +4,9 @@ set -eux OPTIND=1 while getopts ":j:dv" option; do case "${option}" in - d) export BUILD_TYPE="DEBUG";; - j) export BUILD_JOBS="${OPTARG}";; - v) export BUILD_VERBOSE="YES";; + d) BUILD_TYPE="Debug";; + j) BUILD_JOBS="${OPTARG}";; + v) BUILD_VERBOSE="YES";; :) echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" usage diff --git a/sorc/build_gsi_monitor.sh b/sorc/build_gsi_monitor.sh index 3de1262aac..31add1882a 100755 --- a/sorc/build_gsi_monitor.sh +++ b/sorc/build_gsi_monitor.sh @@ -1,14 +1,12 @@ #! /usr/bin/env bash set -eux -cwd=$(pwd) - OPTIND=1 while getopts ":j:dv" option; do case "${option}" in - d) export BUILD_TYPE="DEBUG";; - j) export BUILD_JOBS="${OPTARG}";; - v) export BUILD_VERBOSE="YES";; + d) BUILD_TYPE="Debug";; + j) BUILD_JOBS="${OPTARG}";; + v) BUILD_VERBOSE="YES";; :) echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" usage @@ -24,6 +22,6 @@ shift $((OPTIND-1)) BUILD_TYPE=${BUILD_TYPE:-"Release"} \ BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ BUILD_JOBS=${BUILD_JOBS:-8} \ -"${cwd}/gsi_monitor.fd/ush/build.sh" +"./gsi_monitor.fd/ush/build.sh" exit diff --git a/sorc/build_gsi_utils.sh b/sorc/build_gsi_utils.sh index 81eab0f628..58c64e6e4a 100755 --- a/sorc/build_gsi_utils.sh +++ b/sorc/build_gsi_utils.sh @@ -1,14 +1,12 @@ #! /usr/bin/env bash set -eux -cwd=$(pwd) - OPTIND=1 while getopts ":j:dv" option; do case "${option}" in - d) export BUILD_TYPE="DEBUG";; - j) export BUILD_JOBS="${OPTARG}";; - v) export BUILD_VERBOSE="YES";; + d) BUILD_TYPE="Debug";; + j) BUILD_JOBS="${OPTARG}";; + v) BUILD_VERBOSE="YES";; :) echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" usage @@ -25,6 +23,6 @@ BUILD_TYPE=${BUILD_TYPE:-"Release"} \ BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ BUILD_JOBS=${BUILD_JOBS:-8} \ UTIL_OPTS="-DBUILD_UTIL_ENKF_GFS=ON -DBUILD_UTIL_NCIO=ON" \ -"${cwd}/gsi_utils.fd/ush/build.sh" +"./gsi_utils.fd/ush/build.sh" exit diff --git a/sorc/build_ufs.sh b/sorc/build_ufs.sh index 24ee8c5f13..d18dbef9fa 100755 --- a/sorc/build_ufs.sh +++ b/sorc/build_ufs.sh @@ -9,7 +9,7 @@ CCPP_SUITES="FV3_GFS_v17_p8_ugwpv1,FV3_GFS_v17_coupled_p8_ugwpv1" # TODO: does while getopts ":da:j:vw" option; do case "${option}" in - d) BUILD_TYPE="DEBUG";; + d) BUILD_TYPE="Debug";; a) APP="${OPTARG}";; j) BUILD_JOBS="${OPTARG}";; v) export BUILD_VERBOSE="YES";; @@ -30,7 +30,7 @@ source "./tests/module-setup.sh" MAKE_OPT="-DAPP=${APP} -D32BIT=ON -DCCPP_SUITES=${CCPP_SUITES}" [[ ${PDLIB:-"OFF"} = "ON" ]] && MAKE_OPT+=" -DPDLIB=ON" -[[ ${BUILD_TYPE:-"Release"} = "DEBUG" ]] && MAKE_OPT+=" -DDEBUG=ON" +[[ ${BUILD_TYPE:-"Release"} = "Debug" ]] && MAKE_OPT+=" -DDEBUG=ON" COMPILE_NR=0 CLEAN_BEFORE=YES CLEAN_AFTER=NO diff --git a/sorc/build_ufs_utils.sh b/sorc/build_ufs_utils.sh index e78ca3c180..63ec56cb41 100755 --- a/sorc/build_ufs_utils.sh +++ b/sorc/build_ufs_utils.sh @@ -4,8 +4,9 @@ set -eux OPTIND=1 while getopts ":j:dv" option; do case "${option}" in - j) export BUILD_JOBS="${OPTARG}";; - v) export BUILD_VERBOSE="YES";; + d) BUILD_TYPE="Debug" ;; + j) BUILD_JOBS="${OPTARG}";; + v) BUILD_VERBOSE="YES";; :) echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" usage @@ -18,13 +19,11 @@ while getopts ":j:dv" option; do done shift $((OPTIND-1)) -script_dir=$(dirname "${BASH_SOURCE[0]}") -cd "${script_dir}/ufs_utils.fd" || exit 1 - CMAKE_OPTS="-DGFS=ON" \ +BUILD_TYPE=${BUILD_TYPE:-"Release"} \ BUILD_JOBS=${BUILD_JOBS:-8} \ BUILD_VERBOSE=${BUILD_VERBOSE:-} \ -./build_all.sh +./ufs_utils.fd/build_all.sh exit diff --git a/sorc/build_upp.sh b/sorc/build_upp.sh index 8a2e1f6fcd..e217e171db 100755 --- a/sorc/build_upp.sh +++ b/sorc/build_upp.sh @@ -7,23 +7,23 @@ cd "${script_dir}" || exit 1 OPTIND=1 _opts="" while getopts ":dj:v" option; do - case "${option}" in - d) _opts+="-d ";; - j) export BUILD_JOBS="${OPTARG}" ;; - v) _opts+="-v ";; - :) - echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" - ;; - *) - echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" - ;; - esac + case "${option}" in + d) _opts+="-d " ;; + j) BUILD_JOBS="${OPTARG}" ;; + v) _opts+="-v ";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + ;; + esac done shift $((OPTIND-1)) # Check final exec folder exists if [[ ! -d "../exec" ]]; then - mkdir ../exec + mkdir -p ../exec fi cd ufs_model.fd/FV3/upp/tests diff --git a/sorc/build_ww3prepost.sh b/sorc/build_ww3prepost.sh index 19cdba98da..5b527a1641 100755 --- a/sorc/build_ww3prepost.sh +++ b/sorc/build_ww3prepost.sh @@ -6,12 +6,12 @@ cd "${script_dir}" || exit 1 # Default settings APP="S2SWA" -PDLIB="OFF" +PDLIB="OFF" while getopts ":j:a:dvw" option; do case "${option}" in a) APP="${OPTARG}";; - d) BUILD_TYPE="DEBUG";; + d) BUILD_TYPE="Debug";; j) BUILD_JOBS="${OPTARG}";; v) export BUILD_VERBOSE="YES";; w) PDLIB="ON";; @@ -27,15 +27,15 @@ while getopts ":j:a:dvw" option; do done # Determine which switch to use -if [[ "${APP}" == "ATMW" ]]; then +if [[ "${APP}" == "ATMW" ]]; then ww3switch="model/esmf/switch" -else - if [[ "${PDLIB}" == "ON" ]]; then +else + if [[ "${PDLIB}" == "ON" ]]; then ww3switch="model/bin/switch_meshcap_pdlib" - else + else ww3switch="model/bin/switch_meshcap" - fi -fi + fi +fi # Check final exec folder exists if [[ ! -d "../exec" ]]; then @@ -86,15 +86,16 @@ sed -e "s/DIST/SHRD/g"\ "${path_build}/tempswitch" > "${path_build}/switch" rm "${path_build}/tempswitch" -echo "Switch file is ${buildswitch} with switches:" +echo "Switch file is ${buildswitch} with switches:" cat "${buildswitch}" #define cmake build options MAKE_OPT="-DCMAKE_INSTALL_PREFIX=install" -[[ ${BUILD_TYPE:-"Release"} = "DEBUG" ]] && MAKE_OPT+=" -DDEBUG=ON" +[[ ${BUILD_TYPE:-"Release"} = "Debug" ]] && MAKE_OPT+=" -DCMAKE_BUILD_TYPE=Debug" #Build executables: -cmake "${WW3_DIR}" -DSWITCH="${buildswitch}" "${MAKE_OPT}" +# shellcheck disable=SC2086 +cmake "${WW3_DIR}" -DSWITCH="${buildswitch}" ${MAKE_OPT} rc=$? if (( rc != 0 )); then echo "Fatal error in cmake." diff --git a/sorc/gsi_monitor.fd b/sorc/gsi_monitor.fd index fb39e83880..4e0f72b8f6 160000 --- a/sorc/gsi_monitor.fd +++ b/sorc/gsi_monitor.fd @@ -1 +1 @@ -Subproject commit fb39e83880d44d433bed9af856bc5178bf63d64c +Subproject commit 4e0f72b8f6117d278c1414de8cb265cb2f41145d diff --git a/ush/module-setup.sh b/ush/module-setup.sh index e204bae8a2..008ef7ee97 100755 --- a/ush/module-setup.sh +++ b/ush/module-setup.sh @@ -1,7 +1,7 @@ #!/bin/bash set -u -source "${HOMEgfs}/ush/detect_machine.sh" +source "${HOMEgfs}/ush/detect_machine.sh" if [[ ${MACHINE_ID} = jet* ]] ; then # We are on NOAA Jet @@ -125,7 +125,7 @@ elif [[ ${MACHINE_ID} = "noaacloud" ]]; then export SPACK_ROOT=/contrib/global-workflow/spack-stack/spack export PATH=${PATH}:${SPACK_ROOT}/bin . "${SPACK_ROOT}"/share/spack/setup-env.sh - + else echo WARNING: UNKNOWN PLATFORM 1>&2 fi