source: codes/icosagcm/devel/DySL/codegen @ 977

Last change on this file since 977 was 941, checked in by dubos, 5 years ago

devel : split DySL from Python

  • Property svn:executable set to *
File size: 1.3 KB
Line 
1#!/bin/bash
2
3function filter()
4{
5    PASS=$1 ; shift
6    cpp -P -DPASS_$PASS $* -include ../macros.jin
7}
8
9function log()
10{
11    echo $*
12    $*
13}
14
15function extract_dysl()
16{
17    sed -n '/BEGIN_DYSL/,/END_DYSL/{//b;p}' compute_pvort_only.F90
18}
19
20function main()
21{
22    VARIANT=$SRCDIR/$1
23    cd $VARIANT
24    rm -f *~ tmp/*
25    mkdir -p tmp
26    cd tmp
27    cp $SRCDIR/macros.jin . # jinja macros common to all variants
28    cpp -P -DPASS_JINJA ../macros.jin >> macros.jin # variant-specific macros
29
30    # first expand user-defined CPP and jinja macros
31    cat $SRCDIR/kernels_*.jin | cpp -P > caldyn_all.jin
32    $PYTHON -u $ROOT/jinja caldyn_all.jin > caldyn_all.dysl
33    # then expand the code-generating CPP and jinja macros
34    cat caldyn_all.dysl | filter PRE1 | filter PRE2 >> macros.jin
35    $PYTHON -u $ROOT/jinja macros.jin > caldyn_all.k90
36    # extract each kernel and apply post-jinja CPP macros
37    KERNELS=$(grep KERNEL caldyn_all.dysl | cpp -P -D'KERNEL(x)=x')
38    for NAME in $KERNELS ; do
39        cat caldyn_all.k90 | filter POST1 -DKERNEL_${NAME} | filter POST2 | sed '/^$/d' > ../${NAME}.k90
40        head ../${NAME}.k90
41    done
42
43    cd ..
44    grep ERROR *.k90
45
46    cd $VARIANT
47    wc *.k90
48    cd $ROOT
49}
50
51set +x
52   
53ROOT=$PWD
54SRCDIR=$ROOT
55grep FIXME *.jin
56
57for x in $* ; do
58    echo "Generating code for variant : $x"
59    main $x
60done
Note: See TracBrowser for help on using the repository browser.