changeset 14:7c6d3d582554

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 28 Jan 2021 13:58:12 +0900
parents 95dfc1e2622a
children 36d241194507
files paper/chapter/02-perl.tex paper/master_paper.pdf
diffstat 2 files changed, 23 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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は一意に決定する。
Binary file paper/master_paper.pdf has changed