# $FreeWRT$ include $(TOPDIR)/rules.mk include ../rules.mk GCC_VERSION:=3.4.4 GCC_SITE:=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-$(GCC_VERSION) \ http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(GCC_VERSION) GCC_MD5SUM:=b594ff4ea4fbef4ba9220887de713dfe SOURCE:=gcc-$(GCC_VERSION).tar.bz2 GCC_DIR:=$(TOOLCHAIN_BUILD_DIR)/gcc-$(GCC_VERSION) TARGET_LANGUAGES:=c,c++ GCC_BUILD_DIR1:=$(TOOLCHAIN_BUILD_DIR)/gcc-$(GCC_VERSION)-initial $(DL_DIR)/$(SOURCE): mkdir -p $(DL_DIR) $(SCRIPT_DIR)/download.pl $(DL_DIR) $(SOURCE) $(GCC_MD5SUM) $(GCC_SITE) $(GCC_DIR)/.unpacked: $(DL_DIR)/$(SOURCE) ${EXTRACT_CMD} touch $@ $(GCC_DIR)/.patched: $(GCC_DIR)/.unpacked # Apply any files named gcc-*.patch from the source directory to gcc $(SCRIPT_DIR)/patch-kernel.sh $(GCC_DIR) ./$(GCC_VERSION) \*.patch $(SED) 's,\(version_string.. = "[0-9\.]*\).*\(";\),\1 (FreeWRT 2.0)\2,' $(GCC_DIR)/gcc/version.c $(SED) 's,\(bug_report_url.. = "\).*\(";\),\1\2,' $(GCC_DIR)/gcc/version.c touch $@ $(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched mkdir -p $(GCC_BUILD_DIR1) (cd $(GCC_BUILD_DIR1); rm -f config.cache; PATH=$(TARGET_PATH) \ $(GCC_DIR)/configure \ --prefix=$(STAGING_DIR) \ --build=$(GNU_HOST_NAME) \ --host=$(GNU_HOST_NAME) \ --target=$(REAL_GNU_TARGET_NAME) \ --enable-languages=c \ --disable-shared \ --with-sysroot=$(TOOLCHAIN_BUILD_DIR)/uClibc_dev/ \ --disable-__cxa_atexit \ --enable-target-optspace \ --with-gnu-ld \ --disable-nls \ --enable-largefile \ ); touch $@ $(GCC_BUILD_DIR1)/.compiled: $(GCC_BUILD_DIR1)/.configured PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc touch $@ $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc: $(GCC_BUILD_DIR1)/.compiled PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc GCC_BUILD_DIR2:=$(TOOLCHAIN_BUILD_DIR)/gcc-$(GCC_VERSION)-final $(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched $(STAGING_DIR)/lib/libc.a mkdir -p $(GCC_BUILD_DIR2) # Important! Required for limits.h to be fixed. rm -rf $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include ln -sf ../include $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include rm -rf $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib ln -sf ../lib $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib (cd $(GCC_BUILD_DIR2); rm -f config.cache; PATH=$(TARGET_PATH) \ $(GCC_DIR)/configure \ --prefix=$(STAGING_DIR) \ --build=$(GNU_HOST_NAME) \ --host=$(GNU_HOST_NAME) \ --target=$(REAL_GNU_TARGET_NAME) \ --enable-languages=$(TARGET_LANGUAGES) \ --enable-shared \ --disable-__cxa_atexit \ --enable-target-optspace \ --with-gnu-ld \ --disable-nls \ --enable-largefile \ ); touch $@ $(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) all touch $@ gcc-install: $(GCC_BUILD_DIR2)/.compiled PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install echo $(GCC_VERSION) > $(STAGING_DIR)/gcc_version # Set up the symlinks to enable lying about target name. set -e; \ (cd $(STAGING_DIR); \ ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \ cd bin; \ for app in $(REAL_GNU_TARGET_NAME)-* ; do \ ln -sf $${app} \ $(GNU_TARGET_NAME)$${app##$(REAL_GNU_TARGET_NAME)}; \ done; \ ); # We do another ugly hack here because the standard behaviour is # to include a reference to libgcc.so.1 in all binaries. For flash space # saving, we change the specs file to link in a static libgcc here. if [ -f $(STAGING_DIR)/lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs ] ; then \ patch -d $(STAGING_DIR)/lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/ -p0 < ./$(GCC_VERSION)/static-libgcc.patch.conditional ; \ fi; source: $(DL_DIR)/$(SOURCE) prepare: $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc compile: gcc-install install: clean: gcc-clean rm -rf $(GCC_DIR) rm -rf $(GCC_BUILD_DIR1) rm -rf $(GCC_BUILD_DIR2) rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gc* rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c*