djgpp/building_on_msys2

djgpp/building_on_msys2

djgppのランタイム(開発環境)をWindowsのmsys2上でビルドしてみるための(自分用)メモ

必要なもの

msys2(上のmingw-w64開発環境)
mingw-w64-(i686|x86_64)-toolchainですね…
他にdjgppビルドに必要なツールがいくつかあったはずだが精査していない。bisonとtexinfoはすくなくとも必要だったはず。
djgppのソース
公式配布のzipファイル(djlsr205.zip, djtzs205.zip, djcrx205.zip)、公式cvsサーバから取ってくる、など。非公式ミラーをgit cloneするのがいちばん簡単かもしれず。
Windows用のdjgpp gccクロスコンパイラ
ここからmingw版のバイナリ取ってくる。msys2に突っ込んであるmingw-w64のgccとの相性(?)的なことを考えると、standalone版が無難な気がする。gccのバージョンはたぶんどれでもいい(新しすぎると想定外の警告やエラーが出がち)

だいたいの手順

要点を先に書いておくと

  • msys2のmakeじゃなくてmingw-w64側のmingw32-makeを使う
  • make時に CROSS_BUILD=1 を明示する必要がある
  • 一部のビルドツールはソースの修正が必要
  1. djgppクロスコンパイラのインストール
    適当に取ってきたdjgpp-mingw-*-standalone.zipをmsys2のルートディレクトリに展開。自分は D:\MSYS64 にmsys2をつっこんでいたのでそこでdjgpp-mingw-gcc830-standalone.zipをunzipした。バージョン8.30を選んだ理由は…なんとなく…。
    msys2のターミナル上から /djgpp/bin/i586-pc-msdosdjgpp-gcc -v とか打ち込んでクロスコンパイラが起動するか確認しておく。
  2. djgppソース展開
    msys2上ならgit cloneがいちばん楽なのでは。
  3. ソース修正
    パッチ:build_djgpp-cvs_on_msys2.diff
    (改行のCRLF→LFはどこまで必要なのか正確に確認していない)
  4. (srcディレクトリ中で)ビルド
    $ mingw32-make -C src CROSS_BUILD=1 CROSS_PREFIX=/djgpp/bin/i586-pc-msdosdjgpp-
    CROSS_PREFIXでコンパイラへのフルパス指定すれば/djgpp/binにパスを通す必要はない。

なおtimezoneの下はビルドに失敗する(標準のmakefile中でもエラー無視するようになっている)。 mingwホスト向けのソース修正はけっこうめんどくさいと思う(cygwinならいけるのでは…)。