diff paper/chapter/02-perl.tex @ 16:69ab7cf9c1a1

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 29 Jan 2021 16:18:15 +0900
parents 7c6d3d582554
children 72bffc43a3a1
line wrap: on
line diff
--- a/paper/chapter/02-perl.tex	Thu Jan 28 20:47:08 2021 +0900
+++ b/paper/chapter/02-perl.tex	Fri Jan 29 16:18:15 2021 +0900
@@ -61,9 +61,31 @@
 
 
 GearsOSはビルドツールにCMakeを利用しているので、 CMakeでクロスコンパイル出来るように工夫をする必要がある。
-CMake自身が実行タイミングでコンパイラを特定し 実行する処理になっている。
-自動でクロスコンパイル対応のGCCコンパイラは探してくれない為に、CMakeの実行時に引数でクロスコンパイラを具体的に指定する必要がある。
+CMakeはautomakeなどのMakeファイルを作成するツールに相当するものである。
+CMake側の機能でビルドに使用できるコンパイラやリンカを自動探索し、 決定した上でMakefileやNinjaファイルを生成する。
+しかしCMakeは今ビルドしようとしている対象が、自分が動作しているアーキテクチャかそうでないか、クロスコンパイラとして使えるかなどはチェックしない。
+つまりCMakeが自動でクロスコンパイル対応のGCCコンパイラを探すことはない。
+その為そのままビルドするとx86用のバイナリが生成されてしまう。
+
+
+CMakeを利用してクロスコンパイルする場合、CMakeの実行時に引数でクロスコンパイラを明示的に指定する必要がある。
 この場合x86のマシンからARMのバイナリを出力する必要があり、 コンパイラやリンカーなどをARMのクロスコンパイル対応のものに指定する必要がある。
+また、 xv6の場合はOSであるためにリンク時に特定のリンカスクリプトを使う必要がある。
+これらのリンカスクリプトもCMake側に、 CMakeが提供しているリンカ用の特殊変数を使って自分で組み立てて渡す必要がある。
+このようなCMakeの処理を手打ちで行うことは難しいので、 \texttt{pmake.pl}を作成した。
+\texttt{pmake.pl}の処理フローを図\ref{fig:pmake}に示す。
+\texttt{pmake.pl}はPerlスクリプトで、 シェルコマンドを内部で実行しクロスコンパイル用のオプションを組み立てる。
+
+\begin{figure}[htp]
+  \begin{center}
+   \includegraphics[width=160mm]{drawio/pmake.pdf}
+  \end{center}
+  \caption{pmake.plの処理フロー}
+  \label{fig:pmake}
+ \end{figure}
+ 
+
+
 \section{GearsCbCのInterfaceの実装時の問題}
 
 Interfaceとそれを実装するImplの型が決定すると、最低限満たすべきCodeGearのAPIは一意に決定する。