distccソース研究三
1780 ワード
作者:朱金燦
ソース:http://blog.csdn.net/clever101
distccの研究を継続する.今日、分散型コンパイルシステム自体はコンパイラではなく、本質はコンパイル要求の開始者と実行者であり、つまりコンパイルプロセスを作成しなければならないが、コンパイルプロセスを作成するには、コンパイラを見つける必要がある.具体的にはdistcc、すなわちgccコンパイラである.分散コンパイルされたクライアントがコンパイラパラメータに移行したり、自分でコンパイラを探したりします.
今日はコードを読むことで、私の推測を確認しました.Distccクライアント・プログラムは、ヘルプ情報を表示するためにhelp、バージョン情報を表示するためにversionなどのコマンド・ライン・パラメータを持つコンソール・プログラムです.今日、これらの詳細を捨てて、distccがどのようにgccコンパイラを作成し、どのようにコンパイルプロセスを作成するかを見てみましょう.
すぐにdcc_という関数を見つけましたfind_compiler.この関数はコンパイラを探すために使われているようです.事実がそうであるかどうかを見てみましょう.
この関数は確かにコンパイラを検索しているのを見ました.distccが実際に2つのコンパイラをサポートしているのも見ました.1つはcc(SUNが発売したC++コンパイラのようです)で、もう1つはgccです.見つかったコンパイラとそのコンパイルファイルパラメータはout_に保存されます.argv変数です.
コンパイラが見つかった以上、次はコンパイルプロセスを作成する必要があります.main関数でdcc_を呼び出し完了find_compiler関数は次にdcc_を呼び出すtrim_path関数は,システムにgccやccがインストールされていることを確認しているようで,いずれにしてもコンパイルプロセスを作成するものではないので,しばらく無視する.下を見続けます.
いくつかの副次的な関数をスキップして、私はついに1つの重要な関数を見つけました:dcc_build_somewhere_timed.今後の歳月の中で私たちはこの関数を重点的に分析します.これはここまでにしましょう.
ソース:http://blog.csdn.net/clever101
distccの研究を継続する.今日、分散型コンパイルシステム自体はコンパイラではなく、本質はコンパイル要求の開始者と実行者であり、つまりコンパイルプロセスを作成しなければならないが、コンパイルプロセスを作成するには、コンパイラを見つける必要がある.具体的にはdistcc、すなわちgccコンパイラである.分散コンパイルされたクライアントがコンパイラパラメータに移行したり、自分でコンパイラを探したりします.
今日はコードを読むことで、私の推測を確認しました.Distccクライアント・プログラムは、ヘルプ情報を表示するためにhelp、バージョン情報を表示するためにversionなどのコマンド・ライン・パラメータを持つコンソール・プログラムです.今日、これらの詳細を捨てて、distccがどのようにgccコンパイラを作成し、どのようにコンパイルプロセスを作成するかを見てみましょう.
すぐにdcc_という関数を見つけましたfind_compiler.この関数はコンパイラを探すために使われているようです.事実がそうであるかどうかを見てみましょう.
intdcc_find_compiler(char **argv, char ***out_argv)
{
int ret;
if (argv[1][0] == '-'
|| dcc_is_source(argv[1])
|| dcc_is_object(argv[1])) {
if ((ret = dcc_copy_argv(argv,out_argv, 0)) != 0) {
return ret;
}
/* change "distcc cc -cfoo.c" -> "cc -c foo.c" */
free((*out_argv)[0]);
(*out_argv)[0] =strdup("cc");
if ((*out_argv)[0] == NULL) {
return EXIT_OUT_OF_MEMORY;
}
return 0;
} else {
/* skip "distcc", point to"gcc -c foo.c" */
return dcc_copy_argv(argv + 1,out_argv, 0);
}
}
この関数は確かにコンパイラを検索しているのを見ました.distccが実際に2つのコンパイラをサポートしているのも見ました.1つはcc(SUNが発売したC++コンパイラのようです)で、もう1つはgccです.見つかったコンパイラとそのコンパイルファイルパラメータはout_に保存されます.argv変数です.
コンパイラが見つかった以上、次はコンパイルプロセスを作成する必要があります.main関数でdcc_を呼び出し完了find_compiler関数は次にdcc_を呼び出すtrim_path関数は,システムにgccやccがインストールされていることを確認しているようで,いずれにしてもコンパイルプロセスを作成するものではないので,しばらく無視する.下を見続けます.
いくつかの副次的な関数をスキップして、私はついに1つの重要な関数を見つけました:dcc_build_somewhere_timed.今後の歳月の中で私たちはこの関数を重点的に分析します.これはここまでにしましょう.