binutils.mk 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. #############################################################
  2. #
  3. # build binutils for use on the host system
  4. #
  5. #############################################################
  6. BINUTILS_SITE:=http://ftp.kernel.org/pub/linux/devel/binutils
  7. BINUTILS_SOURCE:=binutils-2.14.90.0.6.tar.bz2
  8. BINUTILS_DIR:=$(TOOL_BUILD_DIR)/binutils-2.14.90.0.6
  9. BINUTILS_CAT:=bzcat
  10. BINUTILS_DIR1:=$(TOOL_BUILD_DIR)/binutils-build
  11. $(DL_DIR)/$(BINUTILS_SOURCE):
  12. $(WGET) -P $(DL_DIR) $(BINUTILS_SITE)/$(BINUTILS_SOURCE)
  13. $(BINUTILS_DIR)/.unpacked: $(DL_DIR)/$(BINUTILS_SOURCE)
  14. mkdir -p $(TOOL_BUILD_DIR)
  15. mkdir -p $(DL_DIR)
  16. mkdir -p $(STAGING_DIR)
  17. mkdir -p $(STAGING_DIR)/lib/gcc-lib
  18. mkdir -p $(STAGING_DIR)/usr/bin;
  19. mkdir -p $(STAGING_DIR)/$(GNU_TARGET_NAME)/
  20. (cd $(STAGING_DIR)/$(GNU_TARGET_NAME); ln -fs ../lib)
  21. (cd $(STAGING_DIR)/$(GNU_TARGET_NAME); ln -fs ../include)
  22. (cd $(STAGING_DIR)/$(GNU_TARGET_NAME); ln -fs ../include sys-include)
  23. $(BINUTILS_CAT) $(DL_DIR)/$(BINUTILS_SOURCE) | tar -C $(TOOL_BUILD_DIR) -xvf -
  24. touch $(BINUTILS_DIR)/.unpacked
  25. $(BINUTILS_DIR)/.patched: $(BINUTILS_DIR)/.unpacked
  26. # Apply any files named binutils-*.patch from the source directory to binutils
  27. $(SOURCE_DIR)/patch-kernel.sh $(BINUTILS_DIR) $(SOURCE_DIR) binutils-*.patch
  28. touch $(BINUTILS_DIR)/.patched
  29. $(BINUTILS_DIR1)/.configured: $(BINUTILS_DIR)/.patched
  30. mkdir -p $(BINUTILS_DIR1)
  31. (cd $(BINUTILS_DIR1); CC="$(HOSTCC)" \
  32. CC_FOR_HOST="$(HOSTCC)" \
  33. CXX_FOR_HOST="$(HOSTCC)" \
  34. LDFLAGS="$(HOSTLDFLAGS)" \
  35. $(BINUTILS_DIR)/configure \
  36. --target=$(GNU_TARGET_NAME) \
  37. --host=$(GNU_HOST_NAME) \
  38. --build=$(GNU_HOST_NAME) \
  39. --prefix=$(STAGING_DIR) \
  40. --exec-prefix=$(STAGING_DIR) \
  41. --bindir=$(STAGING_DIR)/bin \
  42. --sbindir=$(STAGING_DIR)/sbin \
  43. --sysconfdir=$(STAGING_DIR)/etc \
  44. --datadir=$(STAGING_DIR)/share \
  45. --includedir=$(STAGING_DIR)/include \
  46. --libdir=$(STAGING_DIR)/lib \
  47. --localstatedir=$(STAGING_DIR)/var \
  48. --mandir=$(STAGING_DIR)/man \
  49. --infodir=$(STAGING_DIR)/info \
  50. --enable-targets=$(GNU_TARGET_NAME) \
  51. --with-sysroot=$(STAGING_DIR) \
  52. $(MULTILIB) \
  53. $(SOFT_FLOAT_CONFIG_OPTION) \
  54. --program-prefix=$(ARCH)-linux-);
  55. touch $(BINUTILS_DIR1)/.configured
  56. $(BINUTILS_DIR1)/binutils/objdump: $(BINUTILS_DIR1)/.configured
  57. $(MAKE) $(JLEVEL) CC_FOR_HOST="$(HOSTCC)" \
  58. CXX_FOR_HOST="$(HOSTCC)" LDFLAGS="$(HOSTLDFLAGS)" \
  59. -C $(BINUTILS_DIR1);
  60. $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin/ld: $(BINUTILS_DIR1)/binutils/objdump
  61. $(MAKE) $(JLEVEL) CC_FOR_HOST="$(HOSTCC)" \
  62. CXX_FOR_HOST="$(HOSTCC)" LDFLAGS="$(HOSTLDFLAGS)" \
  63. -C $(BINUTILS_DIR1) install;
  64. rm -rf $(STAGING_DIR)/info $(STAGING_DIR)/man $(STAGING_DIR)/share/doc \
  65. $(STAGING_DIR)/share/locale
  66. mkdir -p $(STAGING_DIR)/usr/bin;
  67. set -e; \
  68. for app in addr2line ar as c++filt gprof ld nm objcopy \
  69. objdump ranlib readelf size strings strip ; \
  70. do \
  71. if [ -x $(STAGING_DIR)/bin/$(ARCH)-linux-$${app} ] ; then \
  72. (cd $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin; \
  73. ln -fs ../../bin/$(ARCH)-linux-$${app} $${app}; \
  74. ); \
  75. (cd $(STAGING_DIR)/usr/bin; \
  76. ln -fs ../../bin/$(ARCH)-linux-$${app} $${app}; \
  77. ); \
  78. fi; \
  79. done;
  80. $(STAGING_DIR)/lib/libg.a:
  81. mkdir -p $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin
  82. mkdir -p $(STAGING_DIR)/usr/include/
  83. mkdir -p $(STAGING_DIR)/usr/lib/
  84. $(TARGET_CROSS)ar rv $(STAGING_DIR)/lib/libg.a;
  85. cp $(BINUTILS_DIR)/include/ansidecl.h $(STAGING_DIR)/usr/include/
  86. cp $(BINUTILS_DIR)/include/bfdlink.h $(STAGING_DIR)/usr/include/
  87. cp $(BINUTILS_DIR)/include/dis-asm.h $(STAGING_DIR)/usr/include/
  88. cp $(BINUTILS_DIR)/include/libiberty.h $(STAGING_DIR)/usr/include/
  89. cp $(BINUTILS_DIR)/include/symcat.h $(STAGING_DIR)/usr/include/
  90. cp $(BINUTILS_DIR1)/bfd/bfd.h $(STAGING_DIR)/usr/include/
  91. cp -a $(BINUTILS_DIR1)/bfd/.libs/* $(STAGING_DIR)/usr/lib/
  92. cp -a $(BINUTILS_DIR1)/opcodes/.libs/* $(STAGING_DIR)/usr/lib/
  93. cp -a $(BINUTILS_DIR1)/libiberty/libiberty.a $(STAGING_DIR)/usr/lib/
  94. binutils: $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin/ld $(STAGING_DIR)/lib/libg.a
  95. binutils-source: $(DL_DIR)/$(BINUTILS_SOURCE)
  96. binutils-clean:
  97. rm -f $(STAGING_DIR)/bin/$(GNU_TARGET_NAME)*
  98. -$(MAKE) -C $(BINUTILS_DIR1) clean
  99. binutils-dirclean:
  100. rm -rf $(BINUTILS_DIR1)
  101. #############################################################
  102. #
  103. # build binutils for use on the target system
  104. #
  105. #############################################################
  106. BINUTILS_DIR2:=$(BUILD_DIR)/binutils-target
  107. $(BINUTILS_DIR2)/.configured: $(BINUTILS_DIR)/.patched
  108. mkdir -p $(BINUTILS_DIR2)
  109. mkdir -p $(TARGET_DIR)/usr/include
  110. mkdir -p $(TARGET_DIR)/usr/$(GNU_TARGET_NAME)/
  111. (cd $(BINUTILS_DIR2); \
  112. $(TARGET_CONFIGURE_OPTS) \
  113. CFLAGS="$(TARGET_CFLAGS)" \
  114. CC_FOR_BUILD="$(HOSTCC)" \
  115. CXX_FOR_BUILD="$(HOSTCC)" \
  116. LDFLAGS="$(HOSTLDFLAGS)" \
  117. AR_FOR_TARGET=$(TARGET_CROSS)ar \
  118. AS_FOR_TARGET=$(TARGET_CROSS)as \
  119. LD_FOR_TARGET=$(TARGET_CROSS)ld \
  120. NM_FOR_TARGET=$(TARGET_CROSS)nm \
  121. CC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
  122. GCC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
  123. CXX_FOR_TARGET=$(TARGET_CROSS)g++$(TARGET_SOFT_FLOAT) \
  124. RANLIB_FOR_TARGET=$(TARGET_CROSS)ranlib \
  125. $(BINUTILS_DIR)/configure \
  126. --target=$(GNU_TARGET_NAME) \
  127. --host=$(GNU_TARGET_NAME) \
  128. --build=$(ARCH)-linux \
  129. --prefix=/usr \
  130. --mandir=/usr/man \
  131. --infodir=/usr/info \
  132. $(MULTILIB) \
  133. $(SOFT_FLOAT_CONFIG_OPTION) \
  134. );
  135. touch $(BINUTILS_DIR2)/.configured
  136. $(BINUTILS_DIR2)/binutils/objdump: $(BINUTILS_DIR2)/.configured
  137. $(MAKE) $(JLEVEL) -C $(BINUTILS_DIR2) \
  138. CC_FOR_BUILD="$(HOSTCC)" \
  139. CXX_FOR_BUILD="$(HOSTCC)" \
  140. LDFLAGS="$(HOSTLDFLAGS)" \
  141. AR_FOR_TARGET=$(TARGET_CROSS)ar \
  142. AS_FOR_TARGET=$(TARGET_CROSS)as \
  143. LD_FOR_TARGET=$(TARGET_CROSS)ld \
  144. NM_FOR_TARGET=$(TARGET_CROSS)nm \
  145. CC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
  146. GCC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
  147. CXX_FOR_TARGET=$(TARGET_CROSS)g++$(TARGET_SOFT_FLOAT) \
  148. RANLIB_FOR_TARGET=$(TARGET_CROSS)ranlib
  149. touch -c $(BINUTILS_DIR2)/binutils/objdump
  150. $(TARGET_DIR)/usr/bin/ld: $(BINUTILS_DIR2)/binutils/objdump
  151. $(MAKE) $(JLEVEL) -C $(BINUTILS_DIR2) \
  152. CC_FOR_BUILD="$(HOSTCC)" \
  153. CXX_FOR_BUILD="$(HOSTCC)" \
  154. LDFLAGS="$(HOSTLDFLAGS)" \
  155. AR_FOR_TARGET=$(TARGET_CROSS)ar \
  156. AS_FOR_TARGET=$(TARGET_CROSS)as \
  157. LD_FOR_TARGET=$(TARGET_CROSS)ld \
  158. NM_FOR_TARGET=$(TARGET_CROSS)nm \
  159. CC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
  160. GCC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
  161. CXX_FOR_TARGET=$(TARGET_CROSS)g++$(TARGET_SOFT_FLOAT) \
  162. RANLIB_FOR_TARGET=$(TARGET_CROSS)ranlib \
  163. prefix=/usr \
  164. infodir=/usr/info \
  165. mandir=/usr/man \
  166. DESTDIR=$(TARGET_DIR) install
  167. rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
  168. $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
  169. -$(STRIP) $(TARGET_DIR)/usr/$(GNU_TARGET_NAME)/bin/* > /dev/null 2>&1
  170. -$(STRIP) $(TARGET_DIR)/usr/bin/* > /dev/null 2>&1
  171. $(TARGET_DIR)/usr/lib/libg.a:
  172. $(TARGET_CROSS)ar rv $(TARGET_DIR)/usr/lib/libg.a;
  173. cp $(BINUTILS_DIR)/include/ansidecl.h $(TARGET_DIR)/usr/include/
  174. cp $(BINUTILS_DIR)/include/bfdlink.h $(TARGET_DIR)/usr/include/
  175. cp $(BINUTILS_DIR)/include/dis-asm.h $(TARGET_DIR)/usr/include/
  176. cp $(BINUTILS_DIR)/include/libiberty.h $(TARGET_DIR)/usr/include/
  177. cp $(BINUTILS_DIR)/include/symcat.h $(TARGET_DIR)/usr/include/
  178. cp $(BINUTILS_DIR2)/bfd/bfd.h $(TARGET_DIR)/usr/include/
  179. cp -a $(BINUTILS_DIR2)/bfd/.libs/* $(TARGET_DIR)/usr/lib/
  180. cp -a $(BINUTILS_DIR2)/opcodes/.libs/* $(TARGET_DIR)/usr/lib/
  181. cp -a $(BINUTILS_DIR2)/libiberty/libiberty.a $(TARGET_DIR)/usr/lib/
  182. binutils_target: $(GCC_DEPENDANCY) $(TARGET_DIR)/usr/bin/ld $(TARGET_DIR)/usr/lib/libg.a
  183. binutils_target-clean:
  184. rm -f $(TARGET_DIR)/bin/$(GNU_TARGET_NAME)*
  185. -$(MAKE) -C $(BINUTILS_DIR2) clean
  186. binutils_target-dirclean:
  187. rm -rf $(BINUTILS_DIR2)