Solarisをサポートしよう
というわけでSolarisをサポートするために多少努力する。
将来的にはSolaris studio(NetBeansベースの公式IDE)でビルドする必要が有るが、とりあえずは公式pkgのgccで。公式pkgのgccはi386のようだ。
ターゲットの準備
Solaris studioは基本的にクロス開発を良くサポートしていない。なので、コンパイルホスト == ターゲットとするのが無難。(これはUNIXプラットフォームほぼ全てにあてはまる。例えばclang等はコンパイルホストのアーキテクチャでコード生成オプションを選択してしまうことが有る。)
開発ホストは普段ゲームの開発に使っているWindows。VirtualBox上に:
の2つのVMを置き、それぞれに仮想NICを2枚装備してひとつをNFSトラフィック専用の静的IPv4ネットワークとした。Solaris側のネットワーク構成は DefaultFixed 構成を選び、ipadm create-ip net0 のようにしてそれぞれで静的IPv4設定をする。
ライブラリはoniguruma以外はSolarisの公式pkgから入手できる。onigurumaも普通にビルドすることができる。
Solaris libcへの対応
なかなか難しい。判定としては __sun を使った。BSDやglibcとはまた違っている感が有るが、由緒正しいUNIXのlibcの一つとも言える。SYSVベース。
- _REENTRANTの指定
多分 _REENTRANT はコンパイラに -pthread を食わせるなどもっと正当な方法が有る。
C++11を要求するのとどちらが良いか迷うところ。。C++11はSolaris studio 12.4からサポートされるが、まだbetaなので採用しないことにした。
C99 namespaceを要求する簡単な方法は、POSIX2008を要求すること。これは _XOPEN_SOURCE を 700以上に設定することで行うことができる。少々野蛮な方法だがしかたない。。多分config.hに相当する共通ヘッダに括り出す方が好ましい。
- alloca.hの明示的なinclude
標準規格では要求していないが、BSDやglibcではallocaはstdlibの一部になっている。もともとallocaは標準でないので扱いはOS毎に異なる可能性がある。
これは、alloca.hの存在をテストして存在しない場合にはstdlib.hをincludeするのが望ましい。