summaryrefslogtreecommitdiffstats
path: root/toolchain/gcc/final
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-20 20:57:21 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-20 20:57:21 +0000
commit344914c955b9df3b0ab453c2959260230544f7af (patch)
treed24e388be5a79e6efa2aea914d1f7d6b81016539 /toolchain/gcc/final
parent0474d29e5e7d175370d3e485a58c6e06aeba6f7e (diff)
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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22319 3c298f89-4303-0410-b956-a3cf2f4a3e73
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 000000000..bdba277b4
--- /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))
+