Mercurial > hg > Papers > 2021 > anatofuz-master
diff paper/chapter/02-perl.tex @ 17:72bffc43a3a1
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 29 Jan 2021 17:26:43 +0900 |
parents | 69ab7cf9c1a1 |
children | 7431f9572567 |
line wrap: on
line diff
--- a/paper/chapter/02-perl.tex Fri Jan 29 16:18:15 2021 +0900 +++ b/paper/chapter/02-perl.tex Fri Jan 29 17:26:43 2021 +0900 @@ -26,11 +26,16 @@ その為GearsOSの拡張部分を、等価な純粋なCbCの記述に変換する必要がある。 現在のGearsOSでは、 CMakeによるコンパイル時にPerlで記述された\texttt{generate\_stub.pl}と\texttt{generate\_context.pl}の2種類のスクリプトで変換される。 + + \begin{itemize} \item \texttt{generate\_stub.pl} \begin{itemize} \item 各CbCファイルごとに呼び出されるスクリプト \item 対応するメタ計算を導入したCbCファイル(拡張子はc)に変換する + \begin{itemize} + \item 図\ref{fig:generate_stub_pl_1}に処理の概要を示す + \end{itemize} \end{itemize} \item \texttt{generate\_context.pl} \begin{itemize} @@ -41,7 +46,15 @@ これらのPerlスクリプトはプログラマが自分で動かすことはない。 GearsOSでプログラミングする際は、ビルドしたいプロジェクトをCMakeLists.txtに記述し、 移行はCMakeのビルドフローに従う。 -CMakeはMakefileやNinja fileを生成し実際にビルドはmakeやninja-buildが行う。 +CMakeはMakefileやbuild.ninjaを生成し実際にビルドはmakeやninja-buildが行う。 + +\begin{figure}[htp] + \begin{center} + \includegraphics[width=160mm]{drawio/gears_os_build_flow.pdf} + \end{center} + \caption{generate\_sub.plを利用したクロスコンパイル} + \label{fig:generate_stub_pl_1} + \end{figure} \section{pmake} GearsOSをビルドする場合は、x86アーキテクチャのマシンからビルドするのが殆どである。 @@ -70,11 +83,13 @@ CMakeを利用してクロスコンパイルする場合、CMakeの実行時に引数でクロスコンパイラを明示的に指定する必要がある。 この場合x86のマシンからARMのバイナリを出力する必要があり、 コンパイラやリンカーなどをARMのクロスコンパイル対応のものに指定する必要がある。 -また、 xv6の場合はOSであるためにリンク時に特定のリンカスクリプトを使う必要がある。 +また、 xv6の場合はリンク時に特定のリンカスクリプトを使う必要がある。 これらのリンカスクリプトもCMake側に、 CMakeが提供しているリンカ用の特殊変数を使って自分で組み立てて渡す必要がある。 このようなCMakeの処理を手打ちで行うことは難しいので、 \texttt{pmake.pl}を作成した。 -\texttt{pmake.pl}の処理フローを図\ref{fig:pmake}に示す。 +\texttt{pmake.pl}の処理の概要を図\ref{fig:pmake}に示す。 \texttt{pmake.pl}はPerlスクリプトで、 シェルコマンドを内部で実行しクロスコンパイル用のオプションを組み立てる。 +\texttt{pmake.pl}を経由してCMakeを実行すると、 makeコマンドに対応するMakefile、 ninja-buildに対応するbuild.ninjaが生成される。 +以降はcmakeではなくmakeなどのビルドツールがビルドを行う。 \begin{figure}[htp] \begin{center}