source: codes/icosagcm/devel/make_python @ 990

Last change on this file since 990 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
RevLine 
[615]1#!/bin/bash
2
3function log()
4{
5    echo $*
6    $*
7}
8
[721]9function cmd_clean() # cleanup, invoked by : './make_python clean'
10{
[846]11    rm -rf lib/*.so lib/dynamico
[941]12    cd $DYNAMICO_ROOT/Python/src
[721]13    rm -rf *.o *.so build/
14}
15
[615]16function make_so()
17{
18    ARLIB=$1
19    SOLIB=$2
[621]20
[615]21    if [[ $ARLIB -nt $SOLIB ]]; then
22        echo $ARLIB is newer than $SOLIB
[621]23        rm -f tmp.a
24        cp $ARLIB tmp.a
[626]25        if [[ "$4" != "" ]] ; then ar vd tmp.a $4 ; fi
26        if [[ "$5" != "" ]] ; then ar vr tmp.a $5 ; fi
[621]27        log $LINK $SOFLAGS $WHOLE_ARCHIVE tmp.a $NO_WHOLE_ARCHIVE $3 -o $SOLIB
28        rm -f tmp.a
[615]29        $LDD $SOLIB
30    fi
31}
32
[977]33function check_python_modules()
[615]34{
[621]35    MISSING=""
[977]36    for module in $*; do
[621]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
[977]47}
[621]48
[977]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}
[615]57
[977]58function cythonize()
59{
60    EXTRA=$1
[641]61    NUMPY=$(python -c 'import numpy as np ; print np.get_include()')
[977]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}
[662]66
[977]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
[621]76    cp -fpr $DYNAMICO_ROOT/Python/dynamico $DYNAMICO_ROOT/lib
[977]77    check_dynamico_modules partition meshes dyn time_step DCMIP
78}
[621]79
[977]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
[615]92}
93
[977]94function cmd_()
95{
96    make_user
97}
98
99function cmd_dev()
100{
101    make_user
102    make_dev
103}
104
105
[615]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
[941]117cd arch
118. arch-${CURRENT_ARCH}.dev
119cd $DYNAMICO_ROOT
[615]120
[721]121time cmd_$1
Note: See TracBrowser for help on using the repository browser.