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