source: codes/icosagcm/devel/make_python

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

devel/Python : now only dynamico.dev modules require link to DYNAMICO/XIOS shared objects

  • Property svn:executable set to *
File size: 2.8 KB
Line 
1#!/bin/bash
2
3function log()
4{
5    echo $*
6    $*
7}
8
9function cmd_clean() # cleanup, invoked by : './make_python clean'
10{
11    rm -rf lib/*.so lib/dynamico
12    cd $DYNAMICO_ROOT/Python/src
13    rm -rf *.o *.so build/
14}
15
16function make_so()
17{
18    ARLIB=$1
19    SOLIB=$2
20
21    if [[ $ARLIB -nt $SOLIB ]]; then
22        echo $ARLIB is newer than $SOLIB
23        rm -f tmp.a
24        cp $ARLIB tmp.a
25        if [[ "$4" != "" ]] ; then ar vd tmp.a $4 ; fi
26        if [[ "$5" != "" ]] ; then ar vr tmp.a $5 ; fi
27        log $LINK $SOFLAGS $WHOLE_ARCHIVE tmp.a $NO_WHOLE_ARCHIVE $3 -o $SOLIB
28        rm -f tmp.a
29        $LDD $SOLIB
30    fi
31}
32
33function check_python_modules()
34{
35    MISSING=""
36    for module in $*; do
37        echo "import $module"
38        python -c "import $module" || MISSING="$MISSING $module"
39    done
40    if [[ "$MISSING" == "" ]] ; then
41        echo "All required Python modules seem present."
42    else
43        echo "Missing/dysfunctional python modules : $MISSING"
44        echo "Please fix your Python configuration"
45        exit
46    fi
47}
48
49function check_dynamico_modules()
50{
51    cd $DYNAMICO_ROOT
52    for module in $*; do
53        echo "import dynamico.$module"
54        LD_PRELOAD=$PYTHON_PRELOAD python -c "import dynamico.$module"
55    done
56}
57
58function cythonize()
59{
60    EXTRA=$1
61    NUMPY=$(python -c 'import numpy as np ; print np.get_include()')
62    CYTHONFLAGS="$SOFLAGS $LDFLAGS -L$LIBDIR $KERNELS_LDFLAGS $EXTRA"
63    CC=mpicc LDSHARED="$LINK" CFLAGS="-fno-strict-aliasing -O2 -I$NUMPY $PARMETIS_CFLAGS" LDFLAGS="$CYTHONFLAGS" log python setup.py build_ext --inplace || exit
64    rm -rf build *.c # temp files
65}
66
67#------------------ Default action , invoked by : './make_python' --------------------
68
69function make_user()
70{
71    check_python_modules netCDF4 mpi4py
72    # Cythonize Python modules
73    cd $DYNAMICO_ROOT/Python/dynamico
74    cythonize
75    rm -rf build *.c # temp files
76    cp -fpr $DYNAMICO_ROOT/Python/dynamico $DYNAMICO_ROOT/lib
77    check_dynamico_modules partition meshes dyn time_step DCMIP
78}
79
80function make_dev()
81{
82    check_python_modules jinja2
83    echo "XIOS_ROOTDIR : $XIOS_ROOTDIR"
84
85    make_so $XIOS_ROOTDIR/lib/libxios.a $LIBDIR/libxios.so "$NETCDF_LDFLAGS -lstdc++"
86    make_so $LIBDIR/libicosa.a $LIBDIR/libicosa.so "-L$LIBDIR -lxios $KERNELS_LDFLAGS" "physics_external_mod.o physics_mod.o timeloop_gcm_mod.o icosa_init_mod.o"
87
88    cd $DYNAMICO_ROOT/Python/dev
89    cythonize "-licosa"
90    cp -fpr $DYNAMICO_ROOT/Python/dev $DYNAMICO_ROOT/lib/dynamico/
91    check_dynamico_modules dev.cxios dev.unstructured
92}
93
94function cmd_()
95{
96    make_user
97}
98
99function cmd_dev()
100{
101    make_user
102    make_dev
103}
104
105
106#------------------------- script starts here ------------------------
107
108DYNAMICO_ROOT=$PWD
109LIBDIR=$DYNAMICO_ROOT/lib
110
111. arch.env
112. arch.path
113
114echo "Selected architecture : $CURRENT_ARCH"
115if [[ "$CURRENT_ARCH" == "" ]] ; then echo "Current architecture undefined or unsupported" ; exit ; fi
116
117cd arch
118. arch-${CURRENT_ARCH}.dev
119cd $DYNAMICO_ROOT
120
121time cmd_$1
Note: See TracBrowser for help on using the repository browser.