如何重建GNU Arm嵌入式工具链的newlib和newlib-nano

时间:2018-05-03 11:36:39

标签: c++ c arm toolchain newlib

我从https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads下载了工具链“ gcc-arm-none-eabi-6-2017-q2-update-win32-sha1.exe ”(Windows),并将其安装在我的Windows 10 PC。

安装文件夹包含“ ../ share / doc / gcc-arm-none-eabi / ”中的release.txt,它告诉我们:

  

此版本包括以下内容:

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

../ share / doc / gcc-arm-none-eabi / ”中的readme.txt包含:

  
      
  • C库使用*
  •   
     

此工具链发布时带有两个基于的预构建C库   newlib:一个是标准的newlib(libc.a),另一个是   newlib-nano(libc_nano.a)代码大小。

现在我想要完全重建“ ../ arm-none-eabi / lib / thumb ”中包含的所有libc.a和libc_nano.a

目前我可以使用“ gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 ”在Ubuntu上构建

$ # 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以构建gcc-arm-none-eabi-6-2017-q2-update-linux.tar中包含的libc.a和libc_nano.a的精确副本。 BZ2吗

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

1 个答案:

答案 0 :(得分:4)

如果我理解正确,更详细的问题是:
配置选项有哪些' GNU Arm嵌入式工具链'在gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2存档中构建newlib库时使用的开发人员?
这些是针对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

我是怎么做到的?让我们来看看这个过程:
这些包构建在launchpad上,您可以在其中找到lanuchpad上发生的所有builds。我选择了gcc-arm-none-eabi 6-2017q2-1 from 2017-10-24。在那里我可以找到buildlog。我用| grep "^+ " | grep "configure " | grep 'src/newlib' grep了buildlog,我留下了:

+ /<<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

一些Sherlock Holmes和我推断第二行是newlib配置为newlib-nano(--enable-newlib-reent-small),第一行是newlib配置为构建为完整的newlib。
要回答您的主题问题,重新编译newlib和newlib-nano会以同样的方式将上面发布的选项传递给newlib ./configure脚本。