--- name: cross-compile description: 機器で動かすプログラムを、PC でビルドする(クロスコンパイル)。SDK の環境設定ファイルを読み込んでから make などを実行し、できたファイルの大きさと種類を報告する。「ビルドして」「クロスコンパイルして」と頼まれたときや、ビルドの設定ファイルの場所や中身を確かめたいときに使う。スラッシュコマンド /embedded-debug-loop:cross-compile で、このスキルだけを呼んでも使える。 --- # クロスコンパイル ## 何をするスキルか - 機器で動かすプログラムを、PC でビルドします。 - ビルドの前に SDK の環境設定ファイルを読み込み、後でできたファイルを確かめます。 - やり方は、設定ファイル(YAML)に書いてあります。 ## 頼まれ方と、すること - `<このスキルのフォルダ>` は、このファイルがあるフォルダです。 - コマンドは、利用者のプロジェクトのフォルダ(作業フォルダ)で実行します。 - 作業フォルダが今のフォルダと違うときは、`--workdir <フォルダ>` を付けます。 - 設定ファイルを別の場所に置くときは、`--config <ファイル>` を付けます。 ### 「ビルドして」と頼まれたとき ```bash python3 <このスキルのフォルダ>/scripts/build.py run ``` - ビルドの出力は、すべてログのファイルに残ります。 - ビルドは、最長で設定の timeout_seconds(既定 600 秒)かかります。途中で止めずに、終わるまで待ってください。 ### 設定ファイルの場所を聞かれたとき・用意するよう頼まれたとき ```bash python3 <このスキルのフォルダ>/scripts/build.py config-path ``` - 設定ファイルが無ければ、ひな形から作ります。 - 置き場所は `<作業フォルダ>/.embedded-debug-loop/cross-compile.yaml` です。 ### どのコマンドでも、スクリプトがすること - `.embedded-debug-loop` フォルダに `.gitignore` が無ければ、作ります。 中身は `*` です。設定やログを git に入れないためです。 - 設定ファイルに、ひな形にある項目が足りないことがあります(スキルを新しくしたときなど)。 そのときは、足りない項目を、説明のコメントと一緒にファイルの最後に足します。 値はひな形のままです。ほかの所は変えません。 ### 設定を確かめるよう頼まれたとき ```bash python3 <このスキルのフォルダ>/scripts/build.py check ``` - ビルドはしません。 - 空の項目、フォルダや SDK のファイルの有無を確かめます。 - SDK を読み込んだ後に、ビルドのコマンドとコンパイラーがあるかも確かめます。 ## 結果の伝え方 スクリプトは、結果を JSON で1つだけ出します。 JSON を読んで、次のように伝えます。 - まず `message` を、そのまま伝えます。 - `notes` があれば、それも必ず伝えます(`message` と同じ文は、くり返しません)。 SDK を読み込まないので PC 用のプログラムになる、などの注意です。 - ログのファイル(`log`)があれば、その場所も伝えます。 - `added` に項目があれば、設定ファイルに新しい項目を足したことを伝えます。 `message` にも書いてあります。値はひな形のままなので、書き換えてよいと伝えます。 - JSON の項目名(`ok`、`stale_outputs`、`error_lines`、`file_type` など)は、利用者に見せません。 ふつうの言葉で言い換えます(例:「前のビルドのままのファイル」「ファイルの種類」)。 - 設定ファイルの項目名(outputs、clean_command など)は、見せてかまいません。 利用者が自分で書き換えるものだからです。 ### 設定ファイルの場所を出したとき(config-path) - 設定ファイルの場所(`config`)を伝えます。 - `missing` に項目があれば、まだ空の必須の項目として伝えます。 - `empty_recommended` に項目があれば、機器向けにビルドするなら書く項目が、まだ空だと伝えます。 - 設定ファイルは、利用者が直接書き換えてよいと伝えます。 ### 設定を確かめて、問題が無かったとき 見分け方:check の結果で、`ok` が true です。 - 設定の要点(`summary`)を、設定ファイルの項目名と値の表で見せます。 - 列は「項目」と「値」です。 - 「項目」には、設定ファイルの項目名(source_dir、outputs など)を、そのまま書きます。 日本語に言い換えません。利用者が、設定ファイルの中で探す名前だからです。 - 空の値は「(空)」と書きます。 - 日本語の説明を添えるときは、「説明」の列を別に足します。 - 使うコンパイラー(`summary` の `compiler` と、場所の `compiler_path`)は、表の外に文で伝えます。 設定ファイルの項目ではないからです。 ### ビルドに成功したとき 見分け方:run の結果で、`ok` が true です。 - できたファイルごとに、場所(`path`)、大きさ(`size`)、種類(`file_type`)を伝えます。 - 使ったコンパイラー(`compiler` と `compiler_path`)を伝えます。 - 警告の行(`warning_lines`)があれば、主なものを短く伝えます。 - 作り直されなかったファイル(`stale_outputs`)があれば、「できたファイル」とは書きません。 「前のビルドのままのファイル」として伝えます(ソースの変更が入っていないかもしれません)。 ### ビルドが失敗したとき 見分け方:run の結果で、`ok` が false で、`problems` がありません。 - `error_lines` から、主なエラーを数行だけ見せます。 - エラーの行が無いときは、`tail`(出力の最後の行)を見せます。 - 時間切れ(`timed_out` が true)なら、そのことをはっきり伝えます。 ### 設定や PC の準備に問題があるとき 見分け方:`problems` に文が入っています。 - `problems` を、1行ずつ見せます。 - 設定ファイルの値の問題なら、設定ファイルの場所(`config`)を伝えます。 - PC の準備の問題(コンパイラーが無いなど)なら、そのことを伝えます。 - 設定ファイルは、利用者が直接書き換えてよいと伝えます。 - 各項目の意味は、項目のすぐ上のコメントに書いてあると伝えます。 - `created` が true なら、設定ファイルを新しく作ったことも伝えます。 ## 守ること - 頼まれていないのに、設定ファイルを書き換えません。 ただし、足りない項目は、スクリプトが自分で足します。 - 頼まれていないのに、ソースや Makefile を直しません。 - 失敗したとき、何も変えずに同じビルドをくり返しません。 - 失敗したときは、原因と、確かめることを伝えます。 - スクリプトの終了コードは、利用者に伝えません。