h2o作者のkazuhoさんからの驚きのツイートいただきました!
ビルドできるんだw / “Cygwinでh2oが動いた日: misc” https://t.co/VaG2T9m3OK
— Kazuho Oku (@kazuho) 2015, 11月 10
なぜcygwin
Windows環境でもHTTP2関連をいじるにはnghttp2のツールも動かせた方がよいだろう。
ということで、cygwin環境一択で作業を進めた
最大の難関
mruby-onig-regexpのビルド
mruby-onig-regexpが無条件でOSがWindowsだとMSVCを選択してしまう。 さらにOnigumoもcygwin環境でもLib.exeをarの代わりに使用する。しかもLib.exeのオプションが 誤っている。
Onigumoではlibonig.libが作られるが、mruby-onig-regexpではlibonig.aを期待している。
対応方法
- /usr/include/sysに/usr/include/endian.hのシンボリックリンクを作成
- mruby-onig-regexpのmrbgem.rakeファイルの修正
- libtool.m4の修正
- lib.exeではなく、cygwinのarを使うように修正
これらの具体的な対応内容はhttps://gist.github.com/kjunichi/81d876fe0c7307ba3978参照。
対応完了までの軌跡
あ、ここかぁ、cygwinでh2oビルドしてここがひっかかってんだよなぁ / “mruby-onig-regexp/mrbgem.rake at master · mattn/mruby-onig-regexp · GitHub” http://t.co/zzuFSSlABm
— kjunichi (@kjunichi) 2015, 10月 1
かれこれ、二週間はcygwinでh2oをビルドしようとして、エラーと格闘中。3.4万円の2-wayタブレットで、かつ以前タダでもらったSDカード上でやってるから、物凄くのんびり
— kjunichi (@kjunichi) 2015, 10月 6
h2oというかOnigumoのビルドで、何故かcygwinなのにlibコマンドが使われ、オプションの指定で怒られるところから一週間経ってもに抜け出せないでいる
— kjunichi (@kjunichi) 2015, 10月 9
3.4万の2wayタブレットでcygwin環境下で半月近くかかって、mrubyのonig-regexpモジュールのビルドがリンクでこけて、これを一旦諦めて、h2oをmrubyなしでビルドしたら、こちらはすんなり動いた。
— kjunichi (@kjunichi) 2015, 10月 10
どうにも、mruby-onig-regexpだと結果的にシンボル参照を解決できず、h2oのmrubyを有効にした状態でビルドできなかったが、こちらにしたらすんなりcygwin環境でビルド出来た! sys配下にendian.hをシンボ… http://t.co/72Tr48xaJd
— kjunichi (@kjunichi) 2015, 10月 10
ようやく、2-wayタブレットマシンでh2oがmruby-onig-regexp付きでcygwin環境でビルド出来た! pic.twitter.com/v7hrHkcSko
— kjunichi (@kjunichi) 2015, 10月 13
まとめ
- h2o本体はcygwinでフツーにビルド出来た
- libuvはcygwinをサポートしていないスレッド周りで問題があるらしい。(https://github.com/joyent/libuv/issues/845)
関連記事