スマートな CONFIG_* 依存関係処理 1999 年 8 月 1 日 Michael Chastain Werner Almesberger Martin von Loewis 次のような問題があります。 drivers/net/foo.c が次のような記述を含んでいたとしましょう。 #include ... #ifdef CONFIG_FOO_AUTOFROB /* 自動で何かをおこなうコード */ #else /* 手作業でおこなうことのみ */ #endif ... #ifdef CONFIG_FOO_MODEL_TWO /* モデル II 用のコード */ #endif 今、ユーザ (カーネルをビルドする人) が関連のない項目を変更するように 再設定をおこなうとしましょう。この作業で、include/linux/autoconf.h ファイルが再生成されるので、include/linux/config.h が古いものとなり、 結果として drivers/net/foo.c が再コンパイルされることになります。 ほとんどのカーネルソースコード、おそらく 80% くらいは、少なくとも どこかに一つは CONFIG_* 依存を持っています。そのため、何か一つでも CONFIG_* 設定項目を変更すると、ほとんど全てのカーネルソースコードの 再コンパイルが必要になってしまいます。 解決方法は次のようになります。 依存関係生成プログラム mkdep.c を、よりスマートにしました。次の ような依存関係行 drivers/net/foo.c: include/linux/config.h を生成するかわりに、現在は次のような依存関係行を生成します。 drivers/net/foo.c: \ include/config/foo/autofrob.h \ include/config/foo/model/two.h これによって、drivers/net/foo.c は、自身が実際に使用する CONFIG_* 行のみに依存することになります。 新しいプログラム split-include.c は、コンパイル処理 (make bzImage または make zImage) の始めに実行されます。split-include は include/ linux/autoconf.h を読み込み、include/config/ ツリーを更新し、一つの オプションごとに一つのファイルを書き出します。split-include は、 変更になったオプションに対応するファイルのみを更新します。 mkdep.c が、欠けている 行または不必要な 行に対する警告メッセージを生成することは、もうありません。 トップレベルの新しいターゲット 'make checkconfig' で、これらの問題の チェックをおこなえます。 フラグ依存関係 Martin Von Loewis は、今回のパッチにもう一つの機能 'フラグ依存関係' を提供してくれました。考え方は、.o ファイルは、それをビルドする時に 使用されたコンパイルフラグに依存する、というものです。ファイル foo.o では、そのフラグは .flags.foo.o に保存されます。 ユーザが、foo ドライバを常駐型からモジュール型へと変更するとしましょう。 'make' は、現在の foo.o が -DMODULE 付きでコンパイルされていないことを 認識し、foo.c を再コンパイルします。 C ソースコードから作成される全ての .o ファイルは、フラグ依存関係を 持ちます。ld で作成される .o ファイルと ar で作成される .a ファイルも 同様です。しかし、アセンブリソースコードから作成される .o ファイルは フラグ依存関係を持ちません (現在は誰も必要としていませんが、これを 修正するのは価値あることでしょう)。 ソースファイルごとのフラグ フラグ依存関係は、ソースファイルごとのフラグとともに使っても機能 します。次のように、個々のソースファイルごとにコンパイルフラグを 指定することができます。 CFLAGS_foo.o = -DSPECIAL_FOO_DEFINE これは、drivers/net/Maefile, drivers/scsi/Makefile, およびその他 幾つかの Makefile をきれいにするのに役立つでしょう。 謝辞 Werner Almesberger は、原型となるアイディアを出し、 このパッチの 最初のバージョンを作成しました。 Michael Chastain はそれを引き継ぎ、開発を続けました。彼は現在、 第一の開発者であり、メンテナーです。バグは彼に報告してください。 Martin von Loewis は、フラグ依存関係処理を作成し、Michael Chastain はそれらを修正しました。 全てのβテスターに感謝します。 ------------------------------------------------------------ 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 翻訳日: 2004/04/15 翻訳者: 川崎 貴彦 校正者: 武井 伸光