build.rtems.4.11.smp.sh 3.35 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
#!/bin/bash
#
# This script builds the RTEMS/SPARC cross-compiler and the
# Leon2/Leon3/NGMP BSPs.
#
# To have a reproducible setup, it would be prudent if you
# executed this script under a Debian jessie chroot,
# bootstrapped via the following:
#
#     mkdir /opt/jessie-chroot
#     debootstrap jessie /opt/jessie-chroot
#     mount -t proc none /opt/jessie-chroot/proc/
#     mount -t sysfs none /opt/jessie-chroot/sys/
#     mount -o bind /dev /opt/jessie-chroot/dev/
#     mount -o bind /dev/pts /opt/jessie-chroot/dev/pts/
#     chroot /opt/jessie-chroot
#     apt-get update
#     apt-get build-dep binutils gcc g++ gdb unzip git python2.7-dev pax
#
# Then chroot inside it and run this script:
#
#     chroot /opt/jessie-chroot
#     /path/to/build.rtems.4.12.sh


# Stop on any error
set -e

DATE=$(date +"%Y.%m.%d")
mkdir -p ~/rtems.build.logs
BUILD_LOG=~/rtems.build.logs/${DATE}.log
[ -f ${BUILD_LOG} ] && {
    echo "There's already a build log:"
    echo "    " ${BUILD_LOG}
    echo Remove it to continue.
    exit 1
}

# Record the output in $BUILD_LOG (see matching brace)
{
    # Begin by checking out the RTEMS Source Builder

    mkdir -p ~/development/rtems/src
    RSB=~/development/rtems/src/rtems-source-builder-${DATE}
    RTPREFIX=/opt/rtems-4.11-${DATE}
    rm -rf ${RTPREFIX}
    [ ! -d $RSB ] && {
        cd ~/development/rtems/src/
        git clone git://git.rtems.org/rtems-source-builder.git rtems-source-builder-${DATE}
    }
    cd $RSB

    # Get the 4.11 branch
    git checkout -f 4.11

    # Verify that we have all we need to build
    source-builder/sb-check

Thanassis Tsiodras's avatar
Thanassis Tsiodras committed
59 60
    cd rtems

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
    # Your network firewall may or may not be an issue at this point:
    # Many of the source tarballs needed by the RSB are fetched over
    # PASV-enabled FTP servers.
    #
    # If your network is like the one in ESA/ESTEC and this is forbidden,
    # you'll have to fetch these tarballs and hardlink to them each time
    # (so no FTP action is triggered by the RTEMS RSB builder).
    # The sed invocation below also replaces ftp: with http:
    # (since this needs no PASV port meddling - which some firewalls object to)
    #
    # This is the way I do it - adapt it according to your needs:
    #
    # [ ! -d sources ] && {
    #     mkdir -p sources
    #     cd sources
    #     cp -al ~/development/rtems/pkg_sources_cache/* .
    #     cd ..
    #     for i in config/tools/*cfg ; do
    #         cat "$i" | sed 's,ftp://ftp.gnu.org,http://ftp.gnu.org,;s,ftp://gcc.gnu.org,http://gcc.gnu.org,;' > "$i".new && mv "$i".new "$i"
    #     done
    # }

    # Build the cross compiling toolchain
    ../source-builder/sb-set-builder --log=stage1.log --prefix=${RTPREFIX} 4.11/rtems-sparc 

    # Add the cross compiler to the PATH
    export PATH=${RTPREFIX}/bin:$PATH
    cd ..

    # checkout RTEMS4.11 - avoid doing it twice :-)
    [ ! -d rtems-git ] && {
        git clone https://github.com/RTEMS/rtems.git rtems-git
        cd rtems-git
        git checkout -f 4.11
        cd ..
    }

    # Build RTEMS
    cd rtems-git
    ./bootstrap
    cd ..
    rm -rf build.${DATE}
    mkdir build.${DATE}
    cd build.${DATE}
    ../rtems-git/configure \
        --target=sparc-rtems4.11 --prefix=${RTPREFIX} \
        --enable-rtemsbsp="leon2 leon3 ngmp" --enable-posix \
        --enable-smp --enable-cxx --enable-networking --enable-experimental-smp
    make all
    make install
} |& tee ${BUILD_LOG}