#!/bin/bash #set -x set -o posix #set -u #set -e #+ # # =============== # makenemo # =============== # # -------------------------- # Compile NEMO # -------------------------- # # SYNOPSIS # ======== # # :: # # $ makenemo # # # DESCRIPTION # =========== # # # This script aims : # # - to choose MYCONFIG # - to choose compiler options # - to create the CONFIG/MYCONFIG/WORK directory # - to compile this configuration # # Variables used : # # From user input # # - NEW_CONF : configuration to be created # - REF_CONF : reference configuration to build the new one # - CMP_NAM : compiler name # - NBR_PRC : number of processes used to compile # - NEM_SUBDIR : NEMO subdirectory used (specified) # # Locally defined : # # - TAB : NEMO subdirectory used (read) # - MAIN_DIR : self explaining # - CONFIG_DIR : " " " # - MODELES_DIR : " " " # - TOOLS_DIR : " " " # - NEMO_DIR : " " " # # EXAMPLES # ======== # # :: # # $ ./makenemo -m ifort_osx - j3 -n ORCA2_LIM # # # TODO # ==== # # option debug # # # EVOLUTIONS # ========== # # $Id$ # # # # * creation # #- #- Local variables --- b_n=$(basename ${0}) export MAIN_DIR=${PWD%/CONFIG*} export CONFIG_DIR=${MAIN_DIR}/CONFIG export TOOLS_DIR=${MAIN_DIR}/TOOLS export COMPIL_DIR=${MAIN_DIR}/TOOLS/COMPILE export NEMO_DIR=${MAIN_DIR}/NEMO export AGRIFUSE=10 declare -a TAB #- #- FCM and functions location --- export PATH=${MAIN_DIR}/EXTERNAL/fcm/bin:$PATH #- #- Choice of the options --- x_d=""; x_n=""; x_r=""; x_m=""; x_t=""; x_c=""; x_j=1; while getopts :hd:n:r:m:j:t: V do case $V in (h) echo "Usage : "${b_n} \ " [-h] [-n name] [-m arch] [-d "dir1 dir2"] [-r conf] [-j No]"; echo " -h : help"; echo " -n name : config name, [-n help] to list existing configurations"; echo " -m arch : choose compiler, [-m help] to list exiting compilers"; echo " -d dir : choose NEMO sub-directories"; echo " -r conf : choose reference configuration"; echo " -j No : number of processes used to compile (0=nocompilation)"; echo " -t dir : remporary directory for compilation" echo ""; echo "Example to install a new configuration MY_CONFIG"; echo "with OPA_SRC and LIM_SRC_2 "; echo "makenemo -n MY_CONFIG -d \"OPA_SRC LIM_SRC_2\""; echo ""; echo "Available configurations :"; cat ${COMPIL_DIR}/cfg.txt; echo ""; . ${COMPIL_DIR}/Flist_archfile.sh ; echo ""; echo "Default : previous configuration and compiler"; exit 0;; (d) x_d=${OPTARG};; (n) x_n=${OPTARG};; (r) x_r=${OPTARG};; (m) x_m=${OPTARG};; (j) x_j=${OPTARG};; (t) x_t=${OPTARG};; (:) echo ${b_n}" : -"${OPTARG}" option : missing value" 1>&2; exit 2;; (\?) echo ${b_n}" : -"${OPTARG}" option : not supported" 1>&2; exit 2;; esac done shift $(($OPTIND-1)); #- #- Get the clean option [[ "${#@}" -ne 0 && "${@}" != clean ]] && echo "Invalid option "$@" " && exit [ "${#@}" -ne 0 ] && x_c="--$@" #- #- Go to NEMOGCM/config directory --- cd ${CONFIG_DIR} #- #- Initialisation from input --- export NEW_CONF=${x_n} NBR_PRC=${x_j} CMP_NAM=${x_m} NEM_SUBDIR=${x_d} REF_CONF=${x_r} NEMO_TDIR=${x_t:-$NEMO_TDIR} export NEMO_TDIR=${NEMO_TDIR:-$CONFIG_DIR} #- Check if the tool or the compiler exist or list it if [ "${NEW_CONF}" == help ] ; then echo "Available configurations :" cat ${COMPIL_DIR}/cfg.txt exit fi [ "${CMP_NAM}" == help ] && . ${COMPIL_DIR}/Flist_archfile.sh && exit #- When used for the first time, choose a compiler --- . ${COMPIL_DIR}/Fcheck_archfile.sh arch_nemo.fcm ${CMP_NAM} || exit #- #- Choose a default configuration if needed --- #- ORCA2_LIM or last one used --- . ${COMPIL_DIR}/Fcheck_config.sh cfg.txt ${NEW_CONF} || exit if [ ${#NEW_CONF} -eq 0 ] ; then if [ ${#NEM_SUBDIR} -eq 0 -a ${#REF_CONF} -eq 0 ]; then echo "You are installing a new configuration" ind=0 . ${COMPIL_DIR}/Fread_dir.sh OPA_SRC YES . ${COMPIL_DIR}/Fread_dir.sh LIM_SRC_2 YES . ${COMPIL_DIR}/Fread_dir.sh LIM_SRC_3 NO . ${COMPIL_DIR}/Fread_dir.sh TOP_SRC NO . ${COMPIL_DIR}/Fread_dir.sh C1D_SRC YES . ${COMPIL_DIR}/Fread_dir.sh NST_SRC YES . ${COMPIL_DIR}/Fread_dir.sh OFF_SRC NO REF_CONF=ORCA2_LIM elif [ ${#NEM_SUBDIR} -gt 0 ] && [ ${#REF_CONF} -eq 0 ]; then echo "You are installing a new configuration" TAB=( ${NEM_SUBDIR} ) REF_CONF=ORCA2_LIM elif [ ${#NEM_SUBDIR} -eq 0 ] && [ ${#REF_CONF} -gt 0 ]; then echo "You are installing a new configuration based on ${REF_CONF}" . ${COMPIL_DIR}/Fcopy_dir.sh ${REF_CONF} fi NEW_CONF=${x_n} . ${COMPIL_DIR}/Fmake_config.sh ${NEW_CONF} ${REF_CONF} else sed -e "/${NEW_CONF} /d" ${COMPIL_DIR}/cfg.txt > ${COMPIL_DIR}/cfg.tmp \mv ${COMPIL_DIR}/cfg.tmp ${COMPIL_DIR}/cfg.txt fi #- #- Save new configuration and directories names --- echo ${NEW_CONF} ${TAB[*]} >> ${COMPIL_DIR}/cfg.txt #- #- Create the WORK --- #- Clean links and librairies --- #- Creating the good links, at first on OPA_SRC --- . ${COMPIL_DIR}/Fmake_WORK.sh ${NEW_CONF} ${TAB[*]} || exit . ${COMPIL_DIR}/Fmake_bld.sh ${CONFIG_DIR} ${NEW_CONF} ${NEMO_TDIR} || exit #- At this stage the configuration has beeen chosen #- We look after agrif grep key_agrif ${COMPIL_DIR}/cpp.fcm && export AGRIFUSE=1 . ${COMPIL_DIR}/Fprep_agrif.sh ${NEW_CONF} ${NEMO_TDIR} || exit #- #_ END OF CONFIGURATION PHASE #_ #- #- Compile --- if [ "${NBR_PRC}" -gt 0 ]; then cd ${NEMO_TDIR}/${NEW_CONF} || cd - #if AGRIF we do a first preprocessing if [ ${#x_c} -eq 0 ]; then [ "$AGRIFUSE" == 1 ] && fcm build --ignore-lock -s 2 ${COMPIL_DIR}/bld.cfg [ "$AGRIFUSE" == 1 ] && rm -rf ${NEMO_TDIR}/${NEW_CONF}/BLD/* fi fcm build ${x_c} --ignore-lock -v 1 -j ${NBR_PRC} ${COMPIL_DIR}/bld.cfg || cd - [ -f ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/nemo.exe ] && ln -sf ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/nemo.exe ${CONFIG_DIR}/${NEW_CONF}/EXP00/opa [ -f ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/server.exe ] && ln -sf ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/server.exe ${CONFIG_DIR}/${NEW_CONF}/EXP00/server.exe fi #- #- Come back to original directory --- cd - #- #- Unset variables ${COMPIL_DIR}/Fclean_var.sh exit 0;