gcc.mk 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. ################################################################################
  2. #
  3. # Common variables for the gcc-initial, gcc-intermediate and gcc-final
  4. # packages.
  5. #
  6. ################################################################################
  7. #
  8. # Version, site and source
  9. #
  10. GCC_VERSION = $(call qstrip,$(BR2_GCC_VERSION))
  11. ifeq ($(BR2_GCC_VERSION_SNAP),y)
  12. GCC_SNAP_DATE = $(call qstrip,$(BR2_GCC_SNAP_DATE))
  13. endif
  14. ifneq ($(GCC_SNAP_DATE),)
  15. GCC_SITE = ftp://gcc.gnu.org/pub/gcc/snapshots/$(GCC_SNAP_DATE)
  16. else ifeq ($(findstring avr32,$(GCC_VERSION)),avr32)
  17. GCC_SITE = ftp://www.at91.com/pub/buildroot
  18. else ifeq ($(BR2_arc),y)
  19. GCC_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,gcc,$(GCC_VERSION))
  20. GCC_SOURCE = gcc-$(GCC_VERSION).tar.gz
  21. else
  22. GCC_SITE = $(BR2_GNU_MIRROR:/=)/gcc/gcc-$(GCC_VERSION)
  23. endif
  24. GCC_SOURCE ?= gcc-$(GCC_VERSION).tar.bz2
  25. #
  26. # Xtensa special hook
  27. #
  28. define HOST_GCC_XTENSA_OVERLAY_EXTRACT
  29. tar xf $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(call qstrip,\
  30. $(BR2_XTENSA_CORE_NAME)).tar -C $(@D) --strip-components=1 gcc
  31. endef
  32. #
  33. # Apply patches
  34. #
  35. ifeq ($(ARCH),powerpc)
  36. ifneq ($(BR2_SOFT_FLOAT),)
  37. define HOST_GCC_APPLY_POWERPC_PATCH
  38. support/scripts/apply-patches.sh $(@D) package/gcc/$(GCC_VERSION) powerpc-link-with-math-lib.patch.conditional
  39. endef
  40. endif
  41. endif
  42. define HOST_GCC_APPLY_PATCHES
  43. if test -d package/gcc/$(GCC_VERSION); then \
  44. support/scripts/apply-patches.sh $(@D) package/gcc/$(GCC_VERSION) \*.patch ; \
  45. fi;
  46. $(HOST_GCC_APPLY_POWERPC_PATCH)
  47. endef
  48. #
  49. # Custom extract command to save disk space
  50. #
  51. define HOST_GCC_EXTRACT_CMDS
  52. $(call suitable-extractor,$(GCC_SOURCE)) $(DL_DIR)/$(GCC_SOURCE) | \
  53. $(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $(@D) \
  54. --exclude='libjava/*' \
  55. --exclude='libgo/*' \
  56. --exclude='gcc/testsuite/*' \
  57. --exclude='libstdc++-v3/testsuite/*' \
  58. $(TAR_OPTIONS) -
  59. mkdir -p $(@D)/libstdc++-v3/testsuite/
  60. echo "all:" > $(@D)/libstdc++-v3/testsuite/Makefile.in
  61. echo "install:" >> $(@D)/libstdc++-v3/testsuite/Makefile.in
  62. endef
  63. #
  64. # Create 'build' directory and configure symlink
  65. #
  66. define HOST_GCC_CONFIGURE_SYMLINK
  67. mkdir -p $(@D)/build
  68. ln -sf ../configure $(@D)/build/configure
  69. endef
  70. #
  71. # Common configuration options
  72. #
  73. HOST_GCC_COMMON_DEPENDENCIES = \
  74. host-binutils \
  75. host-gmp \
  76. host-mpfr \
  77. $(if $(BR2_BINFMT_FLAT),host-elf2flt)
  78. HOST_GCC_COMMON_CONF_OPT = \
  79. --target=$(GNU_TARGET_NAME) \
  80. --with-sysroot=$(STAGING_DIR) \
  81. --disable-__cxa_atexit \
  82. --with-gnu-ld \
  83. --disable-libssp \
  84. --disable-multilib \
  85. --with-gmp=$(HOST_DIR)/usr \
  86. --with-mpfr=$(HOST_DIR)/usr
  87. # Don't build documentation. It takes up extra space / build time,
  88. # and sometimes needs specific makeinfo versions to work
  89. HOST_GCC_COMMON_CONF_ENV = \
  90. MAKEINFO=missing
  91. # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43810
  92. # Workaround until it's fixed in 4.5.4 or later
  93. ifeq ($(ARCH),powerpc)
  94. ifeq ($(findstring x4.5.,x$(GCC_VERSION)),x4.5.)
  95. HOST_GCC_COMMON_CONF_OPT += --disable-target-optspace
  96. endif
  97. else
  98. HOST_GCC_COMMON_CONF_OPT += --enable-target-optspace
  99. endif
  100. # gcc 4.6.x quadmath requires wchar
  101. ifneq ($(BR2_TOOLCHAIN_BUILDROOT_WCHAR),y)
  102. HOST_GCC_COMMON_CONF_OPT += --disable-libquadmath
  103. endif
  104. # libsanitizer requires wordexp, not in default uClibc config. Also
  105. # doesn't build properly with musl.
  106. ifeq ($(BR2_TOOLCHAIN_BUILDROOT_UCLIBC)$(BR2_TOOLCHAIN_BUILDROOT_MUSL),y)
  107. HOST_GCC_COMMON_CONF_OPT += --disable-libsanitizer
  108. endif
  109. ifeq ($(BR2_GCC_ENABLE_TLS),y)
  110. HOST_GCC_COMMON_CONF_OPT += --enable-tls
  111. else
  112. HOST_GCC_COMMON_CONF_OPT += --disable-tls
  113. endif
  114. ifeq ($(BR2_GCC_ENABLE_LIBMUDFLAP),y)
  115. HOST_GCC_COMMON_CONF_OPT += --enable-libmudflap
  116. else
  117. HOST_GCC_COMMON_CONF_OPT += --disable-libmudflap
  118. endif
  119. ifeq ($(BR2_PTHREADS_NONE),y)
  120. HOST_GCC_COMMON_CONF_OPT += \
  121. --disable-threads \
  122. --disable-libitm \
  123. --disable-libatomic
  124. else
  125. HOST_GCC_COMMON_CONF_OPT += --enable-threads
  126. endif
  127. ifeq ($(BR2_GCC_NEEDS_MPC),y)
  128. HOST_GCC_COMMON_DEPENDENCIES += host-mpc
  129. HOST_GCC_COMMON_CONF_OPT += --with-mpc=$(HOST_DIR)/usr
  130. endif
  131. ifeq ($(BR2_GCC_ENABLE_GRAPHITE),y)
  132. HOST_GCC_COMMON_DEPENDENCIES += host-isl host-cloog
  133. HOST_GCC_COMMON_CONF_OPT += --with-isl=$(HOST_DIR)/usr --with-cloog=$(HOST_DIR)/usr
  134. else
  135. HOST_GCC_COMMON_CONF_OPT += --without-isl --without-cloog
  136. endif
  137. ifneq ($(BR2_arc)$(BR2_GCC_VERSION_SNAP),)
  138. HOST_GCC_COMMON_DEPENDENCIES += host-flex host-bison
  139. endif
  140. ifeq ($(BR2_SOFT_FLOAT),y)
  141. # only mips*-*-*, arm*-*-* and sparc*-*-* accept --with-float
  142. # powerpc seems to be needing it as well
  143. ifeq ($(BR2_arm)$(BR2_armeb)$(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el)$(BR2_powerpc)$(BR2_sparc),y)
  144. HOST_GCC_COMMON_CONF_OPT += --with-float=soft
  145. endif
  146. endif
  147. ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y)
  148. HOST_GCC_COMMON_CONF_OPT += --disable-decimal-float
  149. endif
  150. # Determine arch/tune/abi/cpu options
  151. ifneq ($(call qstrip,$(BR2_GCC_TARGET_ARCH)),)
  152. HOST_GCC_COMMON_CONF_OPT += --with-arch=$(BR2_GCC_TARGET_ARCH)
  153. endif
  154. ifneq ($(call qstrip,$(BR2_GCC_TARGET_TUNE)),)
  155. HOST_GCC_COMMON_CONF_OPT += --with-tune=$(BR2_GCC_TARGET_TUNE)
  156. endif
  157. ifneq ($(call qstrip,$(BR2_GCC_TARGET_ABI)),)
  158. HOST_GCC_COMMON_CONF_OPT += --with-abi=$(BR2_GCC_TARGET_ABI)
  159. endif
  160. # GCC doesn't support --with-cpu for bfin
  161. ifeq ($(BR2_bfin),)
  162. ifneq ($(call qstrip,$(BR2_GCC_TARGET_CPU)),)
  163. ifneq ($(call qstrip,$(BR2_GCC_TARGET_CPU_REVISION)),)
  164. HOST_GCC_COMMON_CONF_OPT += --with-cpu=$(call qstrip,$(BR2_GCC_TARGET_CPU)-$(BR2_GCC_TARGET_CPU_REVISION))
  165. else
  166. HOST_GCC_COMMON_CONF_OPT += --with-cpu=$(call qstrip,$(BR2_GCC_TARGET_CPU))
  167. endif
  168. endif
  169. endif
  170. GCC_TARGET_FPU = $(call qstrip,$(BR2_GCC_TARGET_FPU))
  171. ifneq ($(GCC_TARGET_FPU),)
  172. HOST_GCC_COMMON_CONF_OPT += --with-fpu=$(GCC_TARGET_FPU)
  173. endif
  174. GCC_TARGET_FLOAT_ABI = $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI))
  175. ifneq ($(GCC_TARGET_FLOAT_ABI),)
  176. HOST_GCC_COMMON_CONF_OPT += --with-float=$(GCC_TARGET_FLOAT_ABI)
  177. endif
  178. GCC_TARGET_MODE = $(call qstrip,$(BR2_GCC_TARGET_MODE))
  179. ifneq ($(GCC_TARGET_MODE),)
  180. HOST_GCC_COMMON_CONF_OPT += --with-mode=$(GCC_TARGET_MODE)
  181. endif
  182. # Branding works on >= 4.3
  183. ifneq ($(findstring x4.2.,x$(GCC_VERSION)),x4.2.)
  184. HOST_GCC_COMMON_CONF_OPT += \
  185. --with-pkgversion="Buildroot $(BR2_VERSION_FULL)" \
  186. --with-bugurl="http://bugs.buildroot.net/"
  187. endif
  188. # Enable proper double/long double for SPE ABI
  189. ifeq ($(BR2_powerpc_SPE),y)
  190. HOST_GCC_COMMON_CONF_OPT += \
  191. --enable-e500_double \
  192. --with-long-double-128
  193. endif
  194. include $(sort $(wildcard package/gcc/*/*.mk))