首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用LLVM/Clang编译到RISC-V目标?

如何使用LLVM/Clang编译到RISC-V目标?
EN

Stack Overflow用户
提问于 2019-02-13 13:03:09
回答 1查看 12.5K关注 0票数 8

我想将一个简单的程序"int (){返回0;}“编译到RISC-V处理器上。LLVM/Clang版本为9.0,我希望使用类似于以下https://github.com/riscv/riscv-tools的RISC模拟器运行已编译的程序

我的问题是,我不能只列出具有以下命令的clang支持的目标:

代码语言:javascript
复制
llc --version
llc -march=xxARCHTYPExx -mattr=help

并且没有列出任何类型的riscv处理器。

所以我试着查找三重文件:llvm-project\llvm\include\llvm\ADT\Triple.h

然后尝试一个命令,如:clang hello.c -target riscv32 -march=rv32imafd

但我得到了以下错误:

错误:无法创建目标:“没有可用目标与三重”riscv32“兼容”

有人能帮我找到一个有效的RISC-V目标吗?我只是简单不能编译程序,但我知道LLVM有一个RISC-V支持。

EN

回答 1

Stack Overflow用户

发布于 2020-02-16 21:00:28

LLVM 9 发布说明明确表示,RISC-V支持从实验推广到官方支持.

事实上,在我的Fedora 31机器上,LLVM 9 Fedora包确实支持RISC-V:

代码语言:javascript
复制
$ llvm-objdump --version | grep riscv
    riscv32    - 32-bit RISC-V
    riscv64    - 64-bit RISC-V

此外,我还可以使用LLVM工具链创建RISC-V二进制代码:

代码语言:javascript
复制
$ clang --target=riscv64 -march=rv64gc rotate.s -c -o rotate.o
$ file rotate.o
rotate.o: ELF 64-bit LSB relocatable, UCB RISC-V, version 1 (SYSV), not stripped

虽然它不包括用于RISC-V目标的libc:

代码语言:javascript
复制
$ clang --target=riscv64 -march=rv64gc hello-world.c -o hello-world
hello-world.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^~~~~~~~~
1 error generated.

然而,您并不需要这样的服务--您可以直接调用syscalls来查询您的hello world,例如:

代码语言:javascript
复制
$ clang  --target=riscv64 -march=rv64gc  hello.s -c -o hello.o
$ ld.lld hello.o -o hello
$ spike --isa=RV64gc ~/local/riscv/pk/riscv64-unknown-elf/bin/pk ./hello
bbl loader
Hello World

我不使用clang进行链接,因为我似乎无法说服clang与-fuse-ld一起使用除/usr/bin/ld之外的另一个链接器。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54670887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档