From cfbf8abc33d86a0cf5c1bb3e0817a22009b7f301 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 28 Jul 2010 00:11:37 -0700 Subject: Add support for uclibc NPTL toolchain. This patch modifies current toolchain build sequence so that NPTL enabled toolchain can be built. The new sequence works well with linuxthreads as well. It introduces a new pass for gcc cross compilation. The new sequence is binutils->gcc-initial->linux-headers -> uclibc-configured (some cheats to generate phony shared libc.so and libm.o) -> gcc-intermediate(with shared lib support) -> uclibc -> gcc-final I also added a new sample config arm_nptl_toolchain_defconfig which builds the toolchain and busybox. I have only tried it on arm. However it should work for other architectures which support NPTL on uclibc e.g. mips, sh, x86, ppc, x86_64 Signed-off-by: Khem Raj Signed-off-by: Peter Korsgaard --- toolchain/binutils/binutils.mk | 2 +- toolchain/gcc/Config.in | 2 +- toolchain/gcc/gcc-uclibc-4.x.mk | 130 +++++++++++++++++++++++++------- toolchain/uClibc/uClibc-snapshot.config | 116 +++++++++++++++++++++------- toolchain/uClibc/uclibc.mk | 15 ++-- 5 files changed, 201 insertions(+), 64 deletions(-) (limited to 'toolchain') diff --git a/toolchain/binutils/binutils.mk b/toolchain/binutils/binutils.mk index e44707c57..ddf9f3901 100644 --- a/toolchain/binutils/binutils.mk +++ b/toolchain/binutils/binutils.mk @@ -91,7 +91,7 @@ $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-ld: $(BINUTILS_DIR1)/binutils/obj # tooldir=/usr build_tooldir=/usr install #rm -f $(STAGING_DIR)/usr/bin/{ar,as,ld,nm,objdump,ranlib,strip} -binutils: uclibc-configured $(BINUTILS_HOST_PREREQ) $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-ld +binutils: $(BINUTILS_HOST_PREREQ) $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-ld binutils-source: $(DL_DIR)/$(BINUTILS_SOURCE) diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in index cbdc02699..c3c699c11 100644 --- a/toolchain/gcc/Config.in +++ b/toolchain/gcc/Config.in @@ -118,7 +118,7 @@ config BR2_GCC_SHARED_LIBGCC config BR2_GCC_ENABLE_TLS bool "Enable compiler tls support" default y - depends on !BR2_GCC_VERSION_4_4_X + depends on BR2_PTHREADS_NATIVE help Enable the compiler to generate code for accessing thread local storage variables diff --git a/toolchain/gcc/gcc-uclibc-4.x.mk b/toolchain/gcc/gcc-uclibc-4.x.mk index b87270f8f..d140db167 100644 --- a/toolchain/gcc/gcc-uclibc-4.x.mk +++ b/toolchain/gcc/gcc-uclibc-4.x.mk @@ -201,6 +201,8 @@ $(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched --with-gnu-ld \ --disable-shared \ --disable-libssp \ + --without-headers \ + --with-newlib \ $(GCC_TLS) \ $(GCC_WITH_HOST_GMP) \ $(GCC_WITH_HOST_MPFR) \ @@ -218,7 +220,7 @@ $(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched $(GCC_BUILD_DIR1)/.compiled: $(GCC_BUILD_DIR1)/.configured # gcc >= 4.3.0 have to also build all-target-libgcc ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y) - $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc all-target-libgcc + $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc else $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc endif @@ -228,13 +230,13 @@ gcc_initial=$(GCC_BUILD_DIR1)/.installed $(gcc_initial) $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc: $(GCC_BUILD_DIR1)/.compiled # gcc >= 4.3.0 have to also install install-target-libgcc ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y) - PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc install-target-libgcc + PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc else PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc endif touch $(gcc_initial) -gcc_initial: uclibc-configured binutils $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc +gcc_initial: binutils $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc gcc_initial-clean: rm -rf $(GCC_BUILD_DIR1) @@ -244,7 +246,77 @@ gcc_initial-dirclean: ############################################################# # -# second pass compiler build. Build the compiler targeting +# build the second pass gcc compiler +# +############################################################# +GCC_BUILD_DIR2:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-intermediate + + +# The --without-headers option stopped working with gcc 3.0 and has never been +# fixed, so we need to actually have working C library header files prior to +# the step or libgcc will not build... + +$(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched + mkdir -p $(GCC_BUILD_DIR2) + (cd $(GCC_BUILD_DIR2); rm -rf config.cache; \ + $(HOST_CONFIGURE_OPTS) \ + $(GCC_DIR)/configure $(QUIET) \ + --prefix=$(STAGING_DIR)/usr \ + --build=$(GNU_HOST_NAME) \ + --host=$(GNU_HOST_NAME) \ + --target=$(REAL_GNU_TARGET_NAME) \ + --enable-languages=c \ + $(BR2_CONFIGURE_DEVEL_SYSROOT) \ + --disable-__cxa_atexit \ + --enable-target-optspace \ + --with-gnu-ld \ + --enable-shared \ + --disable-libssp \ + $(GCC_TLS) \ + $(GCC_WITH_HOST_GMP) \ + $(GCC_WITH_HOST_MPFR) \ + $(DISABLE_NLS) \ + $(THREADS) \ + $(MULTILIB) \ + $(GCC_DECIMAL_FLOAT) \ + $(SOFT_FLOAT_CONFIG_OPTION) \ + $(GCC_WITH_ABI) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \ + $(EXTRA_GCC_CONFIG_OPTIONS) \ + $(EXTRA_GCC2_CONFIG_OPTIONS) \ + $(QUIET) \ + ) + touch $@ + +$(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured + # gcc >= 4.3.0 have to also build all-target-libgcc +ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y) + $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR2) all-gcc all-target-libgcc +else + $(MAKE) -C $(GCC_BUILD_DIR2) all-gcc +endif + touch $@ + +gcc_intermediate=$(GCC_BUILD_DIR2)/.installed +$(gcc_intermediate): $(GCC_BUILD_DIR2)/.compiled + # gcc >= 4.3.0 have to also install install-target-libgcc +ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y) + PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install-gcc install-target-libgcc +else + PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install-gcc +endif + touch $(gcc_intermediate) + +gcc_intermediate: uclibc-configured $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc + +gcc_intermediate-clean: + rm -rf $(GCC_BUILD_DIR2) + +gcc_intermediate-dirclean: + rm -rf $(GCC_BUILD_DIR2) $(GCC_DIR) + +############################################################# +# +# third pass compiler build. Build the compiler targeting # the newly built shared uClibc library. # ############################################################# @@ -255,9 +327,9 @@ gcc_initial-dirclean: # affect gcc-target. However, I haven't tested gcc-target yet so no # guarantees. mjn3 -GCC_BUILD_DIR2:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-final -$(GCC_BUILD_DIR2)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ) - mkdir -p $(GCC_BUILD_DIR2) +GCC_BUILD_DIR3:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-final +$(GCC_BUILD_DIR3)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ) + mkdir -p $(GCC_BUILD_DIR3) # Important! Required for limits.h to be fixed. ln -snf ../include/ $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/sys-include -rmdir $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib @@ -265,7 +337,9 @@ $(GCC_BUILD_DIR2)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ) ln -snf ../../lib $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib $(if $(BR2_ARCH_IS_64),mkdir -p $(STAGING_DIR)/lib64) $(if $(BR2_ARCH_IS_64),ln -snf ../../lib64 $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib64) - (cd $(GCC_BUILD_DIR2); rm -rf config.cache; \ + #-rmdir $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib + #ln -snf ../lib $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib + (cd $(GCC_BUILD_DIR3); rm -rf config.cache; \ $(HOST_CONFIGURE_OPTS) \ $(GCC_SRC_DIR)/configure $(QUIET) \ --prefix=$(STAGING_DIR)/usr \ @@ -294,13 +368,13 @@ $(GCC_BUILD_DIR2)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ) ) touch $@ -$(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured - $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR2) all +$(GCC_BUILD_DIR3)/.compiled: $(GCC_BUILD_DIR3)/.configured + $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR3) all touch $@ -$(GCC_BUILD_DIR2)/.installed: $(GCC_BUILD_DIR2)/.compiled +$(GCC_BUILD_DIR3)/.installed: $(GCC_BUILD_DIR3)/.compiled PATH=$(TARGET_PATH) $(MAKE) \ - -C $(GCC_BUILD_DIR2) install + -C $(GCC_BUILD_DIR3) install if [ -d "$(STAGING_DIR)/lib64" ]; then \ if [ ! -e "$(STAGING_DIR)/lib" ]; then \ mkdir -p "$(STAGING_DIR)/lib"; \ @@ -335,7 +409,7 @@ endif mkdir -p $(TARGET_DIR)/usr/lib $(TARGET_DIR)/usr/sbin touch $@ -$(STAMP_DIR)/gcc_libs_target_installed: $(GCC_BUILD_DIR2)/.installed +$(STAMP_DIR)/gcc_libs_target_installed: $(GCC_BUILD_DIR3)/.installed ifeq ($(BR2_GCC_SHARED_LIBGCC),y) # These are in /lib, so... rm -rf $(TARGET_DIR)/usr/lib/libgcc_s*.so* @@ -362,36 +436,36 @@ endif touch $@ cross_compiler:=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc -cross_compiler gcc: uclibc-configured binutils gcc_initial \ - $(LIBFLOAT_TARGET) uclibc $(GCC_BUILD_DIR2)/.installed \ +cross_compiler gcc: gcc_intermediate \ + $(LIBFLOAT_TARGET) uclibc $(GCC_BUILD_DIR3)/.installed \ $(STAMP_DIR)/gcc_libs_target_installed \ $(GCC_TARGETS) gcc-source: $(DL_DIR)/$(GCC_SOURCE) gcc-clean: - rm -rf $(GCC_BUILD_DIR2) + rm -rf $(GCC_BUILD_DIR3) for prog in cpp gcc gcc-[0-9]* protoize unprotoize gcov gccbug cc; do \ rm -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-$$prog; \ rm -f $(STAGING_DIR)/usr/bin/$(GNU_TARGET_NAME)-$$prog; \ done gcc-dirclean: gcc_initial-dirclean - rm -rf $(GCC_BUILD_DIR2) + rm -rf $(GCC_BUILD_DIR3) ############################################################# # # Next build target gcc compiler # ############################################################# -GCC_BUILD_DIR3:=$(BUILD_DIR)/gcc-$(GCC_VERSION)-target +GCC_BUILD_DIR4:=$(BUILD_DIR)/gcc-$(GCC_VERSION)-target -$(GCC_BUILD_DIR3)/.prepared: $(STAMP_DIR)/gcc_libs_target_installed $(GCC_TARGET_PREREQ) +$(GCC_BUILD_DIR4)/.prepared: $(STAMP_DIR)/gcc_libs_target_installed $(GCC_TARGET_PREREQ) mkdir -p $(GCC_BUILD_DIR3) touch $@ -$(GCC_BUILD_DIR3)/.configured: $(GCC_BUILD_DIR3)/.prepared - (cd $(GCC_BUILD_DIR3); rm -rf config.cache; \ +$(GCC_BUILD_DIR4)/.configured: $(GCC_BUILD_DIR4)/.prepared + (cd $(GCC_BUILD_DIR4); rm -rf config.cache; \ $(TARGET_CONFIGURE_OPTS) \ $(TARGET_CONFIGURE_ARGS) \ CFLAGS_FOR_TARGET="$(TARGET_CFLAGS) $(TARGET_SOFT_FLOAT)" \ @@ -423,13 +497,13 @@ $(GCC_BUILD_DIR3)/.configured: $(GCC_BUILD_DIR3)/.prepared $(DISABLE_LARGEFILE) \ $(EXTRA_GCC_CONFIG_OPTIONS) \ $(EXTRA_TARGET_GCC_CONFIG_OPTIONS) \ - $(EXTRA_GCC3_CONFIG_OPTIONS) \ + $(EXTRA_GCC4_CONFIG_OPTIONS) \ ) touch $@ -$(GCC_BUILD_DIR3)/.compiled: $(GCC_BUILD_DIR3)/.configured +$(GCC_BUILD_DIR4)/.compiled: $(GCC_BUILD_DIR4)/.configured PATH=$(TARGET_PATH) \ - $(MAKE) -C $(GCC_BUILD_DIR3) all + $(MAKE) -C $(GCC_BUILD_DIR4) all touch $@ GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION) @@ -439,9 +513,9 @@ else GCC_INCLUDE_DIR:=include-fixed endif -$(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR3)/.compiled +$(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR4)/.compiled PATH=$(TARGET_PATH) DESTDIR=$(TARGET_DIR) \ - $(MAKE1) -C $(GCC_BUILD_DIR3) install + $(MAKE1) -C $(GCC_BUILD_DIR4) install # Remove broken specs file (cross compile flag is set). rm -f $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/specs @@ -467,8 +541,8 @@ $(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR3)/.compiled gcc_target: uclibc_target binutils_target $(TARGET_DIR)/usr/bin/gcc gcc_target-clean: - rm -rf $(GCC_BUILD_DIR3) + rm -rf $(GCC_BUILD_DIR4) rm -f $(TARGET_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)* gcc_target-dirclean: - rm -rf $(GCC_BUILD_DIR3) + rm -rf $(GCC_BUILD_DIR4) diff --git a/toolchain/uClibc/uClibc-snapshot.config b/toolchain/uClibc/uClibc-snapshot.config index cb203a039..8ee737ba9 100644 --- a/toolchain/uClibc/uClibc-snapshot.config +++ b/toolchain/uClibc/uClibc-snapshot.config @@ -1,5 +1,7 @@ # # Automatically generated make config: don't edit +# Version: 0.9.32-git +# Fri Jul 9 22:31:59 2010 # # TARGET_alpha is not set # TARGET_arm is not set @@ -26,14 +28,34 @@ # TARGET_vax is not set # TARGET_x86_64 is not set # TARGET_xtensa is not set -TARGET_SUBARCH="" +# CONFIG_GENERIC_ARM is not set +# CONFIG_ARM610 is not set +# CONFIG_ARM710 is not set +# CONFIG_ARM7TDMI is not set +# CONFIG_ARM720T is not set +# CONFIG_ARM920T is not set +# CONFIG_ARM922T is not set +# CONFIG_ARM926T is not set +# CONFIG_ARM10T is not set +# CONFIG_ARM1136JF_S is not set +# CONFIG_ARM1176JZ_S is not set +# CONFIG_ARM1176JZF_S is not set +# CONFIG_ARM_CORTEX_M3 is not set +# CONFIG_ARM_CORTEX_M1 is not set +# CONFIG_ARM_SA110 is not set +# CONFIG_ARM_SA1100 is not set +# CONFIG_ARM_XSCALE is not set +# CONFIG_ARM_IWMMXT is not set + +USE_BX=y + +TARGET_SUBARCH="" # # Target Architecture Features and Options # TARGET_ARCH="none" FORCE_OPTIONS_FOR_ARCH=y - # # Using ELF file format # @@ -41,15 +63,12 @@ FORCE_OPTIONS_FOR_ARCH=y # ARCH_BIG_ENDIAN is not set # ARCH_WANTS_LITTLE_ENDIAN is not set # ARCH_WANTS_BIG_ENDIAN is not set - -# -# Using Little Endian -# ARCH_HAS_MMU=y ARCH_USE_MMU=y UCLIBC_HAS_FLOATS=y UCLIBC_HAS_FPU=y DO_C99_MATH=y +# DO_XSI_MATH is not set # UCLIBC_HAS_FENV is not set KERNEL_HEADERS="/usr/src/linux/include" HAVE_DOT_CONFIG=y @@ -59,22 +78,26 @@ HAVE_DOT_CONFIG=y # # HAVE_NO_PIC is not set DOPIC=y -# HAVE_NO_SHARED is not set +# ARCH_HAS_NO_SHARED is not set # ARCH_HAS_NO_LDSO is not set HAVE_SHARED=y # FORCE_SHAREABLE_TEXT_SEGMENTS is not set LDSO_LDD_SUPPORT=y -LDSO_CACHE_SUPPORT=y +# LDSO_CACHE_SUPPORT is not set +LDSO_PRELOAD_ENV_SUPPORT=y # LDSO_PRELOAD_FILE_SUPPORT is not set -LDSO_BASE_FILENAME="ld.so" # UCLIBC_STATIC_LDCONFIG is not set LDSO_RUNPATH=y +LDSO_SEARCH_INTERP_PATH=y UCLIBC_CTOR_DTOR=y # LDSO_GNU_HASH_SUPPORT is not set # HAS_NO_THREADS is not set +# LINUXTHREADS_OLD is not set +# LINUXTHREADS_NEW is not set +UCLIBC_HAS_THREADS_NATIVE=y UCLIBC_HAS_THREADS=y # PTHREADS_DEBUG_SUPPORT is not set -LINUXTHREADS_OLD=y +UCLIBC_HAS_SYSLOG=y UCLIBC_HAS_LFS=y # MALLOC is not set # MALLOC_SIMPLE is not set @@ -82,17 +105,23 @@ MALLOC_STANDARD=y MALLOC_GLIBC_COMPAT=y UCLIBC_DYNAMIC_ATEXIT=y # COMPAT_ATEXIT is not set -# UCLIBC_SUSV3_LEGACY is not set +UCLIBC_SUSV3_LEGACY=y # UCLIBC_SUSV3_LEGACY_MACROS is not set +# UCLIBC_SUSV4_LEGACY is not set +# UCLIBC_HAS_STUBS is not set UCLIBC_HAS_SHADOW=y # UCLIBC_HAS_PROGRAM_INVOCATION_NAME is not set -# UNIX98PTY_ONLY is not set +UCLIBC_HAS_PTY=y ASSUME_DEVPTS=y +UNIX98PTY_ONLY=y +UCLIBC_HAS_GETPT=y +# UCLIBC_HAS_LIBUTIL is not set UCLIBC_HAS_TM_EXTENSIONS=y UCLIBC_HAS_TZ_CACHING=y UCLIBC_HAS_TZ_FILE=y UCLIBC_HAS_TZ_FILE_READ_MANY=y UCLIBC_TZ_FILE_PATH="/etc/TZ" +UCLIBC_FALLBACK_TO_ETC_LOCALTIME=y # # Advanced Library Settings @@ -101,30 +130,59 @@ UCLIBC_PWD_BUFFER_SIZE=256 UCLIBC_GRP_BUFFER_SIZE=256 # -# Networking Support +# Support various families of functions # +UCLIBC_LINUX_MODULE_24=y +UCLIBC_LINUX_SPECIFIC=y +UCLIBC_HAS_GNU_ERROR=y +UCLIBC_BSD_SPECIFIC=y +UCLIBC_HAS_BSD_ERR=y +# UCLIBC_HAS_OBSOLETE_BSD_SIGNAL is not set +# UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL is not set +# UCLIBC_NTP_LEGACY is not set +# UCLIBC_SV4_DEPRECATED is not set +UCLIBC_HAS_REALTIME=y +UCLIBC_HAS_ADVANCED_REALTIME=y +UCLIBC_HAS_EPOLL=y +UCLIBC_HAS_XATTR=y +UCLIBC_HAS_PROFILING=y +UCLIBC_HAS_CRYPT_IMPL=y +UCLIBC_HAS_CRYPT=y +UCLIBC_HAS_NETWORK_SUPPORT=y +UCLIBC_HAS_SOCKET=y +UCLIBC_HAS_IPV4=y UCLIBC_HAS_IPV6=y UCLIBC_HAS_RPC=y UCLIBC_HAS_FULL_RPC=y UCLIBC_HAS_REENTRANT_RPC=y -# UCLIBC_USE_NETLINK is not set +UCLIBC_USE_NETLINK=y +# UCLIBC_SUPPORT_AI_ADDRCONFIG is not set # UCLIBC_HAS_BSD_RES_CLOSE is not set +UCLIBC_HAS_COMPAT_RES_STATE=y +# UCLIBC_HAS_EXTRA_COMPAT_RES_STATE is not set +# UCLIBC_HAS_LIBRESOLV_STUB is not set +# UCLIBC_HAS_LIBNSL_STUB is not set # # String and Stdio Support # -UCLIBC_HAS_STRING_GENERIC_OPT=y +# UCLIBC_HAS_STRING_GENERIC_OPT is not set UCLIBC_HAS_STRING_ARCH_OPT=y UCLIBC_HAS_CTYPE_TABLES=y UCLIBC_HAS_CTYPE_SIGNED=y # UCLIBC_HAS_CTYPE_UNSAFE is not set -UCLIBC_HAS_CTYPE_CHECKED=y -# UCLIBC_HAS_CTYPE_ENFORCED is not set -# UCLIBC_HAS_WCHAR is not set -# UCLIBC_HAS_LOCALE is not set +# UCLIBC_HAS_CTYPE_CHECKED is not set +UCLIBC_HAS_CTYPE_ENFORCED=y +UCLIBC_HAS_WCHAR=y +UCLIBC_HAS_LOCALE=y +# UCLIBC_BUILD_ALL_LOCALE is not set +UCLIBC_BUILD_MINIMAL_LOCALE=y +# UCLIBC_PREGENERATED_LOCALE_DATA is not set +UCLIBC_BUILD_MINIMAL_LOCALES="en_US" +UCLIBC_HAS_XLOCALE=y UCLIBC_HAS_HEXADECIMAL_FLOATS=y +# UCLIBC_HAS_GLIBC_DIGIT_GROUPING is not set UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y -# USE_OLD_VFPRINTF is not set UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y # UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set @@ -138,8 +196,8 @@ UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y # UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set # UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set # UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set -UCLIBC_HAS_STDIO_GETC_MACRO=y -UCLIBC_HAS_STDIO_PUTC_MACRO=y +# UCLIBC_HAS_STDIO_GETC_MACRO is not set +# UCLIBC_HAS_STDIO_PUTC_MACRO is not set UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y # UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y @@ -150,26 +208,27 @@ UCLIBC_HAS_ERRNO_MESSAGES=y UCLIBC_HAS_SIGNUM_MESSAGES=y # UCLIBC_HAS_SYS_SIGLIST is not set UCLIBC_HAS_GNU_GETOPT=y -UCLIBC_HAS_GNU_GETSUBOPT=y +# UCLIBC_HAS_GNU_GETSUBOPT is not set # # Big and Tall # UCLIBC_HAS_REGEX=y -UCLIBC_HAS_REGEX_OLD=y +# UCLIBC_HAS_REGEX_OLD is not set UCLIBC_HAS_FNMATCH=y -UCLIBC_HAS_FNMATCH_OLD=y +# UCLIBC_HAS_FNMATCH_OLD is not set # UCLIBC_HAS_WORDEXP is not set -UCLIBC_HAS_FTW=y +# UCLIBC_HAS_NFTW is not set UCLIBC_HAS_GLOB=y UCLIBC_HAS_GNU_GLOB=y # # Library Installation Options # -SHARED_LIB_LOADER_PREFIX="/lib" RUNTIME_PREFIX="/" DEVEL_PREFIX="/usr/" +MULTILIB_DIR="lib" +HARDWIRED_ABSPATH=y # # Security options @@ -180,7 +239,7 @@ DEVEL_PREFIX="/usr/" # UCLIBC_HAS_SSP is not set UCLIBC_BUILD_RELRO=y UCLIBC_BUILD_NOW=y -# UCLIBC_BUILD_NOEXECSTACK is not set +UCLIBC_BUILD_NOEXECSTACK=y # # uClibc development/debugging options @@ -198,4 +257,3 @@ WARNINGS="-Wall" # EXTRA_WARNINGS is not set # DOMULTI is not set # UCLIBC_MJN3_ONLY is not set - diff --git a/toolchain/uClibc/uclibc.mk b/toolchain/uClibc/uclibc.mk index ce1396a97..016f32372 100644 --- a/toolchain/uClibc/uclibc.mk +++ b/toolchain/uClibc/uclibc.mk @@ -16,11 +16,12 @@ UCLIBC_VERSION:=$(call qstrip,$(BR2_UCLIBC_VERSION_STRING)) ifeq ($(BR2_UCLIBC_VERSION_SNAPSHOT),y) UCLIBC_SITE:=http://www.uclibc.org/downloads/snapshots +UCLIBC_DIR:=$(TOOLCHAIN_DIR)/uClibc else UCLIBC_SITE:=http://www.uclibc.org/downloads +UCLIBC_DIR:=$(TOOLCHAIN_DIR)/uClibc-$(UCLIBC_VERSION) endif -UCLIBC_DIR:=$(TOOLCHAIN_DIR)/uClibc-$(UCLIBC_VERSION) UCLIBC_PATCH_DIR:=toolchain/uClibc/ UCLIBC_SOURCE:=uClibc-$(UCLIBC_VERSION).tar.bz2 @@ -407,6 +408,7 @@ $(UCLIBC_DIR)/.configured: $(LINUX_HEADERS_DIR)/.configured $(UCLIBC_DIR)/.confi DEVEL_PREFIX=/usr/ \ RUNTIME_PREFIX=$(TOOLCHAIN_DIR)/uClibc_dev/ \ HOSTCC="$(HOSTCC)" headers \ + lib/crt1.o lib/crti.o lib/crtn.o \ $(if $(BR2_UCLIBC_VERSION_0_9_28_3),install_dev,install_headers) # Install the kernel headers to the first stage gcc include dir # if necessary @@ -414,9 +416,12 @@ $(UCLIBC_DIR)/.configured: $(LINUX_HEADERS_DIR)/.configured $(UCLIBC_DIR)/.confi cp -pLR $(LINUX_HEADERS_DIR)/include/* \ $(TOOLCHAIN_DIR)/uClibc_dev/usr/include/; \ fi + $(TARGET_CROSS)gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $(TOOLCHAIN_DIR)/uClibc_dev/usr/lib/libc.so + $(TARGET_CROSS)gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $(TOOLCHAIN_DIR)/uClibc_dev/usr/lib/libm.so + cp -pLR $(UCLIBC_DIR)/lib/crt[1in].o $(TOOLCHAIN_DIR)/uClibc_dev/usr/lib/ touch $@ -$(UCLIBC_DIR)/lib/libc.a: $(UCLIBC_DIR)/.configured $(gcc_initial) $(LIBFLOAT_TARGET) +$(UCLIBC_DIR)/lib/libc.a: $(UCLIBC_DIR)/.configured $(gcc_intermediate) $(LIBFLOAT_TARGET) $(MAKE1) -C $(UCLIBC_DIR) \ ARCH="$(UCLIBC_TARGET_ARCH)" \ PREFIX= \ @@ -501,7 +506,7 @@ UCLIBC_TARGETS+=uclibc-test endif endif -uclibc: $(cross_compiler) $(STAGING_DIR)/usr/lib/libc.a $(UCLIBC_TARGETS) +uclibc: $(gcc_intermediate) $(STAGING_DIR)/usr/lib/libc.a $(UCLIBC_TARGETS) uclibc-source: $(DL_DIR)/$(UCLIBC_SOURCE) @@ -514,7 +519,7 @@ uclibc-oldconfig: $(UCLIBC_DIR)/.oldconfig uclibc-update: uclibc-config cp -f $(UCLIBC_DIR)/.config $(UCLIBC_CONFIG_FILE) -uclibc-configured: kernel-headers $(UCLIBC_DIR)/.configured +uclibc-configured: gcc_initial kernel-headers $(UCLIBC_DIR)/.configured uclibc-configured-source: uclibc-source @@ -540,7 +545,7 @@ $(TARGET_DIR)/root/uClibc/test/unistd/errno: $(UCLIBC_DIR)/test/unistd/errno $(INSTALL) $(UCLIBC_DIR)/Rules.mak $(TARGET_DIR)/root/uClibc $(INSTALL) $(UCLIBC_DIR)/.config $(TARGET_DIR)/root/uClibc -uclibc-test: uclibc $(TARGET_DIR)/root/uClibc/test/unistd/errno +uclibc-test: $(STAGING_DIR)/usr/lib/libc.a $(TARGET_DIR)/root/uClibc/test/unistd/errno uclibc-test-source: uclibc-source -- cgit v1.2.3