Main Content

ツールチェーン (ToolchainInfo) またはテンプレート makefile のビルド プロセスの設定

モデルから生成されたコードのビルドに、ツールチェーン (ToolchainInfo) アプローチまたはテンプレート makefile アプローチを指定します。

システム ターゲット ファイルのコンフィギュレーション パラメーターを [grt.tlc][ert.tlc][ert_shrlib.tlc]、またはツールチェーンに準拠する他のシステム ターゲット ファイルに設定すると、ビルド プロセスはツールチェーン アプローチを使用します。パラメーターをツールチェーンに準拠しないシステム ターゲット ファイルに設定すると、ビルド プロセスはテンプレート makefile アプローチを使用します。

次のコマンドを使用して、ツールチェーン アプローチをテンプレート makefile アプローチに切り替えることができます。

set_param(model, 'MakeCommand', 'make_rtw TMF=1')

ツールチェーン アプローチ

[システム ターゲット ファイル] を以下に設定すると、[ツールチェーン設定][ビルド プロセス] の下に表示されます。

  • grt.tlc ― 汎用リアルタイム ターゲット

  • ert.tlc — Embedded Coder

  • ert_shrlib.tlc — Embedded Coder (ホストベースの共有ライブラリ ターゲット)

  • ツールチェーン準拠のシステム ターゲット ファイル

ツールチェーンに準拠したシステム ターゲット ファイルの詳細については、カスタム ターゲットを使用したツールチェーン アプローチのサポートを参照してください。

[ツールチェーン設定] には、次のコンフィギュレーション パラメーターが含まれます。

  • ツールチェーン–– 生成コードをビルドするサードパーティ ソフトウェア ツールのコレクションを指定します。ツールチェーンには、コンパイラ、リンカー、アーカイバー、およびビルド前またはビルド後の他のツールを含めることができます。

    [ツールチェーン] の既定値は、[Automatically locate an installed toolchain] です。[ツールチェーン] パラメーターは、特定されたツールチェーンの名前を、[Automatically locate an installed toolchain] のすぐ下に表示します。

    ツールチェーンが存在することと、コード ジェネレーターがそのツールチェーンを使用するために必要な情報をもっていることを確認するには、[詳細設定パラメーター] セクションで [ツールチェーンの検証] をクリックします。結果の検証レポートには選択されたツールチェーンのパス/失敗の値が示され、解決が必要な問題が表示されます。

  • ビルド構成–– 最適化設定を指定します。既定では、[ビルド構成][Faster Builds] に設定されます。また、[Faster Runs][Debug] および [Specify] を選択することもできます。[Specify] を選択すると、ツール チェーンのオプションをカスタマイズできます。[適用] をクリックすると、カスタム ツールチェーン設定が現在のモデルに適用されます。

メモ

テンプレート makefile アプローチを使用している次のシステム ターゲット ファイルは同じ名前ですが、ツールチェーン アプローチを使用しているシステム ターゲット ファイルとは異なる説明になっています。

  • ert.tlc — Embedded Coder の Visual C/C++ ソリューション ファイルを作成する

  • grt.tlc — Simulink Coder の Visual C/C++ ソリューション ファイルを作成する

混乱を避けるため、[参照] をクリックしてシステム ターゲット ファイルを選択し、各ファイルの説明を確認してください。

ツールチェーン アプローチを使用するためのモデルのアップグレード

R2013b より前に作成された、以下のシステム ターゲット ファイルを使用するモデルを開くと、ソフトウェアはモデルのアップグレードを試みます。アップグレードによって、テンプレート makefile 設定の使用からツールチェーン設定の使用へと構成が変更されます。

  • ert.tlc — Embedded Coder

  • ert_shrlib.tlc — Embedded Coder (ホストベースの共有ライブラリ ターゲット)

  • grt.tlc ― 汎用リアルタイム ターゲット

メモ

ツールチェーン アプローチを使用するために、カスタムのシステム ターゲット ファイルを使用してモデルをアップグレードする場合は、カスタム ターゲットを使用したツールチェーン アプローチのサポートを参照してください。

一部のモデル コンフィギュレーション パラメーターの値によって、ツールチェーン設定を使用するモデルのアップグレードが回避されます。以下の手順は、アップグレード プロセスを完了する方法を示しています。

モデルのアップグレードについて検討し、ツールチェーン ビルド アプローチを使用する。こうした手順は必要ありません。引き続き、アップグレードされていないモデルからコードを生成できます。

メモ

ソフトウェアは、以下のシステム ターゲット ファイルを使用しているモデルをアップグレードしません。

  • ert.tlc — Embedded Coder の Visual C/C++ ソリューション ファイルを作成する

  • grt.tlc — Simulink Coder の Visual C/C++ ソリューション ファイルを作成する

モデルがアップグレードされたかどうかを確認するには、以下を行います。

  1. [ツールチェーン] および [ビルド構成] コンフィギュレーション パラメーターが指定されている場合、モデルはアップグレードされています。

    [makefile の生成][make コマンド][テンプレート makefile] などの [makefile の設定] パラメーターが指定されている場合、モデルはアップグレードされていません。

[ファイル][名前を付けて保存] を使用してモデルの作業コピーを作成することから始めます。このアクションにより、元のモデルとコンフィギュレーション パラメーターが参照に備えて保持されます。

アップグレード アドバイザーを使用してモデルのアップグレードを試みます。

  1. [モデル化] タブの [実行と管理] セクションで、[アップグレード アドバイザー] を選択します。

  2. アップグレード アドバイザーで、[ツールチェーン アプローチを使用して生成コードをビルドするように、モデルをチェックして更新します] を選択し、[このチェックを実行] をクリックします。

  3. 推奨アクションを実行するか、[モデルの更新] をクリックするか、あるいはその両方を実行します。

アップグレード アドバイザーを使用してモデルをアップグレードできない場合は、以下のパラメーターの 1 つ以上がここで示す既定値に設定されていません。

  • コンパイラ最適化レベル最適化オフ (高速にビルド)

  • makefile の生成 — 有効

  • テンプレート makefile — システム ターゲット ファイルに固有のテンプレート makefile

  • make コマンド — 引数をもたない make_rtw

モデルをアップグレードできない場合があります。次の手順を試してみてください。

  • [makefile の生成] が無効な場合は、アップグレードできません。ただし、これを有効にし、アップグレード アドバイザーを使用してモデルのアップグレードを試行できます。

  • [コンパイラ最適化レベル][最適化オン (高速に実行)] に設定されている場合は、次の手順に従います。

    1. [コンパイラ最適化レベル][最適化オフ (高速にビルド)] に設定します。

    2. アップグレード アドバイザーを使用してモデルをアップグレードします。

    3. [ビルド構成][Faster Runs] に設定します。

  • [コンパイラ最適化レベル][カスタム] に設定されている場合は、次の手順に従います。

    1. [カスタム コンパイラ最適化フラグ] をテキスト ファイルにコピーします。

    2. [コンパイラ最適化レベル][最適化オフ (高速にビルド)] に設定します。

    3. アップグレード アドバイザーを使用してモデルをアップグレードします。

    4. [ビルド構成][Specify] に設定します。

    5. 同じ最適化を実行するために、コンパイラ オプションを編集します。

  • [テンプレート makefile] がカスタマイズされたテンプレート makefile を使用している場合、アップグレードできません。ただし、以下のような解決方法があります。

    1. システム ターゲット ファイルの既定の makefile を使用するように、[テンプレート makefile] を更新します。

      メモ

      既定の makefile 名を取得するには、[システム ターゲット ファイル] を変更して [適用] をクリックし、それを元に戻して、再度 [適用] をクリックします。

    2. アップグレード アドバイザーを使用してモデルをアップグレードします。

    3. テンプレート makefile にコンパイラ最適化フラグなどのビルド ツール オプションが含まれている場合は、[ビルド構成][Specify] に設定して、オプションを更新します。

    4. テンプレート makefile がカスタム ビルド ツールを使用している場合は、カスタム ツールチェーンの登録での説明に従い、カスタム ツールチェーンを作成して登録します。その後、カスタム ツールチェーンを使用するように [ツールチェーン] パラメーターを設定します。

      メモ

      カスタム ツールチェーンの登録後、カスタム ツールチェーンを使用するように [ツールチェーン] を更新します。

    5. テンプレート makefile にカスタム ルールとロジックが含まれる場合、これらのカスタマイズはアップグレードされたモデルには適用できません。

テンプレート makefile アプローチ

[システム ターゲット ファイル] が、テンプレート makefile アプローチを使用する [tlc] ファイルに設定されている場合、ソフトウェアは [コンパイラ最適化レベル][makefile の生成][make コマンド] および [テンプレート makefile] の各パラメーターを表示します。

makefile を生成するかどうかの指定

[makefile の生成] オプションはビルド プロセスにモデルの makefile を生成させるかどうかを指定します。既定の設定では、ビルド プロセスは makefile を生成します。[makefile の生成] をオフにすることによって、たとえば、makefile に基づかないカスタム ビルド プロセスをサポートするために、makefile の生成を抑制します。このパラメーターをオフにすると、次が適用されます。

make コマンドの指定

テンプレート makefile ベースの各システム ターゲット ファイルには、関連する make コマンドがあります。コード ジェネレーターはこの内部 MATLAB® コマンドを使用して、ビルド プロセスを制御します。コマンドは [make コマンド] フィールドに表示され、ビルドの開始時に実行されます。

ほとんどのシステム ターゲット ファイルが既定のコマンド make_rtw を使用します。サードパーティ製のシステム ターゲット ファイルは、別の make コマンドを指定する可能性があります。ベンダーのドキュメンテーションを参照してください。

make コマンドの名前に加えて、[make コマンド] フィールドに makefile オプションを指定できます。これらのオプションには、コンパイラ固有のオプション、インクルード パス、その他のパラメーターが含まれる可能性があります。ビルド プロセスにより make ユーティリティが呼び出されると、これらのオプションは make コマンド ラインに渡され、さらにコンパイラに渡される全体のフラグに追加されます。

テンプレート makefile と make オプションにはサポートされている各コンパイラで使用できる [make コマンド] のオプションが記載されています。

テンプレート makefile の指定

[テンプレート makefile] フィールドには次のような機能があります。

  • システム ターゲット ファイル ブラウザーを使ってシステム ターゲット ファイルを選択した場合、このフィールドには MATLAB 言語ファイルの名前が表示されます。このファイルはその開発環境に適したテンプレート makefile を選択します。たとえば、モデル コンフィギュレーション パラメーター: コード生成[テンプレート makefile] フィールドに grt_default_tmf が表示され、ビルド プロセスで grt_default_tmf.m が実行されることを示します。

    テンプレート makefile と make オプションには、ビルド プロセスがテンプレート makefile を選択するときに使用するロジックの詳細が説明されています。

  • 代わりに、このフィールドには特定のテンプレート makefile の名前 (拡張子も含む) またはテンプレート makefile を返す MATLAB 言語ファイルの名前を明示的に入力することもできます。システム ターゲット ファイル ブラウザーに表示されないシステム ターゲット ファイルを使用している場合は、この方法を使用します。たとえば、カスタム システム ターゲット ファイル用に独自のテンプレート makefile を記述した場合は、この方法を使用します。

独自のテンプレート makefile を指定する場合、必ずファイル名に拡張子を付けてください。拡張子を省略すると、ビルド プロセスは .m を拡張子にもつファイル (MATLAB 言語ファイル) を探して実行しようとします。そのテンプレート make ファイル (またはテンプレート make ファイルを戻す MATLAB 言語ファイル) は MATLAB のパス上になければなりません。MATLAB のパス上にそのファイルがあるかどうかを調べるには、MATLAB コマンド ウィンドウで次のコマンドを入力します。

which tmf_filename

テンプレート makefile とツールチェーンの関連付け

テンプレート makefile ビルド プロセスに対してツールチェーンを指定します。以下の例では、最小限のツールチェーンの定義を提供します。また、ert_unix.tmf または ert_vcx64.tmf のコピーであるテンプレート makefile にツールチェーンを関連付ける方法を示します。

  1. ert_unix.tmf または ert_vcx64.tmf のコピーをテンプレート makefile として使用します。

    copyfile(fullfile(matlabroot, 'toolbox', 'coder', ...
                      'compile', 'tmf', 'ert_vcx64.tmf'), ...
                      'ert_copy.tmf')

  2. テンプレート makefile (たとえば ert_copy.tmf) で、TOOLCHAIN_NAME マクロを編集します。

    TOOLCHAIN_NAME = "Minimal Toolchain for TMF Build"

    メモ

    現在のリリースの ert_unix.tmf ファイルと ert_vcx64.tmf ファイルは、R2018a より前のリリースの対応するファイルに比べて簡略化されています。テンプレート makefile で変数 TOOLCHAIN_NAME の有無を確認する簡略化されたアプローチを使用するかどうかはソフトウェアによって決まります。R2018a より前のリリースの ert_unix.tmf ファイルおよび ert_vcx64.tmf ファイルに基づくテンプレート makefile は、変数 TOOLCHAIN_NAME を指定しません。

    |>MODEL_MODULES<| トークンにより、簡略化されたアプローチでコンパイルが必要な mainmodel、およびその他のソース ファイルが指定されます。R2018a より前のリリースの ert_unix.tmf ファイルおよび ert_vcx64.tmf ファイルに基づくテンプレート makefile は、main および model ソース ファイルを、コンパイルが必要なソース ファイルのリストに明示的に追加します。

    R2018a より前のリリースから発生するテンプレート makefile を更新するには、以下の手順を行います。

    1. ert_main.cclassic_main.c、または rt_main.c への参照を削除します。ert_main.c のようなリテラル参照または ert_main.$(TARGET_LANG_EXT) のようなトークン化された参照などです。

    2. $(MODEL).c または $(MODEL).$(TARGET_LANG_EXT) への参照を削除します。

  3. ツールチェーンをテンプレート makefile に関連付けます。

    1. ツールチェーン定義ファイルを作成します。この例では、次のコードを使用します。

       ツールチェーン定義ファイル

    2. ToolchainInfo オブジェクトの tc を生成するツールチェーン定義ファイルを実行します。

      tc = minimalToolchainForTMF;

    3. ToolchainInfo オブジェクトを MAT ファイルに保存します。

      save('tcMinimal','tc')

    4. ツールチェーンを RTW.TargetRegistry に登録します。

      1. 以下のコードを rtwTargetInfo.m ファイルに配置します。

        function rtwTargetInfo(tr)
        tr.registerTargetInfo(@loc_createToolchain);
        end
        
        function config = loc_createToolchain
        config(1) = coder.make.ToolchainInfoRegistry;
        config(1).Name = 'Minimal Toolchain for TMF Build';
        config(1).FileName = fullfile(fileparts(mfilename('fullpath')),...
            'tcMinimal.mat');
        config(1).TargetHWDeviceType = {'*'};
        config(1).Platform =  {computer('arch')};
        end

      2. ファイルを現在の作業フォルダーまたは MATLAB 検索パス上にあるフォルダーに保存します。

      3. TargetRegistry をリセットします。

        RTW.TargetRegistry.getInstance('reset');

  4. テンプレート makefile をモデルに関連付けて、モデルをビルドします。

    set_param(model, 'TemplateMakefile', 'ert_copy.tmf');
    slbuild(model);

コード生成の TLC の指定

Target Language Compiler (TLC) はコード ジェネレーターに不可欠な部分です。これにより、生成されたコードをカスタマイズできます。カスタマイズによって、プラットフォーム固有のコードを生成したり、実行速度、コード サイズ、保持する既存のメソッドとの互換性用に独自のアルゴリズムの変更を組み込むこともできます。詳細については、Target Language Compiler の概要を参照してください。

コード生成用に指定する TLC オプションは、生成された HTML コード生成レポートの概要セクションに表示されます。

メモ

TLC コマンド ライン オプションを指定しても、make コマンド ラインにフラグは追加されません。

関数 set_param の呼び出しで TLCOptions モデル パラメーターを使用してコードを生成するために、TLC (Target Language Compiler) コマンド ライン オプションと引数を指定できます。たとえば、以下のようになります。

>> set_param(gcs,'TLCOptions','-p0 -aWarnNonSaturatedBlocks=0')

TLC の一般的用途には、以下のようなものがあります。

  • -aVarName=1 (TLC 変数の宣言または値の代入)

  • -IC:\Work (インクルード パスの指定)

  • -v (デバッグなどで TLC 処理からの詳細出力を取得)

生成されたコードの再コンパイルでのチェックサムの使用

GenerateMakefile'on' に設定し、GenCodeOnly'off' に設定してモデルをビルドすると、ソフトウェアは makefile を生成し、その makefile を実行して、生成されたコードをコンパイルします。コンパイルが完了すると、ソース ファイルとコンフィギュレーション データのチェックサムが作成され、保存されます。

モデルを作成するときに前回のビルドのチェックサムが利用できる場合は、次のようになります。

  1. ソフトウェアではチェックサムを使用して、ソース ファイルとコンフィギュレーション データが前回のビルドと異なるかどうか判断します。

  2. ソフトウェアで違いが検出されると、次が行われます。

    • makefile の再作成。

    • 生成されたコードの再コンパイル。

ビルド プロセスでテンプレート makefile を使用する場合は、次のテキストをテンプレート makefile に追加してチェックサムの使用を無効にすることができます。

DO_NOT_USE_CHECKSUMS=1
この場合、ソフトウェアはファイルのタイムスタンプを使用して、生成されたコードを再コンパイルするかどうか判断します。

関連するトピック