| b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | GCC_VARIANT:=final |
| 2 | |
| 3 | include ../common.mk |
| 4 | |
| 5 | GCC_CONFIGURE += \ |
| 6 | --with-headers=$(TOOLCHAIN_DIR)/include \ |
| 7 | --enable-languages=$(TARGET_LANGUAGES) \ |
| 8 | --enable-shared \ |
| 9 | --enable-threads \ |
| 10 | --with-slibdir=$(TOOLCHAIN_DIR)/lib \ |
| 11 | --enable-plugins \ |
| 12 | --enable-lto \ |
| 13 | --with-libelf=$(STAGING_DIR_HOST) |
| 14 | |
| 15 | ifndef CONFIG_USE_GLIBC |
| 16 | GCC_CONFIGURE += --disable-libsanitizer |
| 17 | endif |
| 18 | |
| 19 | ifdef CONFIG_USE_MUSL |
| 20 | GCC_MAKE += gcc_cv_libc_provides_ssp=yes |
| 21 | endif |
| 22 | |
| 23 | ifneq ($(CONFIG_SJLJ_EXCEPTIONS),) |
| 24 | GCC_CONFIGURE += \ |
| 25 | --enable-sjlj-exceptions |
| 26 | endif |
| 27 | |
| 28 | define CleanupToolchain |
| 29 | $(INSTALL_DIR) $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME) |
| 30 | # Important! Required for limits.h to be fixed. |
| 31 | rm -rf $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include |
| 32 | ln -sf ../include $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include |
| 33 | rm -rf $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib |
| 34 | ln -sf ../lib $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib |
| 35 | $(if $(CONFIG_ARCH_64BIT),ln -sf ../lib64 $(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME)/lib64) |
| 36 | endef |
| 37 | |
| 38 | define Host/Configure |
| 39 | $(CleanupToolchain) |
| 40 | mkdir -p $(GCC_BUILD_DIR) |
| 41 | (cd $(GCC_BUILD_DIR) && rm -f config.cache; \ |
| 42 | $(GCC_CONFIGURE) \ |
| 43 | ); |
| 44 | endef |
| 45 | |
| 46 | ifeq ($(CONFIG_USE_GLIBC)$(CONFIG_INSTALL_GCCGO),yy) |
| 47 | define FixGogccCrt |
| 48 | # link crtX.o for gotools |
| 49 | mkdir -p $(GCC_BUILD_DIR)/gotools |
| 50 | $(foreach crt, i 1 n, ln -sf ../../glibc-dev/lib/crt$(crt).o $(GCC_BUILD_DIR)/gotools/ ; ) |
| 51 | endef |
| 52 | endif |
| 53 | |
| 54 | define Host/Compile |
| 55 | $(FixGogccCrt) |
| 56 | +$(GCC_MAKE) $(HOST_JOBS) -C $(GCC_BUILD_DIR) all |
| 57 | endef |
| 58 | |
| 59 | define SetupExtraArch |
| 60 | for app in $(TOOLCHAIN_DIR)/bin/$(OPTIMIZE_FOR_CPU)*-{gcc,gcc-*,g++}; do \ |
| 61 | [ -e $$$$app ] || continue; \ |
| 62 | old_base=$$$$(basename $$$$app); \ |
| 63 | new_base=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-$$$${old_base##$(OPTIMIZE_FOR_CPU)-}; \ |
| 64 | sed -e "s/@CC_BASE@/$$$$old_base/" \ |
| 65 | -e 's/@EXTRA_ARCH_OPTS@/$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_OPTS))/' \ |
| 66 | ../files/alternate-arch-cc.in > \ |
| 67 | $(TOOLCHAIN_DIR)/bin/$$$$new_base; \ |
| 68 | chmod a+x $(TOOLCHAIN_DIR)/bin/$$$$new_base; \ |
| 69 | done |
| 70 | endef |
| 71 | |
| 72 | define Host/Install |
| 73 | $(CleanupToolchain) |
| 74 | +$(GCC_MAKE) $(HOST_JOBS) -C $(GCC_BUILD_DIR) install |
| 75 | # Set up the symlinks to enable lying about target name. |
| 76 | set -e; \ |
| 77 | (cd $(TOOLCHAIN_DIR); \ |
| 78 | ln -sf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \ |
| 79 | cd bin; \ |
| 80 | for app in $(REAL_GNU_TARGET_NAME)-* ; do \ |
| 81 | ln -sf $$$${app} \ |
| 82 | $(GNU_TARGET_NAME)$$$${app##$(REAL_GNU_TARGET_NAME)}; \ |
| 83 | done; \ |
| 84 | ); |
| 85 | $(if $(CONFIG_EXTRA_TARGET_ARCH),$(call SetupExtraArch)) |
| 86 | $(RM) $(TOOLCHAIN_DIR)/lib/libiberty.a |
| 87 | $(SCRIPT_DIR)/patch-specs.sh "$(TOOLCHAIN_DIR)" |
| 88 | endef |
| 89 | |
| 90 | $(eval $(call HostBuild)) |
| 91 | |