Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@i0z0m
Last active August 5, 2019 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save i0z0m/3bdab117999ac2f9342b76e9327313f5 to your computer and use it in GitHub Desktop.
Save i0z0m/3bdab117999ac2f9342b76e9327313f5 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
PREFIX=/opt/cross
BINUTILS_VERSION=binutils-2.28
LINUX_KERNEL_VERSION=linux-4.11.7
GCC_VERSION=gcc-7.1.0
GLIBC_VERSION=glibc-2.25
MPFR_VERSION=mpfr-3.1.5
GMP_VERSION=gmp-6.1.1
MPC_VERSION=mpc-1.0.3
ISL_VERSION=isl-0.16.1
CLOOG_VERSION=cloog-0.18.1
TERMCAP_VERSION=termcap-1.3.1
GDB_VERSION=gdb-8.0
# Download packages
mkdir archives
cd archives
wget -nc http://ftpmirror.gnu.org/binutils/$BINUTILS_VERSION.tar.gz
wget -nc https://www.kernel.org/pub/linux/kernel/v4.x/$LINUX_KERNEL_VERSION.tar.xz
wget -nc http://ftpmirror.gnu.org/gcc/$GCC_VERSION/$GCC_VERSION.tar.gz
wget -nc http://ftpmirror.gnu.org/glibc/$GLIBC_VERSION.tar.xz
wget -nc http://ftp.jaist.ac.jp/pub/GNU/mpfr/$MPFR_VERSION.tar.gz
wget -nc http://ftp.jaist.ac.jp/pub/GNU/gmp/$GMP_VERSION.tar.xz
wget -nc http://ftp.jaist.ac.jp/pub/GNU/mpc/$MPC_VERSION.tar.gz
wget -nc ftp://gcc.gnu.org/pub/gcc/infrastructure/$ISL_VERSION.tar.bz2
wget -nc ftp://gcc.gnu.org/pub/gcc/infrastructure/$CLOOG_VERSION.tar.gz
wget -nc ftp://ftp.gnu.org/gnu/termcap/$TERMCAP_VERSION.tar.gz
wget -nc http://ftp.gnu.org/gnu/gdb/$GDB_VERSION.tar.gz
# Extract everything
for f in *.tar*; do
tar xfk $f
done
# Download requirements for gcc
cd $GCC_VERSION
ln -s ../$MPFR_VERSION mpfr
ln -s ../$GMP_VERSION gmp
ln -s ../$MPC_VERSION mpc
ln -s ../$ISL_VERSION isl
ln -s ../$CLOOG_VERSION cloog
cd ..
mkdir -p $PREFIX
chown ubuntu $PREFIX
export PATH=$PREFIX/bin:$PATH
build() {
local TARGET="$1"
local LINUX_ARCH="$2"
# Step 1. Binutils
mkdir -p build-binutils-$TARGET
cd build-binutils-$TARGET
../$BINUTILS_VERSION/configure --prefix=$PREFIX --target=$TARGET $CONFIGURATION_OPTIONS
make $PARALLEL_MAKE
make install
cd ..
# Step 2. Linux Kernel Headers
cd $LINUX_KERNEL_VERSION
make ARCH=$LINUX_ARCH INSTALL_HDR_PATH=$PREFIX/$TARGET headers_install
cd ..
# Step 3. C/C++ Compilers
mkdir -p build-gcc-$TARGET
cd build-gcc-$TARGET
../$GCC_VERSION/configure --prefix=$PREFIX --target=$TARGET --enable-languages=c,c++ $CONFIGURATION_OPTIONS
make $PARALLEL_MAKE all-gcc
make install-gcc
cd ..
# Step 4. Standard C Library Headers and Startup Files
mkdir -p build-glibc-$TARGET
cd build-glibc-$TARGET
../$GLIBC_VERSION/configure --prefix=$PREFIX/$TARGET --build=$MACHTYPE --host=$TARGET --target=$TARGET --with-headers=$PREFIX/$TARGET/include $CONFIGURATION_OPTIONS libc_cv_forced_unwind=yes
make install-bootstrap-headers=yes install-headers
# make $PARALLEL_MAKE csu/subdir_lib これが失敗する
# install csu/crt1.o csu/crti.o csu/crtn.o $PREFIX/$TARGET/lib
# $TARGET-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $PREFIX/$TARGET/lib/libc.so
# touch $PREFIX/$TARGET/include/gnu/stubs.h
# cd ..
# Step 5. Compiler Support Library
# cd build-gcc-$TARGET
# make $PARALLEL_MAKE all-target-libgcc
# make install-target-libgcc
# cd ..
# Step 6. Standard C Library & the rest of Glibc
# cd build-glibc-$TARGET
# make $PARALLEL_MAKE
# make install
# cd ..
# Step 7. Standard C++ Library & the rest of GCC
# cd build-gcc-$TARGET
# make $PARALLEL_MAKE
# make install
# cd ..
# Step 8. GDB
# mkdir -p build-termcap-$TARGET
# cd build-termcap-$TARGET
# ../$TERMCAP_VERSION/configure --prefix=$PREFIX --target=$TARGET
# make $PARALLEL_MAKE
# make install
# cd ..
# mkdir -p build-gdb-$TARGET
# cd build-gdb-$TARGET
# ../$GDB_VERSION/configure --prefix=$PREFIX --target=$TARGET
# make $PARALLEL_MAKE
# make install
# cd ..
}
build aarch64-linux-gnu arm64
ubuntu@ubuntu-xenial:~/archives/build-glibc-aarch64-linux-gnu$sudo make -j4 csu/subdir_lib
make -r PARALLELMFLAGS="" -C ../glibc-2.25 objdir=`pwd` csu/subdir_lib
make[1]: Entering directory '/home/ubuntu/archives/glibc-2.25'
make subdir=csu -C csu ..=../ subdir_lib
make[2]: Entering directory '/home/ubuntu/archives/glibc-2.25/csu'
.././scripts/mkinstalldirs /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu
.././scripts/mkinstalldirs /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu
.././scripts/mkinstalldirs /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu
gawk -f ../scripts/gen-as-const.awk ../sysdeps/aarch64/nptl/tcb-offsets.sym \
| aarch64-linux-gnu-gcc -S -o /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tcb-offsets.hT3 -std=gnu11 -fgnu89-inline -O2 -Wall -Werror -Wundef -Wwrite-strings -fmerge-all-constants -fno-stack-protector -frounding-math -g -Wstrict-prototypes -Wold-style-definition -ftls-model=initial-exec -I../include -I/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu -I/home/ubuntu/archives/build-glibc-aarch64-linux-gnu -I../sysdeps/unix/sysv/linux/aarch64 -I../sysdeps/aarch64/nptl -I../sysdeps/unix/sysv/linux/generic -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/aarch64/fpu -I../sysdeps/aarch64 -I../sysdeps/wordsize-64 -I../sysdeps/ieee754/ldbl-128 -I../sysdeps/ieee754/dbl-64/wordsize-64 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/aarch64/soft-fp -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -nostdinc -isystem /opt/cross/lib/gcc/aarch64-linux-gnu/7.1.0/include -isystem /opt/cross/lib/gcc/aarch64-linux-gnu/7.1.0/include-fixed -isystem /opt/cross/aarch64-linux-gnu/include -D_LIBC_REENTRANT -include /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h -x c - \
-MD -MP -MF /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tcb-offsets.h.dT -MT '/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tcb-offsets.h.d /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tcb-offsets.h'
mkdir -p -- /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu
(files="../crypt/Banner ../libidn/Banner ../nptl/Banner ../resolv/Banner"; \
if test -n "$files"; then \
printf '"Available extensions:\\n"\n'; \
sed -e '/^#/d' -e 's/^[[:space:]]*/ /' \
-e 's/^\(.*\)$/\"\1\\n\"/' $files; \
fi) > /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/version-info.hT
rm -f /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/abi-tag.h.new
/bin/sh: 2: aarch64-linux-gnu-gcc: not found
mkdir -p -- /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu
sed -e 's/#.*$//' -e '/^[ ]*$/d' ../abi-tags | \
while read conf tagos tagver; do \
test `expr 'aarch64-unknown-linux-gnu' \
: "$conf"` != 0 || continue; \
( echo "$tagos" | \
sed -e 's/[^0-9xXa-fA-F ]//' \
-e 's/^/#define __ABI_TAG_OS /'; \
echo "#ifndef __ABI_TAG_VERSION"; \
echo "$tagver" | \
sed -e 's/[^0-9xXa-fA-F]/ /g' -e 's/ *$//' \
-e 's/ /,/g' -e 's/^/# define __ABI_TAG_VERSION /'; \
echo "#endif" ) > /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/abi-tag.h.new; \
done
gawk -f ../scripts/gen-as-const.awk ../sysdeps/aarch64/tlsdesc.sym \
| aarch64-linux-gnu-gcc -S -o /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tlsdesc.hT3 -std=gnu11 -fgnu89-inline -O2 -Wall -Werror -Wundef -Wwrite-strings -fmerge-all-constants -fno-stack-protector -frounding-math -g -Wstrict-prototypes -Wold-style-definition -ftls-model=initial-exec -I../include -I/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu -I/home/ubuntu/archives/build-glibc-aarch64-linux-gnu -I../sysdeps/unix/sysv/linux/aarch64 -I../sysdeps/aarch64/nptl -I../sysdeps/unix/sysv/linux/generic -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/aarch64/fpu -I../sysdeps/aarch64 -I../sysdeps/wordsize-64 -I../sysdeps/ieee754/ldbl-128 -I../sysdeps/ieee754/dbl-64/wordsize-64 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/aarch64/soft-fp -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -nostdinc -isystem /opt/cross/lib/gcc/aarch64-linux-gnu/7.1.0/include -isystem /opt/cross/lib/gcc/aarch64-linux-gnu/7.1.0/include-fixed -isystem /opt/cross/aarch64-linux-gnu/include -D_LIBC_REENTRANT -include /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h -x c - \
-MD -MP -MF /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tlsdesc.h.dT -MT '/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tlsdesc.h.d /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tlsdesc.h'
/bin/sh: 2: aarch64-linux-gnu-gcc: not found
if test -r /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/abi-tag.h.new; then mv -f /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/abi-tag.h.new /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/abi-tag.h; \
else echo >&2 'This configuration not matched in ../abi-tags'; exit 1; fi
../Makerules:266: recipe for target '/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tcb-offsets.h' failed
make[2]: *** [/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tcb-offsets.h] Error 127
make[2]: *** Waiting for unfinished jobs....
../Makerules:266: recipe for target '/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tlsdesc.h' failed
make[2]: *** [/home/ubuntu/archives/build-glibc-aarch64-linux-gnu/tlsdesc.h] Error 127
mv -f /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/version-info.hT /home/ubuntu/archives/build-glibc-aarch64-linux-gnu/csu/version-info.h
make[2]: Leaving directory '/home/ubuntu/archives/glibc-2.25/csu'
Makefile:215: recipe for target 'csu/subdir_lib' failed
make[1]: *** [csu/subdir_lib] Error 2
make[1]: Leaving directory '/home/ubuntu/archives/glibc-2.25'
Makefile:9: recipe for target 'csu/subdir_lib' failed
make: *** [csu/subdir_lib] Error 2
ubuntu@ubuntu-xenial:~/archives/build-glibc-aarch64-linux-gnu$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment