#!/bin/bash -e #--------------------------------------------------------------------- # Get absolute path for script directory. BS=${BASH_SOURCE[0]} if [ -h $BS ]; then BS=`readlink $BS` fi THISDIR="$( dirname $BS )" cd $THISDIR || exit 1 THISDIR=`pwd` #--------------------------------------------------------------------- # Confirm that script is running in the right place. if [ \! -d mtsrc ]; then cat << END Error: This script must be stored in, and preferably executed in, the directory which contains the "mtsrc" directory. END exit 1 fi #--------------------------------------------------------------------- # Check usage. if [ "x$1" \!= "xbuild" ]; then cat << END This is "mtcompile-libraries.sh". This Linux script compiles gcc8, luajit, luasocket, irrlicht, and sqlite3. A few patches are included. The gcc8 build may or may not be done depending on various factors. For requirements and usage, see "linux-minetest-kit.txt". Or, if you're sure of what you're doing, just execute: bash -e mtcompile-libraries.sh build Warning: If compiles are started, and a "toolstree" directory tree al- ready exists, this script deletes it. END exit 1 fi #--------------------------------------------------------------------- # adjustable parameters #--------------------------------------------------------------------- # These four settings shouldn't need to be changed under normal condi- # tions. However, see "linux-minetest-kit.txt" for information regard- # ing cases where changes may be needed. # DOBOOTSTRAP may be unset or one of the following: # 1 true yes 0 false no ALT1_PREFIX= ALT2_PREFIX= NUMJOBS=`getconf _NPROCESSORS_ONLN 2>&1` DOBOOTSTRAP= #--------------------------------------------------------------------- if [ "x$DOBOOTSTRAP" == "x1" ]; then DOBOOTSTRAP=true; fi if [ "x$DOBOOTSTRAP" == "xyes" ]; then DOBOOTSTRAP=true; fi #--------------------------------------------------------------------- hash gcc GCCVER=`gcc --version | \ grep '^gcc.* [0-9][0-9]*\.[0-9][0-9]*\.' | \ sed -e 's/.* \([0-9][0-9]*\)\.[0-9][0-9]*\..*/\1/'` if [ "x$GCCVER" == "x" ]; then GCCVER=0; fi # Note: The cutoff release number used for OLDGCC here is different # than the cutoff used in "mtcompile-program.sh". This is intention- # al. OLDGCC=false if [ $GCCVER -lt 6 ]; then OLDGCC=true; fi if [ "x$DOBOOTSTRAP" == "x" ]; then DOBOOTSTRAP=$OLDGCC fi #--------------------------------------------------------------------- # fixed parameters #--------------------------------------------------------------------- # These four settings shouldn't need to be changed. BUILDTMP=$THISDIR/buildtmp SRCTREE=$THISDIR/mtsrc TOOLS_PREFIX=$THISDIR/toolstree PATH=$TOOLS_PREFIX/bin:$PATH #--------------------------------------------------------------------- # delete existing "toolstree" #--------------------------------------------------------------------- rm -fr $TOOLS_PREFIX #--------------------------------------------------------------------- # start of "DOBOOTSTRAP" "if"-block #--------------------------------------------------------------------- if [ "x$DOBOOTSTRAP" == "xtrue" ]; then echo Bootstrapping gcc8 #--------------------------------------------------------------------- # build "gcc" and "g++" #--------------------------------------------------------------------- rm -fr $BUILDTMP mkdir $BUILDTMP pushd $BUILDTMP tar jxf $SRCTREE/gcc/gcc*.tar.bz2 || exit 1 cd gcc-svn-[0-9]* || exit 1 patch -p1 < $SRCTREE/gcc/gcc.patch || exit 1 sed -e "s@__META_PREFIX__@$TOOLS_PREFIX@" \ -i gcc/cppdefault.c gcc/collect2.c || exit 1 if [ "x$ALT1_PREFIX" == "x" ]; then sed -e '/__ALT1_PREFIX__/d' \ -i gcc/cppdefault.c gcc/collect2.c || exit 1 else sed -e "s@__ALT1_PREFIX__@$ALT1_PREFIX@" \ -i gcc/cppdefault.c gcc/collect2.c || exit 1 fi if [ "x$ALT2_PREFIX" == "x" ]; then sed -e '/__ALT2_PREFIX__/d' \ -i gcc/cppdefault.c gcc/collect2.c || exit 1 else sed -e "s@__ALT2_PREFIX__@$ALT2_PREFIX@" \ -i gcc/cppdefault.c gcc/collect2.c || exit 1 fi date && echo Start of gcc compile stage echo Compiling gcc using: hash gcc g++ cpp || exit 1 gcc --version #--------------------------------------------------------------------- SUPLIB=$SRCTREE/gcc/suplib || exit 1 tar Jxf $SUPLIB/gmp-6.1.2.tar.xz || exit 1 tar Jxf $SUPLIB/isl-0.18.tar.xz || exit 1 tar zxf $SUPLIB/mpc-1.1.0.tar.gz || exit 1 tar jxf $SUPLIB/mpfr-3.1.6.tar.bz2 || exit 1 mv gmp{-6.1.2,} || exit 1 mv isl{-0.18,} || exit 1 mv mpc{-1.1.0,} || exit 1 mv mpfr{-3.1.6,} || exit 1 #--------------------------------------------------------------------- # This step may be needed for some systems. However, keep it commented # out unless you're sure that it's needed in your case. # # sed -e '/m64=/s/lib64/lib/' -i gcc/config/i386/t-linux64 #--------------------------------------------------------------------- # This step is from BFLS and/or Slackware: # sed -e 's@\./fixinc\.sh@-c true@' -i gcc/Makefile.in #--------------------------------------------------------------------- BINDIR=$TOOLS_PREFIX/bin LIBDIR=$TOOLS_PREFIX/lib mkdir -p $BINDIR $LIBDIR #--------------------------------------------------------------------- # The "chown/chmod" commands used here are based partly on Slackware # recommendations. #ifdef NOTUSED # chown -R 0.0 . #endif find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 754 -exec chmod 755 {} \; # Skip this one. It's too slow for some releases of gcc: # # find . -perm 664 -print -exec chmod 644 {} \; #--------------------------------------------------------------------- SDIR=`pwd` cd .. mkdir obj cd obj XDIR=`pwd` #--------------------------------------------------------------------- PREFIX=$TOOLS_PREFIX export TEMPDIR=/tmp export TMP=$TEMPDIR export TMPDIR=$TEMPDIR mkdir -p $TEMPDIR #--------------------------------------------------------------------- # "configure" step. GCCLANG="c,c++" PATH=`pwd`:$PATH bash ../gcc*/configure \ --prefix=$PREFIX \ --disable-bootstrap \ --disable-libmpx \ --disable-libstdcxx-pch \ --disable-multilib \ --disable-nls \ --enable-c99 \ --enable-checking=release \ --enable-clocale=gnu \ --enable-languages=$GCCLANG \ --enable-libgomp \ --enable-lto=yes \ --enable-shared \ --enable-static \ --enable-threads=posix \ --enable-__cxa_atexit \ --libexecdir=$PREFIX/lib || exit 1 #--------------------------------------------------------------------- date && echo gcc/g++ make start cd $XDIR make -j $NUMJOBS all-target-libgomp || exit 1 make -j $NUMJOBS || exit 1 date && echo 1st make done #--------------------------------------------------------------------- # "make install" step. date && echo make install start make install || exit 1 date && echo make install done #--------------------------------------------------------------------- cd $BINDIR (strip -p * || true) 2> /dev/null ln -nsf gcc cc || exit 1 ln -nsf g++ c++ || exit 1 hash cc c++ gcc g++ || exit 1 popd #--------------------------------------------------------------------- # end of "DOBOOTSTRAP" "if"-block #--------------------------------------------------------------------- else echo Using native gcc fi #--------------------------------------------------------------------- # build LuaJit #--------------------------------------------------------------------- date && echo Building LuaJit using: hash gcc g++ cpp || exit 1 gcc --version || exit 1 rm -fr $BUILDTMP || exit 1 mkdir $BUILDTMP || exit 1 pushd $BUILDTMP || exit 1 tar jxf $SRCTREE/luajit/luajit*.tar.bz2 || exit 1 cd luajit-git-[a-f0-9]* || exit 1 git checkout v2.1 || exit 1 patch -p1 < $SRCTREE/luajit/luajit*.patch || exit 1 sed -e "s@__META_PREFIX__@$TOOLS_PREFIX@" \ -i Makefile || exit 1 make -j $NUMJOBS || exit 1 make install || exit 1 cd $TOOLS_PREFIX/bin || exit 1 ln -nsf luajit-2.1.0-beta3 luajit || exit 1 popd #--------------------------------------------------------------------- # build LuaSocket #--------------------------------------------------------------------- date && echo Building LuaSocket using: hash gcc g++ cpp || exit 1 gcc --version rm -fr $BUILDTMP || exit 1 mkdir $BUILDTMP || exit 1 pushd $BUILDTMP || exit 1 tar jxf $SRCTREE/luajit/luasocket*.tar.bz2 || exit 1 cd luasocket-git-[a-f0-9]* || exit 1 patch -p1 < $SRCTREE/luajit/luasocket.patch || exit 1 sed -e "s@__META_PREFIX__@$TOOLS_PREFIX@" \ -i src/makefile || exit 1 make -j $NUMJOBS || exit 1 make install || exit 1 popd #--------------------------------------------------------------------- # build Irrlicht #--------------------------------------------------------------------- date && echo Building Irrlicht using: hash gcc g++ cpp || exit 1 g++ --version rm -fr $BUILDTMP || exit 1 mkdir $BUILDTMP || exit 1 pushd $BUILDTMP || exit 1 unzip -qo $SRCTREE/irrlicht/irrlicht-1.8.4.zip || exit 1 cd irrlicht-1.8.4 || exit 1 patch -p1 < $SRCTREE/irrlicht/irrlicht.patch || exit 1 DOCDIR=$TOOLS_PREFIX/doc INCDIR=$TOOLS_PREFIX/include/irrlicht LIBDIR=$TOOLS_PREFIX/lib mkdir -p $DOCDIR $INCDIR $LIBDIR pushd source/Irrlicht || exit 1 NDEBUG=1 make -j $NUMJOBS staticlib || exit 1 popd cp -p include/* $INCDIR/ || exit 1 cp -p lib/Linux/libIrrlicht.a $LIBDIR/ || exit 1 popd #--------------------------------------------------------------------- # build SQLite3 #--------------------------------------------------------------------- date && echo Building SQLite3 using: hash gcc g++ cpp || exit 1 gcc --version rm -fr $BUILDTMP || exit 1 mkdir $BUILDTMP || exit 1 pushd $BUILDTMP || exit 1 tar jxf $SRCTREE/sqlite3/sqlite3-*.tar.bz2 || exit 1 cd sqlite3-[0-9]* || exit 1 # If -O3 optimization is deemed to be safe, replace -O2 in the follow- # ing line with: -O3 export CFLAGS="-O2 \ -DSQLITE_ENABLE_FTS3=1 \ -DSQLITE_LIKE_DOESNT_MATCH_BLOB=1 \ -DSQLITE_MAX_EXPR_DEPTH=0 \ -DSQLITE_ENABLE_COLUMN_METADATA=1 \ -DSQLITE_ENABLE_UNLOCK_NOTIFY=1 \ -DSQLITE_SECURE_DELETE=1 \ -DSQLITE_DEFAULT_MEMSTATUS=0 \ -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \ -DSQLITE_ENABLE_DBSTAT_VTAB=1" # We assume that the upstream maintainer has already executed these # commands: # # git log -1 --format=format:%ci%n | \ # sed -e 's/ [-+].*$//;s/ /T/;s/^/D /' > manifest # git log -1 --format=format:%H > manifest.uuid export CC=`which gcc` sed -e 's@--mode=link@--mode=link --tag=CC@' \ -i Makefile.in || exit 1 autoreconf -fi || exit 1 bash ./configure \ --prefix=$TOOLS_PREFIX \ --disable-amalgamation \ --disable-replication \ --disable-tcl \ --enable-shared=no \ --enable-static=yes || exit 1 rm -fr libtool || exit 1 hash libtool || exit 1 cp -p `which libtool` . || exit 1 sed -e 's@^\(build_libtool_libs\)=.*@\1=no@' \ -e 's@^\(build_old_libs\)=.*@\1=yes@' \ -i libtool || exit 1 chmod 755 libtool || exit 1 make -j $NUMJOBS || make || exit 1 make install || make install || exit 1 popd #--------------------------------------------------------------------- # wrap it up #--------------------------------------------------------------------- strip $BINDIR/* 2> /dev/null || true strip -g $LIBDIR/*.a 2> /dev/null || true strip -g $LIBDIR/*.so 2> /dev/null || true rm -fr $BUILDTMP || exit 1 echo Done