xref: /OK3568_Linux_fs/buildroot/package/uclibc/uclibc.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# uclibc
4#
5################################################################################
6
7UCLIBC_VERSION = 1.0.39
8UCLIBC_SOURCE = uClibc-ng-$(UCLIBC_VERSION).tar.xz
9UCLIBC_SITE = https://downloads.uclibc-ng.org/releases/$(UCLIBC_VERSION)
10UCLIBC_LICENSE = LGPL-2.1+
11UCLIBC_LICENSE_FILES = COPYING.LIB
12UCLIBC_INSTALL_STAGING = YES
13UCLIBC_CPE_ID_VENDOR = uclibc-ng_project
14UCLIBC_CPE_ID_PRODUCT = uclibc-ng
15
16# uclibc is part of the toolchain so disable the toolchain dependency
17UCLIBC_ADD_TOOLCHAIN_DEPENDENCY = NO
18
19# Before uClibc is configured, we must have the first stage
20# cross-compiler and the kernel headers
21UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers
22
23# specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config
24# setting.
25ifndef UCLIBC_CONFIG_FILE
26UCLIBC_CONFIG_FILE = $(call qstrip,$(BR2_UCLIBC_CONFIG))
27endif
28
29UCLIBC_KCONFIG_EDITORS = menuconfig nconfig
30UCLIBC_KCONFIG_FILE = $(UCLIBC_CONFIG_FILE)
31UCLIBC_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_UCLIBC_CONFIG_FRAGMENT_FILES))
32
33# UCLIBC_MAKE_FLAGS set HOSTCC to the default HOSTCC, which may be
34# wrapped with ccache. However, host-ccache may not already be built
35# and installed when we apply the configuration, so we override that
36# to use the non-ccached host compiler.
37UCLIBC_KCONFIG_OPTS = \
38	$(UCLIBC_MAKE_FLAGS) \
39	HOSTCC="$(HOSTCC_NOCCACHE)" \
40	PREFIX=$(STAGING_DIR) \
41	DEVEL_PREFIX=/usr/ \
42	RUNTIME_PREFIX=$(STAGING_DIR)/
43
44UCLIBC_TARGET_ARCH = $(call qstrip,$(BR2_UCLIBC_TARGET_ARCH))
45
46UCLIBC_GENERATE_LOCALES = $(call qstrip,$(BR2_GENERATE_LOCALE))
47
48ifeq ($(UCLIBC_GENERATE_LOCALES),)
49# We need at least one locale
50UCLIBC_LOCALES = en_US
51else
52# Strip out the encoding part of locale names, if any
53UCLIBC_LOCALES = \
54	$(foreach locale,$(UCLIBC_GENERATE_LOCALES),\
55	$(firstword $(subst .,$(space),$(locale))))
56endif
57
58# noMMU binary formats
59ifeq ($(BR2_BINFMT_FLAT_ONE),y)
60define UCLIBC_BINFMT_CONFIG
61	$(call KCONFIG_ENABLE_OPT,UCLIBC_FORMAT_FLAT)
62	$(call KCONFIG_DISABLE_OPT,UCLIBC_FORMAT_FLAT_SEP_DATA)
63	$(call KCONFIG_DISABLE_OPT,UCLIBC_FORMAT_SHARED_FLAT)
64	$(call KCONFIG_DISABLE_OPT,UCLIBC_FORMAT_FDPIC_ELF)
65endef
66endif
67ifeq ($(BR2_BINFMT_FLAT_SHARED),y)
68define UCLIBC_BINFMT_CONFIG
69	$(call KCONFIG_DISABLE_OPT,UCLIBC_FORMAT_FLAT)
70	$(call KCONFIG_DISABLE_OPT,UCLIBC_FORMAT_FLAT_SEP_DATA)
71	$(call KCONFIG_ENABLE_OPT,UCLIBC_FORMAT_SHARED_FLAT)
72	$(call KCONFIG_DISABLE_OPT,UCLIBC_FORMAT_FDPIC_ELF)
73endef
74endif
75
76#
77# ARC definitions
78#
79
80ifeq ($(UCLIBC_TARGET_ARCH),arc)
81UCLIBC_ARC_PAGE_SIZE = CONFIG_ARC_PAGE_SIZE_$(call qstrip,$(BR2_ARC_PAGE_SIZE))
82define UCLIBC_ARC_PAGE_SIZE_CONFIG
83	$(SED) '/CONFIG_ARC_PAGE_SIZE_*/d' $(@D)/.config
84	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_ARC_PAGE_SIZE))
85endef
86
87ifeq ($(BR2_ARC_ATOMIC_EXT),)
88define UCLIBC_ARC_ATOMICS_CONFIG
89	$(call KCONFIG_DISABLE_OPT,CONFIG_ARC_HAS_ATOMICS)
90endef
91endif
92
93endif # arc
94
95#
96# ARM definitions
97#
98
99ifeq ($(UCLIBC_TARGET_ARCH),arm)
100define UCLIBC_ARM_ABI_CONFIG
101	$(SED) '/CONFIG_ARM_.ABI/d' $(@D)/.config
102	$(call KCONFIG_ENABLE_OPT,CONFIG_ARM_EABI)
103endef
104
105ifeq ($(BR2_BINFMT_FLAT),y)
106define UCLIBC_ARM_BINFMT_FLAT
107	$(call KCONFIG_DISABLE_OPT,DOPIC)
108endef
109endif
110
111# context functions are written with ARM instructions. Therefore, if
112# we are using a Thumb2-only platform (i.e, Cortex-M), they must be
113# disabled. Thumb1 platforms are not a problem, since they all also
114# support the ARM instructions.
115ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB2):$(BR2_ARM_CPU_HAS_ARM),y:)
116define UCLIBC_ARM_NO_CONTEXT_FUNCS
117	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_CONTEXT_FUNCS)
118endef
119endif
120
121endif # arm
122
123#
124# m68k/coldfire definitions
125#
126
127ifeq ($(UCLIBC_TARGET_ARCH),m68k)
128
129# disable DOPIC for flat without separate data
130ifeq ($(BR2_BINFMT_FLAT_ONE),y)
131define UCLIBC_M68K_BINFMT_FLAT
132	$(call KCONFIG_DISABLE_OPT,DOPIC)
133endef
134endif
135
136endif # m68k/coldfire
137
138#
139# MIPS definitions
140#
141
142ifeq ($(UCLIBC_TARGET_ARCH),mips)
143UCLIBC_MIPS_ABI = CONFIG_MIPS_$(call qstrip,$(BR2_UCLIBC_MIPS_ABI))_ABI
144define UCLIBC_MIPS_ABI_CONFIG
145	$(SED) '/CONFIG_MIPS_[NO].._ABI/d' $(@D)/.config
146	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_MIPS_ABI))
147endef
148
149UCLIBC_MIPS_NAN = CONFIG_MIPS_NAN_$(call qstrip,$(BR2_UCLIBC_MIPS_NAN))
150define UCLIBC_MIPS_NAN_CONFIG
151	$(SED) '/CONFIG_MIPS_NAN_.*/d' $(@D)/.config
152	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_MIPS_NAN))
153endef
154endif # mips
155
156#
157# SH definitions
158#
159
160ifeq ($(UCLIBC_TARGET_ARCH),sh)
161UCLIBC_SH_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_SH_TYPE))
162define UCLIBC_SH_TYPE_CONFIG
163	$(SED) '/CONFIG_SH[234A]*/d' $(@D)/.config
164	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_SH_TYPE))
165endef
166endif # sh
167
168#
169# SPARC definitions
170#
171
172ifeq ($(UCLIBC_TARGET_ARCH),sparc)
173UCLIBC_SPARC_TYPE = CONFIG_SPARC_$(call qstrip,$(BR2_UCLIBC_SPARC_TYPE))
174define UCLIBC_SPARC_TYPE_CONFIG
175	$(SED) 's/^\(CONFIG_[^_]*[_]*SPARC[^=]*\)=.*/# \1 is not set/g' \
176		$(@D)/.config
177	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_SPARC_TYPE))
178endef
179endif # sparc
180
181#
182# PowerPC definitions
183#
184
185ifeq ($(UCLIBC_TARGET_ARCH),powerpc)
186UCLIBC_POWERPC_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_POWERPC_TYPE))
187define UCLIBC_POWERPC_TYPE_CONFIG
188	$(call KCONFIG_DISABLE_OPT,CONFIG_GENERIC)
189	$(call KCONFIG_DISABLE_OPT,CONFIG_E500)
190	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_POWERPC_TYPE))
191endef
192endif # powerpc
193
194#
195# x86 definitions
196#
197ifeq ($(UCLIBC_TARGET_ARCH),i386)
198UCLIBC_X86_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_X86_TYPE))
199define UCLIBC_X86_TYPE_CONFIG
200	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_X86_TYPE))
201endef
202endif
203
204#
205# Debug
206#
207ifeq ($(BR2_ENABLE_DEBUG),y)
208define UCLIBC_DEBUG_CONFIG
209	$(call KCONFIG_ENABLE_OPT,DODEBUG)
210endef
211endif
212
213#
214# Endianness
215#
216
217ifeq ($(call qstrip,$(BR2_ENDIAN)),BIG)
218define UCLIBC_ENDIAN_CONFIG
219	$(call KCONFIG_ENABLE_OPT,ARCH_BIG_ENDIAN)
220	$(call KCONFIG_ENABLE_OPT,ARCH_WANTS_BIG_ENDIAN)
221	$(call KCONFIG_DISABLE_OPT,ARCH_LITTLE_ENDIAN)
222	$(call KCONFIG_DISABLE_OPT,ARCH_WANTS_LITTLE_ENDIAN)
223endef
224else
225define UCLIBC_ENDIAN_CONFIG
226	$(call KCONFIG_ENABLE_OPT,ARCH_LITTLE_ENDIAN)
227	$(call KCONFIG_ENABLE_OPT,ARCH_WANTS_LITTLE_ENDIAN)
228	$(call KCONFIG_DISABLE_OPT,ARCH_BIG_ENDIAN)
229	$(call KCONFIG_DISABLE_OPT,ARCH_WANTS_BIG_ENDIAN)
230endef
231endif
232
233#
234# MMU
235#
236
237ifeq ($(BR2_USE_MMU),y)
238define UCLIBC_MMU_CONFIG
239	$(call KCONFIG_ENABLE_OPT,ARCH_HAS_MMU)
240	$(call KCONFIG_ENABLE_OPT,ARCH_USE_MMU)
241endef
242else
243define UCLIBC_MMU_CONFIG
244	$(call KCONFIG_DISABLE_OPT,ARCH_HAS_MMU)
245	$(call KCONFIG_DISABLE_OPT,ARCH_USE_MMU)
246endef
247endif
248
249#
250# IPv6
251#
252
253UCLIBC_IPV6_CONFIG = $(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_IPV6)
254
255#
256# soft-float
257#
258
259ifeq ($(BR2_SOFT_FLOAT),y)
260define UCLIBC_FLOAT_CONFIG
261	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_FPU)
262	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_FLOATS)
263	$(call KCONFIG_ENABLE_OPT,DO_C99_MATH)
264endef
265else
266define UCLIBC_FLOAT_CONFIG
267	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_FPU)
268	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_FLOATS)
269endef
270endif
271
272#
273# SSP
274#
275ifeq ($(BR2_TOOLCHAIN_BUILDROOT_USE_SSP),y)
276define UCLIBC_SSP_CONFIG
277	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_SSP)
278	$(call KCONFIG_ENABLE_OPT,UCLIBC_BUILD_SSP)
279endef
280else
281define UCLIBC_SSP_CONFIG
282	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_SSP)
283	$(call KCONFIG_DISABLE_OPT,UCLIBC_BUILD_SSP)
284endef
285endif
286
287#
288# Threads
289#
290ifeq ($(BR2_PTHREADS_NONE),y)
291define UCLIBC_THREAD_CONFIG
292	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_THREADS)
293	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_LINUXTHREADS)
294	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_THREADS_NATIVE)
295endef
296else ifeq ($(BR2_PTHREADS),y)
297define UCLIBC_THREAD_CONFIG
298	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_THREADS)
299	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_LINUXTHREADS)
300	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_THREADS_NATIVE)
301endef
302else ifeq ($(BR2_PTHREADS_NATIVE),y)
303define UCLIBC_THREAD_CONFIG
304	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_THREADS)
305	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_LINUXTHREADS)
306	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_THREADS_NATIVE)
307endef
308endif
309
310#
311# Thread debug
312#
313
314ifeq ($(BR2_PTHREAD_DEBUG),y)
315UCLIBC_THREAD_DEBUG_CONFIG = $(call KCONFIG_ENABLE_OPT,PTHREADS_DEBUG_SUPPORT)
316else
317UCLIBC_THREAD_DEBUG_CONFIG = $(call KCONFIG_DISABLE_OPT,PTHREADS_DEBUG_SUPPORT)
318endif
319
320#
321# Locale
322#
323
324ifeq ($(BR2_TOOLCHAIN_BUILDROOT_LOCALE),y)
325define UCLIBC_LOCALE_CONFIG
326	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_LOCALE)
327	$(call KCONFIG_DISABLE_OPT,UCLIBC_BUILD_ALL_LOCALE)
328	$(call KCONFIG_ENABLE_OPT,UCLIBC_BUILD_MINIMAL_LOCALE)
329	$(call KCONFIG_SET_OPT,UCLIBC_BUILD_MINIMAL_LOCALES,"$(UCLIBC_LOCALES)")
330	$(call KCONFIG_DISABLE_OPT,UCLIBC_PREGENERATED_LOCALE_DATA)
331	$(call KCONFIG_DISABLE_OPT,DOWNLOAD_PREGENERATED_LOCALE_DATA)
332	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_XLOCALE)
333	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_GLIBC_DIGIT_GROUPING)
334endef
335else
336define UCLIBC_LOCALE_CONFIG
337	$(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_LOCALE)
338endef
339endif
340
341#
342# wchar
343#
344
345ifeq ($(BR2_TOOLCHAIN_BUILDROOT_WCHAR),y)
346UCLIBC_WCHAR_CONFIG = $(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_WCHAR)
347else
348UCLIBC_WCHAR_CONFIG = $(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_WCHAR)
349endif
350
351#
352# static/shared libs
353#
354
355ifeq ($(BR2_STATIC_LIBS),y)
356UCLIBC_SHARED_LIBS_CONFIG = $(call KCONFIG_DISABLE_OPT,HAVE_SHARED)
357else
358UCLIBC_SHARED_LIBS_CONFIG = $(call KCONFIG_ENABLE_OPT,HAVE_SHARED)
359endif
360
361#
362# Commands
363#
364
365UCLIBC_MAKE_FLAGS = \
366	ARCH="$(UCLIBC_TARGET_ARCH)" \
367	CROSS_COMPILE="$(TARGET_CROSS)" \
368	UCLIBC_EXTRA_CFLAGS="$(TARGET_ABI)" \
369	HOSTCC="$(HOSTCC)"
370
371ifeq ($(UCLIBC_TARGET_ARCH)|$(BR2_UCLIBC_USE_GLIBC_NEON),arm|y)
372UCLIBC_MAKE_FLAGS += USE_GLIBC_NEON=1
373endif
374
375define UCLIBC_KCONFIG_FIXUP_CMDS
376	$(call KCONFIG_SET_OPT,CROSS_COMPILER_PREFIX,"$(TARGET_CROSS)")
377	$(call KCONFIG_ENABLE_OPT,TARGET_$(UCLIBC_TARGET_ARCH))
378	$(call KCONFIG_SET_OPT,TARGET_ARCH,"$(UCLIBC_TARGET_ARCH)")
379	$(call KCONFIG_SET_OPT,KERNEL_HEADERS,"$(LINUX_HEADERS_DIR)/usr/include")
380	$(call KCONFIG_SET_OPT,RUNTIME_PREFIX,"/")
381	$(call KCONFIG_SET_OPT,DEVEL_PREFIX,"/usr")
382	$(call KCONFIG_SET_OPT,SHARED_LIB_LOADER_PREFIX,"/lib")
383	$(UCLIBC_MMU_CONFIG)
384	$(UCLIBC_BINFMT_CONFIG)
385	$(UCLIBC_ARC_PAGE_SIZE_CONFIG)
386	$(UCLIBC_ARC_ATOMICS_CONFIG)
387	$(UCLIBC_ARM_ABI_CONFIG)
388	$(UCLIBC_ARM_BINFMT_FLAT)
389	$(UCLIBC_ARM_NO_CONTEXT_FUNCS)
390	$(UCLIBC_M68K_BINFMT_FLAT)
391	$(UCLIBC_MIPS_ABI_CONFIG)
392	$(UCLIBC_MIPS_NAN_CONFIG)
393	$(UCLIBC_SH_TYPE_CONFIG)
394	$(UCLIBC_SPARC_TYPE_CONFIG)
395	$(UCLIBC_POWERPC_TYPE_CONFIG)
396	$(UCLIBC_X86_TYPE_CONFIG)
397	$(UCLIBC_DEBUG_CONFIG)
398	$(UCLIBC_ENDIAN_CONFIG)
399	$(UCLIBC_IPV6_CONFIG)
400	$(UCLIBC_FLOAT_CONFIG)
401	$(UCLIBC_SSP_CONFIG)
402	$(UCLIBC_THREAD_CONFIG)
403	$(UCLIBC_THREAD_DEBUG_CONFIG)
404	$(UCLIBC_LOCALE_CONFIG)
405	$(UCLIBC_WCHAR_CONFIG)
406	$(UCLIBC_SHARED_LIBS_CONFIG)
407endef
408
409define UCLIBC_BUILD_CMDS
410	$(MAKE) -C $(@D) $(UCLIBC_MAKE_FLAGS) headers
411	$(MAKE) -C $(@D) $(UCLIBC_MAKE_FLAGS)
412	$(MAKE) -C $(@D)/utils \
413		PREFIX=$(HOST_DIR) \
414		HOSTCC="$(HOSTCC)" hostutils
415endef
416
417ifeq ($(BR2_UCLIBC_INSTALL_UTILS),y)
418define UCLIBC_INSTALL_UTILS_TARGET
419	$(MAKE1) -C $(@D) \
420		CC="$(TARGET_CC)" CPP="$(TARGET_CPP)" LD="$(TARGET_LD)" \
421		ARCH="$(UCLIBC_TARGET_ARCH)" \
422		PREFIX=$(TARGET_DIR) \
423		utils install_utils
424endef
425endif
426
427define UCLIBC_INSTALL_TARGET_CMDS
428	$(MAKE1) -C $(@D) \
429		$(UCLIBC_MAKE_FLAGS) \
430		PREFIX=$(TARGET_DIR) \
431		DEVEL_PREFIX=/usr/ \
432		RUNTIME_PREFIX=/ \
433		install_runtime
434	$(UCLIBC_INSTALL_UTILS_TARGET)
435endef
436
437# STATIC has no ld* tools, only getconf
438ifeq ($(BR2_STATIC_LIBS),)
439define UCLIBC_INSTALL_UTILS_STAGING
440	$(INSTALL) -D -m 0755 $(@D)/utils/ldd.host $(HOST_DIR)/bin/ldd
441	ln -sf ldd $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-ldd
442	$(INSTALL) -D -m 0755 $(@D)/utils/ldconfig.host $(HOST_DIR)/bin/ldconfig
443	ln -sf ldconfig $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-ldconfig
444endef
445endif
446
447define UCLIBC_INSTALL_STAGING_CMDS
448	$(MAKE1) -C $(@D) \
449		$(UCLIBC_MAKE_FLAGS) \
450		PREFIX=$(STAGING_DIR) \
451		DEVEL_PREFIX=/usr/ \
452		RUNTIME_PREFIX=/ \
453		install_runtime install_dev
454	$(UCLIBC_INSTALL_UTILS_STAGING)
455endef
456
457# Checks to give errors that the user can understand
458# Must be before we call to kconfig-package
459ifeq ($(BR2_PACKAGE_UCLIBC)$(BR_BUILDING),yy)
460ifeq ($(call qstrip,$(BR2_UCLIBC_CONFIG)),)
461$(error No uClibc configuration file specified, check your BR2_UCLIBC_CONFIG setting)
462endif
463endif
464
465$(eval $(kconfig-package))
466