Windows 10でPharo-vmをビルドする(後編)

前回の記事でビルドする手順を説明したが手抜きすぎたので、簡単なバッチファイルを作ってみた。賞味期限は非常に短いと思われるけど、cygwin のオプションをいろいろ調べたりしたので、その成果も兼ねて。

(2022.8.10追記)
もとの記事だと「FreeTypeライブラリがない」と怒られてしまったので、cygwin のパッケージにlibfreetype-devel を追加した。これに伴って link.txt の変更が不要になった。

Cygwin のダウンロードとインストール

まずはcygwinのsetupプログラムをダウンロードして必要なパッケージをダウンロードするまでの手順。適当なバッチファイルに保存して実行すれば良い(はず)。

いちおう管理者権限なしでインストールできる(はず)

set ROOT=%HOMEDRIVE%%HOMEPATH%
cd %ROOT%
curl http://cygwin.com/setup-x86_64.exe -o setup-x86_64.exe
setup-x86_64 ^
  --no-admin ^
  --root %ROOT%\cygwin ^
  --site http://ftp.jaist.ac.jp/pub/cygwin/ ^
  --local-package-dir %ROOT%\cygwin\packages\ ^
  --no-desktop ^
  --quiet-mode ^
  -P make ^
  -P cmake=3.17.3-2 ^
  -P zip ^
  -P mingw64-x86_64-clang ^
  -P unzip ^
  -P wget ^
  -P git ^
  -P autoconf2.5 ^
  -P autoconf ^
  -P automake1.16 ^
  -P automake ^
  -P libtool ^
  -P patch ^
  -P libssl-devel ^
  -P libgit2-devel ^
  -P libz4-devel ^
  -P libfreetype-devel

これで C:\Users\hoge のようなユーザーフォルダに cygwin フォルダが作成され、自動的にパッケージがインストールされる。

github レポジトリのクローン&ビルド

次にスタートから Cygwin64 Terminalを選んで cygwin のターミナルを起動して、以下を入力する。

git clone https://github.com/pharo-project/pharo-vm.git

以下のようにcmake を実行して、buildディレクトリを生成する。

cmake -S pharo-vm -B build

(2022.8.10追記)
以下、libfreetype-devel パッケージの追加によって link.txt の変更が不要になった。

運良くcmake に成功したら freetype-build の link.txt を編集する。

vi build/freetype-build/CMakeFiles/freetype.dir/link.txt

長大だけど1行しかないファイルなので、末尾の -lz の直前に -L/usr/lib を挿入する。こんな感じ。(太字部分)

(ごちゃごちゃ) ftdebug.c.o -L/usr/lib -lz

最後に build ディレクトリで make する。

cd build
make

幸運ならビルドが成功して、build/vm ディレクトリにVMやプラグインのバイナリが生成されている(はず)。

ちなみにWindows側からみたディレクトリは、ユーザー名=hoge として、C:\Users\hoge\cygwin\home\hoge\build\build\vm みたいなところにある。

(2022.08.10追記)

上記を自動化したスクリプトを作ってみた。いちおう動くことも確認済み。(link.txt 変更のためのsedスクリプトは削除した)

git clone https://github.com/pharo-project/pharo-vm
cmake -S pharo-vm -B build
cd build
make

おまけ

Cygwin のアンインストール方法はこちらを参考に。

(2022.08.17追記)

cmake の後、 C: なるディレクトリができる。cygwin terminal から rm -f で削除したらシステムが削除されてしまった。確認してないけどCドライブにリンクされていたようだ。必ず Windows 側から削除すること。