1*2eb4461aSRichard Henderson#!/bin/bash
2*2eb4461aSRichard Henderson
3*2eb4461aSRichard Hendersonset -e
4*2eb4461aSRichard Henderson
5*2eb4461aSRichard HendersonTARGET=nios2-linux-gnu
6*2eb4461aSRichard HendersonLINUX_ARCH=nios2
7*2eb4461aSRichard Henderson
8*2eb4461aSRichard HendersonJ=$(expr $(nproc) / 2)
9*2eb4461aSRichard HendersonTOOLCHAIN_INSTALL=/usr/local
10*2eb4461aSRichard HendersonTOOLCHAIN_BIN=${TOOLCHAIN_INSTALL}/bin
11*2eb4461aSRichard HendersonCROSS_SYSROOT=${TOOLCHAIN_INSTALL}/$TARGET/sys-root
12*2eb4461aSRichard Henderson
13*2eb4461aSRichard Hendersonexport PATH=${TOOLCHAIN_BIN}:$PATH
14*2eb4461aSRichard Henderson
15*2eb4461aSRichard Henderson#
16*2eb4461aSRichard Henderson# Grab all of the source for the toolchain bootstrap.
17*2eb4461aSRichard Henderson#
18*2eb4461aSRichard Henderson
19*2eb4461aSRichard Hendersonwget https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz
20*2eb4461aSRichard Hendersonwget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz
21*2eb4461aSRichard Hendersonwget https://ftp.gnu.org/gnu/glibc/glibc-2.34.tar.xz
22*2eb4461aSRichard Hendersonwget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.70.tar.xz
23*2eb4461aSRichard Henderson
24*2eb4461aSRichard Hendersontar axf binutils-2.37.tar.xz
25*2eb4461aSRichard Hendersontar axf gcc-11.2.0.tar.xz
26*2eb4461aSRichard Hendersontar axf glibc-2.34.tar.xz
27*2eb4461aSRichard Hendersontar axf linux-5.10.70.tar.xz
28*2eb4461aSRichard Henderson
29*2eb4461aSRichard Hendersonmv binutils-2.37 src-binu
30*2eb4461aSRichard Hendersonmv gcc-11.2.0 src-gcc
31*2eb4461aSRichard Hendersonmv glibc-2.34 src-glibc
32*2eb4461aSRichard Hendersonmv linux-5.10.70 src-linux
33*2eb4461aSRichard Henderson
34*2eb4461aSRichard Hendersonmkdir -p bld-hdr bld-binu bld-gcc bld-glibc
35*2eb4461aSRichard Hendersonmkdir -p ${CROSS_SYSROOT}/usr/include
36*2eb4461aSRichard Henderson
37*2eb4461aSRichard Henderson#
38*2eb4461aSRichard Henderson# Install kernel and glibc headers
39*2eb4461aSRichard Henderson#
40*2eb4461aSRichard Henderson
41*2eb4461aSRichard Hendersoncd src-linux
42*2eb4461aSRichard Hendersonmake headers_install ARCH=${LINUX_ARCH} INSTALL_HDR_PATH=${CROSS_SYSROOT}/usr
43*2eb4461aSRichard Hendersoncd ..
44*2eb4461aSRichard Henderson
45*2eb4461aSRichard Hendersoncd bld-hdr
46*2eb4461aSRichard Henderson../src-glibc/configure --prefix=/usr --host=${TARGET}
47*2eb4461aSRichard Hendersonmake install-headers DESTDIR=${CROSS_SYSROOT}
48*2eb4461aSRichard Hendersontouch ${CROSS_SYSROOT}/usr/include/gnu/stubs.h
49*2eb4461aSRichard Hendersoncd ..
50*2eb4461aSRichard Henderson
51*2eb4461aSRichard Henderson#
52*2eb4461aSRichard Henderson# Build binutils
53*2eb4461aSRichard Henderson#
54*2eb4461aSRichard Henderson
55*2eb4461aSRichard Hendersoncd bld-binu
56*2eb4461aSRichard Henderson../src-binu/configure --disable-werror \
57*2eb4461aSRichard Henderson  --prefix=${TOOLCHAIN_INSTALL} --with-sysroot --target=${TARGET}
58*2eb4461aSRichard Hendersonmake -j${J}
59*2eb4461aSRichard Hendersonmake install
60*2eb4461aSRichard Hendersoncd ..
61*2eb4461aSRichard Henderson
62*2eb4461aSRichard Henderson#
63*2eb4461aSRichard Henderson# Build gcc, without shared libraries, because we do not yet
64*2eb4461aSRichard Henderson# have a shared libc against which to link.
65*2eb4461aSRichard Henderson#
66*2eb4461aSRichard Henderson
67*2eb4461aSRichard Hendersoncd bld-gcc
68*2eb4461aSRichard Henderson../src-gcc/configure --disable-werror --disable-shared \
69*2eb4461aSRichard Henderson  --prefix=${TOOLCHAIN_INSTALL} --with-sysroot --target=${TARGET} \
70*2eb4461aSRichard Henderson  --enable-languages=c --disable-libssp --disable-libsanitizer \
71*2eb4461aSRichard Henderson  --disable-libatomic --disable-libgomp --disable-libquadmath
72*2eb4461aSRichard Hendersonmake -j${J}
73*2eb4461aSRichard Hendersonmake install
74*2eb4461aSRichard Hendersoncd ..
75*2eb4461aSRichard Henderson
76*2eb4461aSRichard Henderson#
77*2eb4461aSRichard Henderson# Build glibc
78*2eb4461aSRichard Henderson# There are a few random things that use c++ but we didn't build that
79*2eb4461aSRichard Henderson# cross-compiler.  We can get away without them.  Disable CXX so that
80*2eb4461aSRichard Henderson# glibc doesn't try to use the host c++ compiler.
81*2eb4461aSRichard Henderson#
82*2eb4461aSRichard Henderson
83*2eb4461aSRichard Hendersoncd bld-glibc
84*2eb4461aSRichard HendersonCXX=false ../src-glibc/configure --prefix=/usr --host=${TARGET}
85*2eb4461aSRichard Hendersonmake -j${j}
86*2eb4461aSRichard Hendersonmake install DESTDIR=${CROSS_SYSROOT}
87*2eb4461aSRichard Hendersoncd ..
88