古いmac(10.12/sierra)上でsse4.1のテストを行いたいのですが、テストコードを用意するにも手間がかかかるし抜けがあるのもこまるので、何か良い方法はないかと調べていたところ、gccにsse4.1のテストコードがふくまれているのでやってみることにしました。
まず、gccのソースを用意しビルドします。純正環境に手を加えたくないので、xcode以外にgccのビルドに必要なものは、macportsをつかい環境を整えます。
macportsは、macportsのホームページから.pkgをダウンロードしインストールすると/opt以下にインストールされます。sierra用はこちらからダウンロードしました。
gccのソースを取得し、今回こちらの環境では /Volumes/DEV-01/gcc-test にソースを展開し、gccのビルド(ビルドのみ、インストール無し)は以下のようにしました。
gcc(gcc10)のソースはmacportsから取得し、 /opt/local/source/gcc10 以下にコピー・ビルドしました。
まず、gccのソースを用意しビルドします。純正環境に手を加えたくないので、xcode以外にgccのビルドに必要なものは、macportsをつかい環境を整えます。
macportsは、macportsのホームページから.pkgをダウンロードしインストールすると/opt以下にインストールされます。sierra用はこちらからダウンロードしました。
export PATH=/opt/local/bin:/opt/local/sbin:$PATH sudo port install gmp mpfr mpc libmpc mkdir -p /Volumes/DEV-01/gcc-test cd /Volumes/DEV-01/gcc-test curl -OL https://github.com/gcc-mirror/gcc/archive/refs/heads/master.zip unzip -q master.zip mkdir build && cd build ../gcc-master/configure --prefix=/opt/local --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local make -j4
sudo su mkdir -p /opt/local/source/gcc-test port -v extract gcc10 # gcc10のディレクトリ名を確認 ls $(port dir gcc10)/work # ... gcc-10.4.0 cp -a $(port dir gcc10)/work/gcc-10.4.0 /opt/local/src/gcc-test/ cd /opt/local/src/gcc-test/gcc-10.4.0 # patch(diff file)を適用 for f in `ls $(port dir gcc10)/files|grep diff$`;do patch -p0 < $(port dir gcc10)/files/$f;done cd /opt/local/src/gcc-test && mkdir -p build-gcc10.4.0 && cd build-gcc10.4.0 export SDKPATH=`xcrun --sdk macosx --show-sdk-path` export LIBRARY_PATH=$SDKPATH/usr/lib export BOOT_CFLAGS="-iframework $SDKPATH/System/Library/Frameworks/" export CFLAGS_FOR_TARGET=$BOOT_CFLAGS export CXXFLAGS_FOR_TARGET=$BOOT_CFLAGS ../gcc-10.4.0/configure --prefix=/opt/local --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local \ --with-native-system-header-dir=$SDKPATH/usr/include time make -j4gcc本体のビルド(インストール無し)は以上です。次にtestsuiteの実行を行います。gccのtestsuiteには tcllibとdejagnuとexpectが必要で、
sudo port install tcllib dejagnu expect export TCL_LIBRARY=/opt/local/lib/tcl8 export DEJAGNULIBS=/opt/local/share/dejagnuとしておきます。ここまでできていれば、testsuitesの実行はできる状態になっており、sse4.1のテストコードはi386にsse4_1-なにがしというファイル名で含まれているので、
make check-c RUNTESTFLAGS="i386.exp=sse4_1-*"とします。結果は、ビルドディレクトリのgcc/testsuite/gcc/gcc.sum に出力されます。基本的にはこれだけですが、備忘録として挙げてみました。今回は以上です。それでは。
コメント
コメントを投稿