# コンパイルターゲット解説

### [TWL_FINALROM]

マスター提出時に製品版の作成目的で使用されるオプションです。

※ROMを提出する際は必ずこのオプションでビルドする必要があります。

- SDK_ASSERT(), SDK_WARNING() が無効
- OS_Panic(), OS_TPanic() はFINALROMライブラリではメッセージを出力しません。(何もしないでただ停止する関数 OS_Terminate() と同等となります。)
- 最適化ON
- デバッグ用の関数のいくつかが、動作環境に関わらず一定の値を返したり、何もしない関数になります。

### [TWL_DEBUG]

TWL_FINALROM や TWL_RELEASE 使用時より入念なデバッグ目的で使用されるオプションです。

- OSのデバッグ文字列表示関数の OS_PutString() 等が有効。
- OS_GetArgc(), OS_GetArgv() 等が有効。
- OS_Panic(), OS_TPanic() が有効。
- デバッグのスタックチェック関数の OS_CheckStack(), OS_CheckIrqStack() が有効。

具体的に関数の無効・有効の詳細はOSのデバッグ関数リファレンス以下のデバッグ用関数を参照してください。

### [TWL_RELEASE]

TWL_DEBUG 使用時より製品版に近い条件でのデバッグ目的で使用されるオプションです。

基本的には、上記 TWL_DEBUG/TWL_FINALROM の両方の特徴をマージしたものです。
以下に具体的なマージの内容を示します。

特徴 | TWL_DEBUG | TWL_RELEASE | TWL_FINALROM
--- | --- | --- | ---
OSのデバッグ出力関数 `OS_PutString() 等` | 有効 | 無効
コンパイラの最適化 | OFF | ON
SDK内部のデバッグコード | 有効 | 無効
SDK_ASSERT() 等のアサート関数 | 有効 | 無効
OS_Panic() 等の関数 | 有効 | OS_Terminate() と同等