Как перестроить newlib и newlib-nano из GNU Arm Embedded Toolchain

Я скачал набор инструментов " gcc-arm-none-eabi-6-2017-q2-update-win32-sha1.exe " (Windows) с https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads и установил его на моем компьютере с Windows 10.

Папка установки содержит файл release.txt в " ../share/doc/gcc-arm-none-eabi/ ", в котором говорится:

Этот выпуск включает в себя следующие элементы:

  • newlib и newlib-nano: git://sourceware.org/git/newlib-cygwin.git commit 0d79b021a4ec4e6b9aa1a9f6db0e29a137005ce7

А также readme.txt в " ../share/doc/gcc-arm-none-eabi/ " содержит:

  • Использование библиотек C *

Этот набор инструментов выпускается с двумя встроенными библиотеками C, основанными на newlib: одна - стандартная newlib (libc.a), а другая - newlib-nano (libc_nano.a) для размера кода.

Теперь я хочу точно восстановить все libc.a и libc_nano.a, содержащиеся в " ../arm-none-eabi/lib/thumb "

На данный момент я могу использовать Ubuntu с помощью " gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 "

$ # Downloaded newlib-cygwin (with corresponding hash) into folder newlib-cygwin
$ mkdir build
$ cd build
$ ../newlib-cygwin/configure --target=arm-none-eabi --disable-newlib-supplied-syscalls
$ make

Как мне настроить newlib для создания точных копий libc.a и libc_nano.a, содержащихся в gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2?

$ # Downloaded newlib-cygwin (with corresponding hash) into folder newlib-cygwin
$ mkdir build
$ cd build
$ ../newlib-cygwin/configure --target=arm-none-eabi --???
$ make

3 ответа

Если я вас правильно понимаю, более подробный вопрос:
Какие параметры конфигурации использовали разработчики GNU Arm Embedded Toolchain при создании библиотек newlib, поставляемых в архиве gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2?
Эти для newlib:

--target=arm-none-eabi --enable-newlib-io-long-long --enable-newlib-register-fini --enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls --disable-nls

И эти для newlib-nano:

--target=arm-none-eabi --enable-newlib-reent-small --disable-newlib-fvwrite-in-streamio --disable-newlib-fseek-optimization --disable-newlib-wide-orient --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-lite-exit --enable-newlib-global-atexit --enable-newlib-nano-formatted-io --disable-nls

Как я это понял? Давайте пройдемся по процессу:
Эти пакеты построены на панели запуска, где вы найдете все сборки, которые имели место на lanuchpad. Я выбрал gcc-arm-none-eabi 6-2017q2-1 из 2017-10-24. Там я могу найти buildlog. Я набрал в buildlog | grep "^+ " | grep "configure " | grep 'src/newlib' и я остался с:

+ /<<PKGBUILDDIR>>/src/newlib/configure --target=arm-none-eabi --prefix=/<<PKGBUILDDIR>>/install-native --infodir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-newlib-io-long-long --enable-newlib-register-fini --enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls --disable-nls + /<<PKGBUILDDIR>>/src/newlib/configure --target=arm-none-eabi --prefix=/<<PKGBUILDDIR>>/build-native/target-libs --disable-newlib-supplied-syscalls --enable-newlib-reent-small --disable-newlib-fvwrite-in-streamio --disable-newlib-fseek-optimization --disable-newlib-wide-orient --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-lite-exit --enable-newlib-global-atexit --enable-newlib-nano-formatted-io --disable-nls

Немного о Шерлоке Холмсе, и я пришел к выводу, что вторая строка - это newlib, настроенная для сборки как newlib-nano (--enable-newlib-reent-small), первым является newlib, настроенный для сборки как полный newlib.
Чтобы ответить на вопрос вашей темы, перекомпилировать newlib и newlib-nano таким же образом, передайте опции, которые я опубликовал выше, в newlib. ./configure скрипт.

Подсказки о том, как был сконфигурирован компилятор, можно найти в:

  • $COMPILER_PATH/arm-none-eabi/include/newlib.h
  • $COMPILER_PATH/arm-none-eabi/include/newlib-nano/newlib.h

The #defines имеют близкое соответствие с параметрами, которые были переданы в «configure» при сборке новой библиотеки.

Я подумал, что было бы полезно указать конфигурацию по умолчанию для сборки newlib/newlib-nano ARM по состоянию на 2023 год (для GCC 10):

Для Ньюлиб:

--enable-newlib-io-long-long
--enable-newlib-io-c99-formats
--enable-newlib-reent-check-verify
--enable-newlib-register-fini
--enable-newlib-retargetable- блокировка
--disable-newlib-supplied-syscalls
--disable-nls

Для Newlib-нано:

--disable-newlib-supplied-syscalls
--enable-newlib-reent-check-verify
--enable-newlib-reent-small
--enable-newlib-retargetable-locking
--disable-newlib-fvwrite-in-streamio
- -disable-newlib-fseek-optimization
--disable-newlib-wide-orient
--enable-newlib-nano-malloc
--disable-newlib-unbuf-stream-opt
--enable-lite-exit
--enable-newlib- global-atexit
--enable-newlib-nano-formatted-io
--disable-nls

Ссылка: https://community.arm.com/support-forums/f/compilers-and-libraries-forum/53310/gcc-arm-none-eabi-what-were-the-newlib-compilation-options

Другие вопросы по тегам