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