GitHub Actions に Apple Silicon がやってきました!
- GitHub Actions: Introducing the new M1 macOS runner available to open source!
- GitHub Actions: macOS 14 (Sonoma) is now available
先日Perlをビルドして遊んでみました。
今回はMySQLとRedisをビルドしてみたお話です。
actions-setup-mysql v1.31.0, actions-setup-redis リリースのお知らせ
actions-setup-mysql v1.31.0, actions-setup-redis v1.33.0 から M1 macOS に対応しています。
runs-on:
キーに macos-14
を指定すると M1 を利用できます。
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Set up MySQL
uses: shogo82148/actions-setup-mysql@v1.31.0
M1による高速化
今日現在(2024-02-04)のMySQL最新安定版リリースは 8.0.36 です。 MySQL 8.0.36 のビルドにx64では 49m 45s かかりました。 M1 macOSでビルドしたところ 23m 16s で完了しました。 53.2%の高速化 です。
修正点
x64と同じ手順でビルドしたところ、いくつかのバージョンでは素直にビルドが通りませんでした。 そのようなバージョンにはいくつかパッチを当てました。 Perl は素直にビルドが通ってすごいですね。まあ、だいたい Devel::PatchPerl のおかげ。
Xcodeに付属するclangを使ってMySQLをビルドするように修正
x86上ではbrewで新しいClangをインストールしてビルドに使っていました。 MySQL 8.0にC++20の新しい構文が使用されており、Xcode に付属するClangは古すぎてビルドできなかったためです。
しかし macos-14
ではリンクに失敗してしまいました。
エラーメッセージでググったところ以下のIssueがヒットしました。
「Xcodeに付属するClangを使用せよ」とのこと。
macos-14
の Clang は十分に新しいので、この方法で解決しました。
MariaDBにPCRE2を同梱しました
shogo82148/actions-setup-mysql では MariaDB も提供しているので、
MariaDBのビルドも必要です。
今までと同じ手順で macos-14
向けのビルドをしたところ、 pcre2posix.h
が見つからずにエラーになってしまいました。
/Users/runner/work/_temp/mariadb-10.5.23/client/mysqltest.cc:49:10: fatal error: 'pcre2posix.h' file not found
#include "pcre2posix.h" /* pcreposix regex library */
^~~~~~~~~~~~~~
1 error generated.
PCRE2のファイルっぽいので、PCRE2をインストールして解決しました。
古いRedis がmacos-14でビルドできない
古いRedisが macos-14
でビルドできない問題に遭遇しました。
最新版のRedisでは修正されているので、バックポートして修正しました。
まとめ
shogo82148/actions-setup-mysql と shogo82148/actions-setup-redis が Apple Silicon 上で動くようになりました。 かなりの高速化が期待できるので、ぜひお試しください。
参考
- shogo82148/actions-setup-mysql
- shogo82148/actions-setup-redis
- shogo82148/actions-setup-mysql: introduce M1 Mac #1018
- shogo82148/actions-setup-redis: introduce Apple Silicon M1 #893
- GitHub Actions: Introducing the new M1 macOS runner available to open source!
- GitHub Actions: macOS 14 (Sonoma) is now available
- actions-setup-perlがApple M1上で動くようになりました