HEWでターゲット向けにCppUTestをビルドする

以前このブログで紹介したCppUTestについては、他のC++向けテスティングフレームワークと比較してターゲット上でも実行しやすいというメリットを持っています。このメリットは組み込み開発でTDDを進める上で大きな助けとなります。
とりあえず今回はひと手間必要なHEWでのビルド方法をまとめます。

Static Libraryのビルド

  1. 「Library」プロジェクトでプロジェクト新規作成
    • プロジェクト新規作成時の設定では、C++関連の設定(「C++のtry, throw catchを有効にする」等)はデフォルトのまま
  2. プロジェクトフォルダに以下のフォルダを移動
    • ダウンロード&解凍したCppUTestフォルダのうちの「src」フォルダ
    • 同フォルダのうちの「include」フォルダ
  3. プロジェクトに以下のファイルを追加
    • 移動フォルダでの「src/CppUTest」にあるファイルすべて
    • 同フォルダでの「src/Platforms/GccNoStdC」にあるファイル
    • 同フォルダでの「include/CppUTest」にあるファイルすべて
    • 同フォルダでの「include/Platforms/Gcc」にあるファイル
  4. ビルドメニューの「**** engine Standard Toolchain」項目にて、以下を追加
    • インクルードファイルディレクトリに以下を追加
      • ベースパス:「Project directory」
      • サブディレクトリ:「include」
    • マクロ定義でのマクロに「CPPUTEST_STD_CPP_LIB_DISABLED」を追加
  5. プロジェクトをビルド。「プロジェクト名.lib」が生成される。

ターゲットプロジェクトの作成

  1. ターゲット用プロジェクトファイル新規作成
    • main関数生成で「C++ source file」を選択
    • それ以外ではC++関連の設定はデフォルトのまま
  2. プロジェクトフォルダに以下のフォルダを移動
    • ダウンロード&解凍したCppUTestフォルダのうちの「include」フォルダ
    • 先ほど生成した「プロジェクト名.lib」
  3. プロジェクトに以下のファイルを追加
    • 同フォルダでの「include/CppUTest」にあるファイルすべて
    • 同フォルダでの「include/Platforms/Gcc」にあるファイル
  4. ビルドメニューの「**** engine Standard Toolchain」項目にて、以下を追加
    • インクルードファイルディレクトリに以下を追加
      • ベースパス:「Project directory」
      • サブディレクトリ:「include」
    • マクロ定義でのマクロに「CPPUTEST_STD_CPP_LIB_DISABLED」を追加
    • ライブラリファイルに格納した「プロジェクト名.lib」をパス含め追加
  5. プロジェクトをビルド。ターゲット上でユニットテストを実行するバイナリが生成される。

なおmain関数は例えば以下のように記述。

#include <CppUTest/CommandLineTestRunner.h>

//#include "typedefine.h"
#ifdef __cplusplus
//#include <ios>                        // Remove the comment when you use ios
//_SINT ios_base::Init::init_cnt;       // Remove the comment when you use ios
#endif

void main(void);
#ifdef __cplusplus
extern "C" {
void abort(void);
}
#endif

void main(void)
{
	const char *argv[] = { "" };
	CommandLineTestRunner::RunAllTests(0, argv);
}

#ifdef __cplusplus
void abort(void)
{

}
#endif