我想将一个简单的程序"int (){返回0;}“编译到RISC-V处理器上。LLVM/Clang版本为9.0,我希望使用类似于以下https://github.com/riscv/riscv-tools的RISC模拟器运行已编译的程序
我的问题是,我不能只列出具有以下命令的clang支持的目标:
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支持。
发布于 2020-02-16 21:00:28
LLVM 9 发布说明明确表示,RISC-V支持从实验推广到官方支持.
事实上,在我的Fedora 31机器上,LLVM 9 Fedora包确实支持RISC-V:
$ llvm-objdump --version | grep riscv
riscv32 - 32-bit RISC-V
riscv64 - 64-bit RISC-V此外,我还可以使用LLVM工具链创建RISC-V二进制代码:
$ 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:
$ 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,例如:
$ 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之外的另一个链接器。
https://stackoverflow.com/questions/54670887
复制相似问题