在riscv64上编译spec2017的tools

背景

因为spec2017不自带riscv64架构的tools,我们如果要使用需要自己手动编译工具。但过程不是./buildtools 就简单完成的特将记录踩坑过程。

使用方法

将spec2017.iso 挂在至/mnt或其他空闲目录。
/mnt/install_archives/目录下会有tools-src.tar类似名字的压缩包,这就是制作tools的源码。

安装

在x86工作机的操作:
在/mnt目录 ./install.sh 输入一个空目录表示安装到此目录。
将上文的 tools-src.tar 解压至$install/tools
然后将整个$install 打包拷贝至riscv64板子。

build tool

因为x86上有现成tool 所以可以安装成功,到riscv64上需要重新buildtool。
首先 cd $install/tools/tools/src
直接执行./buildtools

  1. undefined reference to `__alloca'
    解决方法
    去make/glob/glob.c 中修改
    undefined reference to `__stat'
    这个错误解决方法一样
  2. Can't locate test_driver.pl
    再次运行./buildtools
    发现该目录下有这个文件,就是搜索路径不对
    解决方法
    里面说了好几种
    PERL_USE_UNSAFE_INC=1
require "test_driver.pl";
require "config-flags.pm"  把这两行前面加个`./`

这两种办法都会导致后面的test检查脚本通过不了,最直接的办法就是把当前目录加进lib

  1. configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
    正如他所说的。
    export FORCE_UNSAFE_CONFIGURE=1

  2. 出现error building Perl错误

解决方法:修改/home/ubuntu/cpu2006/tools/src/perl-5.12.3/Configure文件,将其中所有的

case "$gccversion" in

1*)

修改为

case "$gccversion" in

1.*)
  1. 2020年以后跑test会出错,修改TimeDate-2.30/t/getdate.t
require Time::Local;
-my $offset = Time::Local::timegm(0,0,0,1,0,70);
+my $offset = Time::Local::timegm(0,0,0,1,0,1970);

你可能感兴趣的:(SPEC2006,perl,开发语言)