系統 - Debian - Build ARM binutils(Static Link)



參考資訊:
https://github.com/andrew-d/static-binaries/blob/master/binutils/arm/build.sh

run.sh

#!/bin/bash
set -e
set -o pipefail
set -x

BINUTILS_VERSION=2.39

function build_binutils() {
    rm -rf build
    mkdir build
    cd build

    curl -LO http://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.gz
    tar xzvf binutils-${BINUTILS_VERSION}.tar.gz

    mkdir build
    cd build

    TMPFILE=`pwd`/configure.output
    ../binutils-${BINUTILS_VERSION}/configure --help > $TMPFILE

    CONFIGURE_OPTS=""
    for opt in disable-nls enable-static-link disable-shared-plugins disable-dynamicplugin disable-tls disable-pie; do
        grep -qs $opt $TMPFILE && CONFIGURE_OPTS="$CONFIGURE_OPTS --$opt"
    done
    for opt in enable-static; do
        grep -qs $opt $TMPFILE && CONFIGURE_OPTS="$CONFIGURE_OPTS --$opt=yes"
    done
    for opt in enable-shared; do
        grep -qs $opt $TMPFILE && CONFIGURE_OPTS="$CONFIGURE_OPTS --$opt=no"
    done
    rm -f $TMPFILE

    CC='arm-linux-gnueabi-gcc -static -fPIC' \
    CXX='arm-linux-gnueabi-g++ -static -static-libstdc++ -fPIC' \
    LD='arm-linux-gnueabi-ld' \
    ../binutils-${BINUTILS_VERSION}/configure --target=arm-linux-gnueabi --prefix=`pwd` ${CONFIGURE_OPTS}

    make
    make clean
    make LDFLAGS=-all-static
    OUTPUT_FILES="ar nm-new objcopy objdump ranlib readelf size strings"
    for f in ${OUTPUT_FILES};
    do
        arm-linux-gnueabi-strip binutils/$f
    done
    arm-linux-gnueabi-strip ld/ld-new
    arm-linux-gnueabi-strip gas/as-new
}

function doit() {
    build_binutils

    rm -rf output
    mkdir output

    OUT_DIR=output/`uname | tr 'A-Z' 'a-z'`/`uname -m`
    mkdir -p $OUT_DIR

    for f in ar objcopy objdump ranlib readelf size strings;
    do
        cp binutils/$f $OUT_DIR/
    done
    cp binutils/nm-new $OUT_DIR/nm
    cp ld/ld-new $OUT_DIR/ld
    cp gas/as-new $OUT_DIR/as
    echo "finished !"
}

doit

編譯

$ sudo apt-get install gcc-arm-linux-gnueabi* texinfo file -y

$ chmod a+x ./run.sh
$ ./run.sh
$ ls build/build/output/linux/*/
    ar  as  ld  nm  objcopy  objdump  ranlib  readelf  size  strings