Makefile 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. # This file is part of the OpenADK project. OpenADK is copyrighted
  2. # material, please see the LICENCE file in the top-level directory.
  3. include $(TOPDIR)/rules.mk
  4. include ../rules.mk
  5. include Makefile.inc
  6. include Makefile.multilib
  7. include ${TOPDIR}/mk/buildhlp.mk
  8. # eglibc does not compile with Os
  9. TARGET_CFLAGS_LIBC:= $(subst Os,O2,$(TARGET_CFLAGS))
  10. ifneq ($(ADK_DEBUG),)
  11. TARGET_CFLAGS_LIBC+= -O2
  12. endif
  13. # ssp partially supported
  14. TARGET_CFLAGS_LIBC:= $(filter-out -fstack-protector,$(TARGET_CFLAGS_LIBC))
  15. ifeq ($(ADK_TARGET_NO_FPU),y)
  16. EGLIBC_CONFOPTS+= --without-fp
  17. endif
  18. EGLIBC_BUILD_DIR_INITIAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers
  19. EGLIBC_BUILD_DIR_FINAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final
  20. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  21. $(WRKBUILD)/.headers_configure:
  22. for abi in $(TABI); do \
  23. mkdir -p $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
  24. (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
  25. ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc); \
  26. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  27. $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}/option-groups.config; \
  28. (cd $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
  29. ${EGLIBC_ENV} \
  30. CC="${REAL_GNU_TARGET_NAME}-gcc ${TCFLAGS}$${abi/*:/}" \
  31. $(WRKBUILD)/libc/configure \
  32. --prefix=$(STAGING_TARGET_DIR)-$${abi/*:/}/usr \
  33. --with-headers=$(STAGING_TARGET_DIR)-$${abi/*:/}/usr/include \
  34. --host=$${abi/:*/} \
  35. ${EGLIBC_CONFOPTS} \
  36. ); \
  37. done
  38. touch $@
  39. $(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure
  40. for abi in $(TABI); do \
  41. (cd $(EGLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
  42. ${EGLIBC_ENV} \
  43. CC="${REAL_GNU_TARGET_NAME}-gcc ${TCFLAGS}$${abi/*:/}" \
  44. $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \
  45. ); \
  46. touch $(STAGING_TARGET_DIR)-$${abi/*:/}/usr/include/gnu/stubs.h; \
  47. touch $(STAGING_TARGET_DIR)-$${abi/*:/}/usr/include/gnu/stubs-{32,x32,64,o32,n32}.h; \
  48. done
  49. touch $@
  50. else
  51. $(WRKBUILD)/.headers_configure:
  52. mkdir -p $(EGLIBC_BUILD_DIR_INITIAL)
  53. (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
  54. ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc);
  55. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  56. $(EGLIBC_BUILD_DIR_INITIAL)/option-groups.config
  57. (cd $(EGLIBC_BUILD_DIR_INITIAL); \
  58. ${EGLIBC_ENV} \
  59. CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \
  60. $(WRKBUILD)/libc/configure \
  61. --prefix=$(STAGING_TARGET_DIR)/usr \
  62. --with-headers=$(STAGING_TARGET_DIR)/usr/include \
  63. --host=$(REAL_GNU_TARGET_NAME) \
  64. ${EGLIBC_CONFOPTS} \
  65. );
  66. touch $@
  67. $(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure
  68. (cd $(EGLIBC_BUILD_DIR_INITIAL); \
  69. ${EGLIBC_ENV} \
  70. CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \
  71. $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \
  72. );
  73. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
  74. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64,o32,n32}.h
  75. touch $@
  76. endif
  77. ifeq ($(ADK_TOOLCHAIN_GCC_USE_SSP),y)
  78. EGLIBC_ENV+= libc_cv_ssp=yes
  79. else
  80. EGLIBC_ENV+= libc_cv_ssp=no
  81. endif
  82. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  83. $(WRKBUILD)/.configured:
  84. for abi in $(TABI); do \
  85. mkdir -p $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} ;\
  86. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  87. $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/}/option-groups.config ;\
  88. (cd $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/}; \
  89. ${EGLIBC_ENV} \
  90. CC="${REAL_GNU_TARGET_NAME}-gcc ${TCFLAGS}$${abi/*:/}" \
  91. $(WRKBUILD)/libc/configure \
  92. --prefix=/usr \
  93. --enable-shared \
  94. --enable-stackguard-randomization \
  95. --host=$${abi/:*/} \
  96. ${EGLIBC_CONFOPTS} \
  97. ); \
  98. done
  99. touch $@
  100. $(WRKBUILD)/.compiled: $(WRKBUILD)/.configured
  101. for abi in $(TABI); do \
  102. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} cross-compiling=yes all ;\
  103. done
  104. touch $@
  105. $(WRKBUILD)/.installed: $(WRKBUILD)/.compiled
  106. for abi in $(TABI); do \
  107. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-$${abi/*:/} install_root=$(STAGING_TARGET_DIR)-$${abi/*:/} install ;\
  108. done
  109. # default libgcc searching for 64 bit libraries
  110. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL)-64 install_root=$(STAGING_TARGET_DIR) install
  111. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
  112. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64,o32,n32}.h
  113. # for libgcc build we need C library files, 64 bit default
  114. mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2 ; \
  115. $(CP) $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)-64/usr/lib/* \
  116. $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/; \
  117. rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/libc.so ; \
  118. for abi in $(TABI); do \
  119. mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/} ; \
  120. $(CP) $(STAGING_TARGET_DIR)-$${abi/*:/}/lib/* $(STAGING_TARGET_DIR)-$${abi/*:/}/usr/lib/* \
  121. $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/} ; \
  122. rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/}/libc.so ; \
  123. done
  124. ${INSTALL_DIR} ${STAGING_TARGET_DIR}/etc
  125. ${INSTALL_DATA} ${WRKBUILD}/libc/posix/gai.conf ${STAGING_TARGET_DIR}/etc/
  126. ${INSTALL_DATA} ${WRKBUILD}/libc/nscd/nscd.conf ${STAGING_TARGET_DIR}/etc/
  127. ${INSTALL_DATA} ${WRKBUILD}/libc/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc/
  128. touch $@
  129. else
  130. $(WRKBUILD)/.configured:
  131. mkdir -p $(EGLIBC_BUILD_DIR_FINAL)
  132. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  133. $(EGLIBC_BUILD_DIR_FINAL)/option-groups.config
  134. (cd $(EGLIBC_BUILD_DIR_FINAL); \
  135. ${EGLIBC_ENV} \
  136. CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \
  137. $(WRKBUILD)/libc/configure \
  138. --prefix=/usr \
  139. --enable-shared \
  140. --enable-stackguard-randomization \
  141. --host=$(REAL_GNU_TARGET_NAME) \
  142. ${EGLIBC_CONFOPTS} \
  143. );
  144. touch $@
  145. $(EGLIBC_BUILD_DIR_FINAL)/libc.so:
  146. $(WRKBUILD)/.compiled: $(WRKBUILD)/.configured
  147. ${EGLIBC_ENV} \
  148. CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \
  149. $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) cross-compiling=yes all
  150. touch $@
  151. $(WRKBUILD)/.installed: $(EGLIBC_BUILD_DIR_FINAL)/libc.so
  152. ${EGLIBC_ENV} \
  153. CC="${REAL_GNU_TARGET_NAME}-gcc $(ADK_TARGET_ABI_CFLAGS)" \
  154. $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) install_root=$(STAGING_TARGET_DIR) install
  155. ${INSTALL_DIR} ${STAGING_TARGET_DIR}/etc
  156. ${INSTALL_DATA} ${WRKBUILD}/libc/posix/gai.conf ${STAGING_TARGET_DIR}/etc/
  157. ${INSTALL_DATA} ${WRKBUILD}/libc/nscd/nscd.conf ${STAGING_TARGET_DIR}/etc/
  158. ${INSTALL_DATA} ${WRKBUILD}/libc/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc/
  159. touch $@
  160. endif
  161. $(WRKBUILD)/.fixup:
  162. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  163. ifeq ($(ADK_TARGET_ABI_64),y)
  164. ${CP} $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)/lib
  165. ${CP} $(STAGING_TARGET_DIR)-64/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
  166. endif
  167. ifeq ($(ADK_TARGET_ABI_32),y)
  168. ${CP} $(STAGING_TARGET_DIR)-32/lib/* $(STAGING_TARGET_DIR)/lib
  169. ${CP} $(STAGING_TARGET_DIR)-32/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
  170. endif
  171. ifeq ($(ADK_TARGET_ABI_X32),y)
  172. ${CP} $(STAGING_TARGET_DIR)-x32/lib/* $(STAGING_TARGET_DIR)/lib
  173. ${CP} $(STAGING_TARGET_DIR)-x32/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
  174. endif
  175. endif
  176. touch $@
  177. include ${TOPDIR}/mk/toolchain.mk