【完全版】Centos7如何安装pscan2?

pscan2的官方教程,按照下面Linux 64 bit的指示,一共分为4步。找一个地方,新建一个文件夹用来存放安装包,这里我们以 pscan2_setup文件夹为例。pscan2安装的位置在 /opt/pscan2

image-20230325220538901

第一步:安装Anaconda

Anaconda官网链接,点进去后,翻到底。点击下面的链接,会下载一个 Anaconda3-xxx.sh文件,安装参考这个教程。我这里是安装在 /opt/Anaconda3下,当然需要root权限。

image-20230325213936087

安装好了Anaconda3后,然后创建一个python3.8的环境,这个需要和你下载的pscan2的包要求的一致。这里执行:

1
conda create -p /opt/pscan2/python38 python=3.8

第二步:安装SuiteSparse

安装这个比较复杂,因为它需要比较多的依赖。擦汗中。它是一个数值求解用的专业库,十分强大。我这里是安装的最新版的SuiteSparse,因为想着最新版的KLU的库,可以让pscan2仿真更快吧。官方的安装链接

这里下载的是SuiteSparse v7.0.1,下载链接。点击下面的链接,会下载一个 SuiteSparse-xxx.tar.gz的包。将这个包复制到 /opt/pscan2目录下,执行 tar -xf SuiteSparse-xxx.tar.gz来解压该包,会得到一个 SuiteSparse-7.0.1的文件夹,cd进去。我这里是采用 make local的方式,就是只把 .so文件释放到该目录下。

image-20230325221231573

下面都是在root下操作。

安装GMP

官网链接下载最新安装包。

1
2
3
4
5
6
7
8
9
10
11
解压,解压后的文件夹里,INSTALL文件是教程,记得认真看。
tar -xf gmp-xxx.tar

cd gmp-xxx

使用默认配置,即默认安装在/usr/local中
./configure

make
make check
make install

你的make要是提示版本太低啥的,需要升级一下cmake。我这里是把cmake升级到了3.26.1。

接下来需要安装GMP和MPFR,这两个是SuiteSparse需要的依赖。

安装MPFR

这里安装的mpfr v4.0.2版本,没有安装最新版,因为我没有在官网上找到最新版v4.2.0的patch文件,而找到了v4.0.2的patch文件。

v4.0.2的下载链接。下载好后,解压,先看下里面的INSTALL说明文件。然后按照下面的指示来操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd mpfr-4.0.2

将patch文件下载到当前目录:
wget https://www.mpfr.org/mpfr-4.0.2/allpatches

patch一下:
patch -N -Z -p1 < allpatches

./configure
make
make check

默认安装到/usr/local目录:
make install

安装GMP和MPFR还不是太难。

安装SuiteSparse

make local,报了下面的错,但是我敲 gcc -v,发现我的gcc是12.2.0版本的,已经满足要求了,此时需要先指定一下gcc的环境变量。

image-20230325222136883

先敲下面的代码,来指定一下gcc。参考链接

1
2
3
4
5
export CC=`which gcc`
export CXX=`which g++`

这里参考github官网:
CC=gcc CX=g++

当你指定了上面的gcc后,执行JOBS=32 make local,会发现还是会报那个错,如下图所示,这时发现它是卡在了GraphBLAS里。这是因为make的cache文件还没有更新,所以我们需要删除掉这个cache文件,敲 rm GraphBLAS/build/CmakeCache.txt,来删除掉它。

image-20230325225523636

再执行JOBS=32 make local,会发现通过了上面这个报错。

但是过一会,又遇到了一个新的报错。说我的mpfr版本太低,但是我明明已经安装好了 v4.0.2的mpfr,所以应该时路径没有指定到位。

image-20230325224842490

可以看到这次是卡在了SPEX中,在终端中执行:

1
2
3
4
5
export GMP_ROOT=/usr/local/lib/
export MPFR_ROOT=/usr/local/mpfr/

这里一定要记得删除掉上次的cache文件,不然你指定好了路径后,它还是会报相同的错误。
rm SPEX/build/CMakeCache.txt

这里只需要指定GMP和MPFR的root路径即可,它会自动去找的。然后再次执行 JOBS=32 make local。这次就没有报错了,顺利的跑完了。

这时你的lib下还是空的,还需要执行下面的命令,来生成shared libraries(.so文件)。

1
make install

image-20230325231327700

下面我又安照pscan2官方的指示,又到各个module里make了一下。

1
2
3
4
5
6
7
8
9
10
cd SuiteSparse_config
make library
cd ../AMD
make library
cd ../BTF
make library
cd ../COLAMD
make library
cd ../KLU
make library

最后需要把SuiteSparse的lib路径添加到你的 ~/.bashrc文件中,即在~/.bashrc中添加下面的内容,这样pscan2就可以找到这些.so文件了。

1
2
3
# SuiteSparse, used for pscan2
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/pscan2/SuiteSparse-7.0.1/lib
export LD_LIBRARY_PATH

第三步:安装pscan2

将下载好的 pscan2-1.0.33-py38_0.tar.bz2包放在 /opt/pscan2/目录下(这里不需要解压该包),然后执行 conda activate /opt/pscan2/python38 来激活这个python环境。然后执行 conda install pscan2-xx.tar.bz2,来安装这个包。执行完后,你的/opt/pscan2/python38/lib/python3.8/site-packages/下就会有pscan2的包了。

第四步:测试安装好的pscan2

下面找一个jtl的电路,来跑一个pscan2。准备好下面几个文件,其中.hdl .cir的文件读者可以参考pscan2的手册编写,而psui.py是一个调用pscan2 GUI的脚本。

image-20230325232918047

psui.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
from PyQt5.QtWidgets import QApplication

from pscan2 import *
from pscan2.psui import PSMainWindow


if __name__ == '__main__':
initialize([sys.argv[0],'main'])
app = QApplication(sys.argv)
mainWin = PSMainWindow.PSMainWindow()
mainWin.show()
sys.exit(app.exec_())

在上面这个目录下,开一个终端,先激活pscan2的python环境,conda activate /opt/pscan2/python38 。然后执行 python psui.py main来启动pscan2,此时应该会报找不到啥链接库之类的错误,我这里是报了找不到libamd.so,这是因为我虽然把 /opt/pscan2/SuiteSparse-7.0.1/lib加入到了 ~/.bashrc文件中,但是那个lib库里面没有 libamd.so,所以它说找不到。此时只需要在 /opt/pscan2/SuiteSparse-7.0.1/lib中为 libamd.so建立软连接即可,如下图所示。每加一个 .so文件的软链接后,就执行一下 python psui.py main,它会不断报新的库的错误,然后一个一个对应添加即可。当添加完所有的以后,应该还会报 PyQt5啥的找不到之类的错误,这是因为你现在的 /opt/pscan2/python38中还没有安装这些包,所以需要一个一个来安装,装好这些包以后,应该就可以启动pscan2的GUI了。

image-20230326152244124

下面是pscan2的界面,跑一下仿真,是可以运行的,也没有什么报错。

image-20230326152937027 image-20230326153103335

题外话

linux下,要格外注意 ~/.bashrc文件。假如用户要使用这个 /opt/pscan2下的pscan2软件,需要在自己的 ~/.bashrc中加入 condaSuiteSparse库的路径即可,conda的设置由 conda init自动管理的,用户不需要额外设置了,所以这里用户只需要添加下面的语句即可。

1
2
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/pscan2/SuiteSparse-7.0.1/lib
export LD_LIBRARY_PATH

~/.bashrc中其他的添加都可以去掉了,不然你可能会遇到下面的报错。我这里遇到了,重装了PyQt5还是不行,这篇博客给了我启发,应该Qt5的环境紊乱了。

1
Qt_5 not defined in file libQt5Core.so.5 with link time reference

在终端中执行 locate libQt5Core.so.5,可以看到有一堆路径中都有这个 .so5的包,于是我就把我的 ~/.bashrc中其他无关的路径注释掉了,上面的报错就没有了。

有用的话,记得点个赞哟~