SDK のビルドスイッチ

# ビルドスイッチ　(Build Switch)

## SDK のビルド時に設定が必須な環境変数

以下は TwlSDK ツリーをビルドする際に設定が必須な環境変数です。
無設定時は初期値が使用されます。
ビルドスイッチの設定可能範囲に関しては以下の"ビルドスイッチ使用表"を参照ください。

TWLSDK_ROOT (NITROSDK_ROOT) ★重要 | TWL-SDK がインストールされているディレクトリであり、$TwlSDK が展開されているディレクトリを設定します。 初期値 : C:/TwlSDK

TWLSDK_PLATFORM
★重要

ビルド対象とするプラットフォームを設定します。
この環境変数を設定することによって、必要なプラットフォーム用コードのみを生成することができます。
例えば、TWL-SDK で TWL 用アプリのみを開発する場合、環境変数で "TWLSDK_PLATFORM=TWL" と設定しておけば
この場合に不要な NITRO 用コードは生成されず TWL 用のコードのみを生成することができます。
無設定時にはエラーで停止します。

TWL | TWL 用のコードを生成します。
NITRO | NITRO 用のコードを生成します。
ALL | TWL、NITRO 両方を生成します。
TWL NITRO

初期値 : 指定なし

CWFOLDER_TWL
(CWFOLDER_NITRO)

CodeWarrior のインストールされているディレクトリです。
CodeWarrior for NITRO をインストールすると CWFOLDER_NITRO が自動的に設定されます。
cygwin の bash で設定するときは
% export CWFOLDER_NITRO='D:/Program Files/Freescale/CW for NINTENDO DS V2.0'
とシングルクウォートで囲む必要があります。
Windows の環境変数で設定するときは
D:/Program Files/Freescale/CW for NINTENDO DS V2.0
となります。パスの区切り文字として / と \ の両方が使用できます。
初期値 : なし (通常は CodeWarrior インストール時に設定されます。)

LM_LICENSE_FILE | CodeWarrior のライセンスファイルのパスです。 初期値 : なし (通常は CodeWarrior インストール時に設定されます。)
IS_TWL_DEBUGGER_DIR (IS_NITRO_DIR) | IS-TWL-DEBUGGER 関連ファイルのインストールされているディレクトリです。 IS-TWL-DEBUGGER をインストールすると自動的に設定されます。 この環境変数があると自動的に IS-TWL-DEBUGGER 関連のライブラリがリンクされます。 初期値 : なし (通常は IS-TWL-DEBUGGER インストール時に設定されます。)

## SDK のビルド時のビルドスイッチ

以下は TwlSDK ツリーのビルド条件を変更するためのビルドスイッチです。
これらの値は通常の環境変数で設定するほかに make コマンドの引数として make TWL_DEBUG=TRUE などと記述したり、Makefile 内に記述したりすることで設定可能です。
無設定時は初期値が使用されます。
ビルドスイッチの設定可能範囲に関しては"ビルドスイッチ使用表"を参照ください。
以下の環境変数で変更した内容は TWL 用環境変数(TWL_*) の値が優先されます。
(TWL_PROC=ARM9 と NITRO_PROC=ARM7 が Makefile 内で同時に記述されている場合は ARM9 が設定されます。)

TWL_PROC
(NITRO_PROC)
※変更不要

ARM9(メインプロセッサ) と ARM7(サブプロセッサ) どちらのプロセッサ用コードを生成するのかを設定します。
初期値のままでご使用ください。

ARM9 | ARM9(メインプロセッサ) 用のコードを生成します。[初期値]
ARM7 | ARM7(サブプロセッサ) 用のコードを生成します。

TWL_ARCHGEN

TWL 用コードの場合、TWL 専用と NITRO/TWL ハイブリッド用 どのコードを生成するのかを設定します。
このビルドスイッチはビルドシステム内で書き換えられる可能性があります。
具体的には、現在 LIMITED/HYBRID どちらのコードをビルドしているのかが設定されています。
このビルドスイッチを Makefile 内で参照したい場合は commondefs 後に参照してください。

LIMITED | TWL 専用コードを生成します。
HYBRID | NITRO/TWL ハイブリッド用コードを生成します。[初期値]
ALL | LIMITED、HYBRID 両方を生成します。
LIMITED HYBRID

TWL_CODEGEN
(NITRO_CODEGEN)

コンパイラおよびアセンブラに Arm と Thumb どのバイナリコードを生成するのかを設定します。
ソース内で明示的に指定がなければこの設定に添ってコードが生成されます。
このビルドスイッチに指定されている値を Makefile 内で参照したい場合は、commondefs 後に参照してください。

ARM | Arm コードを生成します。[初期値]
THUMB | Thumb コードを生成します。
ALL | Arm コード、Thumb コード両方を生成します。
ARM THUMB

TWL_DEBUG
(NITRO_DEBUG)
TWL_RELEASE
(NITRO_RELEASE)
TWL_FINALROM
(NITRO_FINALROM)
★重要

ターゲットのビルドタイプを DEBUG 版か RELEASE 版か FINALROM 版から選択できます。
この設定によって make コマンド実行時にコンパイルオプションやリンクされるライブラリが変更されます。
この変数は他の変数とは異なり、３つのうちどれかひとつに適当な値(TRUEなど)を設定することで有効になります。
３つのオプションの詳細については $TwlSDK/man/jp_JP/information/compiletarget.html(コンパイルターゲット解説)を参照してください。
初期値 : 指定がない場合 RELEASE 版がビルドされます

TWL_STD_PCHDR (NITRO_STD_PCHDR) TWL_NO_STD_PCHDR (NITRO_NO_STD_PCHDR) | TWL_STD_PCHDR に何かの値が設定されていた場合には、ビルドシステムはビルドに先立ち $TwlSDK/include/twl.h をプリコンパイルし、 その結果をファイルのビルド時に読み込みます。 これによりビルドの高速化が期待できます。 もしこのコンパイルを一時的に抑制したい場合は、TWL_NO_STD_PCHDR に値を設定してください。 初期値 : TWL_STD_PCHDR=True

TWLSDK_LANG
(NITROSDK_LANG)

TwlSDK のコンパイルオプションを日本語用/英語用に切り替えます。
日本語の場合 "-enc SJIS" が、英語の場合 "-enc ascii" というオプションが設定されます。

jp | 日本語 [初期値]
en | 英語

TWL_ROMSPEED
(NITRO_ROMSPEED)

デフォルトの RSF ファイルを使用する場合、Property セクションの RomSpeedType パラメータへ指定する設定値を与えます。
具体的には、makerom.TWL.exe ツールへ与える MAKEROM_ROMSPEED シンボルに設定される値となります。
RSF ファイルをデフォルトのものでなく独自に用意している場合には、単に無視されます。
RomSpeedType パラメータの詳細は makerom.TWL.exe ツールのリファレンスを参照ください。
TWL では MROM は使用できません。

1TROM | ワンタイムPROM
MROM | マスクROM
UNDEFINED | 特に指定なし [初期値]

TWL_COMPRESS (NITRO_COMPRESS) ★重要 | 何か値が設定されていた場合にはリンク終了後に STATIC/OVERLAY セグメントを圧縮します。 初期値 : なし (圧縮しない)
TWL_DIGEST (NITRO_DIGEST) | このビルドスイッチはアプリケーションにのみ有効で、SDKのビルド時には無視されます。 何か値が設定されていた場合には、オーバーレイを使用するDSダウンロードプレイ子機プログラムとしてビルドします。 初期値 : なし
TWL_PROFILE (NITRO_PROFILE) | 何か値が設定されていた場合は、コンパイル時に -profile オプションが追加されます。 主に DEBUG 時に使用され、これによりアプリケーション実行時における各関数への出入りの追跡が可能になります。 詳しい使用法については OS_DumpCallTrace 関数を参考にしてください。 初期値 : なし (-profile オプション無効 )

TWL_MEMSIZE
(NITRO_MEMSIZE)
※変更不要

TWL のコンパイルターゲットのメインメモリサイズを指定します。
このビルドスイッチによる指定方法は旧互換として残されています。
現在はより便利な OS_EnableMainExArena 関数での指定方法が提供されており、SDK 自体の再ビルドが不要なためそちらを推奨します。
初期値のままでご使用ください。

TWL_MEMSIZE
16M | 16Mバイト [初期値]
32M | 32Mバイト

NITRO_MEMSIZE
4M | 4Mバイト [初期値]
8M | 8Mバイト

TWL_NO_OPT_G (NITRO_NO_OPT_G) | 何か値が設定されていた場合は、通常のコンパイルおよびリンク時に指定されている -g オプションを外します。 これにより大規模なプロジェクトにおいて問題となるリンク処理時間の短縮が期待できます。 初期値 : なし (-g オプション有効)

TWL_SVC_WAITVBLANK_COMPATIBLE
(NITRO_SVC_WAITVBLANK_COMPATIBLE)

SVC_WaitVBlankIntr 関数呼び出しを自動的に OS_WaitVBlankIntr 関数呼び出しに置換したくない場合に定義します。
ただし、SVC_WaitVBlankIntr 関数は低優先度のスレッドにリソースを開放しない仕様であり、使い方によっては問題が発生するため、 どうしても従来通りのシステムコールを用いなければならない場合にのみ、十分な検証を行って使用してください。
この置換はヘッダファイル内の define による置換ですので、TWL-SDK を再ビルドした際に初めて有効になる点にご注意下さい。
なお make 時にこの環境変数が定義されていると SDK_SVC_WAITVBLANK_COMPATIBLE が定義され、 #ifdef 〜 #endif 構文などによってソース側から知ることもできます。
初期値では定義されていないので、SVC_WaitVBlankIntr 関数呼び出しは自動的に OS_WaitVBlankIntr 関数呼び出しに置換されます。
初期値 : なし

CW_LIBFP

CodeWarriorコンパイラへ指定する浮動小数点ライブラリ名を以下のいずれかから一つ設定することができます。
指定が無ければ初期値がそのまま使用されます。
各ライブラリの性能面での具体的な相違については、CodeWarriorのリファレンスを参照ください。

FP_fastI_v5t_LE.a | fast IEEE [初期値]
FP_fixedI_v5t_LE.a | fixed-rounding IEEE
FP_fullI_v5t_LE.a | full IEEE
FP_flush0_v5t_LE.a | flush to zero (IEEE 非互換)

## SDK の Makefile 内で設定するビルドスイッチ

以下は TwlSDK の Makefile において各ディレクトリごとのビルド条件を設定するためのものです。
ソースの場所や連鎖する Makefile の指定を行ないます。
無設定時は初期値が使用されます。

TARGET_PLATFORM
★重要

ビルド対象プラットフォームに応じて実際にビルドするかどうかを Makefile 内で設定します。
例えば、TWL モードでしかビルドしたくないデモを作成する場合、デモの Makefile に "TARGET_PLATFORM=TWL" と記述しておけば
そのデモは TWL モード時でのみビルドされ NITRO モードではビルドされなくなります。
Makefile にこの設定がなかった場合、コード生成の対象とするプラットフォームを限定しません。

TWL | ビルド対象が TWL の時のみビルドします。
NITRO | ビルド対象が NITRO の時のみビルドします。
ALL | 常にビルドします。(ビルド対象が TWL または NITRO の時のみビルドします。) [初期値]
TWL NITRO

TWL_BUILD_TYPE NITRO_BUILD_TYPE 書き換え禁止 | ターゲットのビルドタイプ [DEBUG/RELEASE/FINALROM] が設定されています。 ビルドタイプを Makefile 内で参照したい場合には、commondefs 後にこの変数を参照してください。

DEFAULT_COMP_ARM7
★重要

使用する ARM7 コンポーネントを Makefile 内で設定します。
ARM7 コンポーネントの詳細に関しては $TwlSDK/docs/TechnicalNotes/AboutComponents.pdf を参照してください。

mongoose | NITRO ROM の場合 mongoose コンポーネントを使用し、 HYBRID ROM の場合 mongoose.TWL コンポーネントを使用します。
ichneumon | NITRO ROM の場合 ichneumon コンポーネントを使用し、 HYBRID ROM の場合 ichneumon.TWL コンポーネントを使用します。
racoon | LIMITED ROM の場合 racoon.TWL コンポーネントを使用します。
ferret | LIMITED ROM の場合 ferret.TWL コンポーネントを使用します。

初期値 : NITRO または HYBRID ROM の場合 mongoose、LIMITED ROM の場合 racoon

SUBDIRS ★重要 | make 処理を連鎖させたいディレクトリを列挙します。 初期値 : なし
SUBMAKES | make 処理を連鎖させたい Makefile を列挙します。 初期値 : なし

SRCS
★重要

コンパイル／アセンブルしたいソースファイルを列挙します。
make はそれぞれのファイルの拡張子に応じて以下の表で示したプログラミング言語のコンパイラ／アセンブラで オブジェクトファイルを生成しようと試みます。

拡張子 | プログラミング言語
.c | C
.cpp | C++
.s | アセンブラ

初期値 : なし

SRCS_OVERLAY オーバーレイ用 | コンパイル／アセンブルしたいソースファイルを列挙します。 ここで指定したファイルから生成したオブジェクトファイルは OVERLAY グループに属するものとして登録されます。
SRCDIR | ソースファイルのディレクトリを指定します。 初期値 : ./src (この初期値は make を行ったディレクトリから相対パス src で指定されたディレクトリを意味します。)
INCDIR | プライベートインクルードファイル(モジュール固有のインクルードファイル)がある場合は そのディレクトリを指定します。 初期値 : ./include
OBJDIR BINDIR LIBDIR 書き換え禁止 | make によって各一時ファイルが出力されるディレクトリです。 ソースツリーの都合で変更することがあるので個別のディレクトリの Makefile 内で上書きすることは避けてください。
LCFILE | 独自のリンクコマンドファイル(.lcf)を使いたい場合は指定します。 初期値 : $TwlSDK/include/nitro/ARM9.TS.lcf
LCFILE_SPEC | リンクコマンドファイルを makelcf コマンドで自動生成したい場合、その元となる設定ファイルを指定します。 初期値 : 指定なし
ROM_SPEC | ROM ファイルの内容を記述したファイルを指定します。 このファイルは makerom コマンドへ渡され、このファイルの設定を元に ROM を生成します。

TARGET_BIN
★重要

.srl 形式または .tef 形式のターゲットファイルを指定します。
SRCS で指定されたソースファイルをコンパイル／アセンブルしてできたオブジェクトファイルをリンクしターゲットファイルとします。
.srl ファイルをターゲットに指定した場合は .tef ファイルも自動的に作成されます。
この変数には以下のような値を設定することはできません。

- "-" を含む値
- 先頭が "_" で始まる値
- 先頭が数字で始まる値

TARGET_LIB | ライブラリファイルを作成したいときに指定します。 SRCS で指定されたソースファイルをコンパイル／アセンブルしてできたオブジェクトファイルを連結しライブラリとします。 通常 TARGET_BIN と TARGET_LIB は同時に設定しません。
TARGET_OBJ | オブジェクトファイルをターゲットとして作成したいときに指定します。 通常はあまり使うことはありません。 ライブラリでは crt0.c をコンパイルし、ライブラリとしてインストールするときに使用しています。
TARGETS 書き換え禁止 | TARGET_BIN と TARGET_LIB に相対パスが付いたものが自動的に設定されます。 .srl/.a ファイルは TWL_PLATFORM および TWL_DEBUG/ TWL_RELEASE/ TWL_FINALROM の設定により格納されるディレクトリが変化します。 この変化を吸収するためにこのマクロが用意されています。
INSTALL_TARGETS | インストールしたいファイルを列挙します。 この設定に上記の TARGETS が有効に機能します。 初期値 : なし
INSTALL_DIR | ファイルのインストール先を設定します。 初期値 : なし
LINCLUDES | 他のインクルードファイルがある場合はそのディレクトリを指定します。 初期値 : なし
LLIBRARY_DIRS LLIBRARIES | 他のライブラリファイルがある場合はそのディレクトリを LLIBRARY_DIRS、 ライブラリファイルを LLIBRARIES でそれぞれ列挙します。
LIBSYSCALL | 使用する libsyscall を指定します。 初期値 : $TwlSDK/lib/ARM9-TS/etc/libsyscall.a
LIBSYSCALL_TWL | [HYBRID/LIMITED] ROM の場合に使用する libsyscall.twl を指定します。 初期値 : $TwlSDK/lib/ARM9-TS/etc/libsyscall.twl.a
LDIRT_CLEAN LDIRT_CLOBBER | make clean または make clobber コマンド実行時にオブジェクトファイルなどと一緒に削除して欲しいファイルを指定します。 make clean 時には LDIRT_CLEAN　で指定されたファイルが、 make clobber 時には LDIRT_CLEAN で指定されたファイルと LDIRT_CLOBBER で指定されたファイルとが全て削除されます。
MAKELCF_FLAGS | makelcf に独自の追加起動オプションを与えたいときには、このビルド変数に定義してください。 初期値 : なし
MAKEROM_FLAGS | makerom に独自の追加起動オプションを与えたいときには、このビルド変数に定義してください。 初期値 : なし
FORCE_DISABLE_IS_NITRO_DEBUGGER | IS-NITRO-DEBUGGER/IS-NITRO-EMULATOR を用いた際にデバッグ機能が利用できなくなる代わりに、メモリ使用量を節約するオプションです。 IS-TWL-DEBUGGER(software/hardware) でのみデバッグを行う場合にのみ定義してください。 初期値では定義されていないので、ビルドする PC にインストールされているデバッガ全てでデバッグ機能が利用できるようになっています。 初期値 : なし

## ビルドスイッチ使用表

SDK のビルドスイッチの設定可能範囲を表で示します。
以下の表には TWL_* しか記述していませんが、設定可能範囲は NITRO_* も TWL_* と同じです。

#### SDK のビルド時に設定が必須な環境変数

ビルドスイッチ | コマンドライン | makefile (commondefs前) | makefile (commondefs後) | 環境変数 | 初期値
TWLSDK_ROOT | W | W | R | W | C:/TwlSDK
TWLSDK_PLATFORM | W | W | R | W | -
CWFOLDER_TWL | W | W | R | W | -
LM_LICENSE_FILE | W | W | R | W | -
IS_TWL_DEBUGGER_DIR | W | W | R | W | -
"WR"=変更+参照可能　"W"=変更可能　"R"=参照可能　"-"=使用不可能

#### SDK のビルド時のビルドスイッチ

ビルドスイッチ | コマンドライン | makefile (commondefs前) | makefile (commondefs後) | 環境変数 | 初期値
TWL_PROC | W | W | - | W | ARM9
TWL_ARCHGEN (TWL専用) | W | W | WR | W | HYBRID
TWL_CODEGEN | W | W | WR | W | ARM
TWL_DEBUG | W | W | - | W | -
TWL_RELEASE | W | W | - | W | TRUE
TWL_FINALROM | W | W | - | W | -
TWL_STD_PCHDR | W | W | - | W | True
TWL_NO_STD_PCHDR | W | W | - | W | -
TWLSDK_LANG | W | W | W | W | jp
TWL_ROMSPEED | W | W | W | W | UNDEFINED
TWL_COMPRESS | W | W | W | W | -
TWL_DIGEST | W | W | W | W | -
TWL_PROFILE | W | W | W | W | -
TWL_PROFILE_TYPE | W | W | W | W | -
TWL_MEMSIZE | W | W | - | W | 16M
TWL_NO_OPT_G | W | W | W | W | -
TWL_SVC_WAITVBLANK_COMPATIBLE | W | W | W | W | -
CW_LIBFP | W | W | R | W | FP_fastI_v5t_LE.a
"WR"=変更+参照可能　"W"=変更可能　"R"=参照可能　"-"=使用不可能

#### SDK の Makefile 内で設定するビルドスイッチ

ビルドスイッチ | コマンドライン | makefile (commondefs前) | makefile (commondefs後) | 環境変数 | 初期値
TARGET_PLATFORM | - | W | R | - | ALL
TWL_BUILD_TYPE | - | - | R | - | -
DEFAULT_COMP_ARM7 | - | W | R | - | NITRO または HYBRID ROM の場合 mongoose LIMITED ROM の場合 racoon
FORCE_DISABLE_IS_NITRO_DEBUGGER | - | W | R | - | -
"WR"=変更+参照可能　"W"=変更可能　"R"=参照可能　"-"=使用不可能