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