boost.mk 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. ################################################################################
  2. #
  3. # boost
  4. #
  5. ################################################################################
  6. BOOST_VERSION = 1.83.0
  7. BOOST_SOURCE = boost_$(subst .,_,$(BOOST_VERSION)).tar.bz2
  8. BOOST_SITE = https://boostorg.jfrog.io/artifactory/main/release/$(BOOST_VERSION)/source
  9. BOOST_INSTALL_STAGING = YES
  10. BOOST_LICENSE = BSL-1.0
  11. BOOST_LICENSE_FILES = LICENSE_1_0.txt
  12. BOOST_CPE_ID_VENDOR = boost
  13. # keep host variant as minimal as possible
  14. # regex & system are needed by host-riscv-isa-sim
  15. HOST_BOOST_FLAGS = --without-icu --with-toolset=gcc \
  16. --without-libraries=$(subst $(space),$(comma),\
  17. atomic \
  18. chrono container \
  19. context \
  20. contract \
  21. coroutine \
  22. date_time \
  23. exception \
  24. fiber \
  25. filesystem \
  26. graph \
  27. graph_parallel \
  28. iostreams \
  29. json \
  30. locale \
  31. log \
  32. math \
  33. mpi \
  34. nowide \
  35. program_options \
  36. python \
  37. random \
  38. serialization \
  39. stacktrace \
  40. test \
  41. thread \
  42. timer \
  43. type_erasure \
  44. url \
  45. wave\
  46. )
  47. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_ATOMIC),,atomic)
  48. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CHRONO),,chrono)
  49. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CONTAINER),,container)
  50. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CONTEXT),,context)
  51. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_CONTRACT),,contract)
  52. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_COROUTINE),,coroutine)
  53. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_DATE_TIME),,date_time)
  54. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_EXCEPTION),,exception)
  55. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_FIBER),,fiber)
  56. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_FILESYSTEM),,filesystem)
  57. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_GRAPH),,graph)
  58. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_GRAPH_PARALLEL),,graph_parallel)
  59. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_IOSTREAMS),,iostreams)
  60. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_JSON),,json)
  61. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_LOCALE),,locale)
  62. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_LOG),,log)
  63. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_MATH),,math)
  64. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_MPI),,mpi)
  65. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_NOWIDE),,nowide)
  66. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_PROGRAM_OPTIONS),,program_options)
  67. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_PYTHON),,python)
  68. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_RANDOM),,random)
  69. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_REGEX),,regex)
  70. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_SERIALIZATION),,serialization)
  71. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_STACKTRACE),,stacktrace)
  72. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_SYSTEM),,system)
  73. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_TEST),,test)
  74. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_THREAD),,thread)
  75. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_TIMER),,timer)
  76. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_TYPE_ERASURE),,type_erasure)
  77. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_URL),,url)
  78. BOOST_WITHOUT_FLAGS += $(if $(BR2_PACKAGE_BOOST_WAVE),,wave)
  79. BOOST_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
  80. BOOST_FLAGS = --with-toolset=gcc
  81. ifeq ($(BR2_PACKAGE_ICU),y)
  82. BOOST_FLAGS += --with-icu=$(STAGING_DIR)/usr
  83. BOOST_DEPENDENCIES += icu
  84. else
  85. BOOST_FLAGS += --without-icu
  86. endif
  87. ifeq ($(BR2_PACKAGE_BOOST_IOSTREAMS),y)
  88. BOOST_DEPENDENCIES += bzip2 zlib
  89. endif
  90. ifeq ($(BR2_PACKAGE_BOOST_PYTHON),y)
  91. BOOST_FLAGS += \
  92. --with-python-root=$(HOST_DIR) \
  93. --with-python=$(HOST_DIR)/bin/python$(PYTHON3_VERSION_MAJOR)
  94. BOOST_TARGET_CXXFLAGS += -I$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR)
  95. BOOST_DEPENDENCIES += python3
  96. endif
  97. HOST_BOOST_OPTS += --no-cmake-config toolset=gcc threading=multi \
  98. variant=release link=shared runtime-link=shared -j$(PARALLEL_JOBS) -q \
  99. --ignore-site-config --layout=system --prefix=$(HOST_DIR) \
  100. --user-config=$(@D)/user-config.jam
  101. ifeq ($(BR2_MIPS_OABI32),y)
  102. BOOST_ABI = o32
  103. else ifeq ($(BR2_arm)$(BR2_armeb)$(BR2_aarch64)$(BR2_aarch64_be),y)
  104. BOOST_ABI = aapcs
  105. else
  106. BOOST_ABI = sysv
  107. endif
  108. BOOST_OPTS += --no-cmake-config \
  109. toolset=gcc \
  110. threading=multi \
  111. abi=$(BOOST_ABI) \
  112. variant=$(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release) \
  113. -j$(PARALLEL_JOBS) \
  114. -q \
  115. --ignore-site-config \
  116. --layout=system \
  117. --user-config=$(@D)/user-config.jam
  118. ifeq ($(BR2_sparc64),y)
  119. BOOST_OPTS += architecture=sparc instruction-set=ultrasparc
  120. endif
  121. ifeq ($(BR2_sparc),y)
  122. BOOST_OPTS += architecture=sparc instruction-set=v8
  123. endif
  124. # By default, Boost build and installs both the shared and static
  125. # variants. Override that if we want static only or shared only.
  126. ifeq ($(BR2_STATIC_LIBS),y)
  127. BOOST_OPTS += link=static runtime-link=static
  128. else ifeq ($(BR2_SHARED_LIBS),y)
  129. BOOST_OPTS += link=shared runtime-link=shared
  130. endif
  131. ifeq ($(BR2_PACKAGE_BOOST_LOCALE),y)
  132. ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
  133. # posix backend needs monetary.h which isn't available on uClibc
  134. BOOST_OPTS += boost.locale.posix=off
  135. endif
  136. BOOST_DEPENDENCIES += $(if $(BR2_ENABLE_LOCALE),,libiconv)
  137. endif
  138. BOOST_WITHOUT_FLAGS_COMMASEPARATED += $(subst $(space),$(comma),$(strip $(BOOST_WITHOUT_FLAGS)))
  139. BOOST_FLAGS += $(if $(BOOST_WITHOUT_FLAGS_COMMASEPARATED), --without-libraries=$(BOOST_WITHOUT_FLAGS_COMMASEPARATED))
  140. # how verbose should the build be?
  141. BOOST_OPTS += $(if $(QUIET),-d0,-d+1)
  142. HOST_BOOST_OPTS += $(if $(QUIET),-d0,-d+1)
  143. define BOOST_CONFIGURE_CMDS
  144. cd $(@D) && ./bootstrap.sh $(BOOST_FLAGS)
  145. echo "using gcc : `$(TARGET_CC) -dumpversion` : $(TARGET_CXX) : <cxxflags>\"$(BOOST_TARGET_CXXFLAGS)\" <linkflags>\"$(TARGET_LDFLAGS)\" ;" > $(@D)/user-config.jam
  146. sed -i "s/: -O.* ;/: $(TARGET_OPTIMIZATION) ;/" $(@D)/tools/build/src/tools/gcc.jam
  147. endef
  148. define BOOST_BUILD_CMDS
  149. cd $(@D) && $(TARGET_MAKE_ENV) ./b2 $(BOOST_OPTS)
  150. endef
  151. define BOOST_INSTALL_TARGET_CMDS
  152. cd $(@D) && $(TARGET_MAKE_ENV) ./b2 $(BOOST_OPTS) \
  153. --prefix=$(TARGET_DIR)/usr install
  154. endef
  155. define BOOST_INSTALL_STAGING_CMDS
  156. cd $(@D) && $(TARGET_MAKE_ENV) ./b2 $(BOOST_OPTS) \
  157. --prefix=$(STAGING_DIR)/usr install
  158. endef
  159. # These hooks will help us to detect missing select in Config.in
  160. # Indeed boost buildsystem can select a library even if the user has
  161. # disable it
  162. define BOOST_REMOVE_TARGET_LIBRARIES
  163. rm -rf $(TARGET_DIR)/usr/lib/libboost_*
  164. endef
  165. BOOST_PRE_INSTALL_TARGET_HOOKS += BOOST_REMOVE_TARGET_LIBRARIES
  166. define BOOST_CHECK_TARGET_LIBRARIES
  167. @$(foreach disabled,$(BOOST_WITHOUT_FLAGS),\
  168. ! ls $(TARGET_DIR)/usr/lib/libboost_$(disabled)* 1>/dev/null 2>&1 || \
  169. ! echo "libboost_$(disabled) shouldn't have been installed: missing select in boost/Config.in" || \
  170. exit 1;)
  171. endef
  172. BOOST_POST_INSTALL_TARGET_HOOKS += BOOST_CHECK_TARGET_LIBRARIES
  173. define HOST_BOOST_CONFIGURE_CMDS
  174. cd $(@D) && ./bootstrap.sh $(HOST_BOOST_FLAGS)
  175. echo "using gcc : `$(HOST_CC) -dumpversion` : $(HOSTCXX) : <cxxflags>\"$(HOST_CXXFLAGS)\" <linkflags>\"$(HOST_LDFLAGS)\" ;" > $(@D)/user-config.jam
  176. endef
  177. define HOST_BOOST_BUILD_CMDS
  178. cd $(@D) && ./b2 $(HOST_BOOST_OPTS)
  179. endef
  180. define HOST_BOOST_INSTALL_CMDS
  181. cd $(@D) && ./b2 $(HOST_BOOST_OPTS) install
  182. endef
  183. $(eval $(generic-package))
  184. $(eval $(host-generic-package))