1. 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

  1. $ sudo apt-get install build-essential
  2. $ sudo apt-get install gfortran

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

  1. $ gcc -v
  2. $ g++ -v
  3. $ gfortran -v

将spec cpu 2006源码复制出来

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

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

http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD

http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD

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

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

1.2 编译toolset

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

  1. 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'下执行:

  1. ubuntu@ubuntu:~/cpu2006$ . ./shrc
  2. 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打包

  1. 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进行安装

  1. 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移植上去,方法是

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

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

[转帖]unmatched(riscv64)上编译,安装和移植SPEC CPU 2006的更多相关文章

  1. Linux上编译安装PHP

    这篇文章主要介绍了关于Linux上编译安装PHP,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 之前在服务器上编译安装了PHP运行环境,但是安装完过了一段时间就差不多忘记了,只是零零星 ...

  2. MAC 上编译安装nginx-rtmp-module 流媒体服务器

    MAC 上编译安装nginx-rtmp-module 流媒体服务器 记录踩坑过程 下载nginx和nginx-rtmp-module wget http://nginx.org/download/ng ...

  3. 【转载】基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)——介绍、安装准备、安装、config文件以及运行脚本介绍

    基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)--介绍.安装准备.安装.config文件以及运行脚本介绍 其他 2018-0 ...

  4. 在CentOS6.7操作系统上编译安装httpd2.4

    功能描述: 在CentOS6.7操作系统上,编译安装apache服务,实现定制功能等 一.安装前提 1)安装编译httpd需要的软件包 [root@bqe6tewv41kx ~]#  yum -y i ...

  5. 在树莓派1B上编译安装lnmp服务器

    最近一周给部门内部搭建考试系统,选择使用PHPEMS.这是个开源的系统,唯一缺点是PHP的版本比较低,只能使用5.2或5.3.而我的树莓派系统更新后使用apt-get安装得到的PHP版本为5.4.由于 ...

  6. 尝试在CentOS7.2上编译安装Swift

    苹果提供 Ubuntu上构建Swift 的教程,通过这个教程我尝试使用CentOS7.2上玩儿一把.目前已经成功在CentOS7.2上班成功安装 swift 4.0 https://github.co ...

  7. 在centos6,7 上编译安装内核

      小编以前写过一篇软件的源码编译安装,今天小编再给大家带来一篇内核的编译安装.   今天,就以centos7 编译安装最新版本4.13.2 内核为例,给大家详解.编译安装之前,检查一下自己的磁盘空间 ...

  8. 最小化安装的centos7.5上编译安装git2.19

    VMware Workstation已经采用最小化安装CentOS7,显示版本为CentOS7.5,准备采用yum安装git. 采用yum list git发现可安装的GIT软件包版本1.8.3.1, ...

  9. 如何在linux平台上编译安装zlib软件(公司部分线上机器缺少zlib不能安装supervisor)

    文章在Centos  6.5 linux平台上演示一下如何进行编译安装zlib软件,并配置相关的选项加载使用.示范从下载到安装并配置进行使用过程一系列整套讲解,希望可以给网友考虑使用,谢谢.   工具 ...

  10. centos7上编译安装mysql5.6

    注意,在做实验室统一关闭防火墙做的,在生产环境需要做防火墙规则的,大家要注意,做的时候尽量都是模仿生产环境的,比如服务一般都在/data/soft下面,尽量避免在/usr/local/下面. 安装编译 ...

随机推荐

  1. [Python急救站]回文数的判断

    回文数判断:回文数是指这个数颠倒后,与原数一致,如32223.12221等. 第一个程序是由用户输入,并判断是否是回文数. a = eval(input("请输入一个五位数")) ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题

    文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题 二.试说明 MAX-HEAP-INSERT(A,10)在堆A=(15,13,9,5,12,8,7,4,0,6,2,1 ...

  3. 平衡树——AVL算法

    平衡树--AVL算法 平衡树建立在二叉搜索树的基础上,加入了两侧子树大小相对平衡的特性而避免了很多情况下的算法退化.这里AVL算法实现的AVL树就是平衡树的一种. 1.二叉搜索树 在说平衡树之前我们得 ...

  4. MySQL篇:第五章_详解DDL语言

    DDL语句 库和表的管理 库的管理: 一.创建库 create database 库名 二.删除库 drop database 库名 表的管理: 1.创建表 CREATE TABLE IF NOT E ...

  5. 技术实践丨PostgreSQL开启Huge Page场景分析

    PostgreSQL用户经常发现,服务端在连接数较大的情况下,会出现系统内存消耗过多的情况,严重者可能会造成OOM.但是服务端配置的共享内存(shared_buffers,wal_buffers等)是 ...

  6. 代码也能“杀”虫:此虫,真虫非Bug也

    摘要:看这群大学生如何保护粮食,让害虫.霉变无处遁形. 国以民为本,民以食为天,对有着14亿人口的中国来说,粮食安全,一直都是关系国计民生的头等大事. 2010年以来,我国人均粮食占有量持续高于世界平 ...

  7. 如何使用appuploader制作描述文件​

    如何使用appuploader制作描述文件​ 承接上文我们讲述了怎么制作证书,本文我们来看下怎么制作描述文件吧.​制作描述文件前我们首先我们来添加一个测试设备,后面再制作描述文件. 1.添加测试设备​ ...

  8. 在Flutter中使用SetState无效?可能是忽略了这个!

    这次是Flutter开发技术分享,解决的问题点来自本人实际的开发经历. 首先描述一下问题:在某个组件中调用setState()方法更新该组件状态,结果是无法做到更新效果,组件仍然维持原状. 下面我们用 ...

  9. 智能制造之 SMT 产线监控管理可视化

    前言 随着<中国制造2025>的提出,制造业迎来了全新的发展机遇.更多的企业将制造业信息化技术进行广泛的应用,如 MES 系统.数字孪生以及生产管理可视化等技术的研究应用,已经成为社会各界 ...

  10. SpringCloud学习 系列十、服务熔断与降级(1-简介)

    系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...