続・makeアレコレ。via OpenJDK's Makefile
OpenJDKのMakefileを確認するタスクの続き。
Makefileを読んでいたけれど、改めて見たらMakefileが400コくらいある…
さすがに回り道すぎるので、クラスロード時に実行されるクラス群が、大体rt.jarに含まれることを先に確認しました。
sun.misc.VM.classあたりをコンパイルしているスクリプトを探すには、./jdk/make/sun/misc/Makefile ないしは、JDKのMakefile以下だけを読めばよいハズ。
ということに気づくまでにムダに読んだMakefileの覚書は、"続きを読む"に置いときます。
Makefile(ビルドディレクトリのルートにあるMakefile) │ ├make/common/shared/Defs-control.gmk │ │ │ ├make/common/shared/Platform.gmk │ │ │ └make/common/shared/Defs.gmk │ │ │ ├make/common/shared/Defs-utils.gmk │ │ │ ├make/common/shared/PrivateDefs.gmk ※任意 │ │ │ └make/common/shared/(Defs-linux.gmk|solaris.gmk|Defs-windows.gmk) │ ├make/Defs-internal.gmk │ ├make/sanity-rules.gmk │ ├make/hotspot-rules.gmk │ ├make/langtools-rules.gmk │ ├make/corba-rules.gmk │ │ │ └jdk/make/Makefile │ │ │ ├jdk/make/common/Defs.gmk │ │ │ └jdk/make/common/CancelImplicits.gmk │ ├make/jaxp-rules.gmk │ ├make/jaxws-rules.gmk │ └make/jdk-rules.gmk │ └jdk/make/Makefile ★ここから読めばおkだった │ ├jdk/make/common/Defs.gmk │ ├jdk/make/common/Release.gmk │ ├jdk/make/common/Cscope.gmk │ ├jdk/make/common/Sanity.gmk │ ├jdk/make/common/internal/BinaryPlugs.gmk │ ├jdk/make/common/Rules-SCCS.gmk │ ├jdk/make/jprt.gmk │ (以下続く)
(重要そうなのに★マーク)
Defs-linux.gmk
PrivateDefs.gmk-example
オリジナル設定用Makefile。ユーザ定義の変数(ALT_HOGE)が読み込まれる前に使うことで、Makefileの設定を上書きできる。使うときは、Defs-private.gmkにファイル名を変更する。
このファイルを使用してビルドすると、WARNINGが出るようになっている。
make/Defs-internal.gmk
定数を設定する。このファイルにルールの記述は含まれない。
make/sanity-rules.gmk
- ターゲットにするsanityを定義する
- hotspot-sanity、jdk-sanityは、それぞれがビルド対象であれば含める
- 以前のsanityログがあれば削除する
- sanity check の結果メッセージを作成する
- setすべきでない環境変数がsetされている場合、unsetを促す
- 各ターゲットがビルド可能かチェックする
- ブート用JDK(ALT_BOOT_DIR)が有効かチェックする
- 変数の設定をダンプ出力する
INSANEというビルドモードがあるが、非推奨になっている。
make/hotspot-rules.gmk
hotspotターゲットのビルド。
hotspot/以下には20個ほどMakefileがあるが、今回はスルー。
make/langtools-rules.gmk
langtoolsターゲットのビルド。
langtoolsをmake all、make clobberする。
Sanity.gmk
- 必要なヘッダファイルの有無を確認する
- エラーメッセージを出力する
プラットフォーム固有の設定やパッチが入り混じって、1200行以上ある。でも大半はエラーチェックとメッセージ作成。