rendered paste bodyARCH=arm
BUILD=i686-linux
TARGET=$(ARCH)-linux-gnu
SYSROOT=/usr/$(TARGET)
ESC_SYSROOT=$(shell echo -n $(SYSROOT) | sed 's/\//\\\//g')
VER_BINUTILS=2.20.1
VER_LINUX=2.6.36
VER_GLIBC=2.11.2
VER_GLIBC_PORTS=2.11
VER_GCC=4.4.5
PATH := $(SYSROOT)/usr/bin:$(PATH)
STAMP=stamp
BINUTILS=binutils-$(VER_BINUTILS)
KERNEL=linux-$(VER_LINUX)
GLIBC=glibc-$(VER_GLIBC)
GLIBC_PORTS=glibc-ports-$(VER_GLIBC_PORTS)
GCC=gcc-$(VER_GCC)
STAGES += $(STAMP)/binutils-configure
STAGES += $(STAMP)/binutils-build
STAGES += $(STAMP)/binutils-install
STAGES += $(STAMP)/kernel-headers-install
STAGES += $(STAMP)/glibc-headers
STAGES += $(STAMP)/gcc-stage1-configure
STAGES += $(STAMP)/gcc-stage1-build
STAGES += $(STAMP)/gcc-stage1-install
STAGES += $(STAMP)/glibc-configure
STAGES += $(STAMP)/glibc-build
STAGES += $(STAMP)/glibc-install
STAGES += $(STAMP)/gcc-configure
STAGES += $(STAMP)/gcc-build
STAGES += $(STAMP)/gcc-install
all:
mkdir -p $(SYSROOT) build sources stamp
for S in $(STAGES); do $(MAKE) $$S || break; done
$(STAMP)/binutils-configure: sources/$(BINUTILS)
mkdir -p build/$(BINUTILS)
cd build/$(BINUTILS) && ../../sources/$(BINUTILS)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--with-sysroot=$(SYSROOT) \
--prefix=/usr \
--disable-werror \
--disable-nls
touch $@
$(STAMP)/binutils-build:
$(MAKE) -C build/$(BINUTILS)
touch $@
$(STAMP)/binutils-install:
$(MAKE) -C build/$(BINUTILS) install DESTDIR=$(SYSROOT)
rm -Rf $(SYSROOT)/usr/info
rm -Rf $(SYSROOT)/usr/lib
rm -Rf $(SYSROOT)/usr/man
rm -Rf $(SYSROOT)/usr/share
touch $@
$(STAMP)/kernel-headers-install: sources/$(KERNEL)
$(MAKE) -C sources/$(KERNEL) headers_install ARCH=$(ARCH) INSTALL_HDR_PATH=$(SYSROOT)/usr
touch $@
#this generates lots of errors, but they can be ignored since we just want the headers
$(STAMP)/glibc-headers: sources/$(GLIBC)
mkdir -p build/$(GLIBC)-headers
cd build/$(GLIBC)-headers && ../../sources/$(GLIBC)/configure \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
--build=$(BUILD) \
--host=$(TARGET) \
--prefix= \
--includedir=/usr/include \
--with-headers=$(SYSROOT)/usr/include \
--disable-sanity-checks
-$(MAKE) -C build/$(GLIBC)-headers -k install-headers install_root=$(SYSROOT)
touch $@
$(STAMP)/gcc-stage1-configure: sources/$(GCC)
mkdir -p build/$(GCC)-stage1
cd build/$(GCC)-stage1 && ../../sources/$(GCC)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--with-sysroot=$(SYSROOT) \
--with-build-sysroot=$(SYSROOT) \
--prefix=/usr \
--enable-languages=c \
--disable-multilib \
--with-newlib \
--disable-nls \
--enable-threads=no \
--disable-shared \
--disable-checking \
--disable-werror \
--disable-libmudflap \
--disable-libssp \
--disable-libgomp
touch $@
$(STAMP)/gcc-stage1-build:
$(MAKE) -C build/$(GCC)-stage1
$(MAKE) -C build/$(GCC)-stage1/$(TARGET)/libgcc libgcc_eh.a
touch $@
$(STAMP)/gcc-stage1-install:
$(MAKE) -C build/$(GCC)-stage1 install DESTDIR=$(PWD)/gcc-stage1-install-temp
rm -Rf $(PWD)/gcc-stage1-install-temp/usr/info
rm -Rf $(PWD)/gcc-stage1-install-temp/usr/include
rm -Rf $(PWD)/gcc-stage1-install-temp/usr/lib/libiberty.a
rm -Rf $(PWD)/gcc-stage1-install-temp/usr/man
rm -Rf $(PWD)/gcc-stage1-install-temp/usr/share
cp -a $(PWD)/gcc-stage1-install-temp/* $(SYSROOT)/
rm -Rf $(PWD)/gcc-stage1-install-temp
cp build/$(GCC)-stage1/$(TARGET)/libgcc/libgcc_eh.a $(SYSROOT)/usr/lib/gcc/$(TARGET)/$(VER_GCC)
touch $@
$(STAMP)/glibc-configure:
mkdir -p build/$(GLIBC)
cd build/$(GLIBC) && ../../sources/$(GLIBC)/configure \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
--build=$(BUILD) \
--host=$(TARGET) \
--prefix= \
--includedir=/usr/include \
--with-headers=$(SYSROOT)/usr/include
touch $@
$(STAMP)/glibc-build:
$(MAKE) -C build/$(GLIBC)
touch $@
$(STAMP)/glibc-install:
$(MAKE) -C build/$(GLIBC) install install_root=$(SYSROOT)
$(MAKE) -C build/$(GLIBC) install-headers install_root=$(SYSROOT)
$(MAKE) -C build/$(GLIBC) install-others install_root=$(SYSROOT)
touch $@
$(STAMP)/gcc-configure:
mkdir -p build/$(GCC)
cd build/$(GCC) && ../../sources/$(GCC)/configure \
--build=$(BUILD) \
--target=$(TARGET) \
--with-sysroot=$(SYSROOT) \
--with-build-sysroot=$(SYSROOT) \
--prefix=/usr \
--enable-languages=c,c++ \
--enable-shared
$(MAKE) -C build/$(GCC) configure-host
$(MAKE) -C build/$(GCC) configure-target
#patches to fix GCCs crappy inability to pass --sysroot to the libraries
sed -i 's/^CC="\(.*\)"$$/CC="\1 --sysroot=$(ESC_SYSROOT)"/' build/$(GCC)/$(TARGET)/libmudflap/libtool
sed -i 's/^CC="\(.*\)"$$/CC="\1 --sysroot=$(ESC_SYSROOT)"/' build/$(GCC)/$(TARGET)/libssp/libtool
sed -i 's/^CC="\(.*\)"$$/CC="\1 --sysroot=$(ESC_SYSROOT)"/' build/$(GCC)/$(TARGET)/libgomp/libtool
sed -i 's/^CC="\(.*\)"$$/CC="\1 --sysroot=$(ESC_SYSROOT)"/' build/$(GCC)/$(TARGET)/libstdc++-v3/libtool
touch $@
$(STAMP)/gcc-build:
if [ ! -s $(SYSROOT)/sys-include ]; then \
ln -s usr/include $(SYSROOT)/sys-include; \
fi
$(MAKE) -C build/$(GCC)
touch $@
$(STAMP)/gcc-install:
$(MAKE) -C build/$(GCC) install DESTDIR=$(SYSROOT)
touch $@
#glibc needs glibc-ports for the arm target (and possibly others)
sources/$(GLIBC):
mkdir -p $@ && tar -C sources -xjf downloads/$(GLIBC).* || rm -Rf sources/$(GLIBC)
tar -C sources/$(GLIBC) -xjf downloads/$(GLIBC_PORTS).* || rm -Rf sources/$(GLIBC)
sources/%:
mkdir -p $@ && tar -C sources -xjf $(shell echo downloads/`basename downloads/$@`.*)