如何在预构建的ARM GCC工具链下重建newlib?

tquggr8v  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(138)

我通常会从头开始构建工具链,但似乎ARM并没有发布其版本的源代码,只是预构建的工具链。我需要用newlib标志--disable-newlib-mb重建工具链,以减少不必要的空间。我使用的ARM GCC版本是12.2,来自ARM开发人员网站:arm-gnu-toolchain-12.2.mpacbti-rel1-x86_64-arm-none-eabi.tar.xz。使用它是因为它实现了C++ 20的特性。
有没有一种方法可以在预构建的工具链下更改此标志,从而重新构建newlib?或者更好的是,从头开始构建ARM GCC工具链?我会很感激任何帮助,因为我一直在网上搜索了一段时间了。
我试过使用Linaro ABE工具,但我无法具体更改newlib的配置。

kkbh8khc

kkbh8khc1#

有没有一种方法可以在预构建的工具链下更改此标志,从而重新构建newlib?
您需要检索相同版本的newlib。更新的选项应与应用程序匹配。例如,我使用它创建了一个PIC版本的newlib。
1.查找配置选项。
1.找到newlib的版本。
文件'12.2.mpacbti-rel1-x86_64-arm-none-eabi-manifest.txt'包含newlib的配置选项。

newlib_configure=' --disable-newlib-supplied-syscalls --enable-newlib-retargetable-locking --enable-newlib-reent-check-verify --enable-newlib-io-long-long --enable-newlib-io-c99-formats --enable-newlib-register-fini --enable-newlib-mb --target=arm-none-eabi --prefix=/'
newlib_nano_configure=' --disable-newlib-supplied-syscalls --enable-newlib-retargetable-locking --enable-newlib-reent-check-verify --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-newlib-reent-small --disable-newlib-fseek-optimization --enable-newlib-nano-formatted-io --disable-newlib-fvwrite-in-streamio --disable-newlib-wide-orient --enable-lite-exit --enable-newlib-global-atexit --target=arm-none-eabi --prefix=/'

字符串
根据'arm-none-eabi/include/_newlib_version.h',它使用的是newlib 4.3.0。您可以从https://sourceware.org/newlib/中获取一个副本并 checkout 此标记,然后使用修改后的配置选项重新构建。然后你必须使用一个自定义的'spec'文件或者修改link命令来定位你的自定义构建的newlib。
ARM可能没有使用标准的newlib版本。它是GPL,所以如果不是来自上面的www.example.com链接,他们应该提供源代码sourceware.org。
或者更好的是,从头开始构建ARM GCC工具链?我会很感激任何帮助,因为我一直在网上搜索了一段时间了。
https://crosstool-ng.github.io/通常是大多数gcc软件包构建的基础。但是,这意味着您需要自己分发整个工具链。newlib要小得多,需要的支持也更少。构建 gcc 预计需要几天的计算时间,而对于某些机器,newlib 可能需要几个小时。这是一个简单的方法来构建 newlib。通常需要一些小的补丁来构建 gcc,但是你必须等待几个小时才能看到一个补丁是否工作,因为它是用几个子包构建的;特别是对于我们正在讨论的交叉编译器。
获取和修复 newlib 是更简单的选择。构建自己的cross gcc要复杂得多。

相关问题