前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SPEC2006编译安装

SPEC2006编译安装

原创
作者头像
风起--追风
发布2023-10-26 15:49:20
5510
发布2023-10-26 15:49:20
举报
文章被收录于专栏:sql与spec性能sql与spec性能

SPEC2006软件编译安装

IOS软件解压

在win操作系统用winRAR软件对ISO文件进行直接解压,不可将ISO文件用刻盘软件进行刻盘,会丢失文件。本次解压到/home/speccpu/目录下

替换config.guess\sub文件

然后将拷贝出来tools里的config.guess和config.sub替换,一共7处12个文件替换

find /home/speccpu/ -name *.guess/sub

cp 本机config.sub/guess 到对应目录下替换。

修改spec2006内文件

cd /home/speccpu/tools/ 目录下

修改 make-3.82/glob/glob.c

把 # if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION 改成 # if _GNU_GLOB_INTERFACE_VERSION >= GLOB_INTERFACE_VERSION,禁用 make 自带的 glob 实现,解决 alloca 和 stat 的问题

@@ -52,7 +52,7 @@

#define GLOB_INTERFACE_VERSION 1

#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1

# include <gnu-versions.h>

-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION

+# if _GNU_GLOB_INTERFACE_VERSION >= GLOB_INTERFACE_VERSION

# define ELIDE_CODE

# endif

#endif

修改 make-3.82/make.h

在 struct rlimit stack_limit; 前面添加 extern,解决 -fno-common 的问题

@@ -344,7 +344,7 @@

#endif

#ifdef SET_STACK_SIZE

# include <sys/resource.h>

-struct rlimit stack_limit;

+extern struct rlimit stack_limit;

#endif

struct floc

修改 make-3.82/dir.c

在 dir_setup_glob 函数里添加一句 gl->gl_lstat = lstat;,解决 make: ./file.c:158: enter_file: Assertion strcache_iscached (name) failed. 的问题(参考了 [PATCH v2] make: 4.2.1 -> 4.3)

@@ -1213,6 +1213,7 @@

gl->gl_readdir = read_dirstream;

gl->gl_closedir = ansi_free;

gl->gl_stat = local_stat;

+ gl->gl_lstat = lstat;

/* We don't bother setting gl_lstat, since glob never calls it.

The slot is only there for compatibility with 4.4 BSD. */

}

修改tar-1.25/gnu/stdio.in.h 和 specsum/gnulib/stdio.in.h

找到 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); 一句,注释掉,解决 gets undefined 的问题(参考了 CentOS 下 Git 升级)

@@ -159,7 +159,7 @@

so any use of gets warrants an unconditional warning. Assume it is

always declared, since it is required by C89. */

#undef gets

-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

+// _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

#if @GNULIB_FOPEN@

# if @REPLACE_FOPEN@

修改 buildtools

在 perl 的 configure 命令中的 -A ldflags 附近,把 -A libs=-lm -A ccflags=-fwrapv 添加到命令中,解决找不到 math 函数的问题和 numconvert.t 测试失败的问题(参考 https://serverfault.com/a/801997/323597 和 如何在 Hifive Unmatched 开发板上安装 SPEC CPU 2006):

@@ -355,7 +355,7 @@

LD_LIBRARY_PATH=`pwd`

DYLD_LIBRARY_PATH=`pwd`

export LD_LIBRARY_PATH DYLD_LIBRARY_PATH

- ./Configure -dOes -Ud_flock $PERLFLAGS -Ddosuid=undef -Dprefix=$INSTALLDIR -Dd_bincompat3=undef -A ldflags=-L${INSTALLDIR}/lib -A ccflags=-I${INSTALLDIR}/include -Ui_db -Ui_gdbm -Ui_ndbm -Ui_dbm -Uuse5005threads ; testordie "error configuring perl"

+ ./Configure -dOes -Ud_flock $PERLFLAGS -Ddosuid=undef -Dprefix=$INSTALLDIR -Dd_bincompat3=undef -A libs=-lm -A ccflags=-fwrapv -A ldflags="-L${INSTALLDIR}/lib" -A ccflags="-I${INSTALLDIR}/include -g" -Ui_db -Ui_gdbm -Ui_ndbm -Ui_dbm -Uuse5005threads ; testordie "error configuring perl"

$MYMAKE; testordie "error building Perl"

./perl installperl; testordie "error installing Perl"

Setspecperllib

修改 perl-5.12.3/Configure

把判断 GCC 版本的 1* 都改成 1.*,解决 miniperl Segmentation fault 的问题(参考 unmatched(riscv64) 上编译,安装和移植 SPEC CPU 2006)

@@ -4536,7 +4536,7 @@

fi

$rm -f try try.*

case "$gccversion" in

-1*) cpp=`./loc gcc-cpp $cpp $pth` ;;

+1.*) cpp=`./loc gcc-cpp $cpp $pth` ;;

esac

case "$gccversion" in

'') gccosandvers='' ;;

@@ -5128,7 +5140,7 @@

case "$hint" in

default|recommended)

case "$gccversion" in

- 1*) dflt="$dflt -fpcc-struct-return" ;;

+ 1.*) dflt="$dflt -fpcc-struct-return" ;;

esac

case "$optimize:$DEBUGGING" in

*-g*:old) dflt="$dflt -DDEBUGGING";;

@@ -5143,7 +5155,7 @@

;;

esac

case "$gccversion" in

- 1*) ;;

+ 1.*) ;;

2.[0-8]*) ;;

?*) set strict-aliasing -fno-strict-aliasing

eval $checkccflag

@@ -5245,7 +5257,7 @@

*) cppflags="$cppflags $ccflags" ;;

esac

case "$gccversion" in

-1*) cppflags="$cppflags -D__GNUC__"

+1.*) cppflags="$cppflags -D__GNUC__"

esac

case "$mips_type" in

'');;

修改 perl-5.12.3/Configure

在 if $ok; then 后面加上如下代码,解决 magic.t 测试失败的问题(参考 如何在 Hifive Unmatched 开发板上安装 SPEC CPU 2006 和 Tests fail with GCC 5.0 because Errno cannot obtain errno constants):

elif echo 'Maybe "'"$cc"' -E -ftrack-macro-expansion=0" will work...'; \

$cc -E -ftrack-macro-expansion=0 <testcpp.c >testcpp.out 2>&1; \

$contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then

echo "Yup, it does."

x_cpp="$cc $cppflags -E -ftrack-macro-expansion=0"

x_minus='';

elif echo 'Maybe "'"$cc"' -E -ftrack-macro-expansion=0 -" will work...';

$cc -E -ftrack-macro-expansion=0 - <testcpp.c >testcpp.out 2>&1; \

$contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then

echo "Yup, it does."

x_cpp="$cc $cppflags -E -ftrack-macro-expansion=0"

x_minus='-';

@@ -4688,6 +4688,18 @@

if $ok; then

: nothing

+elif echo 'Maybe "'"$cc"' -E -ftrack-macro-expansion=0" will work...'; \

+ $cc -E -ftrack-macro-expansion=0 <testcpp.c >testcpp.out 2>&1; \

+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then

+ echo "Yup, it does."

+ x_cpp="$cc $cppflags -E -ftrack-macro-expansion=0"

+ x_minus='';

+elif echo 'Maybe "'"$cc"' -E -ftrack-macro-expansion=0 -" will work...';

+ $cc -E -ftrack-macro-expansion=0 - <testcpp.c >testcpp.out 2>&1; \

+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then

+ echo "Yup, it does."

+ x_cpp="$cc $cppflags -E -ftrack-macro-expansion=0"

+ x_minus='-';

elif echo 'Maybe "'"$cc"' -E" will work...'; \

$cc -E <testcpp.c >testcpp.out 2>&1; \

$contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then

修改 TimeDate-1.20/t/getdate.t

修改 TimeDate-1.20/t/getdate.t 的 my $offset = Time::Local::timegm(0,0,0,1,0,70); 为 my $offset = Time::Local::timegm(0,0,0,1,0,1970);,解决 error running TimeDate-1.20 test suite 报错(参考 unmatched(riscv64) 上编译,安装和移植 SPEC CPU 2006):

@@ -156,7 +156,7 @@

!;

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);

@data = split(/\n/, $data);

开始编译

这样就可以正常完成 ./buildtools 了,中间 perl 测试出错,按 y 忽略即可。

编译报错及解决

编译过程中出现“you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment)错误

输入:echo "export set FORCE_UNSAFE_CONFIGURE=1" >> /etc/profile

source /etc/profile

安装spec2006

source shrc

packagetools linux-sw64

export SPEC_INSTALL_NOCHECK=1

./install.sh -d /home/spec2006-install

注意编译目录和安装目录目标目录不可以是同一目录

系统环境设置

建立软连接

ln -s /usr/lib/libcrypt.so /usr/lib/libcrypt.so.1.1

安装依赖:

yum install llvm-devel llvm libgfortran libgfortran-static libstdc++-static

运行程序

运行gcc及对应配置文件

本次运行采用10.3.0 sw1.0.1(ID:652e27fed3)版本运行

运行命令

整机命令:

. ./shrc

runspec -c 配置文件名称.cfg -a scrub all

runspec -c 配置文件名称.cfg -n 1 -r 64 –noreportable all

单核命令:

. ./shrc

runspec -c 配置文件名称.cfg -a scrub all

runspec -c 配置文件名称.cfg -n 1 -r 1 –noreportable a

其他

跑一遍出结果方式:

在配置文件加命令:mean_anyway = 1

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SPEC2006软件编译安装
    • IOS软件解压
      • 替换config.guess\sub文件
        • 修改spec2006内文件
          • 修改 make-3.82/glob/glob.c
          • 修改 make-3.82/make.h
          • 修改 make-3.82/dir.c
          • 修改tar-1.25/gnu/stdio.in.h 和 specsum/gnulib/stdio.in.h
          • 修改 buildtools
          • 修改 perl-5.12.3/Configure
          • 修改 perl-5.12.3/Configure
          • 修改 TimeDate-1.20/t/getdate.t
        • 开始编译
          • 编译报错及解决
            • 安装spec2006
            • 系统环境设置
              • 建立软连接
                • 安装依赖:
                • 运行程序
                  • 运行gcc及对应配置文件
                    • 运行命令
                      • 其他
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档