blob: 26c20117390e1965338d15243c30ffd646cbc56d [file] [log] [blame]
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +02001################################################################################
2#
3# gcc-final
4#
5################################################################################
6
7GCC_FINAL_VERSION = $(GCC_VERSION)
Thomas De Schampheleiref268f712014-10-07 09:06:03 +02008GCC_FINAL_SITE = $(GCC_SITE)
9GCC_FINAL_SOURCE = $(GCC_SOURCE)
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020010
11HOST_GCC_FINAL_DEPENDENCIES = \
12 $(HOST_GCC_COMMON_DEPENDENCIES) \
Peter Korsgaardde13e312014-02-04 15:03:06 +010013 $(BR_LIBC)
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020014
Thomas Petazzoni00e9b1e2013-06-30 21:29:04 +020015HOST_GCC_FINAL_EXTRACT_CMDS = $(HOST_GCC_EXTRACT_CMDS)
16
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020017ifneq ($(call qstrip, $(BR2_XTENSA_CORE_NAME)),)
Max Filippova957e1b2014-02-27 09:07:20 +040018HOST_GCC_FINAL_POST_EXTRACT_HOOKS += HOST_GCC_XTENSA_OVERLAY_EXTRACT
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020019endif
20
21HOST_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.
25HOST_GCC_FINAL_SUBDIR = build
26
Thomas Petazzonidf9bbb72013-09-02 18:06:34 +020027HOST_GCC_FINAL_PRE_CONFIGURE_HOOKS += HOST_GCC_CONFIGURE_SYMLINK
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020028
Jérôme Pouiller7d6c79e2013-10-10 11:40:42 +020029define 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 Zacarias169141a2014-05-25 19:12:57 -030038 --enable-static \
Thomas De Schampheleireaaffd202014-09-27 21:32:44 +020039 $(QUIET) $(HOST_GCC_FINAL_CONF_OPTS) \
Jérôme Pouiller7d6c79e2013-10-10 11:40:42 +020040 )
41endef
42
43
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020044# Languages supported by the cross-compiler
45GCC_FINAL_CROSS_LANGUAGES-y = c
46GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
Thomas Petazzoni69a534b2013-09-02 18:06:30 +020047GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_FORTRAN) += fortran
Thomas Petazzonicd045522013-09-02 18:06:31 +020048GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_OBJC) += objc
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020049GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y))
50
Thomas De Schampheleireaaffd202014-09-27 21:32:44 +020051HOST_GCC_FINAL_CONF_OPTS = \
52 $(HOST_GCC_COMMON_CONF_OPTS) \
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020053 --enable-languages=$(GCC_FINAL_CROSS_LANGUAGES) \
Francois Perrad7fc685c2013-08-07 13:39:55 +020054 $(DISABLE_LARGEFILE) \
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020055 --with-build-time-tools=$(HOST_DIR)/usr/$(GNU_TARGET_NAME)/bin
56
Gustavo Zacarias169141a2014-05-25 19:12:57 -030057# Disable shared libs like libstdc++ if we do static since it confuses linking
58ifeq ($(BR2_PREFER_STATIC_LIB),y)
Thomas De Schampheleireaaffd202014-09-27 21:32:44 +020059HOST_GCC_FINAL_CONF_OPTS += --disable-shared
Gustavo Zacarias169141a2014-05-25 19:12:57 -030060else
Thomas De Schampheleireaaffd202014-09-27 21:32:44 +020061HOST_GCC_FINAL_CONF_OPTS += --enable-shared
Gustavo Zacarias169141a2014-05-25 19:12:57 -030062endif
63
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020064ifeq ($(BR2_GCC_ENABLE_OPENMP),y)
Thomas De Schampheleireaaffd202014-09-27 21:32:44 +020065HOST_GCC_FINAL_CONF_OPTS += --enable-libgomp
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020066else
Thomas De Schampheleireaaffd202014-09-27 21:32:44 +020067HOST_GCC_FINAL_CONF_OPTS += --disable-libgomp
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020068endif
69
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020070# End with user-provided options, so that they can override previously
71# defined options.
Thomas De Schampheleireaaffd202014-09-27 21:32:44 +020072HOST_GCC_FINAL_CONF_OPTS += \
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020073 $(call qstrip,$(BR2_EXTRA_GCC_CONFIG_OPTIONS))
74
Peter Korsgaard5128cc62013-09-04 16:18:14 +020075HOST_GCC_FINAL_CONF_ENV = \
76 $(HOST_GCC_COMMON_CONF_ENV)
77
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +020078# Make sure we have 'cc'
79define 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
87endef
88
89HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_CREATE_CC_SYMLINKS
90
91# Create <arch>-linux-<tool> symlinks
92define 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)
96endef
97
98HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_CREATE_SIMPLE_SYMLINKS
99
Thomas Petazzoni14a2d0b2013-09-02 18:06:33 +0200100# In gcc 4.7.x, the ARM EABIhf library loader path for (e)glibc was not
Thomas Petazzonid2e3cc32013-07-16 10:03:21 +0200101# 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 Petazzoni14a2d0b2013-09-02 18:06:33 +0200104ifeq ($(BR2_arm)$(BR2_ARM_EABIHF)$(BR2_GCC_VERSION_4_7_X)$(BR2_TOOLCHAIN_USES_GLIBC),yyyy)
Thomas Petazzonid2e3cc32013-07-16 10:03:21 +0200105define 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
108endef
109HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_LD_LINUX_LINK
110endif
111
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +0200112# Cannot use the HOST_GCC_FINAL_USR_LIBS mechanism below, because we want
Thomas Petazzoni12d15072014-02-04 16:36:18 +0100113# libgcc_s to be installed in /lib and not /usr/lib.
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +0200114define 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 Petazzoni4d7c13d2013-06-30 21:29:02 +0200119endef
120
121HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_LIBGCC
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +0200122
123# Handle the installation of libraries in /usr/lib
124HOST_GCC_FINAL_USR_LIBS =
125
Thomas Petazzonif03a9be2013-07-08 17:59:45 +0200126ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +0200127HOST_GCC_FINAL_USR_LIBS += libstdc++
128endif
129
130ifeq ($(BR2_GCC_ENABLE_OPENMP),y)
131HOST_GCC_FINAL_USR_LIBS += libgomp
132endif
133
Thomas Petazzoni69a534b2013-09-02 18:06:30 +0200134ifeq ($(BR2_INSTALL_FORTRAN),y)
135HOST_GCC_FINAL_USR_LIBS += libgfortran
136endif
137
Thomas Petazzonicd045522013-09-02 18:06:31 +0200138ifeq ($(BR2_INSTALL_OBJC),y)
139HOST_GCC_FINAL_USR_LIBS += libobjc
140endif
141
Thomas Petazzoni530777a2013-09-02 18:06:38 +0200142ifeq ($(BR2_GCC_ENABLE_LIBMUDFLAP),y)
143ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
144HOST_GCC_FINAL_USR_LIBS += libmudflapth
145else
146HOST_GCC_FINAL_USR_LIBS += libmudflap
147endif
148endif
149
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +0200150ifneq ($(HOST_GCC_FINAL_USR_LIBS),)
Gustavo Zacarias169141a2014-05-25 19:12:57 -0300151define 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
156endef
157
158ifeq ($(BR2_PREFER_STATIC_LIB),)
159define HOST_GCC_FINAL_INSTALL_SHARED_LIBS
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +0200160 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 Petazzoni4d7c13d2013-06-30 21:29:02 +0200163 cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/$${i}.so* \
164 $(TARGET_DIR)/usr/lib/ ; \
165 done
166endef
Gustavo Zacarias169141a2014-05-25 19:12:57 -0300167endif
168
169define 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)
173endef
Thomas Petazzoni4d7c13d2013-06-30 21:29:02 +0200174HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_USR_LIBS
175endif
176
177$(eval $(host-autotools-package))