Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 1 | ################################################################################ |
| 2 | # |
| 3 | # gcc-final |
| 4 | # |
| 5 | ################################################################################ |
| 6 | |
| 7 | GCC_FINAL_VERSION = $(GCC_VERSION) |
Thomas De Schampheleire | f268f71 | 2014-10-07 09:06:03 +0200 | [diff] [blame^] | 8 | GCC_FINAL_SITE = $(GCC_SITE) |
| 9 | GCC_FINAL_SOURCE = $(GCC_SOURCE) |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 10 | |
| 11 | HOST_GCC_FINAL_DEPENDENCIES = \ |
| 12 | $(HOST_GCC_COMMON_DEPENDENCIES) \ |
Peter Korsgaard | de13e31 | 2014-02-04 15:03:06 +0100 | [diff] [blame] | 13 | $(BR_LIBC) |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 14 | |
Thomas Petazzoni | 00e9b1e | 2013-06-30 21:29:04 +0200 | [diff] [blame] | 15 | HOST_GCC_FINAL_EXTRACT_CMDS = $(HOST_GCC_EXTRACT_CMDS) |
| 16 | |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 17 | ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),) |
Max Filippov | a957e1b | 2014-02-27 09:07:20 +0400 | [diff] [blame] | 18 | HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_XTENSA_OVERLAY_EXTRACT |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 19 | endif |
| 20 | |
| 21 | HOST_GCC_FINAL_POST_PATCH_HOOKS += HOST_GCC_APPLY_PATCHES |
| 22 | |
| 23 | # gcc doesn't support in-tree build, so we create a 'build' |
| 24 | # subdirectory in the gcc sources, and build from there. |
| 25 | HOST_GCC_FINAL_SUBDIR = build |
| 26 | |
Thomas Petazzoni | df9bbb7 | 2013-09-02 18:06:34 +0200 | [diff] [blame] | 27 | HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 28 | |
Jérôme Pouiller | 7d6c79e | 2013-10-10 11:40:42 +0200 | [diff] [blame] | 29 | define HOST_GCC_FINAL_CONFIGURE_CMDS |
| 30 | (cd $(HOST_GCC_FINAL_SRCDIR) && rm -rf config.cache; \ |
| 31 | $(HOST_CONFIGURE_OPTS) \ |
| 32 | CFLAGS="$(HOST_CFLAGS)" \ |
| 33 | LDFLAGS="$(HOST_LDFLAGS)" \ |
| 34 | $(HOST_GCC_FINAL_CONF_ENV) \ |
| 35 | ./configure \ |
| 36 | --prefix="$(HOST_DIR)/usr" \ |
| 37 | --sysconfdir="$(HOST_DIR)/etc" \ |
Gustavo Zacarias | 169141a | 2014-05-25 19:12:57 -0300 | [diff] [blame] | 38 | --enable-static \ |
Thomas De Schampheleire | aaffd20 | 2014-09-27 21:32:44 +0200 | [diff] [blame] | 39 | $(QUIET) $(HOST_GCC_FINAL_CONF_OPTS) \ |
Jérôme Pouiller | 7d6c79e | 2013-10-10 11:40:42 +0200 | [diff] [blame] | 40 | ) |
| 41 | endef |
| 42 | |
| 43 | |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 44 | # Languages supported by the cross-compiler |
| 45 | GCC_FINAL_CROSS_LANGUAGES-y = c |
| 46 | GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++ |
Thomas Petazzoni | 69a534b | 2013-09-02 18:06:30 +0200 | [diff] [blame] | 47 | GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_FORTRAN) += fortran |
Thomas Petazzoni | cd04552 | 2013-09-02 18:06:31 +0200 | [diff] [blame] | 48 | GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_OBJC) += objc |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 49 | GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y)) |
| 50 | |
Thomas De Schampheleire | aaffd20 | 2014-09-27 21:32:44 +0200 | [diff] [blame] | 51 | HOST_GCC_FINAL_CONF_OPTS = \ |
| 52 | $(HOST_GCC_COMMON_CONF_OPTS) \ |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 53 | --enable-languages=$(GCC_FINAL_CROSS_LANGUAGES) \ |
Francois Perrad | 7fc685c | 2013-08-07 13:39:55 +0200 | [diff] [blame] | 54 | $(DISABLE_LARGEFILE) \ |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 55 | --with-build-time-tools=$(HOST_DIR)/usr/$(GNU_TARGET_NAME)/bin |
| 56 | |
Gustavo Zacarias | 169141a | 2014-05-25 19:12:57 -0300 | [diff] [blame] | 57 | # Disable shared libs like libstdc++ if we do static since it confuses linking |
| 58 | ifeq ($(BR2_PREFER_STATIC_LIB),y) |
Thomas De Schampheleire | aaffd20 | 2014-09-27 21:32:44 +0200 | [diff] [blame] | 59 | HOST_GCC_FINAL_CONF_OPTS += --disable-shared |
Gustavo Zacarias | 169141a | 2014-05-25 19:12:57 -0300 | [diff] [blame] | 60 | else |
Thomas De Schampheleire | aaffd20 | 2014-09-27 21:32:44 +0200 | [diff] [blame] | 61 | HOST_GCC_FINAL_CONF_OPTS += --enable-shared |
Gustavo Zacarias | 169141a | 2014-05-25 19:12:57 -0300 | [diff] [blame] | 62 | endif |
| 63 | |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 64 | ifeq ($(BR2_GCC_ENABLE_OPENMP),y) |
Thomas De Schampheleire | aaffd20 | 2014-09-27 21:32:44 +0200 | [diff] [blame] | 65 | HOST_GCC_FINAL_CONF_OPTS += --enable-libgomp |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 66 | else |
Thomas De Schampheleire | aaffd20 | 2014-09-27 21:32:44 +0200 | [diff] [blame] | 67 | HOST_GCC_FINAL_CONF_OPTS += --disable-libgomp |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 68 | endif |
| 69 | |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 70 | # End with user-provided options, so that they can override previously |
| 71 | # defined options. |
Thomas De Schampheleire | aaffd20 | 2014-09-27 21:32:44 +0200 | [diff] [blame] | 72 | HOST_GCC_FINAL_CONF_OPTS += \ |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 73 | $(call qstrip,$(BR2_EXTRA_GCC_CONFIG_OPTIONS)) |
| 74 | |
Peter Korsgaard | 5128cc6 | 2013-09-04 16:18:14 +0200 | [diff] [blame] | 75 | HOST_GCC_FINAL_CONF_ENV = \ |
| 76 | $(HOST_GCC_COMMON_CONF_ENV) |
| 77 | |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 78 | # Make sure we have 'cc' |
| 79 | define HOST_GCC_FINAL_CREATE_CC_SYMLINKS |
| 80 | if [ ! -e $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-cc ]; then \ |
| 81 | ln -snf $(GNU_TARGET_NAME)-gcc \ |
| 82 | $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-cc; \ |
| 83 | fi |
| 84 | if [ ! -e $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/bin/cc ]; then \ |
| 85 | ln -snf gcc $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/bin/cc; \ |
| 86 | fi |
| 87 | endef |
| 88 | |
| 89 | HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_CREATE_CC_SYMLINKS |
| 90 | |
| 91 | # Create <arch>-linux-<tool> symlinks |
| 92 | define HOST_GCC_FINAL_CREATE_SIMPLE_SYMLINKS |
| 93 | (cd $(HOST_DIR)/usr/bin; for i in $(GNU_TARGET_NAME)-*; do \ |
| 94 | ln -snf $$i $(ARCH)-linux$${i##$(GNU_TARGET_NAME)}; \ |
| 95 | done) |
| 96 | endef |
| 97 | |
| 98 | HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_CREATE_SIMPLE_SYMLINKS |
| 99 | |
Thomas Petazzoni | 14a2d0b | 2013-09-02 18:06:33 +0200 | [diff] [blame] | 100 | # In gcc 4.7.x, the ARM EABIhf library loader path for (e)glibc was not |
Thomas Petazzoni | d2e3cc3 | 2013-07-16 10:03:21 +0200 | [diff] [blame] | 101 | # correct, so we create a symbolic link to make things work |
| 102 | # properly. eglibc installs the library loader as ld-linux-armhf.so.3, |
| 103 | # but gcc creates binaries that reference ld-linux.so.3. |
Thomas Petazzoni | 14a2d0b | 2013-09-02 18:06:33 +0200 | [diff] [blame] | 104 | ifeq ($(BR2_arm)$(BR2_ARM_EABIHF)$(BR2_GCC_VERSION_4_7_X)$(BR2_TOOLCHAIN_USES_GLIBC),yyyy) |
Thomas Petazzoni | d2e3cc3 | 2013-07-16 10:03:21 +0200 | [diff] [blame] | 105 | define HOST_GCC_FINAL_LD_LINUX_LINK |
| 106 | ln -sf ld-linux-armhf.so.3 $(TARGET_DIR)/lib/ld-linux.so.3 |
| 107 | ln -sf ld-linux-armhf.so.3 $(STAGING_DIR)/lib/ld-linux.so.3 |
| 108 | endef |
| 109 | HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_LD_LINUX_LINK |
| 110 | endif |
| 111 | |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 112 | # Cannot use the HOST_GCC_FINAL_USR_LIBS mechanism below, because we want |
Thomas Petazzoni | 12d1507 | 2014-02-04 16:36:18 +0100 | [diff] [blame] | 113 | # libgcc_s to be installed in /lib and not /usr/lib. |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 114 | define HOST_GCC_FINAL_INSTALL_LIBGCC |
| 115 | -cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/libgcc_s* \ |
| 116 | $(STAGING_DIR)/lib/ |
| 117 | -cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/libgcc_s* \ |
| 118 | $(TARGET_DIR)/lib/ |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 119 | endef |
| 120 | |
| 121 | HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_LIBGCC |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 122 | |
| 123 | # Handle the installation of libraries in /usr/lib |
| 124 | HOST_GCC_FINAL_USR_LIBS = |
| 125 | |
Thomas Petazzoni | f03a9be | 2013-07-08 17:59:45 +0200 | [diff] [blame] | 126 | ifeq ($(BR2_INSTALL_LIBSTDCPP),y) |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 127 | HOST_GCC_FINAL_USR_LIBS += libstdc++ |
| 128 | endif |
| 129 | |
| 130 | ifeq ($(BR2_GCC_ENABLE_OPENMP),y) |
| 131 | HOST_GCC_FINAL_USR_LIBS += libgomp |
| 132 | endif |
| 133 | |
Thomas Petazzoni | 69a534b | 2013-09-02 18:06:30 +0200 | [diff] [blame] | 134 | ifeq ($(BR2_INSTALL_FORTRAN),y) |
| 135 | HOST_GCC_FINAL_USR_LIBS += libgfortran |
| 136 | endif |
| 137 | |
Thomas Petazzoni | cd04552 | 2013-09-02 18:06:31 +0200 | [diff] [blame] | 138 | ifeq ($(BR2_INSTALL_OBJC),y) |
| 139 | HOST_GCC_FINAL_USR_LIBS += libobjc |
| 140 | endif |
| 141 | |
Thomas Petazzoni | 530777a | 2013-09-02 18:06:38 +0200 | [diff] [blame] | 142 | ifeq ($(BR2_GCC_ENABLE_LIBMUDFLAP),y) |
| 143 | ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y) |
| 144 | HOST_GCC_FINAL_USR_LIBS += libmudflapth |
| 145 | else |
| 146 | HOST_GCC_FINAL_USR_LIBS += libmudflap |
| 147 | endif |
| 148 | endif |
| 149 | |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 150 | ifneq ($(HOST_GCC_FINAL_USR_LIBS),) |
Gustavo Zacarias | 169141a | 2014-05-25 19:12:57 -0300 | [diff] [blame] | 151 | define HOST_GCC_FINAL_INSTALL_STATIC_LIBS |
| 152 | for i in $(HOST_GCC_FINAL_USR_LIBS) ; do \ |
| 153 | cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/$${i}.a \ |
| 154 | $(STAGING_DIR)/usr/lib/ ; \ |
| 155 | done |
| 156 | endef |
| 157 | |
| 158 | ifeq ($(BR2_PREFER_STATIC_LIB),) |
| 159 | define HOST_GCC_FINAL_INSTALL_SHARED_LIBS |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 160 | for i in $(HOST_GCC_FINAL_USR_LIBS) ; do \ |
| 161 | cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/$${i}.so* \ |
| 162 | $(STAGING_DIR)/usr/lib/ ; \ |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 163 | cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/$${i}.so* \ |
| 164 | $(TARGET_DIR)/usr/lib/ ; \ |
| 165 | done |
| 166 | endef |
Gustavo Zacarias | 169141a | 2014-05-25 19:12:57 -0300 | [diff] [blame] | 167 | endif |
| 168 | |
| 169 | define HOST_GCC_FINAL_INSTALL_USR_LIBS |
| 170 | mkdir -p $(TARGET_DIR)/usr/lib |
| 171 | $(HOST_GCC_FINAL_INSTALL_STATIC_LIBS) |
| 172 | $(HOST_GCC_FINAL_INSTALL_SHARED_LIBS) |
| 173 | endef |
Thomas Petazzoni | 4d7c13d | 2013-06-30 21:29:02 +0200 | [diff] [blame] | 174 | HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_USR_LIBS |
| 175 | endif |
| 176 | |
| 177 | $(eval $(host-autotools-package)) |