/Test_you

電子工作やプログラミングなど、やってみたことのメモ

VS Codeで、RXマイコンの e2studio プロジェクトをビルドする

VS CodeでRXマイコンのプロジェクトをビルドする方法はいくつかのサイトで紹介されています。それらは統合開発環境 CS+ での事例だったので、もう1つの環境 e2studio で試してみました
結果、eclipseHeadless Buildを使うことでビルドできました。ただし、日本語メッセージの文字化けについては、英語表示に切り替えて回避してます

  • 2022/10:64bit版の情報を補足しました
    e2studioには 32bit版(V7.8.0) と 64bit版(2022-10) がありますが、64bit版の途中でコマンドライン用の実行ファイルが変わった為、異なる点を追記しました。説明の都合上、eclipsec.exeのケースを32bit版、e2studioc.exeのケースを64bit版と呼びます
  • 2022/11:ビルド時のエラーを出力する設定を追加しました

1. 環境

2. 手順の概略

  1. コマンドラインでビルド出来るようにする
  2. 日本語メッセージの文字化けに対処する
  3. VS Codeのビルドタスクを作る
  4. ビルドタスクを実行してみる
  5. (オプション) ビルド時のエラーを問題に出力

3. コマンドラインでビルド出来るようにする

Renesasの「FAQ 3000149 : e² studioのプロジェクトをコマンドラインでビルドするには?」に従って作業します

  • e2studioのインストールフォルダ/eclipse/e2studio.ini ファイルを同じフォルダにコピーし、ファイル名をeclipse.iniに変更する
    64bit版の場合e2studioc.iniに変更する ※ここは公式情報ではないので間違っているかも1

    32bit版 64bit版

準備としてはこれだけ。あとは、コマンドプロンプトで下記を実行すれば良いです

  • e2studioのインストールフォルダ\eclipse\eclipsec.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "e2studioのワークスペースフォルダ" -cleanBuild プロジェクト名(/ビルド構成)
    • 64bit版の場合
      e2studioのインストールフォルダ\eclipse\e2studioc.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "e2studioのワークスペースフォルダ" -cleanBuild プロジェクト名(/ビルド構成)
  • 補足
    • ビルド構成は設定しなくてもよい。設定しない場合は、全ての構成が対象になる
    • -cleanBuild を指定するとクリーンアップとビルド、-build を指定するとビルドのみになる

具体例として、私の環境だと

C:\Renesas\e2_studio\eclipse\eclipsec.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "C:\User\e2studio" -cleanBuild rx231_cast_test/Debug

64bit版の場合

C:\Renesas\e2_studio\eclipse\e2studioc.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "C:\User\e2studio" -cleanBuild rx231_cast_test/Debug

という感じになります。なお、私の環境・ワークスペース構成は下記です

  • e2studioのインストールフォルダ = C:\Renesas\e2_studio
  • e2studioのワークスペースフォルダ = C:\User\e2studio
  • プロジェクト名 = rx231_cast_test
  • ビルド構成 = Debug

コマンドを実行すると、クリーンアップおよびビルドが走ります。実行結果は下記の通り
ビルドは完了しますが、一部の日本語メッセージが文字化けします

C:\Renesas\e2_studio\eclipse\eclipsec.exe -nosplash --launcher.suppressErrors -application
 org.eclipse.cdt.managedbuilder.core.headlessbuild -data "C:\User\e2studio" -cleanBuild rx231_cast_test/Debug
23:39:13 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繧ッ繝ェ繝シ繝ウ縺ョ縺ソ縺ョ繝薙Ν繝・****
make -j4 clean
rm -rf *.sni *.dbg *.lst *.lis *.lpp *.map *.x *.lbp *.bls *.libelf *.rel *.lbk *.abs *.mi *.jmp
 *.fsy 1st/*.abs 1st/*.jmp 1st/*.fsy rx231_cast_test.abs rx231_cast_test.lib
・・・
ECHO は <OFF> です。
'Clean complete.'

23:39:13 Build Finished. 0 errors, 0 warnings. (took 497ms)

23:39:15 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繝薙Ν繝・****
make -j4 all
'Scanning and building file: ../src/smc_gen/r_bsp/mcu/all/r_bsp_common.c'
・・・
Converting the DWARF information....
Constructing the output ELF image....
Saving the ELF output file rx231_cast_test.x
'Build complete.'

23:39:24 Build Finished. 0 errors, 8 warnings. (took 9s.441ms)

ワークスペースを保管しています。

4. 日本語メッセージの文字化けに対処する

eclipseの表示言語を英語に切り替えて対処します。elipcse.iniの先頭に下記2行を追加する
64bit版の場合e2studioc.iniに追加する

-nl
en_US

これにより、ビルド時のメッセージが英語に変わり、文字化けを回避できます

-- 変更前 --
23:43:13 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繧ッ繝ェ繝シ繝ウ縺ョ縺ソ縺ョ繝薙Ν繝・****
make -j4 clean
・・・
23:43:16 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繝薙Ν繝・****
make -j4 all

-- 変更後 --
23:45:02 **** Clean-only build of configuration Debug for project rx231_cast_test ****
make -j4 clean
・・・
23:45:05 **** Build of configuration Debug for project rx231_cast_test ****
make -j4 all

日本語で対処する方法も色々探したのですが、どれもうまく行きませんでした
例えば elipces.ini に-Dfile.encoding=MS932を追加するとか。結局、英語にするのが一番簡単でした

5. VS Codeのビルドタスクを作る

ビルドが出来るようになったので、VS Code 上でビルドタスクを設定します

  • /.vscode/tasks.jsonファイルがない状態で「ターミナル>タスクの構成」を選択
  • 「テンプレートから tasks.json を生成」、「MSBuild ビルド ターゲットを実行」の順に選択
  • /.vscode/tasks.jsonファイルが生成される

生成されたファイルの中身を下記のように修正。★の部分は環境に合わせて調整必要

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "e2studioプロジェクトのクリーンビルド",
            "type": "shell",
            // ★eclipsec.exe もしくは e2studioc.exe のフルパスを指定
            // [e2studioのインストールフォルダ]/eclipse/ にあるはず
            "command": "C:/Renesas/e2_studio/eclipse/eclipsec.exe",
            // "command": "C:/Renesas/e2_studio/eclipse/e2studioc.exe",
            "args": [
                "-nosplash",
                "--launcher.suppressErrors",
                "-application",
                "org.eclipse.cdt.managedbuilder.core.headlessbuild",
                "-data",
                // ★e2studioのワークスペースフォルダを指定
                "C:/User/e2studio",
                // ★build or cleanBuild を指定
                "-cleanBuild",
                // ★ビルド対象のプロジェクト/ビルド構成を指定
                "rx231_cast_test/Debug"
            ],
            "group": "build",
            "presentation": {
                "reveal": "always", // Terminal パネルを必ず開く
                "clear": true       // 実行前に Terminal をクリア
            },
            "problemMatcher": []
        }
    ]
}

以上で設定は完了です

6. ビルドタスクを実行してみる

「ターミナル>タスクの実行...」よりタスク「e2studioプロジェクトのクリーンビルド」を実行します。起動に少し時間が掛かりますが、クリーンアップ・ビルドが順次実行されて、ビルド完了します

補足
ビルド時のメッセージが増えてくると、最初の方のメッセージが流れてしまって見えなくなります。「ファイル>ユーザ設定>設定」よりterminal.integrated.scrollbackを検索し、ターミナルの最大行数を調整してください。私は5000行に設定しました

7. ビルド時のエラーを「問題」に出力

tasks.jsonproblemMatcherの部分を修正すると、ビルド時のコンパイルエラーを「問題」のタブに出力できます。但し、リンカ関係のエラー表示は完全ではないです(下図の E0562310, W0561017 のようにファイル名としてエラーコードが表示される)。この設定は かふぇルネ(Renesas Engineering Community) の投稿を参考に作りました

"problemMatcher": [
    {
        // コンパイラのエラーを検出
        "owner": "ccrx",
        "fileLocation": [
            // ★ビルド対象のビルドロケーション(makefileが出来る場所)を指定
            // ${workspaceFolder}/ビルド構成 になるはず
            "relative", "${workspaceFolder}/HardwareDebug"
        ],
        "severity": "error",
        "pattern": {
            "regexp": "^(.*)\\((\\d+)\\):([CEF]\\d+):(.*)$", "file": 1, "line": 2, "code": 3, "message": 4
        }
    },
    {
        // コンパイラのワーニングを検出
        "owner": "ccrx",
        "fileLocation": [
            // ★同上
            "relative", "${workspaceFolder}/HardwareDebug"
        ],
        "severity": "warning",
        "pattern": {
            "regexp": "^(.*)\\((\\d+)\\):(W\\d+):(.*)$", "file": 1, "line": 2, "code": 3, "message": 4
        }
    },
    {
        // コンパイラのインフォメーションを検出
        "owner": "ccrx",
        "fileLocation": [
            // ★同上
            "relative", "${workspaceFolder}/HardwareDebug"
        ],
        "severity": "info",
        "pattern": {
            "regexp": "^(.*)\\((\\d+)\\):(M\\d+):(.*)$", "file": 1, "line": 2, "code": 3, "message": 4
        }
    },
    {
        // リンカなどのエラーを検出
        // ※ファイルを特定できないため"file"にエラーコードを指定、ファイル名としてエラーコードが表示されます
        // ※簡単にするため、エラー/ワーニング/インフォメーションを区別してません
        "owner": "ccrx",
        "pattern": {
            "regexp": "^([CEFWM]\\d+):(.*)$", "file":1, "code": 1, "message": 2
        }
    }
]

なお、エラーメッセージのフォーマットは CC-RX ユーザーズマニュアル(R20UT3248JJ0111) の 10.2 出力形式 に記載されています。e2studio のエラーパーサー設定も参考になります

  1. ファイル名 (行番号): メッセージ種別(CEFMW) コンポーネント番号(05) メッセージ番号 : メッセージ
  2. メッセージ種別(CEFMW) コンポーネント番号(05) メッセージ番号 : メッセージ

8. まとめ

e2studioのプロジェクトが VS Code でビルド出来るようになりました。今なら e2studio 2020-04以降でサポートされた CMakeプロジェクトを使った方が筋が良い気がしますが、既存プロジェクトをそのまま VS Code でビルドできるのは便利です


参考にした情報


  1. 試した限りでは 、64bit版の場合はeclipse.iniではなく、e2studioc.iniが参照されるようです。また、e2studioc.iniがない場合は、e2studio.iniが参照される感じでした。ただ、RenesasのFAQとは一致していないので、この理解は間違っているかもしれません