diff options
Diffstat (limited to 'toolchain/gcc/Makefile')
| -rw-r--r-- | toolchain/gcc/Makefile | 181 | 
1 files changed, 76 insertions, 105 deletions
| diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index e76b60b0b..a13ab2ebf 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -2,7 +2,7 @@  #  # Copyright (C) 2002-2003 Erik Andersen <andersen@uclibc.org>  # Copyright (C) 2004 Manuel Novoa III <mjn3@uclibc.org> -# Copyright (C) 2005 Felix Fietkau <openwrt@nbd.name> +# Copyright (C) 2005-2006 Felix Fietkau <nbd@openwrt.org>  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -20,68 +20,36 @@  include $(TOPDIR)/rules.mk -GCC_VERSION:=$(strip $(subst ",, $(CONFIG_GCC_VERSION)))#")) +PKG_NAME:=gcc +PKG_VERSION:=$(strip $(subst ",, $(CONFIG_GCC_VERSION)))#")) -#GCC_SITE:=ftp://ftp.gnu.org/gnu/gcc/releases/gcc-$(GCC_VERSION) -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) +PKG_SOURCE:=gcc-$(PKG_VERSION).tar.bz2 +PKG_MD5SUM:=unknown +PKG_SOURCE_URL:=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-$(PKG_VERSION) \ +	http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(PKG_VERSION) \ +	ftp://ftp.gnu.org/gnu/gcc/releases/gcc-$(PKG_VERSION) +PKG_CAT:=bzcat -GCC_SOURCE:=gcc-$(GCC_VERSION).tar.bz2 -GCC_DIR:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION) -GCC_CAT:=bzcat +PKG_BUILD_DIR:=$(TOOL_BUILD_DIR)/gcc-$(PKG_VERSION) -############################################################# -# -# Setup some initial stuff -# -############################################################# - -ifeq ($(CONFIG_INSTALL_LIBGCJ),y) -TARGET_LANGUAGES:=c,c++,java -else -ifeq ($(CONFIG_INSTALL_LIBSTDCPP),y) -TARGET_LANGUAGES:=c,c++ -else  TARGET_LANGUAGES:=c +ifeq ($(CONFIG_INSTALL_LIBSTDCPP),y) +TARGET_LANGUAGES:=$(TARGET_LANGUAGES),c++  endif +ifeq ($(CONFIG_INSTALL_LIBGCJ),y) +TARGET_LANGUAGES:=$(TARGET_LANGUAGES),java  endif -############################################################# -# -# build the first pass gcc compiler -# -############################################################# - -GCC_BUILD_DIR1:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION)-initial - -$(DL_DIR)/$(GCC_SOURCE): -	mkdir -p $(DL_DIR) -	$(SCRIPT_DIR)/download.pl $(DL_DIR) $(GCC_SOURCE) x $(GCC_SITE) - -$(GCC_DIR)/.unpacked: $(DL_DIR)/$(GCC_SOURCE) -	mkdir -p $(TOOL_BUILD_DIR) -	$(GCC_CAT) $(DL_DIR)/$(GCC_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) - -	touch $(GCC_DIR)/.unpacked - -$(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 -	# Note: The soft float situation has improved considerably with gcc 3.4.x. -	# We can dispense with the custom spec files, as well as libfloat for the arm case. -	# However, we still need a patch for arm.  There's a similar patch for gcc 3.3.x -	# which needs to be integrated so we can kill of libfloat for good. -	$(SED) 's,\(version_string.. = "[0-9\.]*\).*\(";\),\1 (OpenWrt-2.0)\2,' $(GCC_DIR)/gcc/version.c -	$(SED) 's,\(bug_report_url.. = "\).*\(";\),\1<URL:https://dev.openwrt.org/>\2,' $(GCC_DIR)/gcc/version.c -	touch $(GCC_DIR)/.patched - -# The --without-headers option stopped working with gcc 3.0 and has never been -# # fixed, so we need to actually have working C library header files prior to -# # the step or libgcc will not build... - -$(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 \ +include $(INCLUDE_DIR)/host-build.mk + +BUILD_DIR1:=$(TOOL_BUILD_DIR)/gcc-$(PKG_VERSION)-initial +BUILD_DIR2:=$(TOOL_BUILD_DIR)/gcc-$(PKG_VERSION)-final + + +define Stage1/Configure +	mkdir -p $(BUILD_DIR1) +	(cd $(BUILD_DIR1); rm -f config.cache; PATH=$(TARGET_PATH) \ +		$(PKG_BUILD_DIR)/configure \  		--prefix=$(STAGING_DIR) \  		--build=$(GNU_HOST_NAME) \  		--host=$(GNU_HOST_NAME) \ @@ -92,41 +60,25 @@ $(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched  		--disable-__cxa_atexit \  		--enable-target-optspace \  		--with-gnu-ld \ -		$(DISABLE_NLS) \ -		$(MULTILIB) \ +		--disable-nls \  	); -	touch $(GCC_BUILD_DIR1)/.configured - -$(GCC_BUILD_DIR1)/.compiled: $(GCC_BUILD_DIR1)/.configured -	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc -	touch $(GCC_BUILD_DIR1)/.compiled - -$(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gcc: $(GCC_BUILD_DIR1)/.compiled -	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc - -############################################################# -# -# second pass compiler build.  Build the compiler targeting  -# the newly built shared uClibc library. -# -############################################################# -# -# Sigh... I had to rework things because using --with-gxx-include-dir -# causes issues with include dir search order for g++.  This seems to -# have something to do with "path translations" and possibly doesn't -# affect gcc-target.  However, I haven't tested gcc-target yet so no -# guarantees.  mjn3 - -GCC_BUILD_DIR2:=$(TOOL_BUILD_DIR)/gcc-$(GCC_VERSION)-final -$(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched $(STAGING_DIR)/lib/libc.a -	mkdir -p $(GCC_BUILD_DIR2) +endef +define Stage1/Compile +	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR1) all-gcc +endef +define Stage1/Install +	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR1) install-gcc +endef + +define Stage2/Configure +	mkdir -p $(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 \ +	(cd $(BUILD_DIR2); rm -f config.cache; PATH=$(TARGET_PATH) \ +		$(PKG_BUILD_DIR)/configure \  		--prefix=$(STAGING_DIR) \  		--build=$(GNU_HOST_NAME) \  		--host=$(GNU_HOST_NAME) \ @@ -136,18 +88,15 @@ $(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched $(STAGING_DIR)/lib/libc.a  		--disable-__cxa_atexit \  		--enable-target-optspace \  		--with-gnu-ld \ -		$(DISABLE_NLS) \ -		$(MULTILIB) \ +		--disable-nls \  	); -	touch $(GCC_BUILD_DIR2)/.configured - -$(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured -	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) all -	touch $(GCC_BUILD_DIR2)/.compiled - -gcc-install: $(GCC_BUILD_DIR2)/.compiled FORCE -	PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install -	echo $(GCC_VERSION) > $(STAGING_DIR)/gcc_version +endef +define Stage2/Compile +	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR2) all +endef +define Stage2/Install +	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR2) install +	echo $(PKG_VERSION) > $(STAGING_DIR)/gcc_version  	# Set up the symlinks to enable lying about target name.  	set -e; \  	(cd $(STAGING_DIR); \ @@ -158,14 +107,36 @@ gcc-install: $(GCC_BUILD_DIR2)/.compiled FORCE  		   	$(GNU_TARGET_NAME)$${app##$(REAL_GNU_TARGET_NAME)}; \  		done; \  	); - -source: $(DL_DIR)/$(GCC_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) +endef + +define Build/Prepare +	$(call Build/Prepare/Default) +	$(SCRIPT_DIR)/patch-kernel.sh $(PKG_BUILD_DIR) ./patches/$(PKG_VERSION) \*.patch +	$(SED) 's,\(version_string.. = "[0-9\.]*\).*\(";\),\1 (OpenWrt-2.0)\2,' $(PKG_BUILD_DIR)/gcc/version.c +	$(SED) 's,\(bug_report_url.. = "\).*\(";\),\1<URL:https://dev.openwrt.org/>\2,' $(PKG_BUILD_DIR)/gcc/version.c +endef + +define Build/Configure +	$(call Stage1/Configure) +endef + +define Build/Compile +	$(call Stage1/Compile) +	$(call Stage1/Install) +endef + +define Build/Install +	$(call Stage2/Configure) +	$(call Stage2/Compile) +	$(call Stage2/Install) +endef + +define Build/Clean +	rm -rf $(PKG_BUILD_DIR) +	rm -rf $(BUILD_DIR1) +	rm -rf $(BUILD_DIR2)  	rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gc*  	rm -f $(STAGING_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c* +endef + +$(eval $(call HostBuild)) | 
