Как перестроить 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
#define
s имеют близкое соответствие с параметрами, которые были переданы в «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