binutils.mk 7.4 KB

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