# HG changeset patch # User anatofuz # Date 1611809892 -32400 # Node ID 7c6d3d582554be1987354009e0de7cc940cd2bc9 # Parent 95dfc1e2622ab0453b362001c45fd31c7af69d16 ... diff -r 95dfc1e2622a -r 7c6d3d582554 paper/chapter/02-perl.tex --- a/paper/chapter/02-perl.tex Thu Jan 28 11:45:27 2021 +0900 +++ b/paper/chapter/02-perl.tex Thu Jan 28 13:58:12 2021 +0900 @@ -40,9 +40,30 @@ \end{itemize} これらのPerlスクリプトはプログラマが自分で動かすことはない。 -GearsOSでプログラミングする際は、ビルドしたいプロジェクトをCMakeLists.txtに記述し、 移行はCMakeのビルドに移譲する。 -CMakeはMakefileやNinja fileを生成し実際にビルドを行うのはmakeやninja-buildとなっている。 +GearsOSでプログラミングする際は、ビルドしたいプロジェクトをCMakeLists.txtに記述し、 移行はCMakeのビルドフローに従う。 +CMakeはMakefileやNinja fileを生成し実際にビルドはmakeやninja-buildが行う。 + +\section{pmake} +GearsOSをビルドする場合は、x86アーキテクチャのマシンからビルドするのが殆どである。 +この場合ビルドしたバイナリはx86向けのバイナリとなる。 +これはビルドをするホストマシンに導入されているCbCコンパイラがx86アーキテクチャ向けにビルドされたものである為である。 + +CbCコンパイラはGCCとllvm/clang上に構築した2種類が主力な処理系である。 +LVM/clangの場合はLLVM側でターゲットアーキテクチャを選択することが可能である。 +GCCの場合は最初からターゲットアーキテクチャを指定してコンパイラをビルドする必要がある。 +時にマシンスペックの問題などから、 別のアーキテクチャ向けのバイナリを生成したいケースがある。 +教育用マイコンボードであるRaspberry PiはARMアーキテクチャが搭載されている。 +Raspberry Pi上でGearsOSのビルドをする場合、 ARM用にビルドされたCbCコンパイラが必要となる。 +Raspberry Pi自体は非力なマシンであるため、 GearsOSのビルドはもとよりCbCコンパイラの構築をRaspberry Pi上でするのは困難である。 +マシンスペックが高めのx86マシンからARM用のバイナリをビルドして、 Raspberry Piに転送し実行したい。 +ホストマシンのアーキテクチャ以外のアーキテクチャ向けにコンパイルすることをクロスコンパイルと呼ぶ。 + + +GearsOSはビルドツールにCMakeを利用しているので、 CMakeでクロスコンパイル出来るように工夫をする必要がある。 +CMake自身が実行タイミングでコンパイラを特定し 実行する処理になっている。 +自動でクロスコンパイル対応のGCCコンパイラは探してくれない為に、CMakeの実行時に引数でクロスコンパイラを具体的に指定する必要がある。 +この場合x86のマシンからARMのバイナリを出力する必要があり、 コンパイラやリンカーなどをARMのクロスコンパイル対応のものに指定する必要がある。 \section{GearsCbCのInterfaceの実装時の問題} Interfaceとそれを実装するImplの型が決定すると、最低限満たすべきCodeGearのAPIは一意に決定する。 diff -r 95dfc1e2622a -r 7c6d3d582554 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed