Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MDK armcc编译器使用问题 #1835

Closed
as564335sa opened this issue Nov 16, 2021 · 21 comments
Closed

MDK armcc编译器使用问题 #1835

as564335sa opened this issue Nov 16, 2021 · 21 comments
Milestone

Comments

@as564335sa
Copy link
Contributor

我试了试新增的armcc支持,有问题:
ldflag中需要增加一些flag,这个可以用add_ldflag指定;
armasm编译.s有问题,这个好像没有API可以指定,当使用microlib的时候,可能由于不能添加-D__MICROLIB flag,编译不过,必须取消编译和链接过程中的-D__MICROLIB定义才行,这里貌似需要调整
工程我打包上传了,文件夹里的builder.mk,是从EIDE里弄出来的编译选项,可以参考一下;
par.zip

@as564335sa as564335sa added the bug label Nov 16, 2021
@as564335sa
Copy link
Contributor Author

就是ASFLAGS中有一个--pd "__MICROLIB SETA 1"这个选项,我用add_asflags添加没成功,我再试试

@waruqi
Copy link
Member

waruqi commented Nov 16, 2021

-Dxx 走 add_defines("__MICROLIB") 就行了,其他flags 走 add_asflags

参考 https://github.com/xmake-io/xmake/blob/master/tests/projects/mdk/hello/xmake.lua 例子,里面我加了 __MICROLIB 的

@as564335sa
Copy link
Contributor Author

-Dxx 走 add_defines("__MICROLIB") 就行了,其他flags 走 add_asflags

参考 https://github.com/xmake-io/xmake/blob/master/tests/projects/mdk/hello/xmake.lua 例子,里面我加了 __MICROLIB 的

在启用MICROLIB的时候,armasm有个编译选项,在makefile里是这样的--pd "__MICROLIB SETA 1" ,这个用add_asflags添加应该怎么写啊,试了好几种方式都不对

@as564335sa
Copy link
Contributor Author

add_asflags("--pd __MICROLIB SETA 1")这样写xmake输出的编译选项是--pd __MICROLIB SETA 1,不对,
这样写add_asflags("--pd "__MICROLIB SETA 1"") xmake输出的是这样的 --pd ""__MICROLIB SETA 1"",还是不对

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

add_asflags("--pd", "__MICROLIB SETA 1") 试试

@as564335sa
Copy link
Contributor Author

add_asflags("--pd", "__MICROLIB SETA 1") 试试

这样不行,这样和add_asflags("--pd __MICROLIB SETA 1")是一样的

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

__MICROLIB 是 mdk 程序 并且对所有 cpu 都是必须的么? 如果是的话,我可以内置上

@as564335sa
Copy link
Contributor Author

__MICROLIB 是 mdk 程序 并且对所有 cpu 都是必须的么? 如果是的话,我可以内置上

这是一个可选项,选择是使用完整的c库还是microlib,相当于gcc里是否启用nanolib,需要可配置的

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

我改进过了,直接走 add_defines("__MICROLIB") 就行了,对 armasm 也生效,b7e124e

再试试,xmake update dev

@as564335sa
Copy link
Contributor Author

我改进过了,直接走 add_defines("__MICROLIB") 就行了,对 armasm 也生效,b7e124e

再试试,xmake update dev

刚刚更新了,没有效果?
QQ截图20211117111904

@as564335sa
Copy link
Contributor Author

对了,如果可以建议把link里也加入选项,--library_type=microlib,在启用microlib的时候

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

刚刚更新了,没有效果?

xmake update dev 是全量更新 win上得等ci跑完,要么仅更新脚本,xmake update -s dev

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

对了,如果可以建议把link里也加入选项,--library_type=microlib,在启用microlib的时候

你可以列下 具体有哪些目标库类型,程序类型,以及它们需要的配置集

回头可以根据 rule 针对性配置一些基础配置,例如 add_rules("mdk.microlib")

@waruqi waruqi added improvement and removed bug labels Nov 17, 2021
@waruqi waruqi added this to the v2.6.1 milestone Nov 17, 2021
@as564335sa
Copy link
Contributor Author

ok了,谢谢大佬,可选的目标库我只见过microlib这一个,可选择启用或者不启用,其它用到的选项目前都可以用add flags添加,完美

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

--library_type=microlib

这个也是必须的么?对于 microlib ..armcc/armclang 都是这个flag?

@as564335sa
Copy link
Contributor Author

是的,启用microlib armcc、armasm、armlink都是需要启用的,刚看了下armclang编译器的参数,也是同样的flag,目前cortexm系列上armcc就够用了

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

--library_type=microlib

这个是 ldflags 还是 cxflags? 我加到 ldflags/arflags 里面提示不支持么

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

--library_type=microlib

这个是 ldflags 还是 cxflags? 我加到 ldflags/arflags 里面提示不支持么

看错了,是 ldflags,另外 microlib 这个是 生成库需要,还是 console 也需要? 还是根据 链接的库 是 microlib 来决定 console 也要加 --library_type=microlib

@as564335sa
Copy link
Contributor Author

都需要,这个在keil里是个全局选项,勾选的话会自动在armcc,armasm,armlink加上对应的flag

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

看了下,这个应该是 c库选项,可以作为 runtime 的配置提供。。类似 vs 的 MT/MD runtime

我改进了下,可以改成这样配置,set_runtimes("microlib") 会自动对 mdk 加上对应的 flags

add_rules("mode.debug", "mode.release")

set_runtimes("microlib")

target("foo")
    add_rules("mdk.static")
    add_files("src/foo/*.c")

target("hello")
    add_deps("foo")
    add_rules("mdk.console")
    add_files("src/*.c", "src/*.s")
    add_includedirs("src/lib/cmsis")

@as564335sa
Copy link
Contributor Author

Nice! 试了下,好用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants