DOS/FreeDOS/build/kernel(2035a)
DOS/FreeDOS/build/kernel(2035a)
ビルド環境&必要なもの
kernel 2035a の場合。 これ以前のカーネルの場合は環境やツールがもうすこし限定されるかも。
使えるコンパイラが DOS もしくは Win32 用しかないので、DOS もしくは Windows 上でしかカーネルはビルドできない。 (ついでに言うとビルドスクリプトは DOS 用のバッチファイル)
コンパイラ
以下のコンパイラがひとまず考慮されている。
- Borland Turbo C 2.0, Turbo C++ 1.01, Turbo C++ 3.0, Borland C++ 5.0
- Microsoft Visual C++ 1.52(すくなくとも MSCL8.MAK の修正が必要。nmake を使いたい場合はさらに修正が必要)
- OpenWatcom C/C++ 1.3(1.4 以上の場合は WATCOM.MAK の修正が必要)
Visual C++ 1.52 の場合、nmake を使うと通常の手順でコンパイルできない。Borland C++ 5.5 付属の make を使ったほうが楽。
OpenWatcom 1.4(以上)の場合、コンパイル時に警告が出るためエラー停止してしまう。 MKFILES\WATCOM.MAK を編集して、ALLFLAGS=... のところにある -we オプションを除去する。
というか、Turbo C 2.0/Turbo C++ 1.01 と OpenWatcom 以外は対応がおざなりな気がする。 9x 系でない Windows 環境なら OpenWatcom を使うのがいちばん無難だと思う。
ビルド
おおまかな手順はこんな感じ。
- コンパイラやツールを(正しく)インストールしておく
- copy config.b config.bat
- config.bat を手持ちの環境にあわせて修正
- build.bat 実行
ke2035a に付属している config.b なんですけど、なんか改行コードがおかしいような気が(CR CR LF になってるような)。
config.bat
環境変数をいろいろ設定しているので、使用ツールや作成したいカーネルの種別にあわせて各自で修正する。
- XNASM
- nasm のパス名。 Win32 版の nasm って、なぜか微妙にファイル名が違うんだよね…(nasmw.exe)
- COMPILER
- デフォルトコンパイラの指定。
Turbo C 2.0, Turbo C++ 1.01, Visual C++ 1.52, OpenWatcom の場合は build 時の引数でコンパイラを指定できるので、あえて設定しなくてもよい。 その他のコンパイラ(Turbo C++ 3.0, Borland C++ 5.0)を使う場合は指定が必要。 - TC2_BASE, TP1_BASE, TC3_BASE, BC5_BASE, MS_BASE
- コンパイラがインストールされているベースディレクトリの指定。
- XUPX
- UPX のパス名(と実行時オプション)。
UPX を使わない場合は set XUPX= と設定する(と config.b に書いてある)。 - XLINK
- カーネルリンク時に使うリンカのパス名。
ふつうはコンパイラ付属のリンカを使うので、指定しなくてもいいと思う。 - MAKE
- ビルド時に使う make のパス名。
Visual C++ 1.52 を使ったとき、付属の nmake だとうまくビルドできなかった。 Borland C++ 5.51 の make を指定して回避した。 - XCPU, XFAT
- ビルドするカーネルの種類。
build 実行時にオプションで指定することも可能。 - ALLCFLAGS
- コンパイル時の追加フラグ。 詳細は config.b のコメントで。
めも
ke2035a を Visual C++ 1.52 でビルドする場合、MKFILES\MSCL8.MAK の修正が必要。
--- MKFILES\MSCL8.ORG 2004-04-11 12:22:18.000000000 +0900 +++ MKFILES\MSCL8.MAK 2006-06-17 15:00:56.750000000 +0900 @@ -23,8 +23,8 @@ # used for building the library CLIB=$(COMPILERPATH)\lib\slibce.lib -MATH_EXTRACT=*aflmul *aFlshl *aFNauldi *aFulrem *aFulshr *aFuldiv *aFlrem *aFldiv -MATH_INSERT= +aflmul +aFlshl +aFNauldi +aFulrem +aFulshr +aFuldiv +aFlrem +aFldiv +MATH_EXTRACT=*aflmul *afnaulsh *aFlshl *aFNauldi *aFulrem *aFulshr *aFuldiv *aFlrem *aFldiv +MATH_INSERT= +aflmul +afnaulsh +aFlshl +aFNauldi +aFulrem +aFulshr +aFuldiv +aFlrem +aFldiv TARGETOPT= !if $(XCPU) == 186
Micorosoft C/C++ 7.0 ではコンパイルできなかった(main.c でエラーが)…
Borland C++ 5.0 でコンパイルするときは command.com から build.bat を起動したほうがよさそう。 (コマンドプロンプト上であらかじめ command を実行し、DOS のコマンドプロンプトにしておく)
できあがるカーネルのサイズは OpenWatcom でビルドしたものが圧倒的に小さい(upx で圧縮するとそれほど差はなくなる)。