aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain/gcc/final
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-07-20 20:57:21 +0000
committerFelix Fietkau <nbd@openwrt.org>2010-07-20 20:57:21 +0000
commit5149ed151d7ce6f4bdb14a7ad5611777afff1091 (patch)
tree3b9f21234bfd8744d1204b1f2d06b607c001a0e3 /toolchain/gcc/final
parentebeaea35fda9f26a12beb7ec9101dd7624356d8c (diff)
downloadupstream-5149ed151d7ce6f4bdb14a7ad5611777afff1091.tar.gz
upstream-5149ed151d7ce6f4bdb14a7ad5611777afff1091.tar.bz2
upstream-5149ed151d7ce6f4bdb14a7ad5611777afff1091.zip
gcc: split up the build process into three distinct stages (minimal, initial, final), to clean up the dependency handling nastiness and to improve support for rebuilding parts of the toolchain
SVN-Revision: 22319
Diffstat (limited to 'toolchain/gcc/final')
-rw-r--r--toolchain/gcc/final/Makefile71
1 files changed, 71 insertions, 0 deletions
diff --git a/toolchain/gcc/final/Makefile b/toolchain/gcc/final/Makefile
new file mode 100644
index 0000000000..bdba277b44
--- /dev/null
+++ b/toolchain/gcc/final/Makefile
@@ -0,0 +1,71 @@
+GCC_VARIANT:=final
+
+include ../common.mk
+
+GCC_CONFIGURE += \
+ --enable-languages=$(TARGET_LANGUAGES) \
+ --enable-shared \
+ --enable-threads \
+ --with-slibdir=$(TOOLCHAIN_DIR)/lib
+
+ifneq ($(CONFIG_GCC_VERSION_4_5),)
+ GCC_CONFIGURE += \
+ --enable-lto \
+ --with-libelf=$(TOPDIR)/staging_dir/host
+endif
+
+ifneq ($(CONFIG_TLS_SUPPORT),)
+ GCC_CONFIGURE += \
+ --enable-tls
+else
+ GCC_CONFIGURE += \
+ --disable-tls
+endif
+
+define Host/Configure
+ mkdir -p $(GCC_BUILD_DIR) $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)
+ # Important! Required for limits.h to be fixed.
+ rm -rf $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/sys-include
+ ln -sf ../include $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/sys-include
+ rm -rf $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
+ ln -sf ../lib $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
+ $(if $(CONFIG_mips64)$(CONFIG_mips64el)$(CONFIG_x86_64),ln -sf ../lib64 $(TOOLCHAIN_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib64)
+ (cd $(GCC_BUILD_DIR) && rm -f config.cache; \
+ $(GCC_CONFIGURE) \
+ );
+endef
+
+define Host/Compile
+ $(GCC_MAKE) -C $(GCC_BUILD_DIR) all
+endef
+
+define SetupExtraArch
+ for app in $(TOOLCHAIN_DIR)/usr/bin/$(OPTIMIZE_FOR_CPU)*-{gcc,gcc-*,g++}; do \
+ [ -e $$$$app ] || continue; \
+ old_base=$$$$(basename $$$$app); \
+ new_base=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-$$$${old_base##$(OPTIMIZE_FOR_CPU)-}; \
+ sed -e "s/@CC_BASE@/$$$$old_base/" \
+ -e 's/@EXTRA_ARCH_OPTS@/$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_OPTS))/' \
+ ../files/alternate-arch-cc.in > \
+ $(TOOLCHAIN_DIR)/usr/bin/$$$$new_base; \
+ chmod a+x $(TOOLCHAIN_DIR)/usr/bin/$$$$new_base; \
+ done
+endef
+
+define Host/Install
+ $(_SINGLE)$(GCC_MAKE) -C $(GCC_BUILD_DIR) install
+ # Set up the symlinks to enable lying about target name.
+ set -e; \
+ (cd $(TOOLCHAIN_DIR)/usr; \
+ 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; \
+ );
+ $(if $(CONFIG_EXTRA_TARGET_ARCH),$(call SetupExtraArch))
+endef
+
+$(eval $(call HostBuild))
+