アフィリエイト広告を利用しています

2022年09月16日

Emacs: libgccjit のコンパイル

libgccjit は GCC に含まれるモジュールで, Gcc Emacs によって使用される.

そのコンパイル手順を整理したので, メモとしてまとめておく.

(1) OpenBSD の ports で提供される GCC 11.2.0 用のパッチを利用するため, GCC 11.2.0 をダウンロードする.
ソースコードは, \$HOME/src/gcc-11.2.0 以下に展開した.
(2) 作業用のディレクトリーを作成する. ここでは \$HOME/src/obj/obj-jit とする.

$ mkdir -p ~/src/obj/obj-jit

(3) ports によって提供されている GCC 11.2.0 用のパッチをコピーする.

$ cp -r /usr/ports/lang/gcc/11/patches ~/src/obj/obj-jit

(4) libgccjit 用のパッチファイル patch-gcc_jit_libgccjit_c:

Index: gcc/jit/libgccjit.c
--- gcc/jit/libgccjit.c.orig
+++ gcc/jit/libgccjit.c
@@ -3474,3 +3474,9 @@
RETURN_IF_FAIL (asm_stmts, ctxt, NULL, "NULL asm_stmts");
ctxt->add_top_level_asm (loc, asm_stmts);
}
+
+const char *
+fname_as_string(int pretty_p __attribute__((__unused__)))
+{
+ return NULL;
+}

を作成して \$HOME/src/obj/obj-jit/patches 以下に置く.
(5) パッチを適用する.

$ cd ~/src/gcc-11.2.0
$ for i in ~/src/obj/obj-jit/patches/*; do \
patch -p0 < $i \
done

(6) GCC をコンパイルする.

$ cd ~/src/obj/obj-jit
$ ~/src/gcc-11.2.0/configure \
'CFLAGS=-I/usr/include -I/usr/local/include' \
'LDFLAGS=-L/usr/lib -L/usr/local/lib' \
--with-as=/usr/local/bin/gas \
--verbose \
--program-transform-name=s,^,e, \
--disable-nls \
--with-system-zlib \
--disable-libmudflap \
--disable-libgomp \
--disable-libssp \
--disable-tls \
--with-gnu-ld \
--with-gnu-as \
--enable-threads=posix \
--enable-wchar_t \
--with-gmp=/usr/local \
--enable-languages=c++,jit \
--enable-host-shared \
--disable-libstdcxx-pch \
--enable-default-ssp \
--enable-default-pie \
--without-isl \
--disable-bootstrap
$ gmake

ここで configure スクリプトに与えているオプションは, ports の GCC の Makefile: /usr/ports/lang/gcc/11/Makefile を参考にしたものである.
--enable-languages オプションの引数に jit を与えて libgccjit の作成を指定し, そのために必要な --enable-host-shared オプションも指定する.
また, 途中で発生するコンパイルエラーを回避するために --disable-bootstrap オプションを追加している.
これにより, 共有ライブラリー libgccjit.so.0.0.1 が作成される.
ただしその後, 本体の gcc のコンパイルの途中で失敗する.

configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.

この原因は掴めていないので今後調べる.
(7) libgccjit をインストールする. インストール先は /usr/local 以下でもよいが, 今回は \$HOME/opt 以下とする.

$ install -c -m 644 ~/src/gcc-11.2.0/gcc/jit/libgccjit.h ~/opt/include
$ install -c -m 755 ~/src/obj/obj-jit/gcc/libgccjit.so.0.0.1 ~/opt/lib
$ cd ~/opt/lib
$ ln -s libgccjit.so.0.0.1 libgccjit.so.0
$ ln -s libgccjit.so.0 libgccjit.so

この手順では libgccjit が標準的でない場所にインストールされている.
したがって, この libgccjit を使ってコンパイルされたプログラム (たとえば Gcc Emacs) を実行する際には環境変数 LD_LIBRARY_PATH を指定する.

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/opt/lib
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

この記事へのトラックバックURL
https://fanblogs.jp/tb/11590479

この記事へのトラックバック
ファン
検索
<< 2024年11月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事(59)
社会復帰(22)
(44)
コンピューター(211)
(1441)
借金(8)
勉強(13)
(13)
数学(97)
運動(8)
日常生活(1403)
(204)
健康(38)
読書(21)
プロフィール

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 メンタルヘルスブログ うつ病(鬱病)へ
にほんブログ村
にほんブログ村 科学ブログ 数学へ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村