[转帖]unmatched(riscv64)上编译,安装和移植SPEC CPU 2006

unmatched,riscv64,编译,安装,移植,spec,cpu · 浏览次数 : 0

小编点评

## 编译 spec CPU 2006 Toolset 的步骤详解: **1. 准备编译环境:** * 安装 GCC、gfortran、make、perl 等工具。 * 下载 spec CPU 2006 的源代码。 **2. 替换 config.guess 和 config.sub 文件:** * 在 `cpu2006/tools/src/config.guess` 和 `cpu2006/tools/src/config.sub` 文件中查找 `__alloca` 和 `__stat` 关键字,注释或删除它们。 **3. 编译 toolset:** * 运行 `./buildtools` 命令执行编译。 * 出现 `__alloca` 和 `__stat` 错误时,注释它们。 **4. 编译 Perl 测试:** * 修改 `cpu2006/tools/src/perl-5.12.3/Configure` 文件,将所有 `$gccversion` 的 `case` 语句改为 `$gccversion` 的 `case` 语句。 **5. 编译 TimeDate 测试:** * 修改 `cpu2006/tools/src/perl-5.12.3/Configure` 文件的最后一行,从 `runspec-test.linux-riscv64.out` 中提取测试失败的语句并修改成 `runspec-test.linux-riscv64.out` 的格式。 **6. 验证 toolset构建:** * 在编译成功后,运行 `./buildtools` 中的 `. ./shrc` 命令,生成 `linux-riscv64-118.tar` 包。 * 将 `linux-riscv64-118.tar` 包复制到当前路径下。 * 执行 `sudo tar xvf linux-riscv64-118.tar` 将包解压到 `/home/ubuntu/cpu2006` 目录下。 **7. 安装 SPEC CPU 2006 Toolset:** * 将 `./install.sh` 文件中的所有 `-d` 参数中的路径改为 `/home/ubuntu/cpu2006`。 * 执行 `./install.sh` 安装 Toolset。 **注意:** * 在移植打好包的 Toolset 时,如果不想重新编译所有文件,可以选择跳过校验和检查并直接安装。 * 建议参考 `runspec-test.linux-riscv64.out` 中的测试失败语句,并根据需要修改 `Configure` 文件中的配置。

正文

https://zhuanlan.zhihu.com/p/429399630

 

Linux ubuntu 5.11.0-1021-generic #22-Ubuntu SMP Tue Sep 28 15:19:16 UTC 2021 riscv64 riscv64 riscv64 GNU/Linux

Linux version 5.11.0-1021-generic (buildd@riscv64-qemu-lcy01-078) (gcc (Ubuntu 10.3.0-1ubuntu1) 10.3.0, GNU ld (GNU Binutils for Ubuntu) 2.36.1) #22-Ubuntu SMP Tue Sep 28 15:19:16 UTC 2021编译SPEC CPU 2006

1. 编译SPEC CPU 2006 Toolset

1.1 准备编译环境

由于目前SPEC CPU 2006源码中已经编译好toolset不支持RISC-V, 所以需要自己编译

安装gcc, g++, gfortran

$ sudo apt-get install build-essential
$ sudo apt-get install gfortran

安装完成后,检查安装是否正确

$ gcc -v
$ g++ -v
$ gfortran -v

将spec cpu 2006源码复制出来

$ sudo mount cpu2006-1.2.iso /mnt
$ mkdir cpu2006
$ cp -r /mnt/* cpu2006/

由于toolset源码中的config.guess,config.sub文件比较旧,需要替换为比较新的文件,新文件的地址如下:

找到源码中所有config.guess,config.sub文件进行替换

$ find /home/ubuntu/cpu2006/tools/src -name config.guess
$ find /home/ubuntu/cpu2006/tools/src -name config.sub

1.2 编译toolset

在toolset源码路径下执行./buildtools编译toolset

ubuntu@ubuntu:~/cpu2006/tools/src$ ./buildtools

编译的过程中会遇到错误,以下是我遇到的错误和相应的解决方法,供参考:

1)出现__alloca'和__stat'未定义的错误

解决方法:找到/home/ubuntu/cpu2006/tools/src/make-3.82/glob/glob.c文件,注释掉第211和第232这两行

2)出现重复定义的错误

解决方法:执行export CFLAGS="$CFLAGS -fcommon"(从最新的GCC 10版本以后开始,“-fno-common”将会默认开启,如果遇到编译不过的程序,请先改为“-fcommon”,再尝试编译试试看)

3) 'gets' undeclared here错误

解决方法:

修改文件/home/ubuntu/cpu2006/tools/src/specsum/gnulib/stdio.in.h,将第161-162行注释掉

修改/home/ubuntu/cpu2006/tools/src/tar-1.25/gnu/stdio.in.h, 将第146-147行注释掉

4)大量出现pow、floor、fmod、sin等函数未定义的错误

解决方法:执行执行export PERLFLAGS="-A libs=-lm -A libs=-ldl -A libs=-lc -A ldflags=-lm -A cflags=-lm -A ccflags=-lm -Dlibpth=/usr/lib/riscv64-linux-gnu -A ccflags=-fwrapv"

5)出现error building Perl错误

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

case "$gccversion" in

1*)

修改为

case "$gccversion" in

1.*)

改为

6)error running TimeDate-1.20 test suite

这是perl的Time::Local::timegm函数的参数错了

解决方法:/home/ubuntu/cpu2006/tools/src/TimeDate-1.20/t/getdate.t文件第159行

my $offset = Time::Local::timegm(0,0,0,1,0,70);

修改为

my $offset = Time::Local::timegm(0,0,0,1,0,1970);

改为

修改完以上错误后,再次执行./buildtools,可以编译成功。在编译过程中会有部分perl测试项未通过,出现提示

Hey! Some of the Perl tests failed! If you think this is okay, enter y now:

这时直接输入y即可

编译成功后,显示如下

验证toolset是否构建成功:在编译成功提示信息中的路径Top of SPEC benchmark tree is '/home/ubuntu/cpu2006'下执行:

ubuntu@ubuntu:~/cpu2006$ . ./shrc
ubuntu@ubuntu:~/cpu2006$ runspec -V

构建成功的tool都在/home/ubuntu/cpu2006/bin/中

1.3 toolset打包

在/home/ubuntu/cpu2006/tools/bin/下创建文件夹linux-riscv64,并在该文件夹下创建description文件。description文件用来描述新构建工具支持哪些系统和它构建的环境,运行install.sh时将会显示此文件内容,文件内容如下

回到/home/ubuntu/cpu2006目录,执行下面命令将toolset打包

ubuntu@ubuntu:~/cpu2006$ packagetools linux-riscv64

在/home/ubuntu/cpu2006/tools/bin/linux-riscv64下会生成tool,打好的包是/home/ubuntu/cpu2006目录下的linux-riscv64-118.tar

2. 安装SPEC CPU 2006 Toolset

在/home/ubuntu/cpu2006目录下运行install.sh进行安装

ubuntu@ubuntu:~/cpu2006$ ./install.sh -u linux-riscv64 -d /home/ubuntu/cpu2006_install

其中-d后面是安装路径,安装过程中会遇到错误退出,这些错误是perl的一些测试项fail

查看runspec-test.linux-riscv64.out

解决方法:在tools/src/perl-5.12.3/Configure文件中的第4690行下面新增代码

因为修改了Configure文件,需要重新编译,重新编译完成后再按照1.3的内容进行打包,在安装打好包的toolset之前,先执行export SPEC_INSTALL_NOCHECK=1,跳过校验和检查,然后再次安装,就可以安装成功了。

3. 移植打好包的SPEC CPU 2006 Toolset

如果不想在其他unmatched上重新编译,想直接将编译好并打好包的toolset移植上去,方法是

$ sudo mount cpu2006-1.2.iso /mnt
$ mkdir cpu2006
$ cp -r /mnt/* cpu2006/
$ chmod -R +w cpu2006/
$ cd cpu2006/
$ scp -r ubuntu@192.168.2.41:/home/ubuntu/cpu2006/linux-riscv64-118.tar ./    //将编译并打包好的toolset复制到当前路径下
$ sudo tar xvf linux-riscv64-118.tar
$ export SPEC_INSTALL_NOCHECK=1 
$ mkdir ../cpu2006_install
$ ./install.sh -u linux-riscv64 -d /home/ubuntu/cpu2006_install
$ cd ../cpu2006_install
$ . ./shrc

经过上面的操作,就可以执行runspec命令进行测试了

与[转帖]unmatched(riscv64)上编译,安装和移植SPEC CPU 2006相似的内容:

[转帖]unmatched(riscv64)上编译,安装和移植SPEC CPU 2006

https://zhuanlan.zhihu.com/p/429399630 Linux ubuntu 5.11.0-1021-generic #22-Ubuntu SMP Tue Sep 28 15:19:16 UTC 2021 riscv64 riscv64 riscv64 GNU/Linux

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /

[转帖]Windows Server 2022 简体中文版、英文版下载 (updated Oct 2022)

https://sysin.org/blog/windows-server-2022/ Windows Server 2022 正式版,2022 年 10 月更新,VLSC Posted by sysin on 2022-10-27 Estimated Reading Time 8 Minutes