View Issue Details

IDProjectCategoryView StatusLast Update
0002113ThirdPartyPatchpublic2016-06-08 15:16
Reporterwyldckat Assigned Tohenry  
PrioritylowSeverityminorReproducibilityN/A
Status resolvedResolutionfixed 
Product Versiondev 
Fixed in Versiondev 
Summary0002113: makeGcc: added "-no-multilib" option to the script
DescriptionWhen building a 64-bit custom GCC version, and although there are certain dependencies that are a must, the multilib requirement is something that shouldn't be always obligatory, given that the end user will unlikely need to build both 32 and 64-bit builds of OpenFOAM and might not be possible to install the necessary 32-bit base support on the system.

The attached file "makeGcc" aims to help with that, by at least providing the option to disable building GCC with multilib support.

Also added the respective usage information to the help message, following the same convention as in "makeParaView".
Steps To ReproduceExample usage:

  makeGcc -no-multilib
TagsNo tags attached.

Activities

wyldckat

2016-06-08 12:02

updater  

makeGcc (6,986 bytes)   
#!/bin/sh
#------------------------------------------------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
# 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 <http://www.gnu.org/licenses/>.
#
# Script
#     makeGcc
#
# Description
#     Build script for gmp, mpfr and gcc-[4-9].?.?
#
#------------------------------------------------------------------------------

# get default GCC, mpfr, gmp and mpc versions
. $WM_PROJECT_DIR/etc/config.sh/functions
_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/compiler)

gmpPACKAGE=${gmp_version:-gmp-5.1.2}
mpfrPACKAGE=${mpfr_version:-mpfr-3.1.2}
mpcPACKAGE=${mpc_version:-mpc-1.0.1}
gccPACKAGE=$gcc_version


#------------------------------------------------------------------------------
# Run from third-party directory only
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
}
. etc/tools/ThirdPartyFunctions
#------------------------------------------------------------------------------

usage() {
    exec 1>&2
    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
    cat<<USAGE

usage: ${0##*/} [option] [gmp-VERSION] [mpfr-VERSION] [mpc-VERSION] <gcc-VERSION>
options:
  -no-multilib      for 64-bit systems that don't have 32-bit support
  -help

* build combinations of gmp, mpfr, mpc and gcc
      $gmpPACKAGE
      $mpfrPACKAGE
      $mpcPACKAGE
      $gccPACKAGE

USAGE
    exit 1
}

GCC_BUILD_OPTIONS=""

# Parse options
while [ "$#" -gt 0 ]
do
    case "$1" in
    -h | -help)
        usage
        ;;
    -no-multilib)
        GCC_BUILD_OPTIONS="--disable-multilib"
        shift
        ;;
    gmp-[4-9]*)
        gmpPACKAGE="${1%%/}"
        shift
        ;;
    mpfr-[2-9]*)
        mpfrPACKAGE="${1%%/}"
        shift
        ;;
    mpc-[0-9]*)
        mpcPACKAGE="${1%%/}"
        shift
        ;;
    gcc-[4-9]*)
        gccPACKAGE="${1%%/}"
        shift
        ;;
    *)
        usage "unknown option/argument: '$*'"
        ;;
    esac
done

if [ -z "$gccPACKAGE" ]
then
    usage "Please specify gcc-VERSION"
    exit 1
fi


# Set 32 or 64 bit ABI
case "$WM_ARCH_OPTION" in
32 | 64)
    ABI=$WM_ARCH_OPTION
    ;;
*)
    usage "Please set WM_ARCH_OPTION to either 32 or 64'$*'"
    ;;
esac


#------------------------------------------------------------------------------
# Build/install without compiler name
buildBASE=$WM_THIRD_PARTY_DIR/build/$WM_ARCH$WM_COMPILER_ARCH
installBASE=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH

GCC_ARCH_PATH=$installBASE/$gccPACKAGE
GMP_ARCH_PATH=$installBASE/$gmpPACKAGE
MPFR_ARCH_PATH=$installBASE/$mpfrPACKAGE
MPC_ARCH_PATH=$installBASE/$mpcPACKAGE

#
# Build GMP
#
echo "---------------"
if [ -d $GMP_ARCH_PATH ]
then
    echo "Already built: $gmpPACKAGE"
else
    echo "Starting build: $gmpPACKAGE"
    echo
(
    sourceDIR=$WM_THIRD_PARTY_DIR/$gmpPACKAGE
    buildDIR=$buildBASE/$gmpPACKAGE

    cd $sourceDIR || exit 1
    make distclean 2>/dev/null

    rm -rf $buildDIR
    mkdir -p $buildDIR
    cd $buildDIR

    set -x
    $sourceDIR/configure ABI=$ABI \
        --prefix=$GMP_ARCH_PATH \
        --enable-cxx \
    && make -j $WM_NCOMPPROCS \
    && make install \
    && echo "Built: $gmpPACKAGE"
) || {
    echo "Error building: $gmpPACKAGE"
    exit 1
}
fi

export LD_LIBRARY_PATH="$GMP_ARCH_PATH/lib:$LD_LIBRARY_PATH"

#
# Build MPFR
#
echo "---------------"
if [ -d $MPFR_ARCH_PATH ]
then
    echo "Already built: $mpfrPACKAGE"
else
    echo "Starting build: $mpfrPACKAGE"
    echo
(
    sourceDIR=$WM_THIRD_PARTY_DIR/$mpfrPACKAGE
    buildDIR=$buildBASE/$mpfrPACKAGE

    cd $sourceDIR || exit 1
    make distclean 2>/dev/null

    rm -rf $buildDIR
    mkdir -p $buildDIR
    cd $buildDIR

    set -x
    $sourceDIR/configure ABI=$ABI \
       --prefix=$MPFR_ARCH_PATH \
       --with-gmp=$GMP_ARCH_PATH \
    && make -j $WM_NCOMPPROCS \
    && make install \
    && echo "Built: $mpfrPACKAGE"
) || {
    echo "Error building: $mpfrPACKAGE"
    exit 1
}
fi

export LD_LIBRARY_PATH="$MPFR_ARCH_PATH/lib:$LD_LIBRARY_PATH"

#
# Build mpc
#
echo "---------------"
if [ -d $MPC_ARCH_PATH ]
then
    echo "Already built: $mpcPACKAGE"
else
    echo "Starting build: $mpcPACKAGE"
    echo
(
    sourceDIR=$WM_THIRD_PARTY_DIR/$mpcPACKAGE
    buildDIR=$buildBASE/$mpcPACKAGE

    cd $sourceDIR || exit 1
    make distclean 2>/dev/null

    rm -rf $buildDIR
    mkdir -p $buildDIR
    cd $buildDIR

    set -x
    $sourceDIR/configure ABI=$ABI \
        --prefix=$MPC_ARCH_PATH \
        --with-gmp=$GMP_ARCH_PATH \
        --with-mpfr=$MPFR_ARCH_PATH \
    && make -j $WM_NCOMPPROCS \
    && make install \
    && echo "Built: $mpcPACKAGE"
) || {
    echo "Error building: $mpcPACKAGE"
    exit 1
}
fi


if [ -d "$MPC_ARCH_PATH" ]
then
    export LD_LIBRARY_PATH="$MPC_ARCH_PATH/lib:$LD_LIBRARY_PATH"
fi


#
# Build GCC
# might need 32-bit glibc-devel headers to compile
# E.g. on ubuntu install g++-multilib
#
echo "---------------"
if [ -d $GCC_ARCH_PATH ]
then
    echo "Already built: $gccPACKAGE"
else
    echo "Starting build: $gccPACKAGE"
    echo
(
    sourceDIR=$WM_THIRD_PARTY_DIR/$gccPACKAGE
    buildDIR=$buildBASE/$gccPACKAGE

    cd $sourceDIR || exit 1
    make distclean 2>/dev/null

    rm -rf $buildDIR
    mkdir -p $buildDIR
    cd $buildDIR

    set -x
    $sourceDIR/configure \
        --prefix=$GCC_ARCH_PATH \
        --with-gmp=$GMP_ARCH_PATH \
        --with-mpfr=$MPFR_ARCH_PATH \
        --with-mpc=$MPC_ARCH_PATH \
        --with-pkgversion=OpenFOAM \
        --enable-languages=c,c++ \
        --enable-__cxa_atexit \
        --enable-libstdcxx-allocator=new \
        --with-system-zlib \
        $GCC_BUILD_OPTIONS \
        MAKEINFO=missing \
    && make -j $WM_NCOMPPROCS \
    && make install \
    && echo "Built: $gccPACKAGE"
) || {
    echo "Error building: $gccPACKAGE"
    exit 1
}
fi


#------------------------------------------------------------------------------
makeGcc (6,986 bytes)   

henry

2016-06-08 15:15

manager   ~0006409

Resolved by commit ce4951579b8e01ce524ed6e465ea352e6a243f1b

Issue History

Date Modified Username Field Change
2016-06-08 12:02 wyldckat New Issue
2016-06-08 12:02 wyldckat Status new => assigned
2016-06-08 12:02 wyldckat Assigned To => henry
2016-06-08 12:02 wyldckat File Added: makeGcc
2016-06-08 15:15 henry Note Added: 0006409
2016-06-08 15:15 henry Status assigned => resolved
2016-06-08 15:15 henry Fixed in Version => dev
2016-06-08 15:15 henry Resolution open => fixed