gcc-uclibc-3.x.mk 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. # Makefile for to build a gcc/uClibc toolchain
  2. #
  3. # Copyright (C) 2002-2003 Erik Andersen <andersen@uclibc.org>
  4. # Copyright (C) 2004 Manuel Novoa III <mjn3@uclibc.org>
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. # General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program; if not, write to the Free Software
  18. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19. ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
  20. # without sysroot support. Sysroot toolchain is gcc-uclibc-4.x.mk
  21. ifneq ($(BR2_TOOLCHAIN_SYSROOT),y)
  22. ifneq ($(GCC_SNAP_DATE),)
  23. GCC_SITE:=ftp://sources.redhat.com/pub/gcc/snapshots/$(GCC_VERSION)
  24. else ifeq ($(findstring avr32,$(GCC_VERSION)),avr32)
  25. GCC_SITE:=ftp://www.at91.com/pub/buildroot/
  26. else
  27. GCC_SITE:=$(BR2_GNU_MIRROR)/gcc/gcc-$(GCC_VERSION)
  28. endif
  29. GCC_SOURCE:=gcc-$(GCC_VERSION).tar.bz2
  30. GCC_DIR:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)
  31. GCC_PATCH_DIR:=toolchain/gcc/$(GCC_VERSION)
  32. GCC_CAT:=$(BZCAT)
  33. GCC_STRIP_HOST_BINARIES:=true
  34. ifneq ($(BR2_INSTALL_FORTRAN),y)
  35. # fortran needs gmp and mpfr
  36. ifeq ($(findstring 4.0.,$(GCC_VERSION)),4.0.)
  37. GCC_NO_MPFR:=y
  38. endif
  39. ifeq ($(findstring 4.1.,$(GCC_VERSION)),4.1.)
  40. GCC_NO_MPFR:=y
  41. endif
  42. endif
  43. #############################################################
  44. #
  45. # Setup some initial stuff
  46. #
  47. #############################################################
  48. GCC_CROSS_LANGUAGES:=c
  49. ifeq ($(BR2_GCC_CROSS_CXX),y)
  50. GCC_CROSS_LANGUAGES:=$(GCC_CROSS_LANGUAGES),c++
  51. endif
  52. ifeq ($(BR2_GCC_CROSS_FORTRAN),y)
  53. GCC_CROSS_LANGUAGES:=$(GCC_CROSS_LANGUAGES),fortran
  54. endif
  55. ifeq ($(BR2_GCC_CROSS_OBJC),y)
  56. GCC_CROSS_LANGUAGES:=$(GCC_CROSS_LANGUAGES),objc
  57. endif
  58. GCC_TARGET_LANGUAGES:=c
  59. ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
  60. GCC_TARGET_LANGUAGES:=$(GCC_TARGET_LANGUAGES),c++
  61. endif
  62. ifeq ($(BR2_INSTALL_LIBGCJ),y)
  63. GCC_TARGET_LANGUAGES:=$(GCC_TARGET_LANGUAGES),java
  64. endif
  65. ifeq ($(BR2_INSTALL_OBJC),y)
  66. GCC_TARGET_LANGUAGES:=$(GCC_TARGET_LANGUAGES),objc
  67. endif
  68. GCC_TARGET_PREREQ =
  69. GCC_STAGING_PREREQ= $(STAGING_DIR)/usr/lib/libc.a
  70. ifndef GCC_NO_MPFR
  71. GCC_WITH_HOST_GMP=--with-gmp=$(GMP_HOST_DIR)
  72. GCC_WITH_HOST_MPFR=--with-mpfr=$(MPFR_HOST_DIR)
  73. ifeq ($(BR2_INSTALL_FORTRAN),y)
  74. GCC_TARGET_LANGUAGES:=$(GCC_TARGET_LANGUAGES),fortran
  75. #GCC_TARGET_PREREQ += $(TARGET_DIR)/lib/libmpfr.so $(TARGET_DIR)/lib/libgmp.so
  76. #GCC_STAGING_PREREQ+= $(TOOLCHAIN_DIR)/mpfr/lib/libmpfr.so
  77. GCC_WITH_TARGET_GMP=--with-gmp="$(GMP_TARGET_DIR)"
  78. GCC_WITH_TARGET_MPFR=--with-mpfr="$(MPFR_TARGET_DIR)"
  79. endif
  80. endif # ifndef GCC_NO_MPFR
  81. ifeq ($(BR2_GCC_SHARED_LIBGCC),y)
  82. GCC_SHARED_LIBGCC:=--enable-shared
  83. else
  84. GCC_SHARED_LIBGCC:=--disable-shared
  85. endif
  86. HOST_SOURCE+=gcc-source
  87. #############################################################
  88. #
  89. # build the first pass gcc compiler
  90. #
  91. #############################################################
  92. GCC_BUILD_DIR1:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-initial
  93. $(DL_DIR)/$(GCC_SOURCE):
  94. mkdir -p $(DL_DIR)
  95. $(call DOWNLOAD,$(GCC_SITE),$(GCC_SOURCE))
  96. gcc-unpacked: $(GCC_DIR)/.patched
  97. $(GCC_DIR)/.unpacked: $(DL_DIR)/$(GCC_SOURCE)
  98. mkdir -p $(TOOLCHAIN_DIR)
  99. $(GCC_CAT) $(DL_DIR)/$(GCC_SOURCE) | tar -C $(TOOLCHAIN_DIR) $(TAR_OPTIONS) -
  100. $(CONFIG_UPDATE) $(@D)
  101. touch $@
  102. gcc-patched: $(GCC_DIR)/.patched
  103. $(GCC_DIR)/.patched: $(GCC_DIR)/.unpacked
  104. # Apply any files named gcc-*.patch from the source directory to gcc
  105. ifneq ($(wildcard $(GCC_PATCH_DIR)),)
  106. toolchain/patch-kernel.sh $(GCC_DIR) $(GCC_PATCH_DIR) \*.patch
  107. endif
  108. # Note: The soft float situation has improved considerably with gcc 3.4.x.
  109. # We can dispense with the custom spec files, as well as libfloat for the arm case.
  110. # However, we still need a patch for arm. There's a similar patch for gcc 3.3.x
  111. # which needs to be integrated so we can kill of libfloat for good, except for
  112. # anyone (?) who might still be using gcc 2.95. mjn3
  113. ifeq ($(BR2_SOFT_FLOAT),y)
  114. ifeq ("$(strip $(ARCH))","arm")
  115. toolchain/patch-kernel.sh $(GCC_DIR) toolchain/gcc/$(GCC_VERSION) arm-softfloat.patch.conditional
  116. endif
  117. ifeq ("$(strip $(ARCH))","armeb")
  118. toolchain/patch-kernel.sh $(GCC_DIR) toolchain/gcc/$(GCC_VERSION) arm-softfloat.patch.conditional
  119. endif
  120. endif
  121. touch $@
  122. # The --without-headers option stopped working with gcc 3.0 and has never been
  123. # fixed, so we need to actually have working C library header files prior to
  124. # the step or libgcc will not build...
  125. $(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched
  126. mkdir -p $(GCC_BUILD_DIR1)
  127. (cd $(GCC_BUILD_DIR1); PATH=$(TARGET_PATH) \
  128. $(HOST_CONFIGURE_OPTS) \
  129. $(GCC_DIR)/configure $(QUIET) \
  130. --prefix=$(STAGING_DIR)/usr \
  131. --build=$(GNU_HOST_NAME) \
  132. --host=$(GNU_HOST_NAME) \
  133. --target=$(REAL_GNU_TARGET_NAME) \
  134. --enable-languages=c \
  135. --with-sysroot=$(TOOLCHAIN_DIR)/uClibc_dev/ \
  136. --disable-__cxa_atexit \
  137. --enable-target-optspace \
  138. --with-gnu-ld \
  139. --disable-shared \
  140. --disable-libssp \
  141. $(GCC_WITH_HOST_GMP) \
  142. $(GCC_WITH_HOST_MPFR) \
  143. $(DISABLE_NLS) \
  144. $(THREADS) \
  145. $(MULTILIB) \
  146. $(SOFT_FLOAT_CONFIG_OPTION) \
  147. $(GCC_WITH_ABI) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \
  148. $(EXTRA_GCC_CONFIG_OPTIONS) \
  149. $(QUIET) \
  150. )
  151. touch $@
  152. $(GCC_BUILD_DIR1)/.compiled: $(GCC_BUILD_DIR1)/.configured
  153. PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc
  154. touch $@
  155. gcc_initial=$(GCC_BUILD_DIR1)/.installed
  156. $(gcc_initial) $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc: $(GCC_BUILD_DIR1)/.compiled
  157. PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc
  158. #rm -f $(STAGING_DIR)/bin/gccbug $(STAGING_DIR)/bin/gcov
  159. #rm -rf $(STAGING_DIR)/info $(STAGING_DIR)/man $(STAGING_DIR)/share/doc $(STAGING_DIR)/share/locale
  160. touch $(gcc_initial)
  161. gcc_initial: uclibc-configured binutils $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc
  162. gcc_initial-clean:
  163. rm -rf $(GCC_BUILD_DIR1)
  164. gcc_initial-dirclean:
  165. rm -rf $(GCC_BUILD_DIR1) $(GCC_DIR)
  166. #############################################################
  167. #
  168. # second pass compiler build. Build the compiler targeting
  169. # the newly built shared uClibc library.
  170. #
  171. #############################################################
  172. #
  173. # Sigh... I had to rework things because using --with-gxx-include-dir
  174. # causes issues with include dir search order for g++. This seems to
  175. # have something to do with "path translations" and possibly doesn't
  176. # affect gcc-target. However, I haven't tested gcc-target yet so no
  177. # guarantees. mjn3
  178. GCC_BUILD_DIR2:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-final
  179. $(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched $(GCC_STAGING_PREREQ)
  180. mkdir -p $(GCC_BUILD_DIR2)
  181. # Important! Required for limits.h to be fixed.
  182. ln -snf ../include $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/sys-include
  183. #-rmdir $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
  184. #ln -snf ../lib/ $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
  185. (cd $(GCC_BUILD_DIR2); rm -rf config.cache; \
  186. $(HOST_CONFIGURE_OPTS) \
  187. GCC=$(TARGET_CROSS)gcc \
  188. CPP=$(TARGET_CROSS)cpp \
  189. LDFLAGS_FOR_TARGET="$(patsubst %,LDFLAGS+=-Wl$(comma)%,$(TARGET_LDFLAGS)) -L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib" \
  190. $(GCC_DIR)/configure $(QUIET) \
  191. --prefix=$(STAGING_DIR) \
  192. --build=$(GNU_HOST_NAME) \
  193. --host=$(GNU_HOST_NAME) \
  194. --target=$(REAL_GNU_TARGET_NAME) \
  195. --enable-languages=$(GCC_CROSS_LANGUAGES) \
  196. --disable-__cxa_atexit \
  197. --enable-target-optspace \
  198. --with-gnu-ld \
  199. --disable-libssp \
  200. $(GCC_WITH_HOST_GMP) \
  201. $(GCC_WITH_HOST_MPFR) \
  202. $(GCC_SHARED_LIBGCC) \
  203. $(DISABLE_NLS) \
  204. $(THREADS) \
  205. $(MULTILIB) \
  206. $(SOFT_FLOAT_CONFIG_OPTION) \
  207. $(GCC_WITH_ABI) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \
  208. $(GCC_USE_SJLJ_EXCEPTIONS) \
  209. $(DISABLE_LARGEFILE) \
  210. $(EXTRA_GCC_CONFIG_OPTIONS) \
  211. )
  212. touch $@
  213. $(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured
  214. PATH=$(TARGET_PATH) $(MAKE) $(HOST_CONFIGURE_OPTS) CPP=$(TARGET_CROSS)cpp -C $(GCC_BUILD_DIR2) all
  215. touch $@
  216. $(GCC_BUILD_DIR2)/.installed: $(GCC_BUILD_DIR2)/.compiled
  217. PATH=$(TARGET_PATH) \
  218. $(MAKE) $(HOST_CONFIGURE_OPTS) \
  219. LDFLAGS_FOR_TARGET="$(patsubst %,LDFLAGS+=-Wl$(comma)%,$(TARGET_LDFLAGS)) -L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib" \
  220. -C $(GCC_BUILD_DIR2) install
  221. if [ -d "$(STAGING_DIR)/usr/lib64" ]; then \
  222. if [ ! -e "$(STAGING_DIR)/usr/lib" ]; then \
  223. mkdir -p "$(STAGING_DIR)/usr/lib"; \
  224. fi; \
  225. mv "$(STAGING_DIR)/usr/lib64/"* "$(STAGING_DIR)/usr/lib/"; \
  226. rmdir "$(STAGING_DIR)/usr/lib64"; \
  227. fi
  228. # Strip the host binaries
  229. ifeq ($(GCC_STRIP_HOST_BINARIES),true)
  230. strip --strip-all -R .note -R .comment $(filter-out %-gccbug %-embedspu,$(wildcard $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-*))
  231. endif
  232. # Make sure we have 'cc'.
  233. if [ ! -e $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-cc ]; then \
  234. ln -snf $(REAL_GNU_TARGET_NAME)-gcc \
  235. $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-cc; \
  236. fi
  237. if [ ! -e $(STAGING_DIR)/usr/bin/gcc ]; then \
  238. ln -snf gcc $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-cc; \
  239. fi
  240. # Set up the symlinks to enable lying about target name.
  241. set -e; \
  242. (cd $(STAGING_DIR)/usr; \
  243. ln -snf $(REAL_GNU_TARGET_NAME) $(GNU_TARGET_NAME); \
  244. cd bin; \
  245. for app in $(REAL_GNU_TARGET_NAME)-*; do \
  246. ln -snf $${app} \
  247. $(GNU_TARGET_NAME)$${app##$(REAL_GNU_TARGET_NAME)}; \
  248. done; \
  249. )
  250. #
  251. # Now for the ugly 3.3.x soft float hack...
  252. #
  253. ifeq ($(BR2_SOFT_FLOAT),y)
  254. ifeq ($(findstring 3.3.,$(GCC_VERSION)),3.3.)
  255. # Make sure we have a soft float specs file for this arch
  256. if [ ! -f toolchain/gcc/$(GCC_VERSION)/specs-$(ARCH)-soft-float ]; then \
  257. echo soft float configured but no specs file for this arch; \
  258. /bin/false; \
  259. fi
  260. # Replace specs file with one that defaults to soft float mode.
  261. if [ ! -f $(STAGING_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs ]; then \
  262. echo staging dir specs file is missing; \
  263. /bin/false; \
  264. fi
  265. cp toolchain/gcc/$(GCC_VERSION)/specs-$(ARCH)-soft-float $(STAGING_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs
  266. endif
  267. endif
  268. #
  269. # Ok... that's enough of that.
  270. #
  271. mkdir -p $(TARGET_DIR)/usr/lib $(TARGET_DIR)/usr/sbin
  272. touch $@
  273. $(STAMP_DIR)/gcc_libs_target_installed: $(GCC_BUILD_DIR2)/.installed
  274. ifeq ($(BR2_GCC_SHARED_LIBGCC),y)
  275. # These are in /lib, so...
  276. rm -rf $(TARGET_DIR)/usr/lib/libgcc_s*.so*
  277. -cp -dpf $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib/libgcc_s* \
  278. $(TARGET_DIR)/lib/
  279. -$(STRIPCMD) $(STRIP_STRIP_UNNEEDED) $(TARGET_DIR)/lib/libgcc_s*
  280. endif
  281. ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
  282. ifeq ($(BR2_GCC_SHARED_LIBGCC),y)
  283. mkdir -p $(TARGET_DIR)/usr/lib
  284. -cp -dpf $(STAGING_DIR)/lib/libstdc++.so* $(TARGET_DIR)/usr/lib/
  285. -$(STRIPCMD) $(STRIP_STRIP_UNNEEDED) $(TARGET_DIR)/usr/lib/libstdc++.so*
  286. endif
  287. endif
  288. ifeq ($(BR2_INSTALL_LIBGCJ),y)
  289. cp -dpf $(STAGING_DIR)/lib/libgcj.so* $(TARGET_DIR)/usr/lib/
  290. cp -dpf $(STAGING_DIR)/lib/lib-org-w3c-dom.so* $(TARGET_DIR)/usr/lib/
  291. cp -dpf $(STAGING_DIR)/lib/lib-org-xml-sax.so* $(TARGET_DIR)/usr/lib/
  292. mkdir -p $(TARGET_DIR)/usr/lib/security
  293. cp -dpf $(STAGING_DIR)/usr/lib/security/libgcj.security \
  294. $(TARGET_DIR)/usr/lib/security/
  295. cp -dpf $(STAGING_DIR)/usr/lib/security/classpath.security \
  296. $(TARGET_DIR)/usr/lib/security/
  297. endif
  298. mkdir -p $(@D)
  299. touch $@
  300. cross_compiler:=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc
  301. cross_compiler gcc: gcc-config $(GCC_BUILD_DIR2)/.installed \
  302. $(STAMP_DIR)/gcc_libs_target_installed \
  303. $(GCC_TARGETS)
  304. gcc-source: $(DL_DIR)/$(GCC_SOURCE)
  305. gcc-config: uclibc-configured binutils gcc_initial $(LIBFLOAT_TARGET) \
  306. uclibc $(GCC_BUILD_DIR2)/.configured
  307. gcc-clean:
  308. rm -rf $(GCC_BUILD_DIR2)
  309. for prog in cpp gcc gcc-[0-9]* protoize unprotoize gcov gccbug cc; do \
  310. rm -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-$$prog; \
  311. rm -f $(STAGING_DIR)/usr/bin/$(GNU_TARGET_NAME)-$$prog; \
  312. done
  313. gcc-dirclean: gcc_initial-dirclean
  314. rm -rf $(GCC_BUILD_DIR2)
  315. #############################################################
  316. #
  317. # Next build target gcc compiler
  318. #
  319. #############################################################
  320. GCC_BUILD_DIR3:=$(BUILD_DIR)/gcc-$(GCC_VERSION)-target
  321. $(GCC_BUILD_DIR3)/.prepared: $(STAMP_DIR)/gcc_libs_target_installed $(GCC_TARGET_PREREQ)
  322. mkdir -p $(GCC_BUILD_DIR3)
  323. touch $@
  324. $(GCC_BUILD_DIR3)/.configured: $(GCC_BUILD_DIR3)/.prepared
  325. (cd $(GCC_BUILD_DIR3); rm -rf config.cache; \
  326. $(TARGET_CONFIGURE_OPTS) \
  327. CFLAGS_FOR_BUILD="-g -O2 $(HOST_CFLAGS)" \
  328. $(TARGET_GCC_FLAGS) \
  329. $(GCC_DIR)/configure $(QUIET) \
  330. --prefix=/usr \
  331. --build=$(GNU_HOST_NAME) \
  332. --host=$(REAL_GNU_TARGET_NAME) \
  333. --target=$(REAL_GNU_TARGET_NAME) \
  334. --enable-languages=$(GCC_TARGET_LANGUAGES) \
  335. --with-gxx-include-dir=/usr/include/c++ \
  336. --disable-__cxa_atexit \
  337. --with-gnu-ld \
  338. --with-gnu-as \
  339. --disable-libssp \
  340. $(GCC_SHARED_LIBGCC) \
  341. $(GCC_WITH_TARGET_GMP) \
  342. $(GCC_WITH_TARGET_MPFR) \
  343. $(DISABLE_NLS) \
  344. $(THREADS) \
  345. $(MULTILIB) \
  346. $(SOFT_FLOAT_CONFIG_OPTION) \
  347. $(GCC_WITH_ABI) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \
  348. $(GCC_USE_SJLJ_EXCEPTIONS) \
  349. $(DISABLE_LARGEFILE) \
  350. $(EXTRA_GCC_CONFIG_OPTIONS) \
  351. $(EXTRA_TARGET_GCC_CONFIG_OPTIONS) \
  352. )
  353. touch $@
  354. $(GCC_BUILD_DIR3)/.compiled: $(GCC_BUILD_DIR3)/.configured
  355. PATH=$(TARGET_PATH) \
  356. $(MAKE) $(TARGET_CONFIGURE_OPTS) \
  357. CFLAGS_FOR_BUILD="-g -O2 $(HOST_CFLAGS)" \
  358. $(TARGET_GCC_FLAGS) \
  359. -C $(GCC_BUILD_DIR3) all
  360. touch $@
  361. #
  362. # gcc-lib dir changes names to gcc with 3.4.mumble
  363. #
  364. ifeq ($(findstring 3.4.,$(GCC_VERSION)),3.4.)
  365. GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
  366. else
  367. GCC_LIB_SUBDIR=lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
  368. endif
  369. # sigh... we need to find a better way
  370. ifeq ($(findstring 4.0.,$(GCC_VERSION)),4.0.)
  371. GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
  372. endif
  373. ifeq ($(findstring 4.1.,$(GCC_VERSION)),4.1.)
  374. GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
  375. endif
  376. ifeq ($(findstring 4.2,$(GCC_VERSION)),4.2)
  377. ifneq ($(findstring 4.2.,$(GCC_VERSION)),4.2.)
  378. REAL_GCC_VERSION=$(shell cat $(GCC_DIR)/gcc/BASE-VER)
  379. GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(REAL_GCC_VERSION)
  380. else
  381. GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
  382. endif
  383. endif
  384. $(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR3)/.compiled
  385. PATH=$(TARGET_PATH) \
  386. $(MAKE) $(TARGET_CONFIGURE_OPTS) \
  387. CFLAGS_FOR_BUILD="-g -O2 $(HOST_CFLAGS)" \
  388. $(TARGET_GCC_FLAGS) \
  389. DESTDIR=$(TARGET_DIR) \
  390. -C $(GCC_BUILD_DIR3) install
  391. # Remove broken specs file (cross compile flag is set).
  392. rm -f $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/specs
  393. #
  394. # Now for the ugly 3.3.x soft float hack...
  395. #
  396. ifeq ($(BR2_SOFT_FLOAT),y)
  397. ifeq ($(findstring 3.3.,$(GCC_VERSION)),3.3.)
  398. # Add a specs file that defaults to soft float mode.
  399. cp toolchain/gcc/$(GCC_VERSION)/specs-$(ARCH)-soft-float $(TARGET_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs
  400. # Make sure gcc does not think we are cross compiling
  401. $(SED) "s/^1/0/;" $(TARGET_DIR)/usr/lib/gcc-lib/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)/specs
  402. endif
  403. endif
  404. #
  405. # Ok... that's enough of that.
  406. #
  407. -(cd $(TARGET_DIR)/bin && find -type f | xargs $(STRIPCMD) > /dev/null 2>&1)
  408. -(cd $(TARGET_DIR)/usr/bin && find -type f | xargs $(STRIPCMD) > /dev/null 2>&1)
  409. -(cd $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR) && $(STRIPCMD) cc1 cc1plus collect2 > /dev/null 2>&1)
  410. -(cd $(TARGET_DIR)/usr/lib && $(STRIPCMD) libstdc++.so.*.*.* > /dev/null 2>&1)
  411. -(cd $(TARGET_DIR)/lib && $(STRIPCMD) libgcc_s*.so.*.*.* > /dev/null 2>&1)
  412. #
  413. rm -f $(TARGET_DIR)/usr/lib/*.la*
  414. #rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
  415. # $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
  416. # Work around problem of missing syslimits.h
  417. if [ ! -f $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/include/syslimits.h ]; then \
  418. echo "warning: working around missing syslimits.h"; \
  419. cp -f $(STAGING_DIR)/usr/$(GCC_LIB_SUBDIR)/include/syslimits.h \
  420. $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/include/; \
  421. fi
  422. # Make sure we have 'cc'.
  423. if [ ! -e $(TARGET_DIR)/usr/bin/cc ]; then \
  424. ln -snf gcc $(TARGET_DIR)/usr/bin/cc; \
  425. fi
  426. # These are in /lib, so...
  427. #rm -rf $(TARGET_DIR)/usr/lib/libgcc_s*.so*
  428. #touch -c $(TARGET_DIR)/usr/bin/gcc
  429. gcc_target: uclibc_target binutils_target $(TARGET_DIR)/usr/bin/gcc
  430. gcc_target-clean:
  431. rm -rf $(GCC_BUILD_DIR3)
  432. rm -f $(TARGET_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)*
  433. gcc_target-dirclean:
  434. rm -rf $(GCC_BUILD_DIR3)
  435. endif
  436. # gcc-3.x only
  437. endif