FROM 	debian:stretch


ENV	BINUTILS_SRC=http://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2
ENV	NEWLIB_SRC=https://sourceware.org/pub/newlib/newlib-1.19.0.tar.gz
ENV	GCC_SRC=http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
ENV	PREFIX=/usr/local

# Install build tools and dependencies
RUN	apt update && apt install -y \
		build-essential \
		libmpfr-dev \
		libmpc-dev \
		libgmp3-dev \
		zlib1g-dev \
		zlibc \
		texinfo \
		bison \
		flex \
		curl \
		patch \
		file \
		python2.7-minimal \
		autoconf \
		libtool \
		git

# Stage 0: Download and patch the source code
RUN	curl -SL ${BINUTILS_SRC} | tar -xj -C /usr/src && \
	curl -SL ${NEWLIB_SRC} | tar -xz -C /usr/src && \
	curl -SL ${GCC_SRC} | tar -xj -C /usr/src

COPY	patches/ /usr/src/patches
RUN	for patch in /usr/src/patches/gcc-*.patch; do \
		patch -d /usr/src/gcc-* -p1 < $patch; \
	done

# Stage 1: Build and install binutils
RUN	mkdir -p /home/build/binutils && cd /home/build/binutils \
		&& /usr/src/binutils-*/configure \
			CFLAGS="-w" \
			--prefix=${PREFIX} \
			--disable-werror \
			--target=arm-none-eabi \
			--enable-interwork \
			--enable-threads=posix \
			--enable-multilib \
			--with-float=soft \
		&& make all install

# Stage 2: Build and install GCC (compiler only)
RUN	mkdir -p /home/build/gcc && cd /home/build/gcc \
		&& HDR_PATH=$(realpath /usr/src/newlib-*/newlib/libc/include) \
		&& /usr/src/gcc-*/configure \
			CFLAGS="-w" \
			--prefix=${PREFIX} \
			--disable-shared \
			--disable-werror \
			--target=arm-none-eabi \
			--enable-interwork \
			--enable-multilib \
			--with-float=soft \
			--enable-languages="c,c++" \
			--with-newlib \
			--with-headers=$HDR_PATH \
			--with-system-zlib \
		&& make all-gcc install-gcc

# Stage 3: Build and install newlib
RUN	mkdir -p /home/build/newlib && cd /home/build/newlib \
		&& /usr/src/newlib-*/configure \
			CFLAGS="-w" \
			--prefix=${PREFIX} \
			--disable-werror \
			--target=arm-none-eabi \
			--enable-interwork \
			--enable-multilib \
			--with-float=soft \
		&& make all install

# Stage 4: Build and install the rest of GCC
RUN	cd /home/build/gcc && make all install