diff options
Diffstat (limited to 'package/uclibc/uclibc.mk')
-rw-r--r-- | package/uclibc/uclibc.mk | 484 |
1 files changed, 484 insertions, 0 deletions
diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk new file mode 100644 index 000000000..1c5340c85 --- /dev/null +++ b/package/uclibc/uclibc.mk @@ -0,0 +1,484 @@ +################################################################################ +# +# uclibc +# +################################################################################ + +UCLIBC_VERSION = $(call qstrip,$(BR2_UCLIBC_VERSION_STRING)) +UCLIBC_SOURCE = uClibc-$(UCLIBC_VERSION).tar.xz + +ifeq ($(BR2_UCLIBC_VERSION_SNAPSHOT),y) +UCLIBC_SITE = http://www.uclibc.org/downloads/snapshots +else ifeq ($(findstring arc,$(UCLIBC_VERSION)),arc) +UCLIBC_SITE = $(BR2_ARC_SITE) +UCLIBC_SOURCE = uClibc-$(UCLIBC_VERSION).tar.bz2 +else +UCLIBC_SITE = http://www.uclibc.org/downloads +endif + +UCLIBC_INSTALL_STAGING = YES + +# Before uClibc is configured, we must have the first stage +# cross-compiler and the kernel headers +UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers + +# Before uClibc is built, we must have the second stage cross-compiler +uclibc-build: host-gcc-intermediate + +# specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config +# setting. +ifndef UCLIBC_CONFIG_FILE +UCLIBC_CONFIG_FILE = $(call qstrip,$(BR2_UCLIBC_CONFIG)) +endif + +UCLIBC_TARGET_ARCH = $(call qstrip,$(BR2_UCLIBC_TARGET_ARCH)) + +ifeq ($(GENERATE_LOCALE),) +# We need at least one locale +UCLIBC_LOCALES = en_US +else +# Strip out the encoding part of locale names, if any +UCLIBC_LOCALES = $(foreach locale,$(GENERATE_LOCALE),\ + $(firstword $(subst .,$(space),$(locale)))) +endif + +# +# Utility functions to manipulation the uClibc configuration file +# + +define UCLIBC_OPT_SET + $(SED) '/$(1)/d' $(3)/.config + echo '$(1)=$(2)' >> $(3)/.config +endef + +define UCLIBC_OPT_UNSET + $(SED) '/$(1)/d' $(2)/.config + echo '# $(1) is not set' >> $(2)/.config +endef + +# +# ARM definitions +# + +ifeq ($(UCLIBC_TARGET_ARCH),arm) +UCLIBC_ARM_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_ARM_TYPE)) + +define UCLIBC_ARM_TYPE_CONFIG + $(SED) 's/^\(CONFIG_[^_]*[_]*ARM[^=]*\)=.*/# \1 is not set/g' \ + $(@D)/.config + $(call UCLIBC_OPT_SET,$(UCLIBC_ARM_TYPE),y,$(@D)) +endef + +UCLIBC_ARM_ABI = CONFIG_ARM_$(call qstrip,$(BR2_UCLIBC_ARM_ABI)) + +define UCLIBC_ARM_ABI_CONFIG + $(SED) '/CONFIG_ARM_.ABI/d' $(@D)/.config + $(call UCLIBC_OPT_SET,$(UCLIBC_ARM_ABI),y,$(@D)) +endef + +ifeq ($(BR2_UCLIBC_ARM_BX),y) +define UCLIBC_ARM_BX_CONFIG + $(call UCLIBC_OPT_SET,USE_BX,y,$(@D)) +endef +else +define UCLIBC_ARM_BX_CONFIG + $(call UCLIBC_OPT_UNSET,USE_BX,y,$(@D)) +endef +endif + +endif # arm + +# +# MIPS definitions +# + +ifeq ($(UCLIBC_TARGET_ARCH),mips) +UCLIBC_MIPS_ABI = CONFIG_MIPS_$(call qstrip,$(BR2_UCLIBC_MIPS_ABI))_ABI +define UCLIBC_MIPS_ABI_CONFIG + $(SED) '/CONFIG_MIPS_[NO].._ABI/d' $(@D)/.config + $(call UCLIBC_OPT_SET,$(UCLIBC_MIPS_ABI),y,$(@D)) +endef + +UCLIBC_MIPS_ISA = CONFIG_MIPS_ISA_$(call qstrip,$(BR2_UCLIBC_MIPS_ISA)) +define UCLIBC_MIPS_ISA_CONFIG + $(SED) '/CONFIG_MIPS_ISA_.*/d' $(@D)/.config + $(call UCLIBC_OPT_SET,$(UCLIBC_MIPS_ISA),y,$(@D)) +endef +endif # mips + +# +# SH definitions +# + +ifeq ($(UCLIBC_TARGET_ARCH),sh) +UCLIBC_SH_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_SH_TYPE)) +define UCLIBC_SH_TYPE_CONFIG + $(SED) '/CONFIG_SH[234A]*/d' $(@D)/.config + $(call UCLIBC_OPT_SET,$(UCLIBC_SH_TYPE),y,$(@Ð)) +endef +endif # sh + +# +# SPARC definitions +# + +ifeq ($(UCLIBC_TARGET_ARCH),sparc) +UCLIBC_SPARC_TYPE = CONFIG_SPARC_$(call qstrip,$(BR2_UCLIBC_SPARC_TYPE)) +define UCLIBC_SPARC_TYPE_CONFIG + $(SED) 's/^\(CONFIG_[^_]*[_]*SPARC[^=]*\)=.*/# \1 is not set/g' \ + $(@Ð)/.config + $(call UCLIBC_OPT_SET,$(UCLIBC_SPARC_TYPE),y,$(@D)) +endef +endif # sparc + +# +# PowerPC definitions +# + +ifeq ($(UCLIBC_TARGET_ARCH),powerpc) +UCLIBC_POWERPC_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_POWERPC_TYPE)) +define UCLIBC_POWERPC_TYPE_CONFIG + $(call UCLIBC_OPT_UNSET,CONFIG_GENERIC,$(@D)) + $(call UCLIBC_OPT_UNSET,CONFIG_E500,$(@D)) + $(call UCLIBC_OPT_SET,$(UCLIBC_POWERPC_TYPE),y,$(@Ð)) +endef +endif # powerpc + +# +# AVR32 definitions +# + +ifeq ($(UCLIBC_TARGET_ARCH),avr32) +define UCLIBC_AVR32_CONFIG + $(call UCLIBC_OPT_SET,LINKRELAX,y,$(@D)) +endef +endif # avr32 + +# +# x86 definitions +# +ifeq ($(UCLIBC_TARGET_ARCH),i386) +UCLIBC_X86_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_X86_TYPE)) +define UCLIBC_X86_TYPE_CONFIG + $(call UCLIBC_OPT_SET,$(UCLIBC_X86_TYPE),y,$(@D)) +endef +endif + +# +# ARC definitions +# +ifeq ($(UCLIBC_TARGET_ARCH),arc) +REALLY_NOSTDLIB = -really-nostdlib +endif + +# +# Endianess +# + +ifeq ($(call qstrip,$(BR2_ENDIAN)),BIG) +define UCLIBC_ENDIAN_CONFIG + $(call UCLIBC_OPT_SET,ARCH_BIG_ENDIAN,y,$(@D)) + $(call UCLIBC_OPT_SET,ARCH_WANTS_BIG_ENDIAN,y,$(@D)) + $(call UCLIBC_OPT_UNSET,ARCH_LITTLE_ENDIAN,$(@D)) + $(call UCLIBC_OPT_UNSET,ARCH_WANTS_LITTLE_ENDIAN,$(@D)) +endef +else +define UCLIBC_ENDIAN_CONFIG + $(call UCLIBC_OPT_SET,ARCH_LITTLE_ENDIAN,y,$(@D)) + $(call UCLIBC_OPT_SET,ARCH_WANTS_LITTLE_ENDIAN,y,$(@D)) + $(call UCLIBC_OPT_UNSET,ARCH_BIG_ENDIAN,$(@D)) + $(call UCLIBC_OPT_UNSET,ARCH_WANTS_BIG_ENDIAN,$(@D)) +endef +endif + +# +# Largefile +# + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_LARGEFILE),y) +define UCLIBC_LARGEFILE_CONFIG + $(call UCLIBC_OPT_SET,UCLIBC_HAS_LFS,y,$(@D)) +endef +else +define UCLIBC_LARGEFILE_CONFIG + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_LFS,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_FOPEN_LARGEFILE_MODE,$(@D)) +endef +endif + +# +# IPv6 +# + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_INET_IPV6),y) +UCLIBC_IPV6_CONFIG = $(call UCLIBC_OPT_SET,UCLIBC_HAS_IPV6,y,$(@D)) +else +UCLIBC_IPV6_CONFIG = $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_IPV6,$(@D)) +endif + +# +# RPC +# + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_INET_RPC),y) +define UCLIBC_RPC_CONFIG + $(call UCLIBC_OPT_SET,UCLIBC_HAS_RPC,y,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_HAS_FULL_RPC,y,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_HAS_REENTRANT_RPC,y,$(@D)) +endef +else +define UCLIBC_RPC_CONFIG + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_RPC,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_FULL_RPC,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_REENTRANT_RPC,$(@D)) +endef +endif + +# +# soft-float +# + +ifeq ($(BR2_SOFT_FLOAT),y) +define UCLIBC_FLOAT_CONFIG + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_FPU,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_HAS_FLOATS,y,$(@D)) + $(call UCLIBC_OPT_SET,DO_C99_MATH,y,$(@D)) +endef +else +define UCLIBC_FLOAT_CONFIG + $(call UCLIBC_OPT_SET,UCLIBC_HAS_FPU,y,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_HAS_FLOATS,y,$(@D)) +endef +endif + +# +# SSP +# +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_USE_SSP),y) +UCLIBC_SSP_CONFIG = $(call UCLIBC_OPT_SET,UCLIBC_HAS_SSP,y,$(@D)) +else +UCLIBC_SSP_CONFIG = $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_SSP,$(@D)) +endif + +# +# Threads +# +ifeq ($(BR2_PTHREADS_NONE),y) +define UCLIBC_THREAD_CONFIG + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_THREADS,$(@D)) + $(call UCLIBC_OPT_UNSET,LINUXTHREADS,$(@D)) + $(call UCLIBC_OPT_UNSET,LINUXTHREADS_OLD,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_THREADS_NATIVE,$(@D)) +endef +else ifeq ($(BR2_PTHREADS),y) +define UCLIBC_THREAD_CONFIG + $(call UCLIBC_OPT_SET,UCLIBC_HAS_THREADS,y,$(@D)) + $(call UCLIBC_OPT_SET,LINUXTHREADS_NEW,y,$(@D)) + $(call UCLIBC_OPT_UNSET,LINUXTHREADS_OLD,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_THREADS_NATIVE,$(@D)) +endef +else ifeq ($(BR2_PTHREADS_OLD),y) +define UCLIBC_THREAD_CONFIG + $(call UCLIBC_OPT_SET,UCLIBC_HAS_THREADS,y,$(@D)) + $(call UCLIBC_OPT_UNSET,LINUXTHREADS_NEW,$(@D)) + $(call UCLIBC_OPT_SET,LINUXTHREADS_OLD,y,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_THREADS_NATIVE,$(@D)) +endef +else ifeq ($(BR2_PTHREADS_NATIVE),y) +define UCLIBC_THREAD_CONFIG + $(call UCLIBC_OPT_SET,UCLIBC_HAS_THREADS,y,$(@D)) + $(call UCLIBC_OPT_UNSET,LINUXTHREADS_NEW,$(@D)) + $(call UCLIBC_OPT_UNSET,LINUXTHREADS_OLD,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_HAS_THREADS_NATIVE,y,$(@D)) +endef +endif + +# +# Thread debug +# + +ifeq ($(BR2_PTHREAD_DEBUG),y) +UCLIBC_THREAD_DEBUG_CONFIG = $(call UCLIBC_OPT_SET,PTHREADS_DEBUG_SUPPORT,y,$(@D)) +else +UCLIBC_THREAD_DEBUG_CONFIG = $(call UCLIBC_OPT_UNSET,PTHREADS_DEBUG_SUPPORT,$(@D)) +endif + +# +# Locale +# + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_LOCALE),y) +define UCLIBC_LOCALE_CONFIG + $(call UCLIBC_OPT_SET,UCLIBC_HAS_LOCALE,y,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_BUILD_ALL_LOCALE,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_BUILD_MINIMAL_LOCALE,y,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_BUILD_MINIMAL_LOCALES,"$(UCLIBC_LOCALES)",$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_PREGENERATED_LOCALE_DATA,$(@D)) + $(call UCLIBC_OPT_UNSET,DOWNLOAD_PREGENERATED_LOCALE_DATA,$(@D)) + $(call UCLIBC_OPT_SET,UCLIBC_HAS_XLOCALE,y,$(@D)) + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_GLIBC_DIGIT_GROUPING,$(@D)) +endef +else +define UCLIBC_LOCALE_CONFIG + $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_LOCALE,$(@D)) +endef +endif + +# +# wchar +# + +ifeq ($(BR2_TOOLCHAIN_BUILDROOT_WCHAR),y) +UCLIBC_WCHAR_CONFIG = $(call UCLIBC_OPT_SET,UCLIBC_HAS_WCHAR,y,$(@D)) +else +UCLIBC_WCHAR_CONFIG = $(call UCLIBC_OPT_UNSET,UCLIBC_HAS_WCHAR,$(@D)) +endif + +# +# debug +# + +ifeq ($(BR2_ENABLE_DEBUG),y) +UCLIBC_DEBUG_CONFIG = $(call UCLIBC_OPT_SET,DODEBUG,y,$(@D)) +endif + +# +# strip +# + +ifeq ($(BR2_STRIP_none),y) +UCLIBC_STRIP_CONFIG = $(call UCLIBC_OPT_SET,DOSTRIP,y,$(@D)) +endif + +# +# Commands +# + +UCLIBC_MAKE_FLAGS = \ + ARCH="$(UCLIBC_TARGET_ARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + UCLIBC_EXTRA_CFLAGS="$(TARGET_ABI)" \ + HOSTCC="$(HOSTCC)" + +define UCLIBC_CONFIGURE_CMDS + cp -f $(UCLIBC_CONFIG_FILE) $(@D)/.config + $(call UCLIBC_OPT_SET,CROSS_COMPILER_PREFIX,"$(TARGET_CROSS)",$(@D)) + $(call UCLIBC_OPT_SET,TARGET_$(UCLIBC_TARGET_ARCH),y,$(@D)) + $(call UCLIBC_OPT_SET,TARGET_ARCH,"$(UCLIBC_TARGET_ARCH)",$(@D)) + $(call UCLIBC_OPT_SET,KERNEL_HEADERS,"$(STAGING_DIR)/usr/include",$(@D)) + $(call UCLIBC_OPT_SET,RUNTIME_PREFIX,"/",$(@D)) + $(call UCLIBC_OPT_SET,DEVEL_PREFIX,"/usr",$(@D)) + $(call UCLIBC_OPT_SET,SHARED_LIB_LOADER_PREFIX,"/lib",$(@D)) + $(UCLIBC_ARM_TYPE_CONFIG) + $(UCLIBC_ARM_ABI_CONFIG) + $(UCLIBC_ARM_BX_CONFIG) + $(UCLIBC_MIPS_ABI_CONFIG) + $(UCLIBC_MIPS_ISA_CONFIG) + $(UCLIBC_SH_TYPE_CONFIG) + $(UCLIBC_SPARC_TYPE_CONFIG) + $(UCLIBC_POWERPC_TYPE_CONFIG) + $(UCLIBC_AVR32_CONFIG) + $(UCLIBC_X86_TYPE_CONFIG) + $(UCLIBC_ENDIAN_CONFIG) + $(UCLIBC_LARGEFILE_CONFIG) + $(UCLIBC_IPV6_CONFIG) + $(UCLIBC_RPC_CONFIG) + $(UCLIBC_FLOAT_CONFIG) + $(UCLIBC_SSP_CONFIG) + $(UCLIBC_THREAD_CONFIG) + $(UCLIBC_THREAD_DEBUG_CONFIG) + $(UCLIBC_LOCALE_CONFIG) + $(UCLIBC_WCHAR_CONFIG) + $(UCLIBC_STRIP_CONFIG) + $(UCLIBC_DEBUG_CONFIG) + yes "" | $(MAKE1) -C $(@D) \ + $(UCLIBC_MAKE_FLAGS) \ + PREFIX=$(STAGING_DIR) \ + DEVEL_PREFIX=/usr/ \ + RUNTIME_PREFIX=$(STAGING_DIR) \ + oldconfig + $(MAKE1) -C $(UCLIBC_DIR) \ + $(UCLIBC_MAKE_FLAGS) \ + PREFIX=$(STAGING_DIR) \ + DEVEL_PREFIX=/usr/ \ + RUNTIME_PREFIX=$(STAGING_DIR) \ + headers lib/crt1.o lib/crti.o lib/crtn.o \ + install_headers + $(TARGET_CROSS)gcc -nostdlib $(REALLY_NOSTDLIB) \ + -nostartfiles -shared -x c /dev/null -o $(STAGING_DIR)/usr/lib/libc.so + $(TARGET_CROSS)gcc -nostdlib $(REALLY_NOSTDLIB) \ + -nostartfiles -shared -x c /dev/null -o $(STAGING_DIR)/usr/lib/libm.so + cp -pLR $(UCLIBC_DIR)/lib/crt[1in].o $(STAGING_DIR)/usr/lib/ +endef + +ifeq ($(BR2_UCLIBC_INSTALL_TEST_SUITE),y) +define UCLIBC_BUILD_TEST_SUITE + $(MAKE1) -C $(@D)/test \ + $(UCLIBC_MAKE_FLAGS) \ + ARCH_CFLAGS=-I$(STAGING_DIR)/usr/include \ + UCLIBC_ONLY=1 \ + TEST_INSTALLED_UCLIBC=1 \ + compile +endef +endif + +define UCLIBC_BUILD_CMDS + $(MAKE1) -C $(@D) \ + $(UCLIBC_MAKE_FLAGS) \ + PREFIX= \ + DEVEL_PREFIX=/ \ + RUNTIME_PREFIX=/ \ + all + $(MAKE1) -C $(@D)/utils \ + PREFIX=$(HOST_DIR) \ + HOSTCC="$(HOSTCC)" hostutils + $(UCLIBC_BUILD_TEST_SUITE) +endef + +ifeq ($(BR2_UCLIBC_INSTALL_TEST_SUITE),y) +define UCLIBC_INSTALL_TEST_SUITE + mkdir -p $(TARGET_DIR)/root/uClibc + cp -rdpf $(@D)/test $(TARGET_DIR)/root/uClibc + $(INSTALL) -D -m 0644 $(@D)/Rules.mak $(TARGET_DIR)/root/uClibc/Rules.mak + $(INSTALL) -D -m 0644 $(@D)/.config $(TARGET_DIR)/root/uClibc/.config +endef +endif + +define UCLIBC_INSTALL_TARGET_CMDS + $(MAKE1) -C $(@D) \ + $(UCLIBC_MAKE_FLAGS) \ + PREFIX=$(TARGET_DIR) \ + DEVEL_PREFIX=/usr/ \ + RUNTIME_PREFIX=/ \ + install_runtime + $(MAKE1) -C $(@D) \ + CC="$(TARGET_CC)" CPP="$(TARGET_CPP)" LD="$(TARGET_LD)" \ + ARCH="$(UCLIBC_TARGET_ARCH)" \ + PREFIX=$(TARGET_DIR) \ + utils install_utils + $(UCLIBC_INSTALL_TEST_SUITE) +endef + +define UCLIBC_INSTALL_STAGING_CMDS + $(MAKE1) -C $(@D) \ + $(UCLIBC_MAKE_FLAGS) \ + PREFIX=$(STAGING_DIR) \ + DEVEL_PREFIX=/usr/ \ + RUNTIME_PREFIX=/ \ + install_runtime install_dev + install -D -m 0755 $(@D)/utils/ldd.host $(HOST_DIR)/usr/bin/ldd + ln -sf ldd $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldd + install -D -m 0755 $(@D)/utils/ldconfig.host $(HOST_DIR)/usr/bin/ldconfig + ln -sf ldconfig $(HOST_DIR)/usr/bin/$(GNU_TARGET_NAME)-ldconfig +endef + +uclibc-menuconfig: dirs uclibc-configure + $(MAKE1) -C $(UCLIBC_DIR) \ + $(UCLIBC_MAKE_FLAGS) \ + PREFIX=$(STAGING_DIR) \ + DEVEL_PREFIX=/usr/ \ + RUNTIME_PREFIX=$(STAGING_DIR)/ \ + menuconfig + rm -f $(UCLIBC_DIR)/.stamp_{built,target_installed,staging_installed} + +$(eval $(generic-package)) |