Makefile 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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 ${TOPDIR}/mk/buildhlp.mk
  7. ifneq ($(ADK_DEBUG),)
  8. TARGET_CFLAGS+= -O2
  9. endif
  10. # ssp partially supported
  11. TARGET_CFLAGS:= $(filter-out -fstack-protector,$(TARGET_CFLAGS))
  12. EGLIBC_CONFOPTS:= --build=$(GNU_HOST_NAME) \
  13. --without-cvs \
  14. --disable-profile \
  15. --disable-debug \
  16. --enable-kernel=2.6.0 \
  17. --without-gd \
  18. --with-__thread \
  19. --with-tls \
  20. --enable-add-ons \
  21. $(NLS)
  22. EGLIBC_ENV:= PATH='${TARGET_PATH}' \
  23. BUILD_CC=${CC_FOR_BUILD} \
  24. CFLAGS="$(TARGET_CFLAGS)" \
  25. CC=${REAL_GNU_TARGET_NAME}-gcc \
  26. CXX=${REAL_GNU_TARGET_NAME}-g++ \
  27. AR=${REAL_GNU_TARGET_NAME}-ar \
  28. RANLIB=${REAL_GNU_TARGET_NAME}-ranlib \
  29. libc_cv_cc_with_libunwind=no \
  30. libc_cv_forced_unwind=yes \
  31. libc_cv_c_cleanup=yes \
  32. libc_cv_gnu99_inline=yes \
  33. libc_cv_initfini_array=yes \
  34. libc_cv_slibdir="/lib"
  35. ifeq ($(ADK_TARGET_NO_FPU),y)
  36. EGLIBC_CONFOPTS+= --without-fp
  37. endif
  38. EGLIBC_BUILD_DIR_INITIAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers
  39. EGLIBC_BUILD_DIR_INITIAL32:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers32
  40. EGLIBC_BUILD_DIR_FINAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final
  41. EGLIBC_BUILD_DIR_FINAL32:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final32
  42. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  43. $(WRKBUILD)/.headers_configure: $(WRKBUILD)/.headers_configure32
  44. else
  45. $(WRKBUILD)/.headers_configure:
  46. endif
  47. mkdir -p $(EGLIBC_BUILD_DIR_INITIAL)
  48. (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
  49. ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc);
  50. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  51. $(EGLIBC_BUILD_DIR_INITIAL)/option-groups.config
  52. (cd $(EGLIBC_BUILD_DIR_INITIAL); \
  53. ${EGLIBC_ENV} \
  54. $(WRKBUILD)/libc/configure \
  55. --prefix=$(STAGING_TARGET_DIR)/usr \
  56. --with-headers=$(STAGING_TARGET_DIR)/usr/include \
  57. --host=$(REAL_GNU_TARGET_NAME) \
  58. ${EGLIBC_CONFOPTS} \
  59. );
  60. touch $@
  61. $(WRKBUILD)/.headers: $(WRKBUILD)/.headers_configure
  62. (cd $(EGLIBC_BUILD_DIR_INITIAL); \
  63. PATH='${TARGET_PATH}' \
  64. ${EGLIBC_ENV} \
  65. $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \
  66. );
  67. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs.h
  68. touch $(STAGING_TARGET_DIR)/usr/include/gnu/stubs-64.h
  69. touch $@
  70. $(WRKBUILD)/.headers_configure32:
  71. mkdir -p $(EGLIBC_BUILD_DIR_INITIAL32)
  72. (cd ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION); \
  73. ln -sf ../ports ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)/libc);
  74. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  75. $(EGLIBC_BUILD_DIR_INITIAL32)/option-groups.config
  76. (cd $(EGLIBC_BUILD_DIR_INITIAL32); \
  77. ${EGLIBC_ENV} \
  78. CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \
  79. $(WRKBUILD)/libc/configure \
  80. --prefix=$(STAGING_TARGET_DIR_32)/usr \
  81. --with-headers=$(STAGING_TARGET_DIR_32)/usr/include \
  82. --host=i486-openadk-linux-gnu \
  83. ${EGLIBC_CONFOPTS} \
  84. );
  85. (cd $(EGLIBC_BUILD_DIR_INITIAL32); \
  86. PATH='${TARGET_PATH}' \
  87. ${EGLIBC_ENV} \
  88. CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \
  89. $(MAKE) install-headers install-bootstrap-headers=yes cross-compiling=yes \
  90. );
  91. touch $(STAGING_TARGET_DIR_32)/usr/include/gnu/stubs.h
  92. touch $(STAGING_TARGET_DIR_32)/usr/include/gnu/stubs-64.h
  93. touch $@
  94. ifeq ($(ADK_TOOLCHAIN_GCC_USE_SSP),y)
  95. EGLIBC_ENV+= libc_cv_ssp=yes
  96. else
  97. EGLIBC_ENV+= libc_cv_ssp=no
  98. endif
  99. ifeq ($(ADK_TARGET_WITH_MULTILIB),y)
  100. $(WRKBUILD)/.configured: $(WRKBUILD)/.configured32
  101. else
  102. $(WRKBUILD)/.configured:
  103. endif
  104. mkdir -p $(EGLIBC_BUILD_DIR_FINAL)
  105. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  106. $(EGLIBC_BUILD_DIR_FINAL)/option-groups.config
  107. (cd $(EGLIBC_BUILD_DIR_FINAL); \
  108. ${EGLIBC_ENV} \
  109. $(WRKBUILD)/libc/configure \
  110. --prefix=/usr \
  111. --enable-shared \
  112. --enable-stackguard-randomization \
  113. --host=$(REAL_GNU_TARGET_NAME) \
  114. ${EGLIBC_CONFOPTS} \
  115. );
  116. touch $@
  117. $(EGLIBC_BUILD_DIR_FINAL)/libc.so:
  118. $(WRKBUILD)/.compiled: $(WRKBUILD)/.configured
  119. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) cross-compiling=yes all
  120. touch $@
  121. $(WRKBUILD)/.installed: $(EGLIBC_BUILD_DIR_FINAL)/libc.so
  122. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL) install_root=$(STAGING_TARGET_DIR) install
  123. ${INSTALL_DATA} ${WRKBUILD}/libc/posix/gai.conf ${STAGING_TARGET_DIR}/etc/
  124. ${INSTALL_DATA} ${WRKBUILD}/libc/nscd/nscd.conf ${STAGING_TARGET_DIR}/etc/
  125. ${INSTALL_DATA} ${WRKBUILD}/libc/nss/nsswitch.conf ${STAGING_TARGET_DIR}/etc/
  126. touch $@
  127. $(WRKBUILD)/.configured32:
  128. mkdir -p $(EGLIBC_BUILD_DIR_FINAL32)
  129. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  130. $(EGLIBC_BUILD_DIR_FINAL32)/option-groups.config
  131. (cd $(EGLIBC_BUILD_DIR_FINAL32); \
  132. ${EGLIBC_ENV} \
  133. CC='${REAL_GNU_TARGET_NAME}-gcc -m32' \
  134. $(WRKBUILD)/libc/configure \
  135. --prefix=/usr \
  136. --enable-shared \
  137. --enable-stackguard-randomization \
  138. --host=i486-openadk-linux-gnu \
  139. ${EGLIBC_CONFOPTS} \
  140. );
  141. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL32) cross-compiling=yes all
  142. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINAL32) install_root=$(STAGING_TARGET_DIR_32) install
  143. mkdir -p $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32
  144. $(CP) $(STAGING_TARGET_DIR_32)/lib/* $(STAGING_TARGET_DIR_32)/usr/lib/* \
  145. $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32
  146. -rm $(STAGING_TARGET_DIR)/lib/$(REAL_GNU_TARGET_NAME)/4.7.2/32/libc.so
  147. touch $@
  148. $(WRKBUILD)/.configuredx32:
  149. mkdir -p $(EGLIBC_BUILD_DIR_FINALX32)
  150. $(CP) ${TOPDIR}/toolchain/eglibc/eglibc.config \
  151. $(EGLIBC_BUILD_DIR_FINALX32)/option-groups.config
  152. (cd $(EGLIBC_BUILD_DIR_FINALX32); \
  153. ${EGLIBC_ENV} \
  154. CC=${REAL_GNU_TARGET_NAME}-gcc -mx32 \
  155. $(WRKBUILD)/libc/configure \
  156. --prefix=/usr \
  157. --enable-shared \
  158. --enable-stackguard-randomization \
  159. --host=x86_64-x32-openadk-linux-gnu \
  160. ${EGLIBC_CONFOPTS} \
  161. );
  162. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINALX32) cross-compiling=yes all
  163. ${EGLIBC_ENV} $(MAKE) -C $(EGLIBC_BUILD_DIR_FINALX32) install_root=$(STAGING_TARGET_DIR_X32) install
  164. touch $@
  165. include ${TOPDIR}/mk/toolchain.mk