KMC 独自の修正について

(これは資料的なドキュメントです。SOLID を使用するだけならば意識する必要はありません。)

SOLID ツールチェーンが使用している GCC と Clang には、KMC 独自の修正が加えられています。

また、以後の説明には様々な環境変数が使用されていますが、環境変数は SOLID-IDE が自動的に設定しますので、ユーザが設定する必要はありません。

GCC/Clang 共通の修正

  • ライセンス管理機能

PARTNER-Jet2 デバッガハードウェアをライセンス認証用ドングルキーとして使用します。GCC の本機能は GPL ソースの修正ではなく、パブリックドメインである MinGW スタートアップルーチンの修正で実現しています。ライセンス管理機能のソースコードの開示請求にはお答えできませんので、ご了承ください。

  • 環境変数を読み込みコンパイラオプションを自動的に設定する機能

    • 環境変数 GCCSW に指定されたオプションを argv[1] から挿入します。

      (環境変数 EXEGCC=ON かつ GCCSW が存在時のみ。)

      通常のコマンドラインとして指定されたオプションの方が優先(後の方に指定)されます。

GCC のみの修正

  • 環境変数を読み込みコンパイラオプションを自動的に設定する機能(<>は、環境変数の値を意味します。)

    • exeGCC のインストールパスを意味する環境変数 GCCDIR をベースに、コンパイラのインストールパス(sysroot)、使用する specs ファイル、ライブラリパスを適切に設定します。(Clang は、リンクは GCC を呼び出して丸投げする形になるので、この機能は実装されていません。また、Clang 版の libgcc に当たる compiler-rt も、libgcc と両方リンクしても大丈夫なように、重複する関数を削除もしくはリネームした特別版になっています。)

      • 設定される内容(GCC_DEFAULT はコンパイラオプションの組み合わせを意味します。)

        –sysroot=<GCCDIR>
        -specs=<GCCDIR>/lib/<GCC_DEFAULT>/specs
        -L <GCCDIR>/lib/<GCC_DEFAULT>
    • exeGCC 固有のインクルードパスを -idirafter オプションでシステムインクルードディレクトリの最後に追加します。

      (環境変数 EXEGCC=ON かつ SYSROOT か GCCDIR が存在時のみ。)

      • 追加されるインクルードパス

        <GCCDIR>/include
        <GCCDIR>/include/c++

Clang のみの修正

  • デフォルト TargetTriple を arm-kmc-eabi に設定。(ビルド時の CMake オプション指定で実現。)

  • TargetTriple の<vendor>に kmc を追加。 <vendor>が kmc 時のみ、上記の環境変数からコンパイラオプションを読み込む機能が動作。

  • ベアメタル(OS 無しの)環境でアドレスサニタイザ等をサポートするための修正。

  • Clang がサポートしない -mthumb-interwork オプションを無視する修正。 (コマンドライン、および GCCSW が対象。)

  • DWARF5 の DW_AT_alignment が -gdwarf-3 等のオプション指定時にも出力されてしまう不具合の修正。

  • 環境変数を読み込みコンパイラオプションを自動的に設定する機能 - exeGCC の構成に合わせたインクルードパスを -I オプションで追加します。

    • 追加されるインクルードパス(追加順)

      • C++ 時のみ(例: -IC:/GCC4/ARM/s001/include/c++/4.9.4/arm-kmc-eabi)
      <GCCDIR>/<TARGET>/include/c++/<GCC_VERSION>
      <GCCDIR>/<TARGET>/include/c++/<GCC_VERSION>/<TARGET>
      <GCCDIR>/<TARGET>/include/c++/<GCC_VERSION>/backward
      • 共通
      <GCCDIR>/include
      <GCCDIR>/include/c++
      <GCCDIR>/<TARGET>/include