Home

Old Mac上のHomebrew/[email protected]がコアダンプして死んでしまうので、怒ってGitHubの公式php-srcからPHPをビルドした話

Date.
2020-10-13
Category.

High Sierraまでサポートのold Mac (2014以前の)をどうにかして運用していたとして、HomebrewからPHPを導入した環境で以下みたいな簡単なPHPスクリプトがあったとします。

$ vi test.php
<?php
  print("Hello, world");
?>

これを実行すると、こうです。

$ php test.php
zsh: illegal hardware instruction  php test.php

コアダンプして死んでいます。だいたい死にます。激おこだよ。phpinfo() くらいなら通りますが、それがあったところで何だという話なので、PHP自体を自力でビルドしました。

画像

$ mkdir ~/src
$ cd ~/src

ホームフォルダに src みたいなソースを突っ込んでおくフォルダがある方は、このあたり自力でどうにかしてくれて大丈夫です。

まず、Homebrewで依存環境を突っ込んでおきます。

$ brew install autoconf bison git libiconv pkg-config re2c

このへんでいいはずですが、足りないものがありそうなら追加してください。ここでbisonを突っ込んでおくことが重要で、これがないとビルド自体がエラーでこけることがあります。

あと、中途半端に突っ込まれたphpパッケージは削除しておいてください。これがあると要所要所でコンパイルを邪魔してきます。

手元の環境ではre2cがうまく入らなかったので、re2cのソースを https://github.com/skvadrik/re2c/releases/latest からもらってきて、自力コンパイルします。

$ cd re2c-2.x.x
$ ./configure
$ make
$ sudo make install

これで /usr/local/bin/re2c ができあがるはずなので、いよいよPHPのビルドに入っていきます。

git clone https://github.com/php/php-src.git
$ cd php-src
$ ./buildconf
$ export CFLAGS="-g3 -O2 -march=core2 -mtune=core2"
$ export YACC="/usr/local/Cellar/bison/3.x.x/bin/bison"

各種お膳立て。march/mtuneはマシンに応じて。Yet Another C Compilerとしてbisonも指定しましたので、コンフィギュアしていきます。

$ ./configure \
  --prefix=/opt/php/ \
  --enable-cli \
  --enable-exif \
  --enable-fpm \
  --enable-gd \
  --enable-mbstring \
  --enable-pdo \
  --with-curl \
  --with-jpeg \
  --with-webp \
  --with-iconv=/usr/local/opt/libiconv/

オプションを足す必要がある方はここで足し引きしてください。だいたいの方はこれでいいと思いますが、RDBMS周りは人によると思うので。あとこのオプションは画像扱い周りが多いので。libiconvのプレフィクスはbashだと (brew --prefix libiconv) って書いておけばいいんですが、最近のmacOSのデフォルトのzshだとやり方知らないので直書きです。

$ make -j2 -B

メイクしていきます。ここのjオプションの数字はCPUコア数なので、環境に応じて。

$ sudo make install

できあがったらこれでPHPが /opt/php/(bin|sbin) に突っ込まれるので、あとはパスを通して自力でなんとかしていきましょう。ちなみに、php.ini は /opt/php/lib/ にあるべきっぽいです(最初は存在しなかった)。ここで言いたかったのは要するに、ビルド時にはいにしえのなんだかよく分からない数字を付けるとだいたいなんとかなるという話です。

ソーシャルメディア

Backspace Dev-Team 公式
@Backspace_Dev

お問い合わせ

このWebサイトについてのご意見・ご感想、記事についてのご質問、または執筆のご依頼などございましたら、こちらへお問い合わせください。

広告について

このWebサイトでは、Google Adsenseによる自動広告を実施しています。