金子邦彦研究室インストールUbuntu, WSL2ARM 用クロスコンパイラのインストール(Ubuntu 上)

ARM 用クロスコンパイラのインストール(Ubuntu 上)

前準備

echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf 
sudo /sbin/ldconfig

enable-targets=all で binutils, gcc, g++, gfortran をビルドしインストールする

  1. 前提ソフトウェア
    sudo apt -y update
    sudo apt -y install gcc-4.6
    sudo apt -y install g++-4.6
    sudo apt -y install libstdc++6-4.6-dev 
    
  2. enable-targets=allbinutils をビルドしインストールする
    cd /tmp
    apt-get source binutils
    sudo apt-get -yV build-dep binutils
    #
    cd /tmp
    if [ ! -f binutils-2.24.tar.gz ]; then 
        curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.gz
    fi
    sudo rm -rf binutils-2.24
    tar -xvzof binutils-2.24.tar.gz
    sudo chown -R $USER binutils-2.24
    #
    cd /tmp
    cd binutils-2.24
    rm -rf all 
    mkdir all 
    cd all 
    CC=gcc-4.6 \
    CXX=g++-4.6 \
    ../configure  --host=`arch`-pc-linux-gnu --target=`arch`-pc-linux-gnu \
        --enable-targets=all --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --enable-nls --enable-shared \
        --with-newlib \
        --disable-checking \
        --program-prefix=`arch`-pc-linux-gnu- \
        --with-sysroot=/ \
        --prefix=/usr/local 
    make -j8
    sudo make install
    sudo ldconfig 
    make check
    

  3. enable-targets=allgcc-4.8 をビルドしインストールする

    関連する外部ページhttps://gcc.gnu.org/install/build.html

    ※--with-arch-32=i686 を付けるとエラーが出ることがある.

    cd /tmp
    apt-get source gcc-4.6
    sudo apt-get -yV build-dep gcc-4.6
    #
    cd /tmp
    if [ ! -f gcc-4.8.2.tar.gz ]; then 
        curl -O http://www.ring.gr.jp/archives/lang/egcs/releases/gcc-4.8.2/gcc-4.8.2.tar.gz
    fi
    sudo rm -rf gcc-4.8.2
    tar -xvzof gcc-4.8.2.tar.gz
    sudo chown -R $USER gcc-4.8.2
    #
    cd /tmp
    cd gcc-4.8.2
    rm -rf all
    mkdir all
    cd all
    CC=gcc-4.6 \
    CXX=g++-4.6  \
    ../configure --host=`arch`-pc-linux-gnu --target=`arch`-pc-linux-gnu \
        --enable-languages=c,c++,fortran --with-binutils-version=2.24 \
        --enable-targets=all --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --enable-nls --enable-shared \
        --with-newlib \
        --disable-checking \
        --program-suffix=-4.8 \
        --enable-multiarch --with-tune=generic \
        --enable-threads=posix  --enable-clocale=gnu \
        --enable-gnu-unique-object \
        --enable-target-optspace  --enable-initfini-array \
        --with-gxx-include-dir=/usr/local/include/c++/4.8.2 --enable-libstdcxx-debug --enable-libstdcxx-time=yes   \
        --with-sysroot=/ \
        --prefix=/usr/local 
    make -j8
    sudo make install
    sudo rm -f /usr/local/lib/libiberty.a
    sudo ldconfig
    make check
    
  4. enable-targets=allbinutils をビルドしインストールする

    CC=gcc-4.8, CXX=g++-4.8 に変えて、再度インストールする。

    cd /tmp
    apt-get source binutils
    sudo apt-get -yV build-dep binutils
    #
    cd /tmp
    if [ ! -f binutils-2.24.tar.gz ]; then 
        curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.gz
    fi
    sudo rm -rf binutils-2.24
    tar -xvzof binutils-2.24.tar.gz
    sudo chown -R $USER binutils-2.24
    #
    cd /tmp
    cd binutils-2.24
    rm -rf all 
    mkdir all 
    cd all 
    CC=gcc-4.8 \
    CXX=g++-4.8 \
    ../configure  --host=`arch`-pc-linux-gnu --target=`arch`-pc-linux-gnu \
        --enable-targets=all --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --enable-nls --enable-shared \
        --with-newlib \
        --disable-checking \
        --program-prefix=`arch`-pc-linux-gnu- \
        --with-sysroot=/ \
        --prefix=/usr/local 
    make -j8
    sudo make install
    sudo ldconfig 
    make check
    

クロスコンパイラ(ターゲット:arm-linux-eabi)

参考にしたWebページ: http://www.kunen.org/uC/gnu_tool.html(現存しない)

参考にしたWebページ: http://lfsbookja.sourceforge.jp/svn.ja/chapter05/binutils-pass1.html(現存しない)

クロスコンパイラで c++ を入れるのは断念(私の能力を超える)2013/12

  1. arm-linux-eabi をターゲットとする binutils をビルドしインストールする
    cd /tmp
    apt-get source binutils
    sudo apt-get -yV build-dep binutils
    #
    cd /tmp
    if [ ! -f binutils-2.24.tar.gz ]; then 
        curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.gz
    fi
    sudo rm -rf binutils-2.24
    tar -xvzof binutils-2.24.tar.gz
    sudo chown -R $USER binutils-2.24
    #
    cd /tmp
    cd binutils-2.24
    rm -rf arm-linux-eabi
    mkdir arm-linux-eabi
    cd arm-linux-eabi
    CC=gcc-4.8 \
    CXX=g++-4.8 \
    ../configure --host=`arch`-pc-linux-gnu  --with-cross-host=`arch`-pc-linux-gnu --target=arm-linux-eabi \
        --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --disable-nls --disable-shared \
        --disable-threads --disable-clocale 
    make -j8 
    sudo make install
    sudo ldconfig
    make check
    

  2. arm-linux-eabi をターゲットとする gcc-4.8 をビルドしインストールする

    ここでは --without-newlib --without-headers と設定する

    cd /tmp
    apt-get source gcc-4.6
    sudo apt-get -yV build-dep gcc-4.6
    #
    cd /tmp
    if [ ! -f gcc-4.8.2.tar.gz ]; then 
        curl -O http://www.ring.gr.jp/archives/lang/egcs/releases/gcc-4.8.2/gcc-4.8.2.tar.gz
    fi
    sudo rm -rf gcc-4.8.2
    tar -xvzof gcc-4.8.2.tar.gz
    sudo chown -R $USER gcc-4.8.2
    #
    cd /tmp
    cd gcc-4.8.2
    rm -rf arm-linux-eabi
    mkdir arm-linux-eabi
    cd arm-linux-eabi
    CC=gcc-4.8 \
    CXX=g++-4.8 CXXFLAGS="-I/usr/local/include/c++/4.8.2 -I/usr/local/include/c++/4.8.2/`arch`-pc-linux-gnu" \
    ../configure --host=`arch`-pc-linux-gnu  --with-cross-host=`arch`-pc-linux-gnu --target=arm-linux-eabi \
        --enable-languages=c,fortran --disable-lto \
        --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --disable-nls --disable-shared \
        --disable-threads --disable-clocale \
        --enable-interwork \
        --enable-multiarch \
        --with-arch=armv7-a --with-float=soft --with-float-abi=softfp --with-fpu=vfp \
        --without-newlib --without-headers \
        --disable-libstdcxx --disable-hosted-libstdcxx --disable-libstdcxx-threads \
        --disable-werror \
        --disable-checking \
        --disable-ppl-version-check --disable-cloog-version-check \
        --disable-libssp --disable-libmudflap --disable-libgomp --disable-sjlj-exceptions --disable-tls --disable-libitm --disable-libatomic \
        --disable-bootstrap 
    make -j8 
    sudo make install 
    sudo ldconfig
    make check
    
    ../configure --host=`arch`-linux-gnu --target=arm-linux-eabi \
        --enable-languages=c,fortran --with-binutils-version=2.24 \
        --with-sysroot=/ --build=`arch`-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --disable-nls --disable-shared \
        --disable-gold  --disable-plugin  \
        --without-newlib --without-headers \
        --disable-checking \
        --disable-multiarch \
        --disable-threads --disable-clocale \
        --with-gxx-include-dir=/usr/local/arm-linux-eabi/include/c++/4.8.2 --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object \
        --with-arch=armv5te \
        --disable-ppl-version-check --disable-cloog-version-check \
        --disable-libssp --disable-libmudflap --disable-libgomp --disable-sjlj-exceptions --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --enable-bootstrap --disable-libquadmath --disable-libquadmath-support --disable-libatomic  \
        --prefix=/usr/local 
    make -j8
    sudo make install
    sudo ldconfig
    make check
    

  3. arm-linux-eabi をターゲットとする newlib をビルドしインストールする
    cd /tmp
    apt-get source newlib
    sudo apt-get -yV build-dep newlib
    #
    cd /tmp
    sudo rm -rf newlib-2.0.0
    if [ ! -f newlib-2.0.0.tar.gz ]; then 
        curl -O ftp://sourceware.org/pub/newlib/newlib-2.0.0.tar.gz
    fi
    tar -xvzof newlib-2.0.0.tar.gz
    #
    cd /tmp
    cd newlib-2.0.0
    rm -rf arm-linux-eabi
    mkdir arm-linux-eabi
    cd arm-linux-eabi
    CC=gcc-4.8 \
    CXX=g++-4.8 \
    ../configure --host=`arch`-pc-linux-gnu  --with-cross-host=`arch`-pc-linux-gnu --target=arm-linux-eabi \
        --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --disable-nls --disable-shared \
        --disable-threads --disable-clocale \
        --enable-interwork \
        --enable-interwork \
        --enable-multiarch 
    make -j8
    sudo make install
    sudo ldconfig
    make check
    

  4. arm-linux-eabi をターゲットとする gcc-4.8 をビルドしインストールする

    今度は --with-newlib --with-headers=/tmp/newlib-2.0.0/newlib/libc/include と設定する.

    cd /tmp
    apt-get source gcc-4.6
    sudo apt-get -yV build-dep gcc-4.6
    #
    cd /tmp
    if [ ! -f gcc-4.8.2.tar.gz ]; then 
        curl -O http://www.ring.gr.jp/archives/lang/egcs/releases/gcc-4.8.2/gcc-4.8.2.tar.gz
    fi
    sudo rm -rf gcc-4.8.2
    tar -xvzof gcc-4.8.2.tar.gz
    sudo chown -R $USER gcc-4.8.2
    #
    cd /tmp
    cd gcc-4.8.2
    if [ ! -d /tmp/newlib-2.0.0 ]; then 
        exit 
    fi
    rm -f newlib
    ln -s /tmp/newlib-2.0.0/newlib .
    rm -f libgloss
    ln -s /tmp/newlib-2.0.0/libgloss . 
    #
    cd /tmp
    cd gcc-4.8.2
    rm -rf arm-linux-eabi
    mkdir arm-linux-eabi
    cd arm-linux-eabi
    CC=gcc-4.8 \
    CXX=g++-4.8 CXXFLAGS="-I/usr/local/include/c++/4.8.2 -I/usr/local/include/c++/4.8.2/`arch`-pc-linux-gnu" \
    ../configure --host=`arch`-pc-linux-gnu  --with-cross-host=`arch`-pc-linux-gnu --target=arm-linux-eabi \
        --enable-languages=c,fortran --disable-lto \
        --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --disable-nls --disable-shared \
        --disable-threads --disable-clocale \
        --enable-interwork \
        --enable-multiarch \
        --with-arch=armv7-a --with-float=soft --with-float-abi=softfp --with-fpu=vfp \
        --with-newlib --with-headers=/tmp/newlib-2.0.0/newlib/libc/include \
        --disable-libstdcxx --disable-hosted-libstdcxx --disable-libstdcxx-threads \
        --disable-werror \
        --disable-checking \
        --disable-ppl-version-check --disable-cloog-version-check \
        --disable-libssp --disable-libmudflap --disable-libgomp --disable-sjlj-exceptions --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --enable-bootstrap --disable-libquadmath --disable-libquadmath-support --disable-libatomic  \
        --disable-bootstrap 
    make -j8 
    sudo make install 
    sudo ldconfig
    make check
    

  5. (オプション) arm-linux-eabi をターゲットとする glibc をビルドしインストールする
    cd /tmp
    apt-get source libglib2.0-dev
    sudo apt-get -yV build-dep libglib2.0-dev
    #
    cd /tmp
    if [ ! -f glibc-2.18.tar.gz ]; then 
      curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
    fi
    tar -xvzof glibc-2.18.tar.gz
    sudo chown -R $USER glibc-2.18
    #
    cd /tmp
    cd glibc-2.18
    rm -rf arm-linux-eabi
    mkdir arm-linux-eabi
    cd arm-linux-eabi
    CC=gcc-4.8 \
    CXX=g++-4.8 \
    ../configure --host=`arch`-pc-linux-gnu  --with-cross-host=`arch`-pc-linux-gnu --target=arm-linux-eabi \
        --build=`arch`-pc-linux-gnu \
        --enable-gnu-as --enable-gnu-ld --enable-multilib --enable-generated-files-in-srcdir --enable-version-specific-runtime-libs \
        --disable-werror --enable-libtool --disable-nls --disable-shared \
        --disable-threads --disable-clocale \
        --disable-static-nss --disable-nss-crypt --without-selinux --disable-nscd\
        --prefix=/usr/local/arm-linux-eabi-glibc-2.18
    make -j8
    sudo make install
    sudo ldconfig
    make check