djgpp/building_watt32_on_msys2
djgpp/building_watt32_on_msys2
Watt-32のdjgpp用ライブラリなどをWindowsのmsys2内でビルドしてみるための自分用メモ
必要なもの
- msys2とdjgppのクロス開発環境
- djgpp/building_on_msys2をてきとうに参照
- Watt-32
- 基本的にはソースを自分でビルドしてライブラリ(libwatt.a)を作る必要がある。
公式サイトからリンクされているgithubのリポジトリは https://github.com/gvanem/Watt-32/ みたいですよ…
libwattの(クロス)ビルド
src ディレクトリの下にあるconfigur.batかconfigur.shを実行してターゲット固有の各種ファイル(Makefile、dep、djgppの場合はエラーコード用のヘッダ)を作り、makeを行う(make -f djgpp.mak)という流れになる。
各種ファイルの作成は基本的に util ディレクトリ下にあるホスト向けのバイナリファイルで行う。 32bit DOS、Linux (x86_64)、Win32向けのコンパイル済バイナリがアーカイブやgithubリポジトリに用意されている。
git cloneしたときは、util以下のDOS用とWin32用exeファイルの実行権限が解除されているので、改めてexeファイルに実行権限を付与するか、mingwのgccでリコンパイルする必要がある。 (自分はutil/win32以下のexeをmsys版でないWin32版zipでアーカイブ→exe全削除→アーカイブ展開、みたいな雑な手段で対応してしまった。git config core.filemode falseしておかないとめんどくさい)
んだけど、configur.shのほうだと微妙に必要なファイル作ってくれてない気がする…
configur.batのdjgpp対応部分
:djgpp :: echo Generating DJGPP makefile, directory, errnos and dependencies %MKMAKE% -o djgpp.mak -d build\djgpp makefile.all DJGPP FLAT %MKDEP% -s.o -p$(OBJDIR)/ *.c *.h > build\djgpp\watt32.dep echo neterr.c: build\djgpp/syserr.c >> build\djgpp\watt32.dep %DJ_ERR% -s > build\djgpp\syserr.c %DJ_ERR% -e > ..\inc\sys\djgpp.err echo Run GNU make to make target: echo make -f djgpp.mak goto next
で、configur.shのdjgpp対応部分
gen_djgpp () { echo "Generating DJGPP makefile, directory, errnos and dependencies" ../util/linux/mkmake -o djgpp.mak -d build/djgpp makefile.all DJGPP ../util/linux/mkdep -s.o -p\$\(OBJDIR\)/ *.[ch] > build/djgpp/watt32.dep echo "neterr.c: build/djgpp/syserr.c" >> build/djgpp/watt32.dep # # these hacks won't work because errnos.c relies on being compiled as a target-exe. # echo "#include <errno.h>" | $DJGPP_PREFIX-gcc -E -dD - | grep "#define E" > ../util/generrno.h # echo "#include <sys/version.h>" | $DJGPP_PREFIX-gcc -E -dD - | grep "#define __DJGPP" >> ../util/generrno.h # make -C ../util -f errnox.mak dj_err # ../util/dj_err -s > build/djgpp/syserr.c # ../util/dj_err -e > ../inc/sys/djgpp.err # echo "Run GNU make to make target:" echo " 'make -f djgpp.mak'" }
なんかめんどくさいので、configurのdjgpp部分をてきとうに切り出して、makefileっぽい何かを作ってみた。
DJ_PREFIX ?= /djgpp/bin/i586-pc-msdosdjgpp- W32_BIN2C_ ?= ../util/win32/bin2c.exe W32_NASM_ ?= ../util/win32/nasm.exe PKT_STUB ?= pkt_stub.h -include djgpp.mak nomakefile: @echo "djgpp.mak not exist." @echo "make -f djgpp_msys.mak makefile" makefile: echo "Generating DJGPP makefile, directory, errnos and dependencies" ../util/win32/mkmake -o djgpp_debug.mak -d build/djgpp makefile.all DJGPP DEBUG ../util/win32/mkmake -o djgpp.mak -d build/djgpp makefile.all DJGPP RELEASE ../util/win32/mkdep -s.o -p\$$\(OBJDIR\)/ *.[ch] > build/djgpp/watt32.dep ../util/win32/dj_err -s > build/djgpp/syserr.c ../util/win32/dj_err -e > ../inc/sys/djgpp.err @echo "neterr.c: build/djgpp/syserr.c" >> build/djgpp/watt32.dep
make -f djgpp_msys.mak makefileでdjgpp.makその他を作ってから、make -f djgpp_msys.makでライブラリをビルドする感じです…。