#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. # # OpenFOAM is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # OpenFOAM is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # # You should have received a copy of the GNU General Public License # along with OpenFOAM. If not, see . # # Script # Allwmake # # Description # Build script for ThirdParty # #------------------------------------------------------------------------------ # run from third-party directory only cd ${0%/*} || exit 1 wmakeCheckPwd "$WM_THIRD_PARTY_DIR" || { echo "Error: Current directory is not \$WM_THIRD_PARTY_DIR" echo " The environment variables are inconsistent with the installation." echo " Check the OpenFOAM entries in your dot-files and source them." exit 1 } [ -n "$FOAM_EXT_LIBBIN" ] || { echo "Error: FOAM_EXT_LIBBIN not set" echo " Check the OpenFOAM entries in your dot-files and source them." exit 1 } . etc/tools/ThirdPartyFunctions #------------------------------------------------------------------------------ # export WM settings in a form that GNU configure recognizes [ -n "$WM_CC" ] && export CC="$WM_CC" [ -n "$WM_CXX" ] && export CXX="$WM_CXX" [ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS" [ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS" [ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS" echo echo ======================================== echo Start ThirdParty Allwmake echo ======================================== echo echo ======================================== echo Build MPI libraries if required echo " $MPI_ARCH_PATH" case "$WM_MPLIB" in OPENMPI) if [ -r $MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH}/libmpi.so ] then echo " have $WM_MPLIB shared library ($FOAM_MPI)" echo elif [ -r $MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH}/libmpi.a ] then echo " have $WM_MPLIB static library ($FOAM_MPI)" echo else ( # configuration options: # Start with GridEngine support - builds without external libraries configOpt="--with-sge" # Add InfiniBand support ibDir=/usr/local/ofed ibLib=$infbDIR/lib${WM_COMPILER_LIB_ARCH} if [ -d "$ibDir" -a -d "$ibLib" ] then configOpt="$configOpt --with-verbs=$ibDir --with-verbs-lib=$ibLib" fi # end of configuration options # ---------------------------- mpiPACKAGE="${MPI_ARCH_PATH##*/}" sourceDIR=$WM_THIRD_PARTY_DIR/$mpiPACKAGE buildDIR=$buildBASE/$mpiPACKAGE cd $sourceDIR || exit 1 [ -e Makefile ] && make distclean 2>/dev/null rm -rf $MPI_ARCH_PATH rm -rf $buildDIR mkdir -p $buildDIR cd $buildDIR set -x $sourceDIR/configure \ --prefix=$MPI_ARCH_PATH \ --disable-orterun-prefix-by-default \ --enable-shared --disable-static \ --libdir=$MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH} \ --enable-mpi-fortran=none \ --disable-mpi-profile \ $configOpt \ && make -j $WM_NCOMPPROCS \ && make install \ && echo "Built: $mpiPACKAGE" ) || { echo "Error building: $mpiPACKAGE" exit 1 } fi ;; MPICH) if [ -r $MPI_ARCH_PATH/lib/libmpich.so ] then echo " have $WM_MPLIB shared library ($FOAM_MPI)" echo elif [ -r $MPI_ARCH_PATH/lib/libmpich.a ] then echo " have $WM_MPLIB static library ($FOAM_MPI)" echo else ( # WARNING: unmaintained build code: # --------------------------------- set -x cd $MPI_HOME || exit 1 # change to mpich-VERSION [ -e Makefile ] && make distclean 2>/dev/null rm -rf $MPI_ARCH_PATH rm -rf util/machines/machines.* ./configure \ --prefix=$MPI_ARCH_PATH \ --without-mpe \ --disable-f77 \ --disable-f90 \ --disable-f90modules \ --disable-mpedbg \ --disable-devdebug \ --disable-debug \ --enable-sharedlib=$MPI_ARCH_PATH/lib \ --with-device=ch_p4 \ ; # For MPICH2 below 1.5a1 uncomment this line and comment next # make && make install # For MPICH2 1.5a1 or above make -j $WM_NCOMPPROCS && make install make distclean if [ -r $MPI_ARCH_PATH ] then cd $MPI_ARCH_PATH/bin for file in * do sed s%$MPI_ARCH_PATH%'$MPI_ARCH_PATH'%g $file > temp.$$ mv temp.$$ $file chmod 0755 $file done cd $MPI_ARCH_PATH/lib if [ -r libmpich.so.1.0 ] then rm *.so ln -s libmpich.so.1.0 libmpich.so fi fi ) fi ;; esac #------------------------------------------------------------------------------ # building scotch is still a bit of a pain # get SCOTCH_VERSION, SCOTCH_ARCH_PATH if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch) then . $settings else echo echo "Error: no config.sh/scotch settings" echo fi echo echo ======================================== echo "Build Scotch decomposition library $SCOTCH_VERSION" echo " $SCOTCH_ARCH_PATH" # this needs generalizing scotchMakefile=../../etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM if [ -f $SCOTCH_ARCH_PATH/include/scotch.h \ -a -r $FOAM_EXT_LIBBIN/libscotch.so \ -a -r $FOAM_EXT_LIBBIN/libscotcherrexit.so ] then echo " scotch header in $SCOTCH_ARCH_PATH/include" echo " scotch libs in $FOAM_EXT_LIBBIN" elif [ -d "$SCOTCH_VERSION" ] then ( cd $SCOTCH_VERSION/src || exit 1 applyPatch $SCOTCH_VERSION .. # patch at parent-level prefixDIR=$SCOTCH_ARCH_PATH libDIR=$FOAM_EXT_LIBBIN mkdir -p $prefixDIR 2>/dev/null mkdir -p $libDIR 2>/dev/null configOpt="prefix=$prefixDIR libdir=$libDIR" if [ -f $scotchMakefile ] then rm -f Makefile.inc ln -s $scotchMakefile Makefile.inc fi [ -f Makefile.inc ] || { echo " Error: scotch needs an appropriate Makefile.inc" exit 1 } # handle non-gcc compilers unset configEnv [ "${WM_CC:-gcc}" != gcc ] && configEnv="CC=$WM_CC CCS=$WM_CC" make realclean 2>/dev/null # for safety make -j $WM_NCOMPPROCS $configEnv scotch \ && make $configOpt install # cleanup, could also remove Makefile.inc make realclean 2>/dev/null ) else echo " Optional component (SCOTCH) was not found" fi # build ptscotch if MPI (ThirdParty or system) is available # and there is a scotch include available (ie, normal scotch was built) if [ "${FOAM_MPI:-dummy}" != dummy ] && \ [ -f $SCOTCH_ARCH_PATH/include/scotch.h ] || \ { echo echo " WARNING: skipping pt-scotch - 'scotch.h' include file not found!" false } then echo echo ======================================== echo "Build pt-scotch decomposition library $SCOTCH_VERSION (with $FOAM_MPI)" echo " $SCOTCH_ARCH_PATH" if [ -f $SCOTCH_ARCH_PATH/include/$FOAM_MPI/ptscotch.h \ -a -r $FOAM_EXT_LIBBIN/$FOAM_MPI/libptscotch.so \ -a -r $FOAM_EXT_LIBBIN/$FOAM_MPI/libptscotcherrexit.so ] then echo " ptscotch header in $SCOTCH_ARCH_PATH/include/$FOAM_MPI" echo " ptscotch libs in $FOAM_EXT_LIBBIN/$FOAM_MPI" else ( echo set -x cd $SCOTCH_VERSION/src || exit 1 prefixDIR=$SCOTCH_ARCH_PATH libDIR=$FOAM_EXT_LIBBIN/$FOAM_MPI incDIR=$SCOTCH_ARCH_PATH/include/$FOAM_MPI mkdir -p $prefixDIR 2>/dev/null mkdir -p $libDIR 2>/dev/null configOpt="prefix=$prefixDIR libdir=$libDIR includedir=$incDIR" if [ -f $scotchMakefile ] then rm -f Makefile.inc ln -s $scotchMakefile Makefile.inc fi [ -f Makefile.inc ] || { echo " Error: scotch needs an appropriate Makefile.inc" exit 1 } # handle non-gcc compilers unset configEnv [ "${WM_CC:-gcc}" != gcc ] && configEnv="CC=$WM_CC CCS=$WM_CC" make realclean 2>/dev/null # for safety make -j $WM_NCOMPPROCS $configEnv ptscotch \ && make $configOpt install # cleanup, could also remove Makefile.inc make realclean 2>/dev/null ) fi # verify existence of scotch include [ -f $SCOTCH_ARCH_PATH/include/$FOAM_MPI/ptscotch.h ] || { echo echo " WARNING: required include file 'ptscotch.h' not found!" } fi #------------------------------------------------------------------------------ # Metis is optional echo echo ======================================== echo Build Metis decomposition # get METIS_VERSION, METIS_ARCH_PATH if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/metis) then . $settings fi if [ -d "$METIS_VERSION" ] then if [ -f $METIS_ARCH_PATH/include/metis.h \ -a -r $FOAM_EXT_LIBBIN/libmetis.so ] then echo " metis header in $METIS_ARCH_PATH/include" echo " metis libs in $FOAM_EXT_LIBBIN" echo else ( set -x cd $METIS_VERSION || exit 1 if [ "$WM_PRECISION_OPTION" = "DP" ] then FLOAT_PRECISION=64 elif [ "$WM_PRECISION_OPTION" = "SP" ] then FLOAT_PRECISION=32 else echo " Metis pre-configure error:" echo " WM_PRECISION_OPTION is neither DP nor SP" exit 1 fi # Change user settings automatically sed -i -e 's=\(#define IDXTYPEWIDTH\).*=\1 '$WM_LABEL_SIZE'=' \ -e 's=\(#define REALTYPEWIDTH\).*=\1 '$FLOAT_PRECISION'=' \ include/metis.h make config shared=1 prefix=$METIS_ARCH_PATH make -j $WM_NCOMPPROCS install cp $METIS_ARCH_PATH/lib/libmetis.so $FOAM_EXT_LIBBIN ) fi else echo " Optional component (METIS) was not found" fi #------------------------------------------------------------------------------ warnBuildIssues() { echo echo " ---------------------------------------------------" echo " Optional component ($1) had build issues" echo " OpenFOAM will nonetheless remain largely functional" echo " ---------------------------------------------------" echo } warnNotFound() { echo " Optional component ($1) was not found" echo } # CGAL is optional echo echo ======================================== echo Build CGAL if [ -d "$CGAL_ARCH_PATH/include" \ -a -r "$CGAL_ARCH_PATH/lib/libCGAL.so" ] then # first some information about boost if [ -d "$BOOST_ARCH_PATH/include/boost" \ -a -r "$BOOST_ARCH_PATH/lib/libboost_system.so" ] then echo " BOOST headers in $BOOST_ARCH_PATH/include" echo " BOOST libs in $BOOST_ARCH_PATH/lib" elif [ -d "/usr/include/boost" \ -a -r "/usr/lib${WM_COMPILER_LIB_ARCH}/libboost_system.so" ] then echo " BOOST headers in /usr/include" echo " BOOST libs in /usr/lib${WM_COMPILER_LIB_ARCH}" fi echo " CGAL headers in $CGAL_ARCH_PATH/include" echo " CGAL libs in $CGAL_ARCH_PATH/lib" elif [ -n "$CGAL_ARCH_PATH" ] then ./makeCGAL || warnBuildIssues CGAL else warnNotFound CGAL fi # FFTW is optional echo echo ======================================== echo Build FFTW if [ -d "$FFTW_ARCH_PATH/include" \ -a -r "$FFTW_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libfftw3.so" ] then echo " FFTW headers in $FFTW_ARCH_PATH/include" echo " FFTW libs in $FFTW_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH" elif [ -n "$FFTW_ARCH_PATH" ] then ./makeFFTW || warnBuildIssues FFTW else warnNotFound FFTW fi #------------------------------------------------------------------------------ echo echo ======================================== echo Done ThirdParty Allwmake echo ======================================== echo #------------------------------------------------------------------------------