Makefile 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. # glibc does not compile with Os
  6. TARGET_CFLAGS:= $(subst Os,O2,$(TARGET_CFLAGS))
  7. ifneq ($(ADK_DEBUG),)
  8. TARGET_CFLAGS+= -O2
  9. endif
  10. # ssp partially supported
  11. TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS))
  12. #TARGET_CFLAGS:= $(filter-out -flto,$(TARGET_CFLAGS))
  13. include Makefile.inc
  14. include Makefile.multilib
  15. include ${TOPDIR}/mk/buildhlp.mk
  16. ifeq ($(ADK_TARGET_NO_FPU),y)
  17. GLIBC_CONFOPTS+= --without-fp
  18. endif
  19. GLIBC_MAKEOPTS+= cross-compiling=yes
  20. ifeq (${ADK_MAKE_PARALLEL},y)
  21. GLIBC_MAKEOPTS+= PARALLELMFLAGS="-j1"
  22. endif
  23. GLIBC_BUILD_DIR_INITIAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers
  24. GLIBC_BUILD_DIR_FINAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final
  25. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  26. $(WRKBUILD)/.headers_configure:
  27. for abi in $(TABI); do \
  28. mkdir -p $(GLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
  29. (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
  30. ln -sf ../../w-glibc-ports-$(PKG_VERSION)-1/glibc-ports-$(PKG_VERSION)/ ports); \
  31. (cd $(GLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
  32. ${GLIBC_ENV} \
  33. CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \
  34. $(WRKBUILD)/libc/configure \
  35. --prefix=$(STAGING_TARGET_DIR)-$${abi/*:/}/usr \
  36. --with-sysroot=$(STAGING_TARGET_DIR)-$${abi/*:/} \
  37. --host=$${abi/:*/} \
  38. ${GLIBC_CONFOPTS} \
  39. ); \
  40. done
  41. touch $@
  42. $(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure
  43. for abi in $(TABI); do \
  44. (cd $(GLIBC_BUILD_DIR_INITIAL)-$${abi/*:/}; \
  45. ${GLIBC_ENV} \
  46. CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \
  47. $(MAKE) ${GLIBC_MAKEOPTS} install-headers \
  48. ); \
  49. done
  50. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
  51. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h
  52. touch $@
  53. else
  54. $(WRKBUILD)/.headers_configure:
  55. mkdir -p $(GLIBC_BUILD_DIR_INITIAL)
  56. (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
  57. ln -sf ../../w-glibc-ports-$(PKG_VERSION)-1/glibc-ports-$(PKG_VERSION)/ ports);
  58. (cd $(GLIBC_BUILD_DIR_INITIAL); \
  59. ${GLIBC_ENV} \
  60. $(WRKBUILD)/configure \
  61. --prefix=$(STAGING_TARGET_DIR)/usr \
  62. --with-sysroot=$(STAGING_TARGET_DIR) \
  63. ${GLIBC_CONFOPTS} \
  64. );
  65. touch $@
  66. $(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure
  67. (cd $(GLIBC_BUILD_DIR_INITIAL); \
  68. ${GLIBC_ENV} \
  69. $(MAKE) ${GLIBC_MAKEOPTS} install-headers \
  70. );
  71. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
  72. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h
  73. touch $@
  74. endif
  75. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  76. $(WRKBUILD)/.configured:
  77. for abi in $(TABI); do \
  78. mkdir -p $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/} ;\
  79. (cd $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/}; \
  80. ${GLIBC_ENV} \
  81. CC="${REAL_GNU_TARGET_NAME}-gcc -m$${abi/*:/}" \
  82. $(WRKBUILD)/libc/configure \
  83. --prefix=/usr \
  84. --enable-shared \
  85. --enable-stackguard-randomization \
  86. --host=$${abi/:*/} \
  87. ${GLIBC_CONFOPTS} \
  88. ); \
  89. done
  90. touch $@
  91. $(WRKBUILD)/.compiled: $(WRKBUILD)/.configured
  92. for abi in $(TABI); do \
  93. ${GLIBC_ENV} $(MAKE) ${GLIBC_MAKEOPTS} -C $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/} all ;\
  94. done
  95. touch $@
  96. $(WRKBUILD)/.installed: $(WRKBUILD)/.compiled
  97. for abi in $(TABI); do \
  98. ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-$${abi/*:/} install_root=$(STAGING_TARGET_DIR)-$${abi/*:/} install ;\
  99. done
  100. # default libgcc searching for 64 bit libraries
  101. ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL)-64 install_root=$(STAGING_TARGET_DIR) install
  102. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
  103. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-{32,x32,64}.h
  104. for abi in $(TABI); do \
  105. mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/} ; \
  106. $(CP) $(STAGING_TARGET_DIR)-$${abi/*:/}/lib/* $(STAGING_TARGET_DIR)-$${abi/*:/}/usr/lib/* \
  107. $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/} ; \
  108. rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/$${abi/*:/}/libc.so ; \
  109. done
  110. mkdir -p ${STAGING_TARGET_DIR}/etc
  111. ${INSTALL_DATA} ${WRKBUILD}/libc/posix/gai.conf ${STAGING_TARGET_DIR}/etc/
  112. ${INSTALL_DATA} ${WRKBUILD}/libc/nscd/nscd.conf ${STAGING_TARGET_DIR}/etc/
  113. ${INSTALL_DATA} ${WRKBUILD}/libc/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc/
  114. touch $@
  115. else
  116. $(WRKBUILD)/.configured:
  117. mkdir -p $(GLIBC_BUILD_DIR_FINAL)
  118. (cd $(GLIBC_BUILD_DIR_FINAL); \
  119. ${GLIBC_ENV} \
  120. $(WRKBUILD)/configure \
  121. --prefix=/usr \
  122. --enable-shared \
  123. --enable-stackguard-randomization \
  124. ${GLIBC_CONFOPTS} \
  125. );
  126. touch $@
  127. $(WRKBUILD)/.compiled:
  128. ${GLIBC_ENV} $(MAKE) ${GLIBC_MAKEOPTS} -C $(GLIBC_BUILD_DIR_FINAL) all
  129. touch $@
  130. $(WRKBUILD)/.installed:
  131. ${GLIBC_ENV} $(MAKE) -C $(GLIBC_BUILD_DIR_FINAL) install_root=$(STAGING_TARGET_DIR) install
  132. mkdir -p ${STAGING_TARGET_DIR}/etc
  133. ${INSTALL_DATA} ${WRKBUILD}/posix/gai.conf ${STAGING_TARGET_DIR}/etc
  134. ${INSTALL_DATA} ${WRKBUILD}/nscd/nscd.conf ${STAGING_TARGET_DIR}/etc
  135. ${INSTALL_DATA} ${WRKBUILD}/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc
  136. touch $@
  137. endif
  138. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  139. $(WRKBUILD)/.fixup:
  140. ifeq ($(ADK_TARGET_ABI_64),y)
  141. ${CP} $(STAGING_TARGET_DIR)-64/lib/* $(STAGING_TARGET_DIR)/lib
  142. ${CP} $(STAGING_TARGET_DIR)-64/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
  143. endif
  144. ifeq ($(ADK_TARGET_ABI_32),y)
  145. ${CP} $(STAGING_TARGET_DIR)-32/lib/* $(STAGING_TARGET_DIR)/lib
  146. ${CP} $(STAGING_TARGET_DIR)-32/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
  147. endif
  148. ifeq ($(ADK_TARGET_ABI_X32),y)
  149. ${CP} $(STAGING_TARGET_DIR)-x32/lib/* $(STAGING_TARGET_DIR)/lib
  150. ${CP} $(STAGING_TARGET_DIR)-x32/usr/lib/* $(STAGING_TARGET_DIR)/usr/lib
  151. endif
  152. touch $@
  153. endif
  154. include ${TOPDIR}/mk/toolchain.mk