From 14e8d5a9ce7632dd5fe9bc0326b8a533ea4765aa Mon Sep 17 00:00:00 2001 From: Abdoulaye Walsimou Gaye Date: Sun, 27 Sep 2009 11:41:06 +0200 Subject: Toolchain: uclibc: introduction of build machinery and initial support for arm Signed-off-by: Abdoulaye Walsimou Gaye --- kconfig/toolchain.kconfig | 5 + kconfig/uclibc-kconfigs/uclibc-arm.kconfig | 171 +++ kconfig/uclibc-kconfigs/uclibc.kconfig | 2250 ++++++++++++++++++++++++++++ mk/toolchain.mk | 13 +- mk/uclibc.mk | 71 + 5 files changed, 2506 insertions(+), 4 deletions(-) create mode 100644 kconfig/uclibc-kconfigs/uclibc-arm.kconfig create mode 100644 kconfig/uclibc-kconfigs/uclibc.kconfig create mode 100755 mk/uclibc.mk diff --git a/kconfig/toolchain.kconfig b/kconfig/toolchain.kconfig index 6efa032..fca89cf 100644 --- a/kconfig/toolchain.kconfig +++ b/kconfig/toolchain.kconfig @@ -43,9 +43,14 @@ choice see http://www.uclibc.org for more information about uclibc. endchoice + if EMBTK_CLIB_EGLIBC source "kconfig/eglibc.kconfig" endif +if EMBTK_CLIB_UCLIBC +source "kconfig/uclibc-kconfigs/uclibc.kconfig" +endif + endmenu menu "GCC compiler" diff --git a/kconfig/uclibc-kconfigs/uclibc-arm.kconfig b/kconfig/uclibc-kconfigs/uclibc-arm.kconfig new file mode 100644 index 0000000..1d99297 --- /dev/null +++ b/kconfig/uclibc-kconfigs/uclibc-arm.kconfig @@ -0,0 +1,171 @@ +################################################################################ +# GAYE Abdoulaye Walsimou, +# Copyright(C) 2009 GAYE Abdoulaye Walsimou. All rights reserved. +# For Copyrright from linux kernel's build/configure system, see their source +# code +# +# This program is free software; you can distribute it and/or modify it +# under the terms of the GNU General Public License +# (Version 2 or later) published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. +################################################################################ +# +# \file uclibc-arm.kconfig +# \brief uclibc-arm.kconfig of Embtoolkit, similar to Configs/Config.arm. +# \author GAYE Abdoulaye Walsimou, +# \date September 2009 +################################################################################ + +config KEMBTK_UCLIBC_CONFIG_GENERIC_ARM + bool + default n + +config KEMBTK_UCLIBC_CONFIG_ARM610 + bool + select ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_TARGET_ARCH + string + default "arm" + +config KEMBTK_UCLIBC_FORCE_OPTIONS_FOR_ARCH + bool + default y + select KEMBTK_UCLIBC_ARCH_ANY_ENDIAN + +config KEMBTK_UCLIBC_CONFIG_ARM_EABI + bool + default y + +config KEMBTK_UCLIBC_CONFIG_ARM_OABI + bool + default n + +config KEMBTK_UCLIBC_USE_BX + bool "Use BX in function return" + default y + depends on !KEMBTK_UCLIBC_CONFIG_GENERIC_ARM \ + && !KEMBTK_UCLIBC_CONFIG_ARM610 && !KEMBTK_UCLIBC_CONFIG_ARM710 + help + Use BX instruction for THUMB aware architectures. + +config KEMBTK_UCLIBC_CONFIG_ARM710 + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM7TDMI_ARM710T + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM7TDMI + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM7TDMI_ARM7TDMI \ + || EMBTK_ARCH_ARM_FAMILY_ARM7TDMI_ARM7TDMI-S \ + || EMBTK_ARCH_ARM_FAMILY_ARM7TDMI_ARM740T + select KEMBTK_UCLIBC_ARCH_HAS_NO_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM720T + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM7TDMI_ARM720T + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM920T + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM9TDMI_ARM920T \ + || EMBTK_ARCH_ARM_FAMILY_ARM9TDMI_ARM9TDMI \ + || EMBTK_ARCH_ARM_FAMILY_ARM9TDMI_ARM940T + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM922T + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM9TDMI_ARM922T + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM926T + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM9E_ARM926EJ-S \ + || EMBTK_ARCH_ARM_FAMILY_ARM9E_ARM946E-S \ + || EMBTK_ARCH_ARM_FAMILY_ARM9E_ARM966E-S \ + || EMBTK_ARCH_ARM_FAMILY_ARM9E_ARM968E-S + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM10T + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM10E_ARM1020E \ + || EMBTK_ARCH_ARM_FAMILY_ARM10E_ARM1020E \ + || EMBTK_ARCH_ARM_FAMILY_ARM10E_ARM1022E \ + || EMBTK_ARCH_ARM_FAMILY_ARM10E_ARM1026EJ-S + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM1136JF_S + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM11_ARM1136JF-S \ + || EMBTK_ARCH_ARM_FAMILY_ARM11_ARM1136J-S \ + || EMBTK_ARCH_ARM_FAMILY_ARM11_ARM1156T2-S + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM1176JZ_S + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM11_ARM1176JZ-S + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM1176JZF_S + bool + default y if EMBTK_ARCH_ARM_FAMILY_ARM11_ARM1176JZF-S + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM_CORTEX_M3 + bool + default y if EMBTK_ARCH_ARM_FAMILY_CORTEX_CORTEX-M3 + select KEMBTK_UCLIBC_ARCH_HAS_NO_MMU + select KEMBTK_UCLIBC_USE_BX + default n + +config KEMBTK_UCLIBC_CONFIG_ARM_CORTEX_M1 + bool + default y if EMBTK_ARCH_ARM_FAMILY_CORTEX_CORTEX-M1 + select KEMBTK_UCLIBC_ARCH_HAS_NO_MMU + select KEMBTK_UCLIBC_USE_BX + default n + +config KEMBTK_UCLIBC_CONFIG_ARM_SA110 + bool + default y if EMBTK_ARCH_ARM_FAMILY_STRONGARM_SA-110 + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM_SA1100 + bool + default y if EMBTK_ARCH_ARM_FAMILY_STRONGARM_SA-1100 + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM_XSCALE + bool + default y if EMBTK_ARCH_ARM_FAMILY_XSCALE_XSCALE + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + +config KEMBTK_UCLIBC_CONFIG_ARM_IWMMXT + bool + default y if EMBTK_ARCH_ARM_FAMILY_IWMMXT_IWMMXT \ + || EMBTK_ARCH_ARM_FAMILY_IWMMXT_IWMMXT2 + select KEMBTK_UCLIBC_ARCH_HAS_MMU + default n + diff --git a/kconfig/uclibc-kconfigs/uclibc.kconfig b/kconfig/uclibc-kconfigs/uclibc.kconfig new file mode 100644 index 0000000..9a25190 --- /dev/null +++ b/kconfig/uclibc-kconfigs/uclibc.kconfig @@ -0,0 +1,2250 @@ +################################################################################ +# GAYE Abdoulaye Walsimou, +# Copyright(C) 2009 GAYE Abdoulaye Walsimou. All rights reserved. +# For Copyrright from linux kernel's build/configure system, see their source +# code +# +# This program is free software; you can distribute it and/or modify it +# under the terms of the GNU General Public License +# (Version 2 or later) published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. +################################################################################ +# +# \file uclibc.kconfig +# \brief uclibc.kconfig of Embtoolkit, similar to Configs/Config.in +# \author GAYE Abdoulaye Walsimou, +# \date September 2009 +################################################################################ + +comment "##############################" +comment "uClibc C library configuration" +comment "##############################" + +choice + prompt "uClibc version to use" + default EMBTK_UCLIBC_VERSION_0_9_30_1 + help + Which uClibc version to use. + + config EMBTK_UCLIBC_VERSION_0_9_30_1 + bool "uClibc-0.9.30.1" + config EMBTK_UCLIBC_VERSION_0_9_30 + bool "uClibc-0.9.30" +endchoice + +config KEMBTK_UCLIBC_TARGET_alpha + bool + default n + +config KEMBTK_UCLIBC_TARGET_arm + bool + default y if EMBTK_ARCH_ARM + default n + +config KEMBTK_UCLIBC_TARGET_avr32 + bool + default n + +config KEMBTK_UCLIBC_TARGET_bfin + bool + default n + +config KEMBTK_UCLIBC_TARGET_cris + bool + default n + +config KEMBTK_UCLIBC_TARGET_e1 + bool + default n + +config KEMBTK_UCLIBC_TARGET_frv + bool + default n + +config KEMBTK_UCLIBC_TARGET_h8300 + bool + default n + +config KEMBTK_UCLIBC_TARGET_hppa + bool + default n + +config KEMBTK_UCLIBC_TARGET_i386 + bool + default n + +config KEMBTK_UCLIBC_TARGET_i960 + bool + default n + +config KEMBTK_UCLIBC_TARGET_ia64 + bool + default n + +config KEMBTK_UCLIBC_TARGET_m68k + bool + default n + +config KEMBTK_UCLIBC_TARGET_microblaze + bool + default n + +config KEMBTK_UCLIBC_TARGET_mips + bool + default y if EMBTK_ARCH_MIPS + default n + +config KEMBTK_UCLIBC_TARGET_nios + bool + default n + +config KEMBTK_UCLIBC_TARGET_nios2 + bool + default n + +config KEMBTK_UCLIBC_TARGET_powerpc + bool + default n + +config KEMBTK_UCLIBC_TARGET_sh + bool + default n + +config KEMBTK_UCLIBC_TARGET_sh64 + bool + default n + +config KEMBTK_UCLIBC_TARGET_sparc + bool + default n + +config KEMBTK_UCLIBC_TARGET_v850 + bool + default n + +config KEMBTK_UCLIBC_TARGET_vax + bool + default n + +config KEMBTK_UCLIBC_TARGET_x86_64 + bool + default n + +config KEMBTK_UCLIBC_TARGET_xtensa + bool + default n + +comment "----------------" +comment "Target Architecture Features and Options" +comment "----------------" +config EMBTK_UCLIBC_VERSION_STRING + string + default "0.9.30.1" if EMBTK_UCLIBC_VERSION_0_9_30_1 + default "0.9.30" if EMBTK_UCLIBC_VERSION_0_9_30 + +if KEMBTK_UCLIBC_TARGET_arm +source kconfig/uclibc-kconfigs/uclibc-arm.kconfig +endif + +config KEMBTK_UCLIBC_TARGET_SUBARCH + string + default "" + +####################### Similar to Configs/Config.arch.in ###################### + +# +# Binary format +# +if !KEMBTK_UCLIBC_ARCH_USE_MMU +choice + prompt "Target File Format" +config KEMBTK_UCLIBC_UCLIBC_FORMAT_ELF + bool "ELF" + depends on KEMBTK_UCLIBC_ARCH_USE_MMU +config KEMBTK_UCLIBC_UCLIBC_FORMAT_FDPIC_ELF + bool "FDPIC ELF" + depends on !KEMBTK_UCLIBC_ARCH_USE_MMU +config KEMBTK_UCLIBC_UCLIBC_FORMAT_FLAT + bool "STATIC FLAT" + depends on !KEMBTK_UCLIBC_ARCH_USE_MMU + select KEMBTK_UCLIBC_ARCH_HAS_NO_LDSO +config KEMBTK_UCLIBC_UCLIBC_FORMAT_FLAT_SEP_DATA + bool "STATIC FLAT (sep-data)" + depends on !KEMBTK_UCLIBC_ARCH_USE_MMU + select KEMBTK_UCLIBC_ARCH_HAS_NO_LDSO +config KEMBTK_UCLIBC_UCLIBC_FORMAT_SHARED_FLAT + bool "SHARED FLAT" + depends on !KEMBTK_UCLIBC_ARCH_USE_MMU + select KEMBTK_UCLIBC_ARCH_HAS_NO_LDSO + help + Pick this one if you are using uClinux and wish to build + uClibc as a flat-format shared library. +endchoice +endif + +if KEMBTK_UCLIBC_ARCH_USE_MMU +comment "Using ELF file format" +endif + +config KEMBTK_UCLIBC_UCLIBC_SHARED_FLAT_ID + int "Shared library ID" + default 1 + depends on KEMBTK_UCLIBC_UCLIBC_FORMAT_SHARED_FLAT + help + When using flat shared libraries, every library has a unique + system-wide identifier. Identifier 0 is reserved for + executables and true shared libraries have identifiers + starting at 1. The maximum shared library identifier is + determined by the kernel and is usually 3. Shared library + N must be available on the target system as "/lib/libN.so". + + When a shared C library is used, it usually has identifier 1, + but you can use this option to select a different identifier + if you need to. + + + +# +# Endian Format +# +config KEMBTK_UCLIBC_ARCH_ANY_ENDIAN + bool + default n +config KEMBTK_UCLIBC_ARCH_BIG_ENDIAN + bool + default n +config KEMBTK_UCLIBC_ARCH_LITTLE_ENDIAN + bool + default n + +if KEMBTK_UCLIBC_ARCH_ANY_ENDIAN +config KEMBTK_UCLIBC_ARCH_WANTS_BIG_ENDIAN + bool + default y if EMBTK_ARCH_ARM_BIG_ENDIAN || EMBTK_ARCH_MIPS_BIG_ENDIAN + select KEMBTK_UCLIBC_ARCH_BIG_ENDIAN + default n + +config KEMBTK_UCLIBC_ARCH_WANTS_LITTLE_ENDIAN + bool + default y if EMBTK_ARCH_ARM_LITTLE_ENDIAN \ + || EMBTK_ARCH_MIPS_LITTLE_ENDIAN + select KEMBTK_UCLIBC_ARCH_LITTLE_ENDIAN + default n +endif + +# if the arch only supports one endian, just display the setting +if !KEMBTK_UCLIBC_ARCH_ANY_ENDIAN && KEMBTK_UCLIBC_ARCH_LITTLE_ENDIAN +comment "Using Little Endian" +endif +if !KEMBTK_UCLIBC_ARCH_ANY_ENDIAN && KEMBTK_UCLIBC_ARCH_BIG_ENDIAN +comment "Using Big Endian" +endif + +config KEMBTK_UCLIBC_ARCH_HAS_NO_MMU + bool + +if KEMBTK_UCLIBC_ARCH_HAS_NO_MMU +comment "Target CPU lacks a memory management unit (MMU)" +endif + +config KEMBTK_UCLIBC_ARCH_HAS_MMU + bool "Target CPU has a memory management unit (MMU)" + depends on !KEMBTK_UCLIBC_ARCH_HAS_NO_MMU + default y + help + If your target CPU does not have a memory management unit (MMU), + then answer N here. Normally, Linux runs on systems with an MMU. + If you are building a uClinux system, answer N. + + Most people will answer Y. + +config KEMBTK_UCLIBC_ARCH_USE_MMU + bool "Do you want to utilize the MMU?" + depends on KEMBTK_UCLIBC_ARCH_HAS_MMU + default y + help + If your target CPU has a MMU, and you wish to actually utilize it, + then answer Y here. Normal Linux requires an MMU. + + If you're unsure, answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FLOATS + bool "Enable floating point number support" + default y + help + This option allows you to entirely omit all floating point number + support from uClibc. This will cause floating point functions like + strtod() to be omitted from uClibc. Other floating point functions, + such as printf() and scanf() will still be included in the library, + but will not contain support for floating point numbers. + + Answering N to this option can reduce the size of uClibc. + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FPU + bool "Target CPU has a floating point unit (FPU)" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FLOATS + default y + help + If your target CPU does not have a Floating Point Unit (FPU) or a + kernel FPU emulator, but you still wish to support floating point + functions, then uClibc will need to be compiled with soft floating + point support (-msoft-float). If your target CPU does not have an + FPU or an FPU emulator within the Linux kernel, then you should + answer N. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_SOFT_FLOAT + bool + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FLOATS && \ + !KEMBTK_UCLIBC_UCLIBC_HAS_FPU + default y + +config KEMBTK_UCLIBC_DO_C99_MATH + bool "Enable full C99 math library support" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FLOATS + default n + help + If you want the uClibc math library to contain the full set C99 + math library features, then answer Y. If you leave this set to + N the math library will contain only the math functions that were + listed as part of the traditional POSIX/IEEE 1003.1b-1993 standard. + Leaving this option set to N will save around 35k on an x86 system. + + If your applications require the newer C99 math library functions, + then answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FENV + bool "Enable C99 Floating-point environment" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FLOATS + default n + help + If you want the uClibc math library to contain the C99 floating + point environment, rounding and exception handling functions then + say Y here. + + NOTE: Supported architectures currently include: + i386 + +config KEMBTK_UCLIBC_UCLIBC_HAS_LONG_DOUBLE_MATH + bool "Enable long double support" + depends on KEMBTK_UCLIBC_DO_C99_MATH + depends on KEMBTK_UCLIBC_TARGET_i386 || KEMBTK_UCLIBC_TARGET_m68k \ + || KEMBTK_UCLIBC_TARGET_sparc || KEMBTK_UCLIBC_TARGET_x86_64 \ + || KEMBTK_UCLIBC_TARGET_powerpc + default y + help + If you want the uClibc math library to contain the full set of C99 + long double math library features, then answer Y. Don't enable it + for sparc w/ 32bit ABI. + +config KEMBTK_UCLIBC_KERNEL_HEADERS + string + default "/usr/include" + help + The kernel source you use to compile with should be the same + as the Linux kernel you run your apps on. uClibc doesn't even + try to achieve binary compatibility across kernel versions. + So don't expect, for example, uClibc compiled with Linux kernel + 2.0.x to implement lchown properly, since 2.0.x can't do that. + Similarly, if you compile uClibc vs Linux 2.4.x kernel headers, + but then run on Linux 2.0.x, lchown will be compiled into uClibc, + but won't work at all. You have been warned. + +config KEMBTK_UCLIBC_UCLIBC_UCLINUX_BROKEN_MUNMAP + bool + depends on !KEMBTK_UCLIBC_ARCH_USE_MMU + default y + +config KEMBTK_UCLIBC_EXCLUDE_BRK + bool + depends on !KEMBTK_UCLIBC_ARCH_USE_MMU + default y + +config KEMBTK_UCLIBC_HAVE_DOT_CONFIG + bool + default y + +##################### End similar to Configs/Config.arch.in #################### +comment "----------------" +comment "General Library Settings" +comment "----------------" + +config KEMBTK_UCLIBC_HAVE_NO_PIC + bool + default n + +config KEMBTK_UCLIBC_DOPIC + bool "Generate only Position Independent Code (PIC)" + default y + depends on !KEMBTK_UCLIBC_HAVE_NO_PIC + help + If you wish to build all of uClibc as PIC objects, then answer Y here. + If you are unsure, then you should answer N. + +config KEMBTK_UCLIBC_ARCH_HAS_NO_SHARED + bool + default n + +config KEMBTK_UCLIBC_ARCH_HAS_NO_LDSO + bool + select KEMBTK_UCLIBC_ARCH_HAS_NO_SHARED + default n + +config KEMBTK_UCLIBC_HAVE_SHARED + bool "Enable support for shared libraries" + depends on !KEMBTK_UCLIBC_ARCH_HAS_NO_SHARED + default y + help + If you wish to build uClibc with support for shared libraries then + answer Y here. If you only want to build uClibc as a static library, + then answer N. + +config KEMBTK_UCLIBC_FORCE_SHAREABLE_TEXT_SEGMENTS + bool "Only load shared libraries which can share their text segment" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default n + help + If you answer Y here, the uClibc native shared library loader will + only load shared libraries, which do not need to modify any + non-writable segments. These libraries haven't set the DT_TEXTREL + tag in the dynamic section (==> objdump). + All your libraries must be compiled with -fPIC or -fpic, and all + assembler function must be written as position independent code (PIC). + Enabling this option will make uClibc's shared library loader a + little bit smaller and guarantee that no memory will be wasted by + badly coded shared libraries. + +config KEMBTK_UCLIBC_LDSO_LDD_SUPPORT + bool "Native 'ldd' support" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default y + help + Enable this to enable all the code needed to support traditional ldd, + which executes the shared library loader to resolve all dependencies + and then provide a list of shared libraries that are required for an + application to function. Disabling this option will makes uClibc's + shared library loader a little bit smaller. + Most people will answer Y. + +config KEMBTK_UCLIBC_LDSO_CACHE_SUPPORT + bool "Enable library loader cache (ld.so.conf)" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default y + help + Enable this to make use of /etc/ld.so.conf, the shared library loader + cache configuration file to support for non-standard library paths. + After updating this file, it is necessary to run 'ldconfig' to update + the /etc/ld.so.cache shared library loader cache file. + +config KEMBTK_UCLIBC_LDSO_PRELOAD_FILE_SUPPORT + bool "Enable library loader preload file (ld.so.preload)" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default n + help + Enable this to make use of /etc/ld.so.preload. This file contains a + whitespace separated list of shared libraries to be loaded before + the program. + +config KEMBTK_UCLIBC_LDSO_BASE_FILENAME + string + depends on KEMBTK_UCLIBC_HAVE_SHARED \ + && (KEMBTK_UCLIBC_LDSO_CACHE_SUPPORT \ + || KEMBTK_UCLIBC_LDSO_PRELOAD_FILE_SUPPORT) + default "ld.so" + help + If you wish to support both uClibc and glibc on the same system, it + is necessary to set this to something other than "ld.so" to avoid + conflicts with glibc, which also uses "ld.so". This prevents both + libraries from using the same /etc/ld.so.* files. If you wish to + support both uClibc and glibc on the same system then you should set + this to "ld-uClibc.so". + + Most people will leave this set to the default of "ld.so". + + WARNING: Changing the default prefix could cause problems with + binutils' ld ! + +config KEMBTK_UCLIBC_LDSO_BASE_FILENAME + string + depends on KEMBTK_UCLIBC_HAVE_SHARED && (KEMBTK_UCLIBC_LDSO_CACHE_SUPPORT \ + || KEMBTK_UCLIBC_LDSO_PRELOAD_FILE_SUPPORT) + default "ld.so" + help + If you wish to support both uClibc and glibc on the same system, it + is necessary to set this to something other than "ld.so" to avoid + conflicts with glibc, which also uses "ld.so". This prevents both + libraries from using the same /etc/ld.so.* files. If you wish to + support both uClibc and glibc on the same system then you should set + this to "ld-uClibc.so". + + Most people will leave this set to the default of "ld.so". + + WARNING: Changing the default prefix could cause problems with + binutils' ld ! + +config KEMBTK_UCLIBC_UCLIBC_STATIC_LDCONFIG + bool "Link ldconfig statically" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default y + help + Enable this option to statically link the ldconfig binary. + + Making ldconfig static can be beneficial if you have a library + problem and need to use ldconfig to recover. Sometimes, it is + preferable to instead keep the size of the system down, in which + case you should disable this option. + +config KEMBTK_UCLIBC_LDSO_RUNPATH + bool "Enable ELF RUNPATH tag support" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default y + help + ELF's may have dynamic RPATH/RUNPATH tags. These tags list paths + which extend the library search paths. They are really only useful + if a package installs libraries in non standard locations and + ld.so.conf support is disabled. + + Usage of RUNPATH tags is not too common, so disabling this feature + should be safe for most people. + +config KEMBTK_UCLIBC_UCLIBC_CTOR_DTOR + bool "Support global constructors and destructors" + default y + help + If you wish to build uClibc with support for global constructor + (ctor) and global destructor (dtor) support, then answer Y here. + When ctor/dtor support is enabled, binaries linked with uClibc must + also be linked with crtbegin.o and crtend.o which are provided by gcc + (the "*startfile:" and "*endfile:" settings in your gcc specs file + may need to be adjusted to include these files). This support will + also add a small amount of additional size to each binary compiled vs + uClibc. If you will be using uClibc with C++, or if you need the gcc + __attribute__((constructor)) and __attribute__((destructor)) to work, + then you definitely want to answer Y here. If you don't need ctors + or dtors and want your binaries to be as small as possible, then + answer N. + +config KEMBTK_UCLIBC_LDSO_GNU_HASH_SUPPORT + bool "Enable GNU hash style support" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default n + help + Newest binutils support a new hash style named GNU-hash. The dynamic + linker will use the new GNU-hash section (.gnu.hash) for symbol lookup + if present into the ELF binaries, otherwise it will use the old SysV + hash style (.hash). This ensures that it is completely backward + compatible. + Further, being the hash table implementation self-contained into each + executable and shared libraries, objects with mixed hash style can + peacefully coexist in the same process. + + If you want to use this new feature, answer Y + +config KEMBTK_UCLIBC_HAS_NO_THREADS + bool + default n + +config KEMBTK_UCLIBC_UCLIBC_HAS_THREADS + bool "POSIX Threading support" + depends on !KEMBTK_UCLIBC_HAS_NO_THREADS + default y + # linuxthreads and linuxthreads.old need nanosleep() + select KEMBTK_UCLIBC_UCLIBC_HAS_REALTIME + help + If you want to compile uClibc with pthread support, then answer Y. + This will increase the size of uClibc by adding a bunch of locking + to critical data structures, and adding extra code to ensure that + functions are properly reentrant. + + If your applications require pthreads, answer Y. + +config KEMBTK_UCLIBC_PTHREADS_DEBUG_SUPPORT + bool "Build pthreads debugging support" + default n + depends on KEMBTK_UCLIBC_UCLIBC_HAS_THREADS + help + Say Y here if you wish to be able to debug applications that use + uClibc's pthreads library. By enabling this option, a library + named libthread_db will be built. This library will be dlopen()'d + by gdb and will allow gdb to debug the threads in your application. + + IMPORTANT NOTE! Because gdb must dlopen() the libthread_db library, + you must compile gdb with uClibc in order for pthread debugging to + work properly. + + If you are doing development and want to debug applications using + uClibc's pthread library, answer Y. Otherwise, answer N. + +config KEMBTK_UCLIBC_LINUXTHREADS_OLD + bool "Use the older (stable) version of linuxthreads" + default y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_THREADS + help + There are two versions of linuxthreads. The older (stable) version + has been in uClibc for quite a long time but hasn't seen too many + updates other than bugfixes. + + The new version has not been tested much, and lacks ports for arches + which glibc does not support (like bfin/frv/etc...), but is based on + the latest code from glibc, so it may be the only choice for the + newer ports (like alpha/amd64/64bit arches and hppa). + +config KEMBTK_UCLIBC_LINUXTHREADS_NEW + def_bool y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_THREADS \ + && !KEMBTK_UCLIBC_LINUXTHREADS_OLD + +config KEMBTK_UCLIBC_UCLIBC_HAS_SYSLOG + bool "Syslog support" + default y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_NETWORK_SUPPORT + select KEMBTK_UCLIBC_UCLIBC_HAS_SOCKET + help + Support sending messages to the system logger. + This requires socket-support. + +config KEMBTK_UCLIBC_UCLIBC_HAS_LFS + bool "Large File Support" + default y + help + If you wish to build uClibc with support for accessing large files + (i.e. files greater then 2 GiB) then answer Y. Do not enable this + if you are using an older Linux kernel (2.0.x) that lacks large file + support. Enabling this option will increase the size of uClibc. + +choice + prompt "Malloc Implementation" + default KEMBTK_UCLIBC_MALLOC if !KEMBTK_UCLIBC_ARCH_USE_MMU + default KEMBTK_UCLIBC_MALLOC_STANDARD if KEMBTK_UCLIBC_ARCH_USE_MMU + +config KEMBTK_UCLIBC_MALLOC + bool "malloc" + help + "malloc" use mmap for all allocations and so works very well on + MMU-less systems that do not support the brk() system call. It is + pretty smart about reusing already allocated memory, and minimizing + memory wastage. + This is the default for uClinux MMU-less systems. + +config KEMBTK_UCLIBC_MALLOC_SIMPLE + bool "malloc-simple" + help + "malloc-simple" is trivially simple and slow as molasses. It + was written from scratch for uClibc, and is the simplest possible + (and therefore smallest) malloc implementation. + + This uses only the mmap() system call to allocate and free memory, + and does not use the brk() system call at all, making it a fine + choice for MMU-less systems with very limited memory. It's 100% + standards compliant, thread safe, very small, and releases freed + memory back to the OS immediately rather than keeping it in the + process's heap for reallocation. It is also VERY SLOW. + +config KEMBTK_UCLIBC_MALLOC_STANDARD + bool "malloc-standard" + depends on KEMBTK_UCLIBC_ARCH_USE_MMU + help + "malloc-standard" is derived from the public domain dlmalloc + implementation by Doug Lea. It is quite fast, and is pretty smart + about reusing already allocated memory, and minimizing memory + wastage. This uses brk() for small allocations, while using mmap() + for larger allocations. This is the default malloc implementation + for uClibc. + + If unsure, answer "malloc-standard". + +endchoice + +config KEMBTK_UCLIBC_MALLOC_GLIBC_COMPAT + bool "Malloc returns live pointer for malloc(0)" + default n + help + The behavior of malloc(0) is listed as implementation-defined by + SuSv3. Glibc returns a valid pointer to something, while uClibc + normally returns NULL. I personally feel glibc's behavior is + not particularly safe, and allows buggy applications to hide very + serious problems. + + When this option is enabled, uClibc will act just like glibc, and + return a live pointer when someone calls malloc(0). This pointer + provides a malloc'ed area with a size of 1 byte. This feature is + mostly useful when dealing with applications using autoconf's broken + AC_FUNC_MALLOC macro (which redefines malloc as rpl_malloc if it + does not detect glibc style returning-a-valid-pointer-for-malloc(0) + behavior). Most people can safely answer N. + +config KEMBTK_UCLIBC_UCLIBC_DYNAMIC_ATEXIT + bool "Dynamic atexit() Support" + default y + help + When this option is enabled, uClibc will support an infinite number, + of atexit() and on_exit() functions, limited only by your available + memory. This can be important when uClibc is used with C++, since + global destructors are implemented via atexit(), and it is quite + possible to exceed the default number when this option is disabled. + Enabling this option adds a few bytes, and more significantly makes + atexit and on_exit depend on malloc, which can be bad when compiling + static executables. + + Unless you use uClibc with C++, you should probably answer N. + +config KEMBTK_UCLIBC_COMPAT_ATEXIT + bool "Old (visible) atexit Support" + default n + help + Enable this option if you want to update from 0.9.28 to svn/0.9.29, + else you will be missing atexit() until you rebuild all apps. + +config KEMBTK_UCLIBC_UCLIBC_SUSV3_LEGACY + bool "Enable SuSv3 LEGACY functions" + default n + help + Enable this option if you want to have SuSv3 LEGACY functions + in the library, else they are replaced by SuSv3 proposed macros. + Currently applies to bcopy/bzero/bcmp/index/rindex/ftime. + WARNING! ABI incompatibility. + +config KEMBTK_UCLIBC_UCLIBC_SUSV3_LEGACY_MACROS + bool "Enable SuSv3 LEGACY macros" + default n + help + Enable this option if you want to have SuSv3 LEGACY macros. + Currently applies to bcopy/bzero/bcmp/index/rindex et al. + WARNING! ABI incompatibility. + +config KEMBTK_UCLIBC_UCLIBC_HAS_STUBS + bool "Provide stubs for unavailable functionality" + default n + help + With this option uClibc provides non-functional stubs for + functions which are impossible to implement on the target + architecture. Otherwise, such functions are simply omitted. + + As of 2008-07, this option makes uClibc provide fork() stub + on NOMMU targets. It always sets errno to ENOSYS and returns -1. + + This may be useful if you port a lot of software and cannot + audit all of it and replace or disable fork() usage. + With this option, a program which uses fork() will build + successfully. Of course, it may be useless if fork() + is essential for its operation. + +config KEMBTK_UCLIBC_UCLIBC_HAS_SHADOW + bool "Shadow Password Support" + default y + help + Answer N if you do not need shadow password support. + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_PROGRAM_INVOCATION_NAME + bool "Support for program_invocation_name" + default n + help + Support for the GNU-specific program_invocation_name and + program_invocation_short_name strings. Some GNU packages + (like tar and coreutils) utilize these for extra useful + output, but in general are not required. + + At startup, these external strings are automatically set + up based on the value of ARGV[0]. + + If unsure, just answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS___PROGNAME + bool "Support for __progname" + default y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_PROGRAM_INVOCATION_NAME + help + Some packages (like openssh) like to peek into internal libc + symbols to make their output a bit more user friendly. + + At startup, __progname is automatically set up based on the + value of ARGV[0]. + + If unsure, just answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_PTY + bool "Support for pseudo-terminals" + default y + help + This enables support for pseudo-terminals (see man 4 pts + and man 7 pty). + + If unsure, just answer Y. + +config KEMBTK_UCLIBC_ASSUME_DEVPTS + bool "Assume that /dev/pts is a devpts or devfs file system" + default y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_PTY + help + Enable this if /dev/pts is on a devpts or devfs filesystem. Both + these filesystems automatically manage permissions on the /dev/pts + devices. You may need to mount your devpts or devfs filesystem on + /dev/pts for this to work. + + Most people should answer Y. + +config KEMBTK_UCLIBC_UNIX98PTY_ONLY + bool "Support only Unix 98 PTYs" + default y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_PTY + help + If you want to support only Unix 98 PTYs enable this. Some older + applications may need this disabled and will thus use legacy BSD + style PTY handling which is more complex and also bigger than + Unix 98 PTY handling. + + For most current programs, you can generally answer Y. + +if KEMBTK_UCLIBC_UNIX98PTY_ONLY +config KEMBTK_UCLIBC_UCLIBC_HAS_GETPT + bool "Support getpt() (glibc-compat)" + default n + depends on KEMBTK_UCLIBC_UCLIBC_HAS_PTY + help + Some packages may need getpt(). + All of those are non-standard and can be considered + GNU/libc compatibility. + Either use posix_openpt() or just open /dev/ptmx yourself. + + If unsure, just say N. +endif + +if !KEMBTK_UCLIBC_UNIX98PTY_ONLY +# Have to use __libc_ptyname{1,2}[] and related bloat +config KEMBTK_UCLIBC_UCLIBC_HAS_GETPT + def_bool y +endif + +config KEMBTK_UCLIBC_UCLIBC_HAS_TM_EXTENSIONS + bool "Support 'struct tm' timezone extension fields" + default y + help + Enabling this option adds fields to 'struct tm' in time.h for + tracking the number of seconds east of UTC, and an abbreviation for + the current timezone. These fields are not specified by the SuSv3 + standard, but they are commonly used in both GNU and BSD application + code. + + To strictly follow the SuSv3 standard, leave this disabled. + Most people will probably want to answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_TZ_CACHING + bool "Enable caching of the last valid timezone 'TZ' string" + default y + help + Answer Y to enable caching of the last valid 'TZ' string describing + the timezone setting. This allows a quick string compare to avoid + repeated parsing of unchanged 'TZ' strings when tzset() is called. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_TZ_FILE + bool "Enable '/etc/TZ' file support to set a default timezone (uClibc-specific)" + default y + help + Answer Y to enable the setting of a default timezone for uClibc. + + Ordinarily, uClibc gets the timezone information exclusively from the + 'TZ' environment variable. In particular, there is no support for + the zoneinfo directory tree or the /etc/timezone file used by glibc. + + With this option enabled, uClibc will use the value stored in the + file '/etc/TZ' (default path) to obtain timezone information if the + 'TZ' environment variable is missing or has an invalid value. The + file consists of a single line (newline required) of text describing + the timezone in the format specified for the TZ environment variable. + + Doing 'echo CST6CDT > /etc/TZ' is enough to create a valid file. + See + http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html + for details on valid settings of 'TZ'. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_TZ_FILE_READ_MANY + bool "Repeatedly read the '/etc/TZ' file" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_TZ_FILE + default y + help + Answer Y to enable repeated reading of the '/etc/TZ' file even after + a valid value has been read. This incurs the overhead of an + open/read/close for each tzset() call (explicit or implied). However, + setting this will allow applications to update their timezone + information if the contents of the file change. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_TZ_FILE_PATH + string "Path to the 'TZ' file for setting the global timezone" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_TZ_FILE + default "/etc/TZ" + help + This is the path to the 'TZ' file. + + Most people will use the default of '/etc/TZ'. +comment "----------------" +comment "Advanced Library Settings" +comment "----------------" + +config KEMBTK_UCLIBC_UCLIBC_PWD_BUFFER_SIZE + int "Buffer size for getpwnam() and friends" + default 256 + range 12 1024 + help + This sets the value of the buffer size for getpwnam() and friends. + By default, this is 256. (For reference, glibc uses 1024). + The value can be found using sysconf() with the _SC_GETPW_R_SIZE_MAX + parameter. + +config KEMBTK_UCLIBC_UCLIBC_GRP_BUFFER_SIZE + int "Buffer size for getgrnam() and friends" + default 256 + range 12 1024 + help + This sets the value of the buffer size for getgrnam() and friends. + By default, this is 256. (For reference, glibc uses 1024). + The value can be found using sysconf() with the _SC_GETGR_R_SIZE_MAX + parameter. + +comment "Support various families of functions" + +config KEMBTK_UCLIBC_UCLIBC_LINUX_MODULE_24 + bool "Linux kernel module functions" + default y + help + create_module, query_module + are used in linux (prior to 2.6) for loadable kernel modules. + + Say N if you do not use kernel modules. + +config KEMBTK_UCLIBC_UCLIBC_LINUX_SPECIFIC + bool "Linux specific functions" + default y + help + fstatfs(), inotify_*(), ioperm(), iopl(), madvise(), modify_ldt(), + personality(), ppoll(), setresuid(), signalfd() + +config KEMBTK_UCLIBC_UCLIBC_HAS_GNU_ERROR + bool "Support GNU extensions for error-reporting" + default y + help + Support for the GNU-specific error(), error_at_line(), + void (* error_print_progname)(), error_message_count + functions and variables. Some GNU packages + utilize these for extra useful output, but in general + are not required. + + If unsure, just answer N. + +config KEMBTK_UCLIBC_UCLIBC_BSD_SPECIFIC + bool "BSD specific functions" + default y + help + mincore(), getdomainname(), setdomainname() + + If unsure, say N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_BSD_ERR + bool "BSD err functions" + default y + help + These functions are non-standard BSD extensions. + err(), errx(), warn(), warnx(), verr(), verrx(), vwarn(), vwarnx() + + If unsure, say N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_OBSOLETE_BSD_SIGNAL + bool "BSD obsolete signal functions" + default n + help + These functions are provided as a compatibility interface for + programs that make use of the historical System V signal API. + This API is obsolete: + new applications should use the POSIX signal API (sigaction(2), + sigprocmask(2), etc.). + Affected functions: + + sigset(), sighold(), sigrelse(), sigignore() + + If unsure, say N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL + bool "SYSV obsolete signal functions" + default n + help + Use of sysv_signal() should be avoided; use sigaction(2) instead. + + If unsure, say N. + +config KEMBTK_UCLIBC_UCLIBC_NTP_LEGACY + bool "ntp_*() aliases" + default n + help + Provide legacy aliases for ntp functions: + ntp_adjtime(), ntp_gettime() + + It is safe to say N here. + +config KEMBTK_UCLIBC_UCLIBC_SV4_DEPRECATED + bool "Enable SVr4 deprecated functions" + default n + help + These functions are DEPRECATED in System V release 4. + Say N unless you desparately need one of the functions below: + + ustat() [use statfs(2) in your code instead] + +config KEMBTK_UCLIBC_UCLIBC_HAS_REALTIME + bool "Realtime-related family of SUSv functions" + default y + help + These functions are part of the Timers option and need not + be available on all implementations. + Includes AIO, message-queue, scheduler, semaphore functions: + + aio.h + mqueue.h + sched.h + semaphore.h + + aio_cancel() + aio_error() + aio_fsync() + aio_read() + lio_listio() + aio_return() + aio_suspend() + aio_write() + clock_getres(), clock_gettime(), clock_settime() + fdatasync() + mlockall(), munlockall() + mlock(), munlock() + mq_close() + mq_getattr() + mq_notify() + mq_open() + mq_receive() + mq_send() + mq_setattr() + mq_unlink() + nanosleep() + sched_getparam() + sched_get_priority_max(), sched_get_priority_min() + sched_getscheduler() + sched_rr_get_interval() + sched_setparam() + sched_setscheduler() + sem_close() + sem_destroy() + sem_getvalue() + sem_init() + sem_open() + sem_post() + sem_trywait(), sem_wait() + sem_unlink() + sigqueue() + sigtimedwait(), sigwaitinfo() + timer_create() + timer_delete() + timer_getoverrun(), timer_gettime(), timer_settime() + +config KEMBTK_UCLIBC_UCLIBC_HAS_ADVANCED_REALTIME + bool "Advanced realtime-related family of SUSv functions" + default y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_REALTIME + help + These functions are part of the Timers option and need not + be available on all implementations. + + clock_getcpuclockid() + clock_nanosleep() + mq_timedreceive() + mq_timedsend() + posix_fadvise() + posix_fallocate() + posix_madvise() + posix_memalign() + posix_mem_offset() + posix_spawnattr_destroy(), posix_spawnattr_init() + posix_spawnattr_getflags(), posix_spawnattr_setflags() + posix_spawnattr_getpgroup(), posix_spawnattr_setpgroup() + posix_spawnattr_getschedparam(), posix_spawnattr_setschedparam() + posix_spawnattr_getschedpolicy(), posix_spawnattr_setschedpolicy() + posix_spawnattr_getsigdefault(), posix_spawnattr_setsigdefault() + posix_spawnattr_getsigmask(), posix_spawnattr_setsigmask() + posix_spawn_file_actions_addclose() + posix_spawn_file_actions_adddup2() + posix_spawn_file_actions_addopen() + posix_spawn_file_actions_destroy() + posix_spawn_file_actions_init() + posix_spawn() + posix_spawnp() + posix_typed_mem_get_info() + pthread_mutex_timedlock() + sem_timedwait() + +config KEMBTK_UCLIBC_UCLIBC_HAS_EPOLL + bool "epoll" + default y + help + epoll_create(), epoll_ctl(), epoll_wait() functions. + +config KEMBTK_UCLIBC_UCLIBC_HAS_XATTR + bool "Extended Attributes" + default y + help + Extended Attributes support. + + setxattr() + lsetxattr() + fsetxattr() + getxattr() + lgetxattr() + fgetxattr() + listxattr() + llistxattr() + flistxattr() + removexattr() + lremovexattr() + fremovexattr() + + Say N unless you need support for extended attributes and the + filesystems do actually support them. + +config KEMBTK_UCLIBC_UCLIBC_HAS_PROFILING + bool "Profiling support" + default y + help + gcc's -finstrument-functions needs these. + + Most people can safely answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_CRYPT_IMPL + bool "libcrypt support" + default y + help + libcrypt contains crypt(), setkey() and encrypt() + +config KEMBTK_UCLIBC_UCLIBC_HAS_CRYPT_STUB + bool "libcrypt stubs" + default y + depends on !KEMBTK_UCLIBC_UCLIBC_HAS_CRYPT_IMPL + help + Standards mandate that crypt(3) provides a stub if it is unavailable. + If you enable this option then stubs for + crypt(), setkey() and encrypt() + will be provided in a small libcrypt. + +config KEMBTK_UCLIBC_UCLIBC_HAS_CRYPT + def_bool y + depends on KEMBTK_UCLIBC_UCLIBC_HAS_CRYPT_IMPL \ + || KEMBTK_UCLIBC_UCLIBC_HAS_CRYPT_STUB + +comment "----------------" +comment "Netwoking options" +comment "----------------" +config KEMBTK_UCLIBC_UCLIBC_HAS_NETWORK_SUPPORT + bool "Networking Support" + default y + help + Say N here if you do not need network support. + +if KEMBTK_UCLIBC_UCLIBC_HAS_NETWORK_SUPPORT +config KEMBTK_UCLIBC_UCLIBC_HAS_SOCKET + bool "Socket support" + default y + help + If you want to include support for sockets then answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_IPV4 + bool "IP version 4 support" + default y + select KEMBTK_UCLIBC_UCLIBC_HAS_SOCKET + help + If you want to include support for the Internet Protocol + (IP version 4) then answer Y. + + Most people will say Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_IPV6 + bool "IP version 6 support" + default n + select KEMBTK_UCLIBC_UCLIBC_HAS_SOCKET + help + If you want to include support for the next version of the Internet + Protocol (IP version 6) then answer Y. + + Most people should answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_RPC + bool "Remote Procedure Call (RPC) support" + default n + # RPC+socket-ipvX doesn't currently work. + depends on KEMBTK_UCLIBC_UCLIBC_HAS_IPV4 \ + || KEMBTK_UCLIBC_UCLIBC_HAS_IPV6 + help + If you want to include RPC support, enable this. RPC is rarely used + for anything except for the NFS filesystem. Unless you plan to use + NFS, you can probably leave this set to N and save some space. + + If you need to use NFS then you should answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FULL_RPC + bool "Full RPC support" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_RPC + default y if !KEMBTK_UCLIBC_HAVE_SHARED + help + Normally we enable just enough RPC support for things like rshd and + nfs mounts to work. If you find you need the rest of the RPC stuff, + then enable this option. Most people can safely answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_REENTRANT_RPC + bool "Reentrant RPC support" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_RPC + default y if !KEMBTK_UCLIBC_HAVE_SHARED + help + Most packages utilize the normal (non-reentrant) RPC functions, but + some (like exportfs from nfs-utils) need these reentrant versions. + + Most people can safely answer N. + +config KEMBTK_UCLIBC_UCLIBC_USE_NETLINK + bool "Use netlink to query interfaces" + default n + depends on KEMBTK_UCLIBC_UCLIBC_HAS_SOCKET + help + In newer versions of Linux (2.4.17+), support was added for querying + network device information via netlink rather than the old style + ioctl's. Most of the time, the older ioctl style is sufficient (and + it is smaller than netlink), but if you find that not all of your + devices are being returned by the if_nameindex() function, you will + have to use the netlink implementation. + + Most people can safely answer N. + +config KEMBTK_UCLIBC_UCLIBC_SUPPORT_AI_ADDRCONFIG + bool "Support the AI_ADDRCONFIG flag" + depends on KEMBTK_UCLIBC_UCLIBC_USE_NETLINK + default n + help + The implementation of AI_ADDRCONFIG is aligned with the glibc + implementation using netlink to query interfaces to find both + ipv4 and ipv6 support. This is only needed if an application uses + the AI_ADDRCONFIG flag. + + Most people can safely answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_BSD_RES_CLOSE + bool "Support res_close() (bsd-compat)" + default n + help + Answer Y if you desperately want to support BSD compatibility in + the network code. + + Most people will say N. +endif + +comment "----------------" +comment "String and Stdio Support" +comment "----------------" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STRING_GENERIC_OPT + bool "Use faster (but larger) generic string functions" + default y + help + Answer Y to use the (tweaked) glibc generic string functions. + + In general, they are faster (but 3-5K larger) than the base + uClibc string functions which are optimized solely for size. + + Many people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_STRING_ARCH_OPT + bool "Use arch-specific assembly string functions (where available)" + default y + help + Answer Y to use any archtecture-specific assembly language string + functions available for this target plaform. + + Note that assembly implementations are not available for all string + functions, so some generic (written in C) string functions may + still be used. + + These are small and fast, the only reason _not_ to say Y here is + for debugging purposes. + +config KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_TABLES + bool "Use Table Versions Of 'ctype.h' Functions." + default y + help + Answer Y to use table versions of the 'ctype.h' functions. + While the non-table versions are often smaller when building + statically linked apps, they work only in stub locale mode. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_SIGNED + bool "Support Signed Characters In 'ctype.h' Functions." + depends on KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_TABLES + default y + help + Answer Y to enable support for passing signed char values to + the 'ctype.h' functions. ANSI/ISO C99 and SUSv3 specify that + these functions are only defined for unsigned char values and + EOF. However, glibc allows negative signed char values as well + in order to support 'broken old programs'. + + Most people will answer Y. + +choice + prompt "ctype argument checking" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_TABLES + default KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_UNSAFE + help + Please select the invalid arg behavior you want for the 'ctype' + functions. + + The 'ctype' functions are now implemented using table lookups, with + the arg being the index. This can result in incorrect memory accesses + or even segfaults for args outside of the allowed range. + + NOTE: This only affects the 'ctype' _functions_. It does not affect + the macro implementations. + +config KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_UNSAFE + bool "Do not check -- unsafe" + +config KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_CHECKED + bool "Detect and handle appropriately" + +config KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_ENFORCED + bool "Issue a diagnostic and abort()" + +endchoice + +config KEMBTK_UCLIBC_UCLIBC_HAS_WCHAR + bool "Wide Character Support" + default n + help + Answer Y to enable wide character support. This will make uClibc + much larger. It is also currently required for locale support. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_LOCALE + bool "Locale Support" + select KEMBTK_UCLIBC_UCLIBC_HAS_WCHAR + select KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_TABLES + default n + help + uClibc now has full ANSI/ISO C99 locale support (except for + wcsftime() and collating items in regex). Be aware that enabling + this option will make uClibc much larger. + + Enabling UCLIBC_HAS_LOCALE with the default set of supported locales + (169 UTF-8 locales, and 144 locales for other codesets) will enlarge + uClibc by around 300k. You can reduce this size by building your own + custom set of locate data (see extra/locale/LOCALES for details). + + uClibc's locale support is still under development. For example, + codesets using shift states are not currently supported. Support is + planned in the next iteration of locale support. + + Answer Y to enable locale support. Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_PREGENERATED_LOCALE_DATA + bool "Use Pre-generated Locale Data" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_LOCALE + default n + help + Use pre-built locale data. + + Note that these pregenerated locales are sensitive to your + target architecture (endianess, bitcount). + + Saying N here is highly recommended unless you have a cached + set of prebuilt data. + +config KEMBTK_UCLIBC_UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA + bool "Automagically Download the Pre-generated Locale Data (if necessary)" + depends on KEMBTK_UCLIBC_UCLIBC_PREGENERATED_LOCALE_DATA + default n + help + If you would like the build process to use 'wget' to automatically + download the pregenerated locale data, enable this option. Otherwise + you will need to obtain the locale data yourself from: + http://www.uclibc.org/downloads/uClibc-locale-*.tgz + and place the uClibc-locale-*.tgz tarball in the extra/locale/ + directory. + + Just say N here. + +config KEMBTK_UCLIBC_UCLIBC_HAS_XLOCALE + bool "Extended Locale Support (experimental/incomplete)" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_LOCALE + default n + help + Answer Y to enable extended locale support similar to that provided + by glibc. This is primarily intended to support libstd++ + functionality. + However, it also allows thread-specific locale selection via + uselocale(). + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_HEXADECIMAL_FLOATS + bool "Support hexadecimal float notation" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_CTYPE_TABLES + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FLOATS + default n + help + Answer Y to enable support for hexadecimal float notation in the + (wchar and) char string to floating point conversion functions, as + well as support for the %a and %A conversion specifiers in the + *printf() and *scanf() functions. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GLIBC_DIGIT_GROUPING + bool "Support glibc's \"'\" flag for allowing locale-specific digit grouping" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_LOCALE + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FLOATS + default n + help + Answer Y to enable support for glibc's \"'\" flag for allowing + locale-specific digit grouping in base 10 integer conversions and + appropriate floating point conversions in the *printf() and *scanf() + functions. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_SCANF_LENIENT_DIGIT_GROUPING + bool "Do not require digit grouping when the \"'\" flag is specified" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_GLIBC_DIGIT_GROUPING + default y + help + Answer Y to make digit grouping optional when the \"'\" flag is + specified. + This is the standard glibc behavior. If the initial string of digits + exceeds the maximum group number, the input will be treated as a + normal non-grouped number. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GLIBC_CUSTOM_PRINTF + bool "Support glibc's register_printf_function() (glibc-compat)" + depends on !KEMBTK_UCLIBC_USE_OLD_VFPRINTF + default n + help + Answer Y to support glibc's register_printf_function() to allow an + application to add its own printf conversion specifiers. + + NOTE: Limits the number or registered specifiers to 10. + NOTE: Requires new conversion specifiers to be ASCII + characters (0-0x7f). This is to avoid problems with processing + format strings in locales with different multibyte conversions. + + Most people will answer N. + +config KEMBTK_UCLIBC_USE_OLD_VFPRINTF + bool "Use the old vfprintf implementation" + depends on !KEMBTK_UCLIBC_UCLIBC_HAS_WCHAR + default n + help + Set to true to use the old vfprintf instead of the new. This is + roughly C89 compliant with some extensions, and is much smaller. + However, it does not support wide chars, positional args, or glibc + custom printf specifiers. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS + int "Maximum number of positional args. Either 0 or >= 9." + depends on !KEMBTK_UCLIBC_USE_OLD_VFPRINTF + default 9 + help + Set the maximum number of positional args supported by the + printf/scanf functions. The Single Unix Specification Version 3 + requires a minimum value of 9. Setting this to a value lower than + 9 will disable positional arg support and cause the NL_ARGMAX macro + in limits.h to be #undef'd. + + WARNING! The workspace to support positional args is currently + allocated on the stack. You probably don't want to set + this to too high a value. + + Most people will answer 9. + + +config KEMBTK_UCLIBC_UCLIBC_HAS_SCANF_GLIBC_A_FLAG + bool "Support glibc's 'a' flag for scanf string conversions (not implemented)" + default n + help + NOTE!!! Currently Not Implemented!!! Just A Place Holder!! NOTE!!! + NOTE!!! Conflicts with an ANSI/ISO C99 scanf flag!! NOTE!!! + + Answer Y to enable support for glibc's 'a' flag for the scanf string + conversions '%s', '%[', '%ls', '%l[', and '%S'. This is used to + auto-allocate sufficient memory to hold the data retrieved. + + Most people will answer N. + +choice + prompt "Stdio buffer size" + default KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_4096 + help + Please select a value for BUFSIZ. This will be used by the + stdio subsystem as the default buffer size for a file, and + affects fopen(), setvbuf(), etc. + + NOTE: Setting this to 'none' will disable buffering completely. + However, BUFSIZ will still be defined in stdio.h as 256 because + many applications use this value. + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_NONE + bool "none (WARNING - BUFSIZ will be 256 in stdio.h)" + depends on !KEMBTK_UCLIBC_UCLIBC_HAS_WCHAR + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_256 + bool "256 (minimum ANSI/ISO C99 value)" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_512 + bool "512" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_1024 + bool "1024" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_2048 + bool "2048" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_4096 + bool "4096" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_8192 + bool "8192" + +# If you add more choices, you will need to update uClibc_stdio.h. + +endchoice + +choice + prompt "Stdio builtin buffer size (uClibc-specific)" + depends on !KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_NONE + default KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE + help + When a FILE is created with fopen(), an attempt is made to allocate + a BUFSIZ buffer for it. If the allocation fails, fopen() will still + succeed but the FILE will be unbuffered. + + This option adds a small amount of space to each FILE to act as an + emergency buffer in the event of a buffer allocation failure. + + Most people will answer None. + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE + bool "None" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 + bool "4" + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 + bool "8" + +# If you add more choices, you will need to update uClibc_stdio.h. + +endchoice + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT + bool "Attempt to shutdown stdio subsystem when abort() is called." + default n + help + ANSI/ISO C99 requires abort() to be asyn-signal-safe. So there was + a behavioral change made in SUSv3. Previously, abort() was required + to have the affect of fclose() on all open streams. The wording has + been changed to "may" from "shall". + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_GETC_MACRO + bool "Provide a macro version of getc()" + depends on !KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_NONE + default y + help + Provide a macro version of getc(). + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_PUTC_MACRO + bool "Provide a macro version of putc()" + depends on !KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_BUFSIZ_NONE + default y + help + Provide a macro version of putc(). + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION + bool "Support auto-r/w transition" + default y + help + Answer Y to enable the stdio subsystem to automaticly transition + between reading and writing. This relaxes the ANSI/ISO C99 + requirement: + + When a file is opened with update mode ('+' as the second or third + character in the list of mode argument values), both input and output + may be performed on the associated stream. However, output shall not + be directly followed by input without an intervening call to the + fflush function or to a file positioning function (fseek, fsetpos, + or rewind), and input shall not be directly followed by output without + an intervening call to a file positioning function, unless the input + operation encounters end­of­file. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FOPEN_LARGEFILE_MODE + bool "Support an fopen() 'F' flag for large file mode (uClibc-specific)" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_LFS + default n + help + Answer Y to enable a uClibc-specific extension to allow passing an + additional 'F' flag in the mode string for fopen() to specify that + the file should be open()ed with the O_LARGEFILE flag set. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE + bool "Support an fopen() 'x' flag for exclusive mode (glibc-compat)" + default n + help + Answer Y to support a glibc extension to allow passing + additional 'x' flag in the mode string for fopen() to specify that + the file should be open()ed with the O_EXCL flag set. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GLIBC_CUSTOM_STREAMS + bool "Support fmemopen(), open_memstream(), and fopencookie() (glibc-compat)" + default n + help + Answer Y to support the glibc 'custom stream' extension functions + fmemopen(), open_memstream(), and fopencookie(). + + NOTE: There are some minor differences regarding seeking behavior. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_PRINTF_M_SPEC + bool "Support the '%m' specifier in printf format strings (glibc-compat)" + default n + help + Answer Y to support a glibc extension to interpret '%m' in printf + format strings as an instruction to output the error message string + (as generated by strerror) corresponding to the current value of + 'errno'. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_ERRNO_MESSAGES + bool "Include the errno message text in the library" + default y + help + Answer Y if you want to include the errno message text in the + library. This adds about 3K to the library, but enables strerror() + to generate text other than 'Unknown error '. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_SYS_ERRLIST + bool "Support sys_errlist[] (obsolete-compat)" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_ERRNO_MESSAGES + default n + help + Answer Y if you want to support the obsolete sys_errlist[]. + This adds about 0.5k to the library, except for the mips + arch where it adds over 4K. + + WARNING! In the future, support for sys_errlist[] may be unavailable + in at least some configurations. In fact, it may be removed + altogether. + + Most people will answer N. + + Application writers: use the strerror(3) function. + +config KEMBTK_UCLIBC_UCLIBC_HAS_SIGNUM_MESSAGES + bool "Include the signum message text in the library" + default y + help + Answer Y if you want to include the signum message text in the + library. This adds about 0.5K to the library, but enables strsignal() + to generate text other than 'Unknown signal '. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_SYS_SIGLIST + bool "Support sys_siglist[] (bsd-compat)" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_SIGNUM_MESSAGES + default n + help + Answer Y if you want to support sys_siglist[]. + + WARNING! In the future, support for sys_siglist[] may be unavailable + in at least some configurations. In fact, it may be removed + altogether. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GETTEXT_AWARENESS + bool "Include gettext awareness" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_LOCALE \ + && KEMBTK_UCLIBC_UCLIBC_MJN3_ONLY + default n + help + NOTE!!! Not yet integrated with strerror and strsignal. NOTE!!! + + Answer Y if you want to include weak stub gettext support and + make the *strerror*() and strsignal() functions gettext-aware. + + Currently, to get functional gettext functionality you will need + to use gnu gettext. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GNU_GETOPT + bool "Support gnu getopt" + default y + help + Answer Y if you want to include full gnu getopt() instead of a + (much smaller) SUSv3 compatible getopt(). + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GETOPT_LONG + bool "Support getopt_long/getopt_long_only" + depends on !KEMBTK_UCLIBC_UCLIBC_HAS_GNU_GETOPT + default y + help + Answer Y if you want to include getopt_long[_only() used by many + apps, even busybox. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GNU_GETSUBOPT + bool "Support glibc getsubopt" + default y + help + Answer Y if you want to include glibc getsubopt() instead of a + smaller SUSv3 compatible getsubopt(). + + Most people will answer Y. +comment "----------------" +comment "Big and Tall" +comment "----------------" + +config KEMBTK_UCLIBC_UCLIBC_HAS_REGEX + bool "Regular Expression Support" + default y + help + POSIX regular expression code is really big -- 53k all by itself. + If you don't use regular expressions, turn this off and save space. + Of course, if you only statically link, leave this on, since it will + only be included in your apps if you use regular expressions. + +config KEMBTK_UCLIBC_UCLIBC_HAS_REGEX_OLD + bool "Use the older (stable) regular expression code" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_REGEX + default y + help + There are two versions of regex. The older (stable) version has + been in uClibc for quite a long time but hasn't seen too many + updates. It also has some known issues when dealing with uncommon + corner cases and multibyte/unicode strings. However, it is quite + a bit smaller than the newer version. + + If the older version has worked for you and you don't need unicode + support, then stick with the old version (and say Y here). + Otherwise, you should use the new version (and say N here). + +config KEMBTK_UCLIBC_UCLIBC_HAS_FNMATCH + bool "fnmatch Support" + default y + help + POSIX fnmatch. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FNMATCH_OLD + bool "Use the older (stable) fnmatch code" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FNMATCH + default y + help + There are two versions of fnmatch. The older (stable) version has + been in uClibc for quite a long time but hasn't seen too many + updates. It also has some known issues when dealing with uncommon + corner cases and multibyte/unicode strings. However, it is quite + a bit smaller than the newer version. + + If the older version has worked for you and you don't need unicode + support, then stick with the old version (and say Y here). + Otherwise, you should use the new version (and say N here). + +config KEMBTK_UCLIBC_UCLIBC_HAS_WORDEXP + bool "Support the wordexp() interface" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_GLOB + default n + help + The SuSv3 wordexp() interface performs word expansions per the Shell + and Utilities volume of IEEE Std 1003.1-2001, Section 2.6. It is + intended for use by applications that want to implement all of the + standard Bourne shell expansions on input data. + + This interface is rarely used, and very large. Unless you have a + pressing need for wordexp(), you should probably answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_FTW + bool "Support the ftw() and nftw() interfaces" + default n + help + The SuSv3 ftw() and nftw() interfaces are used to recursively descend + directory paths while repeatedly calling a function. + + This interface is rarely used, and adds around 4.5k. Unless you have + a pressing need for ftw() or nftw(), you should probably answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GLOB + bool "Support the glob() interface" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_FNMATCH + default y + help + + The glob interface is somewhat large (weighing in at about 2,5k). It + is used fairly often, but is an option since people wanting to go for + absolute minimum size may wish to omit it. + + Most people will answer Y. + +config KEMBTK_UCLIBC_UCLIBC_HAS_GNU_GLOB + bool "Support gnu glob() interface" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_GLOB + default n + help + The gnu glob interface is somewhat larger (weighing in at about 4,2k) + than it's SuSv3 counterpart (and is out of date). It is an old copy + from glibc and does not support all the GNU specific options. + + Answer Y if you want to include full gnu glob() instead of the smaller + SUSv3 compatible glob(). + + Most people will answer N. + +comment "----------------" +comment "Library Installation Options" +comment "----------------" +config KEMBTK_UCLIBC_SHARED_LIB_LOADER_PREFIX + string + depends on KEMBTK_UCLIBC_HAVE_SHARED + default "$(RUNTIME_PREFIX)lib" + help + When using shared libraries, this path is the location where the + shared library will be invoked. This value will be compiled into + every binary compiled with uClibc. + + For a typical target system this should be set to "/lib", such that + 'make install' will install /lib/ld-uClibc.so.0. + + BIG FAT WARNING: + If you do not have a shared library loader with the correct name + sitting in the directory this points to, your binaries will not + run. + +config KEMBTK_UCLIBC_RUNTIME_PREFIX + string + default "/usr/$(TARGET_ARCH)-linux-uclibc/" + help + RUNTIME_PREFIX is the directory into which the uClibc runtime + libraries will be installed. The result will look something + like the following: + $(RUNTIME_PREFIX)/ + lib/ + usr/bin/ldd + sbin/ldconfig + This value is used by the 'make install' Makefile target. Since this + directory is compiled into the shared library loader, you will need to + recompile uClibc if you change this value... + + For a typical target system this should be set to "/", such that + 'make install' will install /lib/libuClibc-.so + +config KEMBTK_UCLIBC_DEVEL_PREFIX + string + default "/usr/$(TARGET_ARCH)-linux-uclibc/usr/" + help + DEVEL_PREFIX is the directory into which the uClibc development + environment will be installed. The result will look something + like the following: + $(DEVEL_PREFIX)/ + lib/ + include/ + This value is used by the 'make install' Makefile target when + installing a uClibc development environment. + + For a typical target system this should be set to "/usr", such that + 'make install' will install /usr/include/
. + +comment "----------------" +comment "Security options" +comment "----------------" + +config KEMBTK_UCLIBC_UCLIBC_BUILD_PIE + bool "Build utilities as ET_DYN/PIE executables" + depends on KEMBTK_UCLIBC_HAVE_SHARED + depends on KEMBTK_UCLIBC_TARGET_arm || KEMBTK_UCLIBC_TARGET_frv \ + || KEMBTK_UCLIBC_TARGET_i386 || KEMBTK_UCLIBC_TARGET_mips \ + || KEMBTK_UCLIBC_TARGET_powerpc + select KEMBTK_UCLIBC_FORCE_SHAREABLE_TEXT_SEGMENTS + default n + help + If you answer Y here, ldd and iconv are built as ET_DYN/PIE + executables. + + It requires gcc-3.4 and binutils-2.15 (for arm 2.16) or later. + More about ET_DYN/PIE binaries on . + + WARNING: This option also enables FORCE_SHAREABLE_TEXT_SEGMENTS, so + all libraries have to be built with -fPIC or -fpic, and all + assembler functions must be written as position independent + code (PIC). + +config KEMBTK_UCLIBC_UCLIBC_HAS_ARC4RANDOM + bool "Include the arc4random() function" + default n + help + Answer Y to support the OpenBSD-like arc4random() function. This + function picks a random number between 0 and N, and will always return + something even if the random driver is dead. If urandom fails then + gettimeofday(2) will be used as the random seed. This function is + designed to be more dependable than invoking /dev/urandom directly. + OpenSSL and OpenNTPD currently support this function. + + Most people will answer N. + +config KEMBTK_UCLIBC_HAVE_NO_SSP + bool + default n + +config KEMBTK_UCLIBC_UCLIBC_HAS_SSP + bool "Support for GCC stack smashing protector" + depends on !KEMBTK_UCLIBC_HAVE_NO_SSP + default n + help + Add code to support GCC's -fstack-protector[-all] option to uClibc. + This requires GCC 4.1 or newer. GCC does not have to provide libssp, + the needed functions are added to ldso/libc instead. + + GCC's stack protector is a reimplementation of IBM's propolice. + See http://www.trl.ibm.com/projects/security/ssp/ and + http://www.linuxfromscratch.org/hints/downloads/files/ssp.txt + for details. + + Note that NOEXECSTACK on a kernel with address space randomization + is generally sufficient to prevent most buffer overflow exploits + without increasing code size. This option essentially adds debugging + code to catch them. + + Most people will answer N. + +config KEMBTK_UCLIBC_UCLIBC_HAS_SSP_COMPAT + bool "Support for gcc-3.x propolice smashing stack protector" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_SSP + default n + help + Add gcc-3.x propolice smashing stack protector to the library. + + This requires a patched version of GCC, supporting the + -fstack-protector[-all] options, with the __guard and + __stack_smash_handler functions removed from libgcc. + These functions are added to ldso/libc instead. + + More information at: + + + Most people will answer N. + +config KEMBTK_UCLIBC_SSP_QUICK_CANARY + bool "Use simple guard values without accessing /dev/urandom" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_SSP + default n + help + Use gettimeofday(2) to define the __guard without accessing + /dev/urandom. + WARNING: This makes smashing stack protector vulnerable to timing + attacks. + Most people will answer N. + +choice + prompt "Propolice protection blocking signal" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_SSP + default KEMBTK_UCLIBC_PROPOLICE_BLOCK_ABRT if ! KEMBTK_UCLIBC_DODEBUG + default KEMBTK_UCLIBC_PROPOLICE_BLOCK_SEGV if KEMBTK_UCLIBC_DODEBUG + help + "abort" use SIGABRT to block offending programs. + This is the default implementation. + + "segfault" use SIGSEGV to block offending programs. + Use this for debugging. + + If unsure, answer "abort". + +config KEMBTK_UCLIBC_PROPOLICE_BLOCK_ABRT + bool "abort" + +config KEMBTK_UCLIBC_PROPOLICE_BLOCK_SEGV + bool "segfault" + +endchoice + +config KEMBTK_UCLIBC_UCLIBC_BUILD_SSP + bool "Build uClibc with -fstack-protector" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_SSP + default n + help + Build all uClibc libraries and executables with -fstack-protector, + adding extra stack overflow checking to most uClibc functions. + +config KEMBTK_UCLIBC_UCLIBC_BUILD_RELRO + bool "Build uClibc with linker option -z RELRO" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default y + help + Build all libraries and executables with "ld -z relro". + + This tells the linker to mark chunks of an executable or shared + library read-only after applying dynamic relocations. (This comes + up when a global const variable is initialized to the address of a + function or the value of another global variable.) + + This is a fairly obscure option the ld man page doesn't even bother + to document properly. It's a security paranoia issue that's more + likely to consume memory (by allocating an extra page) rather than + save it. + + This is explained in more depth at + http://www.airs.com/blog/archives/189 + + Nobody is likely to care whether you say Y or N here. + +config KEMBTK_UCLIBC_UCLIBC_BUILD_NOW + bool "Build uClibc with linker option -z NOW" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default n + help + Build all libraries and executables with "ld -z now". + + This tells the linker to resolve all symbols when the library is + first loaded, rather than when each function is first called. This + increases start-up latency by a few microseconds and may do + unnecessary work (resolving symbols that are never used), but the + realtime people like it for making microbenchmark timings slightly + more predictable and in some cases it can be slightly faster due to + CPU cache behavior (not having to fault the linker back in to do + lazy symbol resolution). + + Most people can't tell the difference between selecting Y or N here. + +config KEMBTK_UCLIBC_UCLIBC_BUILD_NOEXECSTACK + bool "Build uClibc with noexecstack marking" + default y + help + Mark all assembler files as noexecstack, which will mark uClibc + as not requiring an executable stack. (This doesn't prevent other + files you link against from claiming to need an executable stack, it + just won't cause uClibc to request it unnecessarily.) + + This is a security thing to make buffer overflows harder to exploit. + By itself, it's kind of useless, as Linus Torvalds explained in 1998: + http://old.lwn.net/1998/0806/a/linus-noexec.html + + It only actually provides any security when combined with address + space randomization, explained here: http://lwn.net/Articles/121845/ + + Address space randomization is on by default in current linux + kernels (although it can be disabled using the option + CONFIG_COMPAT_BRK). + + You should probably say Y. + +comment "----------------" +comment "uClibc development/debugging options" +comment "----------------" + +config KEMBTK_UCLIBC_CROSS_COMPILER_PREFIX + string + default "" + help + The prefix used to execute your cross-compiling toolchain. For + example, if you run 'arm-linux-uclibc-gcc' to compile something, + then enter 'arm-linux-uclibc-' here. + +config KEMBTK_UCLIBC_UCLIBC_EXTRA_CFLAGS + string + default "" + help + Add any additional CFLAGS to be used to build uClibc. + +config KEMBTK_UCLIBC_DODEBUG + bool "Build uClibc with debugging symbols" + default n + select KEMBTK_UCLIBC_EXTRA_WARNINGS + help + Say Y here if you wish to compile uClibc with debugging symbols. + This will allow you to use a debugger to examine uClibc internals + while applications are running. This increases the size of the + library considerably and should only be used when doing development. + If you are doing development and want to debug uClibc, answer Y. + + Otherwise, answer N. + +config KEMBTK_UCLIBC_DODEBUG_PT + bool "Build pthread with debugging output" + depends on KEMBTK_UCLIBC_UCLIBC_HAS_THREADS \ + && KEMBTK_UCLIBC_LINUXTHREADS_OLD + default n + help + Enable debug output in libpthread. This is only useful when doing + development in libpthread itself. + + Otherwise, answer N. + +config KEMBTK_UCLIBC_DOSTRIP + bool "Strip libraries and executables" + default y + depends on !KEMBTK_UCLIBC_DODEBUG + help + Say Y here if you do wish to strip all uClibc libraries and + executables. No stripping increases the size of the binaries + considerably, but makes it possible to debug uClibc libraries. + Most people will answer Y. + +config KEMBTK_UCLIBC_DOASSERTS + bool "Build uClibc with run-time assertion testing" + default n + help + Say Y here to include runtime assertion tests. + This enables runtime assertion testing in some code, which can + increase the size of the library and incur runtime overhead. + If you say N, then this testing will be disabled. + +config KEMBTK_UCLIBC_SUPPORT_LD_DEBUG + bool "Build the shared library loader with debugging support" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default n + help + Answer Y here to enable all the extra code needed to debug the uClibc + native shared library loader. The level of debugging noise that is + generated depends on the LD_DEBUG environment variable... Just set + LD_DEBUG to something like: 'LD_DEBUG=token1,token2,.. prog' to + debug your application. Diagnostic messages will then be printed to + the stderr. + + For now these debugging tokens are available: + detail provide more information for some options + move display copy processing + symbols display symbol table processing + reloc display relocation processing; detail shows the + relocation patch + nofixups never fixes up jump relocations + bindings displays the resolve processing (function calls); + detail shows the relocation patch + all Enable everything! + + The additional environment variable: + LD_DEBUG_OUTPUT=file + redirects the diagnostics to an output file created using + the specified name and the process id as a suffix. + + An excellent start is simply: + $ LD_DEBUG=binding,move,symbols,reloc,detail ./appname + or to log everything to a file named 'logfile', try this + $ LD_DEBUG=all LD_DEBUG_OUTPUT=logfile ./appname + + If you are doing development and want to debug uClibc's shared library + loader, answer Y. Mere mortals answer N. + +config KEMBTK_UCLIBC_SUPPORT_LD_DEBUG_EARLY + bool "Build the shared library loader with early debugging support" + depends on KEMBTK_UCLIBC_HAVE_SHARED + default n + help + Answer Y here to if you find the uClibc shared library loader is + crashing or otherwise not working very early on. This is typical + only when starting a new port when you haven't figured out how to + properly get the values for argc, argv, environ, etc. This method + allows a degree of visibility into the very early shared library + loader initialization process. If you are doing development and want + to debug the uClibc shared library loader early initialization, + answer Y. Mere mortals answer N. + +config KEMBTK_UCLIBC_UCLIBC_MALLOC_DEBUGGING + bool "Build malloc with debugging support" + depends on KEMBTK_UCLIBC_MALLOC || KEMBTK_UCLIBC_MALLOC_STANDARD + default n + help + Answer Y here to compile extra debugging support code into malloc. + Malloc debugging output may then be enabled at runtime using the + MALLOC_DEBUG environment variable. + + The value of MALLOC_DEBUG should be an integer, which is interpreted + as a bitmask with the following bits: + 1 - do extra consistency checking + 2 - output messages for malloc/free calls and OS + allocation calls + 4 - output messages for the `MMB' layer + 8 - output messages for internal malloc heap manipulation + calls + + Because this increases the size of malloc appreciably (due to strings + etc), you should say N unless you need to debug a malloc problem. + +config KEMBTK_UCLIBC_WARNINGS + string "Compiler Warnings" + default "-Wall" + help + Set this to the set of gcc warnings you wish to see while compiling. + +config KEMBTK_UCLIBC_EXTRA_WARNINGS + bool "Enable extra annoying warnings" + default n + help + If you wish to build with extra warnings enabled, say Y here. + +config KEMBTK_UCLIBC_DOMULTI + bool "Compile all sources at once into an object" + default n + help + Set this to compile all sources at once into an object (IMA). + This mode of compilation uses alot of memory but may produce + smaller binaries. + + Note that you need a very recent GCC for this to work, like + gcc >= 4.3 plus eventually some patches. + + If unsure, keep the default of N. + +config KEMBTK_UCLIBC_UCLIBC_MJN3_ONLY + bool "Manuel's hidden warnings" + default n + help + Answer Y here to see all Manuel's personal notes, warnings, and todos. + + Most people will answer N. + diff --git a/mk/toolchain.mk b/mk/toolchain.mk index 27e6f88..52d93eb 100644 --- a/mk/toolchain.mk +++ b/mk/toolchain.mk @@ -57,18 +57,23 @@ include $(EMBTK_ROOT)/mk/kernel-headers.mk ifeq ($(CONFIG_EMBTK_CLIB_EGLIBC),y) #EGLIBC include $(EMBTK_ROOT)/mk/eglibc.mk +TOOLCHAINBUILD := mkinitialpath kernel-headers_install ccachehost_install \ + gmphost_install mpfrhost_install binutils_install \ + gcc1_install eglibc-headers_install gcc2_install \ + eglibc_install gcc3_install else #uClibc include $(EMBTK_ROOT)/mk/uclibc.mk +TOOLCHAINBUILD := mkinitialpath kernel-headers_install ccachehost_install \ + gmphost_install mpfrhost_install binutils_install gcc1_install \ + uclibc_install gcc3_install endif #targets -buildtoolchain: mkinitialpath kernel-headers_install ccachehost_install \ - gmphost_install mpfrhost_install binutils_install \ - gcc1_install eglibc-headers_install gcc2_install \ - eglibc_install gcc3_install +buildtoolchain: $(TOOLCHAINBUILD) $(call EMBTK_GENERIC_MESSAGE,"You successfully build a toolchain for \ $(STRICT_GNU_TARGET) !!!") + symlink_tools: @cd $(TOOLS)/bin/; export TOOLS_LIST="`ls`"; \ for i in $$TOOLS_LIST;do \ diff --git a/mk/uclibc.mk b/mk/uclibc.mk new file mode 100755 index 0000000..f502457 --- /dev/null +++ b/mk/uclibc.mk @@ -0,0 +1,71 @@ +################################################################################ +# GAYE Abdoulaye Walsimou, +# Copyright(C) 2009 GAYE Abdoulaye Walsimou. All rights reserved. +# +# This program is free software; you can distribute it and/or modify it +# under the terms of the GNU General Public License +# (Version 2 or later) published by the Free Software Foundation. +# +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. +################################################################################ +# +# \file uclibc.mk +# \brief uclibc.mk of Embtoolkit +# \author GAYE Abdoulaye Walsimou, +# \date August 2009 +################################################################################ + +UCLIBC_VERSION := $(subst ",,$(strip $(CONFIG_EMBTK_UCLIBC_VERSION_STRING))) +UCLIBC_SITE := http://www.uclibc.org/downloads +UCLIBC_PACKAGE := uClibc-$(UCLIBC_VERSION).tar.bz2 +UCLIBC_BUILD_DIR := $(TOOLS_BUILD)/uClibc-$(UCLIBC_VERSION) + +uclibc_install: $(UCLIBC_BUILD_DIR)/.installed + +$(UCLIBC_BUILD_DIR)/.installed: uclibc_download \ +$(UCLIBC_BUILD_DIR)/.decompressed $(UCLIBC_BUILD_DIR)/.configured + $(call EMBTK_GENERIC_MESSAGE,"Building and installing \ + uClibc-$(UCLIBC_VERSION) ...") + $(MAKE) -C $(UCLIBC_BUILD_DIR) oldconfig + $(MAKE) -C $(UCLIBC_BUILD_DIR) \ + CROSS_COMPILER_PREFIX="$(TOOLS)/bin/$(STRICT_GNU_TARGET)-" \ + SHARED_LIB_LOADER_PREFIX="/lib/" \ + RUNTIME_PREFIX="/" DEVEL_PREFIX="/usr/" \ + KERNEL_HEADERS="$(SYSROOT)/usr/include/" \ + UCLIBC_EXTRA_CFLAGS="$(TARGET_CFLAGS) -pipe" + $(MAKE) -C $(UCLIBC_BUILD_DIR) PREFIX=$(SYSROOT)/ \ + CROSS_COMPILER_PREFIX="$(TOOLS)/bin/$(STRICT_GNU_TARGET)-" \ + SHARED_LIB_LOADER_PREFIX="/lib/" \ + RUNTIME_PREFIX="/" DEVEL_PREFIX="/usr/" \ + KERNEL_HEADERS="$(SYSROOT)/usr/include/" \ + UCLIBC_EXTRA_CFLAGS="$(TARGET_CFLAGS) -pipe" install + +uclibc_download: + $(call EMBTK_GENERIC_MESSAGE,"downloading uClibc-$(UCLIBC_VERSION) \ + if necessary ...") + @test -e $(DOWNLOAD_DIR)/$(UCLIBC_PACKAGE) || \ + wget $(UCLIBC_SITE)/$(UCLIBC_PACKAGE) \ + -O $(DOWNLOAD_DIR)/$(UCLIBC_PACKAGE) + +$(UCLIBC_BUILD_DIR)/.decompressed: + $(call EMBTK_GENERIC_MESSAGE,"Decompressing \ + uClibc-$(UCLIBC_VERSION) ...") + $(Q)tar -C $(TOOLS_BUILD) -xjvf $(DOWNLOAD_DIR)/$(UCLIBC_PACKAGE) + $(Q)cd $(UCLIBC_BUILD_DIR); \ + cat $(DOWNLOAD_DIR)/uClibc-$(UCLIBC_VERSION)-*.patch | \ + patch -p1 + +$(UCLIBC_BUILD_DIR)/.configured: + $(call EMBTK_GENERIC_MESSAGE,"Configuring \ + uClibc-$(UCLIBC_VERSION) ...") + grep "CONFIG_KEMBTK_UCLIBC_" $(EMBTK_ROOT)/.config | \ + sed -e 's/CONFIG_KEMBTK_UCLIBC_*//g' \ + > $(UCLIBC_BUILD_DIR)/.config + -- cgit v1.2.3