Gitをソースからビルドしたらなんかでかい
ファイルサイズがでかい
最新バージョンのGitを使いたかったので、ソースからビルドすると、 パッケージインストールした場合と比べて、ファイルサイズが大きい気がする。
バージョンも環境も違うことを承知の上で、サイズを比較すると、、、
ソースからビルド
$ du -sh /opt/git/libexec/git-core/ 91M /opt/git/libexec/git-core/
パッケージインストール
$ du -sh /usr/lib/git-core/ 22M /usr/lib/git-core/
でかい。
謎解き
ディストリビューターはどのようにビルドしているのだろうか。 Ubuntuのビルドログを参照してみる。
1:2.20.1-2ubuntu1 : git package : Ubuntu
$ /usr/bin/make all NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core libexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' V=1 USE_LIBPCRE2=1
うーん、いろいろ指定しているが、最適化レベルが効いているのだろうか。
シンボリックリンク
パッケージインストールの場合、多くのファイルがbin/git
へのシンボリックリンクになっていることに気付く。
NO_CROSS_DIRECTORY_HARDLINKS=1とNO_INSTALL_HARDLINKS=1が効いているようだ。
INSTALL_SYMLINKS=1でも同様のことができるかもしれない。(未検証)
結果
Ubuntuのオプションを参考にしつつ、makeして得られた結果は、、、
$ du -sh /opt/git/libexec/ 21M /opt/git/libexec/
小さい。
上記のmakeのオプション
$ make SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 DEFAULT_PAGER=less DEFAULT_EDITOR=vi CC='gcc' CFLAGS='-Wall -O2 -Wformat -Werror=format-security' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' V=1 NO_TCLTK=1 -j2 install
Git version
$ git --version git version 2.21.0
備考
USE_LIBPCRE2=1
Git v2.17.0以降でUSE_LIBPCRE2を有効にすると、git grep
が高速になるらしい。(未検証)