SOLID が使用しているオプション
SOLID が使用している、あるいは IDE で選択可能なオプションについて解説します。オプションは IDE 上で、プロジェクト、あるいはファイルのプロパティから確認・設定することができます。(Debug_XXX や Release 等、構成ごとにオプションは異なり、個別に設定することになります。)
基本的には、KMC や半導体ベンダーから既に設定済みのプロジェクトファイルが配布されるか、標準的な設定を SOLID アプリケーションウィザード (
) が自動生成することになるので、ユーザは通常、設定項目の詳細を意識する必要はありません。必要に応じてカスタマイズしたい項目のみを設定する形になります。プロジェクト、あるいはファイルを右クリックして、
で開くプロパティページから、「プリプロセッサオプション」「ディレクトリオプション」「コンパイラオプション」「アセンブラオプション」を、それぞれの項目ごとに設定することができます。実際に指定される全てのオプションは「コマンドライン」から確認できます。(ただし、IDE が環境変数経由で暗黙的に渡しているオプションは表示されません。)他の項目で設定できないオプションを設定したい場合は、この項目の「追加のオプション」のテキストボックスに、任意のオプションを書くことができます。
SOLID ツールチェーンの仕様により、必ず指定しなければいけないオプションには「必須」と記載されています。
プリプロセッサオプション
プリプロセッサを制御するオプションです。
- -D<NAME>
#define <NAME> 1
と同じ意味になります。
- -D<NAME>=<DEFINITION>
#define <NAME> <DEFINITION>
と同じ意味になります。
- -nostdinc
C の標準インクルードパスを検索しないようにします。
- -nostdinc++
C++ の標準インクルードパスを検索しないようにします。
ディレクトリオプション
ヘッダファイルやライブラリファイルの検索対象パス(ディレクトリ)を追加します。オプションの指定順(左から右)にディレクトリを検索します。
- -I <directory>
ヘッダファイルの探索パスを追加します。
- -L <directory>
ライブラリファイルの探索パスを追加します。
- -specs=<file>
specs ファイル
<file>
を指定します。(GCC のみ。)
コンパイラオプション
コンパイラを制御するオプションです。
共通オプション
- -fsigned-char
必須。
char
型を符号あり(signed)として扱います。GCC ARM ターゲットのデフォルトは符号無し(unsigned)ですが、ツールチェーンに付属のライブラリの一部が歴史的な理由によりchar
が signed 前提の仕様になっているため、互換性維持のために使用されています。ツールチェーン付属のライブラリはこのオプション付きでビルドされているので必須オプションとなります。
- -fomit-frame-pointer
フレームポインタの退避/復旧コードの生成を省略し、追加のレジスタとして使用する最適化オプションです。
- -O0
Debug ビルド時に指定されます。一切最適化を行わないので、変数が消滅したりすることが無く、デバッグがやりやすくなります。
-Og
という、デバッグを妨げない範囲で最適化を行うというオプションもありますが、必ず思い通りのデバッグができるわけではないので、上級者向けとなります。
- -O2
Release ビルド時に指定されます。ほぼ全ての一般的な最適化が有効になります。他にも段階的に
-O1
と-O3
の最適化オプションが存在します。数字が大きいほど様々な最適化を行い、コンパイル時間が増大します。-O1
から-O3
は速度の最適化なので、バイナリサイズは増える場合があります。サイズの最適化を行う場合は-Os
オプションを使用してください。
- -g
DWARF 形式のデバッグ情報を出力します。(GCC は
-gstabs
,-gstabs+
で stabs, stabs+ 形式も選択はできますが、非推奨です。)
- -gdwarf-2, -gdwarf-3
DWARF 2 や 3 形式のデバッグ情報を出力します。
-g
を指定した場合に、デバッガが未対応のデバッグ情報が出力されてしまう場合がまれにあり、その場合のワークアラウンドとして使用します。DWARF 2 は安全ですが、最適化時のデバッグに難があるため、DWARF 3 推奨です。
- -Wall
一般的な警告を全て有効にします。
- -Wextra
-Wall
で有効にならない警告を、さらにいくつか追加し、厳しく警告します。
- -w
非推奨。全ての警告を抑制します。
ARM 専用オプション
- -mlittle-endian
必須。リトルエンディアンのコードを生成します。SOLID はビッグエンディアンをサポートしないので必須です。
- -mthumb-interwork
ARM/Thumb 命令間での関数呼び出しをサポートするコードを生成します。このオプションを指定しない場合、ARMv5 以前のアーキテクチャでは ARM/Thumb コードを混在して使用することはできません。SOLID は ARMv5 以前のアーキテクチャはサポートしないので、このオプションはあっても無くても同じです。
- -mcpu=<RCH>
コード生成の対象となる ARM のアーキテクチャ
<ARCH>
を指定します。
- -mfpu=<FPU>
コード生成の対象となる浮動小数点数演算ハードウェア
<FPU>
を指定します。
- -mfloat-abi=<ABI>
浮動小数点数演算の
<ABI>
を指定します。soft
浮動小数点数演算に FPU を使用しない、ソフトウェアエミュレーション関数を呼び出すコードを生成します。
softfp
FPU を使用しますが、
soft
と ABI 互換性があり、リンク可能です。hard
FPU に特化したコードを生成し、効率的ですが、
soft
/softfp
オプションでコンパイルしたコードとリンクすることはできません。
アセンブラオプション
アセンブラを制御するオプションです。
リンカオプション
リンカを制御するオプションです。このオプションは C/C++ プロパティではなく、「リンカー」のプロパティの各項目で設定します。設定方法等は C/C++ プロパティと同様です。
- -T <script>
リンカスクリプトファイル
<script>
を指定します。
- -nostartfiles
標準のスタートアップファイルを使用しません。
- -nodefaultlibs
標準ライブラリ(libgcc、libc、libstdc++)を使用しません。-l オプションで指定されたファイルと、標準のスタートアップファイルは使用されます。GCC はこのオプションを指定した場合でも、
memcmp()
,memset()
,memcpy()
,memmove()
関数を生成コード内で使用する場合があるので、これらの関数の実装が必要です。このオプションを使用した場合、GCC が生成コード内で使用するlibgcc.a
に含まれる関数もリンクされなくなるため、-lgcc オプションの指定が必要です。
- -nostdlib
-nostartfiles
と-nodefaultlibs
を両方指定した場合と同じ意味になります。
- -Wl,<option>
リンカに
<option>
オプションを渡します。<option>
がカンマ(,
)を含む場合、カンマで分割して複数のオプションとして渡します。