Конфигурация NewLib

Здесь приведены наиболее полезные и общие конфигурационные опции. Остальное можно найти в исходниках. Обычно они приведены в комментариях.

Конфигурация через configure

  --disable-cloog-version-check  disable check for CLooG version
  --disable-dependency-tracking  speeds up one-time build
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --disable-newlib-atexit-alloc    disable dynamic allocation of atexit entries
  --disable-newlib-io-float disable printf/scanf family float support
  --disable-newlib-supplied-syscalls disable newlib from supplying syscalls
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-ppl-version-check    disable check for PPL version
  --enable-bootstrap      enable bootstrapping [yes if native build]
  --enable-build-with-cxx build with C++ compiler instead of C compiler
  --enable-dependency-tracking   do not reject slow dependency extractors
  --enable-fast-install[=PKGS]
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --enable-gold           use gold instead of ld
  --enable-libada         build libada directory
  --enable-libssp         build libssp directory
  --enable-lto            enable link time optimization support
  --enable-maintainer-mode
  --enable-maintainer-mode  enable make rules and dependencies not useful
  --enable-maintainer-mode enable make rules and dependencies not useful
  --enable-malloc-debugging indicate malloc debugging requested
  --enable-multilib         build many library versions (default)
  --enable-newlib-elix-level         supply desired elix library level (1-4)
  --enable-newlib-hw-fp    Turn on hardware floating point math
  --enable-newlib-iconv     enable iconv library support
  --enable-newlib-iconv-encodings   enable specific comma-separated list of bidirectional iconv encodings to be built-in
  --enable-newlib-iconv-external-ccs     enable capabilities to load external CCS files for iconv
  --enable-newlib-iconv-from-encodings   enable specific comma-separated list of \"from\" iconv encodings to be built-in
  --enable-newlib-iconv-to-encodings   enable specific comma-separated list of \"to\" iconv encodings to be built-in
  --enable-newlib-io-c99-formats   enable C99 support in IO functions like printf/scanf
  --enable-newlib-io-long-double   enable long double type support in IO functions printf/scanf
  --enable-newlib-io-long-long   enable long long type support in IO functions like printf/scanf
  --enable-newlib-io-pos-args enable printf-family positional arg support
  --enable-newlib-mb        enable multibyte support
  --enable-newlib-multithread        enable support for multiple threads
  --enable-newlib-reent-small   enable small reentrant struct support
  --enable-objc-gc        enable use of Boehm's garbage collector with the
  --enable-serial-[{host,target,build}-]configure
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-stage1-checking[=all]   choose additional checking for stage1
  --enable-stage1-languages[=all]   choose additional languages to build during
  --enable-static[=PKGS]  build static libraries [default=yes]
  --enable-target-optspace  optimize for space
  --enable-werror         enable -Werror in bootstrap stage2 and later
  --with-boot-ldflags=FLAGS Linker flags for stage2 and later
  --with-boot-libs=LIBS     Libraries for stage2 and later
  --with-build-libsubdir=DIR  Directory where to find libraries for build system
  --with-build-sysroot=SYSROOT
  --with-build-time-tools=PATH
  --with-cloog-include=PATH Specify directory for installed CLooG include files
  --with-cloog-lib=PATH   Specify the directory for the installed CLooG library
  --with-cloog=PATH       Specify prefix directory for the installed CLooG-PPL package
  --with-debug-prefix-map='A=B C=D ...'
  --with-gmp-dir=PATH     this option has been REMOVED
  --with-gmp-include=PATH specify directory for installed GMP include files
  --with-gmp-lib=PATH     specify directory for the installed GMP library
  --with-gmp=PATH         specify prefix directory for the installed GMP package.
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-host-libstdcxx=L Use linker arguments L to link with libstdc++
  --with-libelf-include=PATH Specify directory for installed libelf include files
  --with-libelf-lib=PATH   Specify the directory for the installed libelf library
  --with-libelf=PATH       Specify prefix directory for the installed libelf package
  --with-mpc-include=PATH
  --with-mpc-lib=PATH    specify directory for the installed MPC library
  --with-mpc=PATH        specify prefix directory for installed MPC package.
  --with-mpfr-dir=PATH    this option has been REMOVED
  --with-mpfr-include=PATH
  --with-mpfr-lib=PATH    specify directory for the installed MPFR library
  --with-mpfr=PATH        specify prefix directory for installed MPFR package.
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --with-pic              try to use only PIC/non-PIC objects [default=use
  --with-ppl-include=PATH Specify directory for installed PPL include files
  --with-ppl-lib=PATH     Specify the directory for the installed PPL library
  --with-ppl=PATH         Specify prefix directory for the installed PPL package
  --with-stage1-ldflags=FLAGS Linker flags for stage1

Конфигурация через define

Если хочется исследовать конйигурацию NewLib более подробно, то сырой список управляющих макросов можно получить так:

find $NEWLIB_DIR -iname "*.[ch]" -type f \
| xargs sed -n -e "s/^\\s*#ifn\?def\\s\+\([0-9A-Za-z_]\+\).*$/\\1/p" -e \
"s/^.*defined\s*[ \(]\?\\s*\([0-9A-Za-z_]\+\)\\s*[\)].*$/\\1/p" \
| sort | uniq

Их около 2000, однако для конфигурации используются не все.

Включение и выключение компиляции или использования отдельных функций и наборов

Серия ключей типа *_PROVIDED

Включение опции подразумевает, что данный набор функций предоставляется пользователем, таким образом отключая компиляцию их.

Ключ Функции Комментарии, зависимости
MALLOC_PROVIDED malloc, free, calloc, realloc, _%_r sbrk
REENTRANT_SYSCALLS_PROVIDED _open64_r, _mkdir_r, _gettimeofday_r, _times_r, _fstat64_r, _exec_r, _open_r, _fstat_r, _rename_r, _write_r, _close_r, _stat_r, _stat64_r, _lseek64_r, _lseek_r, _signal_r, _unlink_r, _link_r, _sbrk_r, _read_r, _isatty_r, _fcntl_r Отменяется опцией _REENT_ONLY
SIGNAL_PROVIDED signal, raise, _%_r
ABORT_PROVIDED abort
CLOCK_PROVIDED clock _times_r

Серия ключей типа HAVE_*

Ключи сигнализируют о том, какие функции доступны из окружения. Это влияет на компиляцию функций, которые могут их использовать. Например, HAVE_MMAP может использоваться memcpy.

Ключ Функции Комментарии, зависимости
HAVE_AF af
HAVE_ALLOCA alloca Обычно определена
HAVE_ASM_POPSECTION_DIRECTIVE .popsection
HAVE_ASSERT_FUNC __assert_func assert
HAVE_AUX_VECTOR
HAVE_BLKSIZE struct stat::st_blksize fseek, makebuf
HAVE_BUILTIN_EXPECT __builtin_expect
HAVE_DD_LOCK __lock_*_recursive *dir
HAVE_ELF .weak, .weakext Определяется
HAVE_FCNTL fcntl, _fcntl_r
HAVE___FSETLOCKING localealias ?
HAVE_GETDATE getdate, __getdate_err, _getdate_r
HAVE_GETOPT getopt getopt
HAVE_GETPAGESIZE getpagesize malloc_getpagesize
HAVE_HW_PCMP pcmp* (инструкция mips?) str*
HAVE_INITFINI_ARRAY .([pre]init/fini)_array _ _ _libc_*_array
HAVE_LIBIDN __idna*
HAVE_LOCALE_NULL ?
HAVE_MEMCPY memcpy
HAVE_MEMPCPY mempcpy
HAVE_MEMSET memset
HAVE_MKDIR _mkdir_r
HAVE_MMAP mmap, munmap ? malloc
HAVE_MREMAP mremap ?
HAVE_NANOSLEEP nanosleep
HAVE_OPENDIR opendir, readdir, closedir
HAVE_POPEN popen gopen
HAVE_RENAME _rename _rename_r
HAVE_SYSTEM _system _system_r
HAVE_USR_INCLUDE_MALLOC_H /usr/include/malloc.h, struct mallinfo *alloc
_HAVE_LONG_DOUBLE long double
_HAVE_SYSTYPES __off_t, __pid_t

Серия ключей WANT_*

Включает при сборке различные возможности.

Ключ Функции

_REENT_ONLY

Запрещает компиляцию нереентрантных версий функций, оставляя только реентрантные. Отменяет REENTRANT_SYSCALLS_PROVIDED.

__LARGE64_FILES

Включает компиляцию функцй, работающих с большими файлами (fopen64 и т. п.)

Динамическое выделение памяти

MALLOC_LOCK

Собственный способ блокировки «кучи» в виде выражения си. Может вызываться вложенно (и это требуется обрабатывать). Если макрос не определён, используется внутренняя _malloc_lock(_REENT); Не требуется, если задан MALLOC_PROVIDED.

MALLOC_UNLOCK

Собственный способ разблокировки «кучи» в виде выражения си. Может вызываться вложенно (и это требуется обрабатывать). Если макрос не определён, используется внутренняя _malloc_unlock(_REENT); Не требуется, если задан MALLOC_PROVIDED.

TODO: описать внутренности.

MALLOC_ALIGNMENT

Выравнивание адреса при динамическом выделении. По умолчанию 8, другое доступное значение — 16.

REALLOC_ZERO_BYTES_FREES

Считать ли ли realloc(p, 0) освобождением памяти. По умолчанию — нет.

USE_MEMCPY

Определяет, использовать библиотечные memcpy, memmove (если 1) или макросы (если 0). По умолчанию 1, если установлено HAVE_MEMCPY (а оно почему-то определяется как установленное прямо в исходнике mallocr.c).

HAVE_MMAP, HAVE_MREMAP, HAVE_USR_INCLUDE_MALLOC_H

malloc_getpagesize

Константа или системный вызов, определяющий размер страницы памяти.

INTERNAL_SIZE_T

Позволяет переопределить внутренний тип, аналогичный size_t, позволяет сделать его 32-битным на 64-битных машинах.

LACKS_UNISTD_H

Определить, если в системе отсутствует unistd.h.

MORECORE, MORECORE_FAILURE, MORECORE_CLEARS

Определяют способ получения свободной памяти от системы. См. исходники.

DEFAULT_TRIM_THRESHOLD, DEFAULT_TOP_PAD, DEFAULT_MMAP_THRESHOLD, DEFAULT_MMAP_MAX

Настройка параметров взаимодействия с системой (sbrk, mmap и т. д.). См. исходники.

Разное

ABORT_MESSAGE

Включает вывод сообщения «Abort called» в поток 2 (stderr) при вызове abort(). Не работает при указании ABORT_PROVIDED.

DEBUG

Включает кучу проверок при исполнении, обеспечивая безопасность кода, однако существенно его замедляя.

NO_EXEC

Включить, если окружение не поддерживает исполнение команд оболочки.

DEBUG

Включает отладку библиотечных функций.

SEPARATE_OBJECTS

Компиляция каждой функции в одельный объектный файл (видимо, требует ручной сборки).

__HAVE_SHORT_DOUBLE__

double = 32 бит.

_HAVE_STD_CXX

В случае компиляции в режиме C++ помещает всё в namespace std.

_ICONV_FROM_ENCODING_*, _CONV_TO_ENCODING_*

Серия ключей для управления кодировками iconv.

Опции для конкретных целевых систем

  • MALLOC_DIRECTION

Внутренние (?) ключи

  • INTERNAL_LINUX_C_LIB
  • INTERNAL_NEWLIB
cifra/konfiguracija_newlib.txt · Последние изменения: 2012/02/18 00:45 — vovanium
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 3.0 Unported