Skip to content

Conversation

@kaishaoshao
Copy link

@kaishaoshao kaishaoshao commented Aug 4, 2025

zcc 4.1.2 uses configuration files to link different built-in C libraries.
If $STDCLIB is newlib_full, the default configuration-lc -lclang_rt.builtins is used.
If $STDCLIB is newlib_fast or newlib_small, use -lc_small -lclang_rt.builtins_small.
If $STDCLIB is newlib_nano, use the -lc_nano -lclang_rt.builtins_nano flag.
zcc 4.1.2 remove the -fuse-size-lib compile flag

@fanghuaqi
Copy link
Member

为了兼容之前的,这个能不能通过制定不同实际编译或者链接选项来替代?

@fanghuaqi
Copy link
Member

我看了下这里的实现

$ cat latest/riscv64-unknown-elf/lib/small.cfg
-nodefaultlibs -Wl,--start-group,-lc_small,-lsemihost_small,--end-group, -lclang_rt.builtins_small

-> 这里是有问题的,我们实际上常规情况下,不会用到这个semihost的库的,只会在需要semihost打印的时候才使用上。

$ cat latest/riscv64-unknown-elf/lib/nano.cfg
-nodefaultlibs -Wl,--start-group,-lc_nano,-lsemihost_nano,--end-group, -lclang_rt.builtins_nano

这里的nano实际上就是期望我们在使用c库的时候尽量使用nano版本。

我觉得应该可以这么改下。

还有这个nano和small具体是哪个更小?

Copy link
Member

@fanghuaqi fanghuaqi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

同时npk.yml文件里面的内容也需要针对性的修改才行

@kaishaoshao
Copy link
Author

我看了下这里的实现

$ cat latest/riscv64-unknown-elf/lib/small.cfg
-nodefaultlibs -Wl,--start-group,-lc_small,-lsemihost_small,--end-group, -lclang_rt.builtins_small

-> 这里是有问题的,我们实际上常规情况下,不会用到这个semihost的库的,只会在需要semihost打印的时候才使用上。

$ cat latest/riscv64-unknown-elf/lib/nano.cfg
-nodefaultlibs -Wl,--start-group,-lc_nano,-lsemihost_nano,--end-group, -lclang_rt.builtins_nano

这里的nano实际上就是期望我们在使用c库的时候尽量使用nano版本。

我觉得应该可以这么改下。

还有这个nano和small具体是哪个更小?

  1. 对于semihost库,我们做了转接,在使用nuclei-sdk,即使链接了semihost,也不会使用semihost里面的系统调用,只会使用你们sdk里面的系统调用
  2. nano库更小,主要是在printf和scanf上仅支持int类型的打印

@kaishaoshao
Copy link
Author

同时npk.yml文件里面的内容也需要针对性的修改才行

好的,我注意一下

@kaishaoshao
Copy link
Author

为了兼容之前的,这个能不能通过制定不同实际编译或者链接选项来替代?

在.cfg文件中封装这些库链接,主要是想方便用户使用

@fanghuaqi
Copy link
Member

clangrt的nano和small版本差异呢

@fanghuaqi
Copy link
Member

对于semihost库,我们做了转接,在使用nuclei-sdk,即使链接了semihost,也不会使用semihost里面的系统调用,只会使用你们sdk里面的系统调用

我实际上不需要使用semihost的,没有默认就带上,用户如果明确需要semihost才带上更合适些。

@kaishaoshao
Copy link
Author

clangrt的nano和small版本差异呢

目前在libclang_rt.builtins_nano.a中相对于libclang_rt.builtins_small.a关闭了对次规格数的处理

@fanghuaqi
Copy link
Member

clangrt的nano和small版本差异呢

目前在libclang_rt.builtins_nano.a中相对于libclang_rt.builtins_small.a关闭了对次规格数的处理

这个没太理解,使用上有啥区别?

@ivan-lei
Copy link

ivan-lei commented Aug 4, 2025

clangrt的nano和small版本差异呢

目前在libclang_rt.builtins_nano.a中相对于libclang_rt.builtins_small.a关闭了对次规格数的处理

这个没太理解,使用上有啥区别?

使用上没有太大差别,主要是在code size上做了进一步缩小。

这里修改成--config的形式的话,主要是考虑到若后续工具链发生一些变动可以不用修改sdk, 且这里nuclei-sdk做的比较好,就算指定链接semihost,最后结果也不会真正链接进去(没有调用semihost库里的内容)。

这里提到”用户如果明确需要semihost才带上更合适些“, 按照当前sdk的设计也确实是这样做的,基于这点确实应该由sdk自己控制,我们补一个commit.

@kaishaoshao
Copy link
Author

同时npk.yml文件里面的内容也需要针对性的修改才行

这个文件需要怎么修改,目前没有看出来影响

@kaishaoshao kaishaoshao changed the title [terapines.mk] Use different --config options for each STDCLIB (Require after zcc 4.1.2). [terapines.mk] Change compiler built-in libraries for different $STDCLIB options (Require after zcc 4.1.2). Aug 4, 2025
@ivan-lei
Copy link

ivan-lei commented Aug 4, 2025

clangrt的nano和small版本差异呢

目前在libclang_rt.builtins_nano.a中相对于libclang_rt.builtins_small.a关闭了对次规格数的处理

这个没太理解,使用上有啥区别?

使用上没有太大差别,主要是在code size上做了进一步缩小。

这里修改成--config的形式的话,主要是考虑到若后续工具链发生一些变动可以不用修改sdk, 且这里nuclei-sdk做的比较好,就算指定链接semihost,最后结果也不会真正链接进去(没有调用semihost库里的内容)。

这里提到”用户如果明确需要semihost才带上更合适些“, 按照当前sdk的设计也确实是这样做的,基于这点确实应该由sdk自己控制,我们补一个commit.

我们确认了一下,按照尾缀的方式更改,将在ZCC 4.1.2之后的版本才能使用_nano

@kaishaoshao kaishaoshao reopened this Oct 13, 2025
This option is no longer effective in zcc version 4.1.2 and later.
This option searches for C libraries under the size directory and is now being deprecated.
@kaishaoshao kaishaoshao requested a review from fanghuaqi October 13, 2025 07:57
@fanghuaqi
Copy link
Member

SoC/evalsoc/Common/npk.yml 也需要更新一下哈。

@kaishaoshao
Copy link
Author

SoC/evalsoc/Common/npk.yml 也需要更新一下哈。

已经更新

@fanghuaqi
Copy link
Member

请额外加一些注释,在 toolchain_terapines.mk 和 Common/npk.yml 里面注明一下,这个依赖什么版本的Zcc, 避免客户使用了错误版本的Zcc,然后请加一下changelog doc/source/changelog.rst , 更新到 Build System 字段

@kaishaoshao
Copy link
Author

请额外加一些注释,在 toolchain_terapines.mk 和 Common/npk.yml 里面注明一下,这个依赖什么版本的Zcc, 避免客户使用了错误版本的Zcc,然后请加一下changelog doc/source/changelog.rst , 更新到 Build System 字段

已经添加注释,麻烦看一下是否合适

@fanghuaqi fanghuaqi merged commit cb752ac into Nuclei-Software:develop Oct 15, 2025
@kaishaoshao kaishaoshao deleted the feat/mculib-config branch October 21, 2025 10:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants