我想使用 riscv-gcc 在 Arty-A7 上实现一个 Ibex(RISCV 核心(示例,但我无法正确构建它。 在"制造"阶段之后,它一直失败。它似乎与 zlib 有关,但我不太确定,因为这是我第一次从源代码构建任何东西。我从 https://github.com/riscv/riscv-gcc 那里得到了来源
我已经配置它执行为
../riscv-gcc/configure --enable-multilib
make
然后它退出并显示以下错误
checking whether the gcc -m32 linker (ld -m elf_x86_64 -m elf_i386) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
make[2]: *** [configure-stage1-zlib] Error 1
make[2]: Leaving directory `/home/alfred/Desktop/Work/riscv_gcc_install'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/home/alfred/Desktop/Work/riscv_gcc_install'
make: *** [all] Error 2
我也尝试过运行制作(相同的配置(
make all-gcc
但它会产生此错误
checking if gcc -m32 supports -fno-rtti -fno-exceptions... no
checking for gcc -m32 option to produce PIC... -fPIC -DPIC
checking if gcc -m32 PIC flag -fPIC -DPIC works... yes
checking if gcc -m32 static flag -static works... no
checking if gcc -m32 supports -c -o file.o... yes
checking if gcc -m32 supports -c -o file.o... (cached) yes
checking whether the gcc -m32 linker (ld -m elf_x86_64 -m elf_i386) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
make: *** [configure-zlib] Error 1
除了按照 https://gcc.gnu.org/install/prerequisites.html 的建议检查先决条件库之外,我不确定到目前为止该怎么做。谁能帮我?
[更新 27/11/19]
我尝试从安装完整的 riscv-gnu 工具链以避免缺少依赖项,但我仍然遇到错误。我确实运行了建议的 apt-get 命令来安装先决条件。
我运行了针对riscv32的建议配置,并继续按如下方式进行制作
./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d
make linux
然后我得到了这个错误
make[3]: Entering directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
/bin/bash /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../ylwrap /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/arparse.y y.tab.c arparse.c y.tab.h `echo arparse.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output arparse.output -- bison -y -d
m4: unrecognized option '--gnu'
Try `m4 --help' for more information.
make[4]: Entering directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
/bin/bash /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../ylwrap /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/arparse.y y.tab.c arparse.c y.tab.h `echo arparse.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output arparse.output -- bison -y -d
m4: unrecognized option '--gnu'
Try `m4 --help' for more information.
make[4]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
/bin/bash /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../ylwrap /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.y y.tab.c sysinfo.c y.tab.h `echo sysinfo.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output sysinfo.output -- bison -y -d
/home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
m4: unrecognized option '--gnu'
Try `m4 --help' for more information.
if [ -r sysinfo.c ]; then
gcc -c -I. -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -I/home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../zlib -g -O2 sysinfo.c ;
else
gcc -c -I. -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -I/home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/../zlib -g -O2 /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.c ;
fi
gcc: error: /home/alfred/Desktop/Work/riscv-gnu-toolchain/riscv-binutils/binutils/sysinfo.c: No such file or directory
gcc: fatal error: no input files
compilation terminated.
make[3]: *** [sysinfo.o] Error 4
make[3]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux/binutils'
make[2]: *** [all-binutils] Error 2
make[2]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/alfred/Desktop/Work/riscv-gnu-toolchain/build-binutils-linux'
make: *** [stamps/build-binutils-linux] Error 2
我注意到m4无法识别某个参数
--gnu
我应该关注这个吗?
[更新 16/12/2019]
按照建议,我尝试在 Ubuntu 18.04.03 中构建工具链(最初我在 14.04 上(,它似乎很好地解决了这个问题!事实证明,在操作系统依赖性方面,工具链确实是"脆弱的"。非常感谢您的帮助!
错误"不允许链接测试"与不完整的工具链(如ld,binutils,libc(有关,类似于报告 inhttps://gcc.gnu.org/ml/gcc-help/2012-07/msg00018.html。
从您的问题中不清楚您使用哪个指令来构建 gcc。我认为您不应该搜索仅 gcc 构建,而应该搜索完整的工具链说明,例如 https://github.com/riscv/riscv-gnu-toolchain 或 Ibex 作者网站上的内容。 第 https://ibex-core.readthedocs.io/en/latest/verification.html#getting-started 页中的 Ibex 文档有一些指向"GCC 设置"的链接,但它用于验证,没有完整的说明。
在第 https://github.com/riscv/riscv-gcc/issues/143 期中,有">没有 binutils 就无法构建 gcc"和">没有 C 库就无法构建有用的gcc"的信息,因此请尝试构建完整的工具链,而不仅仅是 gcc。
在lowrisc的早期项目中,有构建工具链的指令(组合gcc + binutils + newlib(: https://www.lowrisc.org/blog/2017/09/building-upstream-risc-v-gccbinutilsnewlib-the-quick-and-dirty-way/- 你可能想用另一个git(riscv-gcc(修改指令。或者只是尝试 https://github.com/riscv/riscv-gnu-toolchain
我发现RISC-V工具链在操作系统依赖性方面非常脆弱。工具链团队使用 Ubuntu 16,人们看到的很多错误都是从该版本以来 Linux 生态系统的变化引起的。
我通过创建一个配置为使用 Ubuntu 16 的 Vagrantfile 并完成官方步骤来解决这个问题,至少对我来说,它可以很好地构建工具。如果你有兴趣,它张贴在我沿着这些行提出的堆栈溢出问题中。如果您需要以不同的方式配置工具,则在Vagrantfile中执行非常简单。
尝试此版本的整数 riscv。我已经试过了,通过了。
git clone https://github.com/riscv/riscv-gnu-toolchain
git checkout 411d134
git submodule update --init --recursive
mkdir build
cd build
../configure --prefix=/opt/riscv32i --with-arch=rv32i --with-abi=ilp32
make -j8
如果您的 riscv 具有 mul/div 模块,请添加 M 标准扩展。
../configure --prefix=/opt/riscv32im --with-arch=rv32im --with-abi=ilp32
如果您的 riscv 是 64 位整数内核:
../configure --prefix=/opt/riscv64i --with-arch=riscv64i --with-abi=lp64
选择要构建的选项:"M" 整数乘法和除法的标准扩展
"A" 原子指令的标准扩展
"F" 单精度浮点的标准扩展
"D" 双精度浮点的标准扩展
">
Q" 夸德精度浮点的标准扩展
"C" 压缩指令的标准扩展
I、M、A、F 和 D 的"G"组合。
ILP32/ILP32F/ILP32D 国际-32位 长-32位指针-32位
LP64/LP64F/LP64D 国际-32位 长-64位 指针-64位
vexrisc 完整项目在 arty a7 35t 上实现 riscv,包括工具链编译和使用 IntelliJ IDE 构建 riscv 项目和内部 USB jtag 调试可能会对您有所帮助。
https://fatalfeel.blogspot.com/2013/12/risc-v-on-arty-a7-35t.html
也许你想在riscv上尝试Linux。它基于 vexrisc
https://github.com/SpinalHDL/SaxonSoc