All pastes #1981503 Raw Edit

Mine

public text v1 · immutable
#1981503 ·published 2010-11-04 10:30 UTC
rendered paste body
ARCH=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/$@`.*)