New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
maketools in utils/tools_ticket2362 – NEMO

source: utils/tools_ticket2362/maketools @ 13173

Last change on this file since 13173 was 13173, checked in by gsamson, 4 years ago

modify ABL_TOOLS directory structure to be maketools compliant; add ABL_TOOLS README.rst description; modify maketools to work with tools* directory names; ticket #2362

  • Property svn:executable set to *
File size: 4.7 KB
Line 
1#!/bin/bash
2#set -x
3set -o posix
4#set -u
5#set -e
6#+
7#
8# ===============
9# maketools
10# ===============
11#
12# --------------------------
13# Compile NEMO
14# --------------------------
15#
16# SYNOPSIS
17# ========
18#
19# ::
20#
21#  $ maketools
22#
23#
24# DESCRIPTION
25# ===========
26#
27#
28# This script aims :
29#
30# - to choose a tool to compile
31# - to choose compiler options 
32# - to compile this tool
33#
34#  Variables used :
35#
36#  From user input
37#
38# - NEW_CONF    : configuration to be created
39# - CMP_NAM     : compiler name
40# - NBR_PRC     : number of processes used to compile 
41#
42#  Locally defined :
43#
44# - MAIN_DIR : self explaining
45# - MODELES_DIR :   "    "    "
46# - TOOLS_DIR   :   "    "    "
47# - NEMO_DIR    :   "    "    "
48#
49# EXAMPLES
50# ========
51#
52# ::
53#
54#  $ ./maketools -t ifort_osx - j3 -n NESTING
55#
56#
57# TODO
58# ====
59#
60# option debug
61#
62#
63# EVOLUTIONS
64# ==========
65#
66# $Id: maketools 12415 2020-02-19 20:29:26Z smueller $
67#
68#
69#
70#   * creation
71#
72#-
73
74#- Local variables ---
75b_n=$(basename ${0})
76export MAIN_DIR=${PWD%/tools*}
77export TOOLS_DIR=${MAIN_DIR}/tools${PWD#*tools}
78export COMPIL_DIR=${MAIN_DIR}/mk
79export NEMO_DIR=${MAIN_DIR}/NEMO
80#-
81#- FCM and functions location ---
82export PATH=${MAIN_DIR}/ext/FCM/bin:$PATH
83
84#-
85#- Choice of the options ---
86x_h="";
87x_n="";
88x_m="";
89x_t="";
90x_c="";
91x_j=1;
92while getopts :hm:n:r:j:t: V
93  do
94    case $V in
95      (h)  x_h=${OPTARG};
96                          echo "Usage   : "${b_n} \
97                " [-h] [-n name] [-m arch] [-j No] [-t tmpdir]";
98           echo " -h  : help";
99                          echo " -h institute : specific help for consortium members";
100           echo " -n name : tool name, [-n help] to list existing tools";
101           echo " -m arch : choose compiler, [-m help] to list exiting compilers";
102           echo " -j No  : number of processes used to compile (0=nocompilation)";
103           echo " -t dir  : remporary directory for compilation"
104           echo "";
105           echo "Example to compile Agrif Nesting tools";
106           echo "maketools -n NESTING" ;
107           echo "";
108                          printf "%s\n" "Available tools :" `ls ${TOOLS_DIR}|grep -v COMPILE | grep -v maketools`;
109           echo "";
110                          . ${COMPIL_DIR}/Flist_archfile.sh  ${x_h};
111           echo "";
112           echo "Default : previous tool and compiler";
113           exit 0;;
114      (n)  x_n=${OPTARG};;
115      (m)  x_m=${OPTARG};;
116      (j)  x_j=${OPTARG};;
117      (t)  x_t=${OPTARG};;
118      (:)  echo ${b_n}" : -"${OPTARG}" option : missing value" 1>&2;
119           exit 2;;
120      (\?) echo ${b_n}" : -"${OPTARG}" option : not supported" 1>&2;
121           exit 2;;
122    esac
123  done
124shift $(($OPTIND-1));
125
126#-
127#- Get the clean option
128[[ "${#@}" -ne 0 && "${@}" != clean ]] && echo "Invalid option "$@" " && exit
129[ "${#@}" -ne 0 ] && x_c="--$@"
130
131#-
132#- Go to NEMOGCM/tools directory ---
133cd ${TOOLS_DIR}
134
135#-
136#- Initialisation from input ---
137export NEW_CONF=${x_n}
138NBR_PRC=${x_j}
139CMP_NAM=${x_m}
140NEMO_TDIR=${x_t:-$NEMO_TDIR}
141export NEMO_TDIR=${NEMO_TDIR:-$TOOLS_DIR}
142
143#- Check if the tool or the compiler exist or list it
144[ "${NEW_CONF}" == help ] && printf "%s\n"  "Available tools :" `ls ${TOOLS_DIR}|grep -v COMPILE | grep -v maketools` && exit
145[ "${CMP_NAM}" ==  help ] && . ${COMPIL_DIR}/Flist_archfile.sh all && exit
146
147#- Choose a default tool if needed ---
148#- REBUILD or last one used ---
149. ${COMPIL_DIR}/Fcheck_config.sh tools.txt ${NEW_CONF} || exit
150
151#- Save new configuration ---
152echo "${NEW_CONF} "  > ${COMPIL_DIR}/tools.txt
153
154#- Make the building directory
155. ${COMPIL_DIR}/Fmake_tools_bld.sh ${TOOLS_DIR} ${NEW_CONF} ${NEMO_TDIR} || exit
156
157#- At this stage cpp keys have been updated. we can check the arch file
158#- When used for the first time, choose a compiler ---
159. ${COMPIL_DIR}/Fcheck_archfile.sh arch_tools.fcm cpp_tools.fcm ${CMP_NAM} || exit
160
161#- At this stage the configuration has beeen chosen
162#- We coose the default light file
163export USEBLD=bldxag_tools.cfg
164
165#- We look after agrif
166grep key_agrif ${COMPIL_DIR}/cpp_tools.fcm && export AGRIFUSE=1 && export USEBLD=${USEBLD/xag/}
167
168. ${COMPIL_DIR}/Fprep_agrif.sh ${NEW_CONF} ${TOOLS_DIR} || exit 3
169
170
171#-
172#_ END OF CONFIGURATION PHASE
173#_
174
175#-
176#- Compile ---
177
178if [ "${NBR_PRC}" -gt 0 ]; then
179cd ${TOOLS_DIR}/${NEW_CONF} || cd -
180
181   ## if AGRIF we do a first preprocessing
182   if [[ ${#x_c} -eq 0 && "$AGRIFUSE" -eq 1 ]]; then
183      fcm build --ignore-lock -j 1 ${COMPIL_DIR}/bld_preproagr_tools.cfg ||{ cd - ; exit 1 ;}
184      echo ''
185      echo "---------------------------------"
186      echo "CONV preprocessing successfull !!"
187      echo "---------------------------------"
188      echo ''
189   fi
190
191   fcm build ${x_c} --ignore-lock -v 1 -j ${NBR_PRC} ${COMPIL_DIR}/${USEBLD} || cd -
192   if [ -n "$(ls ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/*.exe)" ]; then
193      for i in `ls ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/*.exe`
194      do
195         ln -sf ${i}  ${TOOLS_DIR}/${NEW_CONF}/.
196      done
197   fi
198fi
199#-
200#- Come back to original directory ---
201cd -
202
203#-
204#- Unset variables
205${COMPIL_DIR}/Fclean_var.sh
206
207exit 0;
Note: See TracBrowser for help on using the repository browser.