mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| GCC_VARIANT:=final
 | |
| 
 | |
| include ../common.mk
 | |
| 
 | |
| GCC_CONFIGURE += \
 | |
| 	--with-headers=$(TOOLCHAIN_DIR)/include \
 | |
| 	--enable-languages=$(TARGET_LANGUAGES) \
 | |
| 	--enable-shared \
 | |
| 	--enable-threads \
 | |
| 	--with-slibdir=$(TOOLCHAIN_DIR)/lib \
 | |
| 	--enable-lto \
 | |
| 	--with-libelf=$(TOPDIR)/staging_dir/host
 | |
| 
 | |
| ifndef CONFIG_USE_GLIBC
 | |
|   GCC_CONFIGURE += --disable-libsanitizer
 | |
| endif
 | |
| 
 | |
| ifdef CONFIG_USE_MUSL
 | |
|   GCC_MAKE += gcc_cv_libc_provides_ssp=yes
 | |
| endif
 | |
| 
 | |
| ifneq ($(CONFIG_SJLJ_EXCEPTIONS),)
 | |
|   GCC_CONFIGURE += \
 | |
| 	--enable-sjlj-exceptions
 | |
| endif
 | |
| 
 | |
| define CleanupToolchain
 | |
| 	$(INSTALL_DIR) $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)
 | |
| 	# Important!  Required for limits.h to be fixed.
 | |
| 	rm -rf $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include
 | |
| 	ln -sf ../include $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include
 | |
| 	rm -rf $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib
 | |
| 	ln -sf ../lib $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib
 | |
| 	$(if $(CONFIG_ARCH_64BIT),ln -sf ../lib64 $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib64)
 | |
| endef
 | |
| 
 | |
| define Host/Configure
 | |
| 	$(CleanupToolchain)
 | |
| 	mkdir -p $(GCC_BUILD_DIR)
 | |
| 	(cd $(GCC_BUILD_DIR) && rm -f config.cache; \
 | |
| 		$(GCC_CONFIGURE) \
 | |
| 	);
 | |
| endef
 | |
| 
 | |
| ifeq ($(CONFIG_USE_GLIBC)$(CONFIG_INSTALL_GCCGO),yy)
 | |
| define FixGogccCrt
 | |
| 	# link crtX.o for gotools
 | |
| 	mkdir -p $(GCC_BUILD_DIR)/gotools
 | |
| 	$(foreach crt, i 1 n, ln -sf ../../glibc-dev/lib/crt$(crt).o $(GCC_BUILD_DIR)/gotools/ ; )
 | |
| endef
 | |
| endif
 | |
| 
 | |
| define Host/Compile
 | |
| 	$(FixGogccCrt)
 | |
| 	+$(GCC_MAKE) $(HOST_JOBS) -C $(GCC_BUILD_DIR) all
 | |
| endef
 | |
| 
 | |
| define SetupExtraArch
 | |
| 	for app in $(TOOLCHAIN_DIR)/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)/bin/$$$$new_base; \
 | |
| 		chmod a+x $(TOOLCHAIN_DIR)/bin/$$$$new_base; \
 | |
| 	done
 | |
| endef
 | |
| 
 | |
| define Host/Install
 | |
| 	$(CleanupToolchain)
 | |
| 	+$(GCC_MAKE) $(HOST_JOBS) -C $(GCC_BUILD_DIR) install
 | |
| 	# Set up the symlinks to enable lying about target name.
 | |
| 	set -e; \
 | |
| 	(cd $(TOOLCHAIN_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; \
 | |
| 	);
 | |
| 	$(if $(CONFIG_EXTRA_TARGET_ARCH),$(call SetupExtraArch))
 | |
| 	$(RM) $(TOOLCHAIN_DIR)/lib/libiberty.a
 | |
| 	$(SCRIPT_DIR)/patch-specs.sh "$(TOOLCHAIN_DIR)"
 | |
| endef
 | |
| 
 | |
| $(eval $(call HostBuild))
 | |
| 
 |