Generic Content

かふぇるね“ はルネサス製品に対して自由に会話をするツールとなります。(回答者はルネサス社内外の方たちとなります) その為ルネサス製品やソリューションに対して正式な回答をご希望の場合はMyRenesasのTicketシステムを使用するようにお願いいたします。 

e2 studioでCMakeでビルドする、というアプリケーションノートがあるのですがスマートコンフィグレータは使えるのでしょうか?

こんにちは。NoMaYです。

Visual Studio 2022を触っていて、これからVisual Studio上でCC-RX/CC-RL/CC-RHを使うならCMakeを使うのが良いのかな?と思い始めたところ、ルネサスさんから以下のアプリケーションノートが発行されていたことを思い出したので目を通してみたのですが、どうもこれではスマートコンフィグレータどころかコンパイルオプションの設定すらe2 studio上では出来ないのでは?という気がしてきました。実際、どうなのでしょう?御存知の方はいらっしゃいますでしょうか?

アプリケーションノート 統合開発環境 e² studio CMakeプロジェクトを作成してビルドする
R20AN0613JJ0200 Rev.2.00 Pages 10 Jun.30.21
www.renesas.com/jp/ja/document/apn/e-studio-creating-and-executing-build-cmake-project
 
[追記] 2021/12/31 11:00

ひとつ調査漏れに気付きました。こういうアプリケーションノートも出ていたのですね。

アプリケーションノート 統合開発環境 e² studio CMakeを使用してCC-RX用ソース・ファイルをビルドする
R20AN0569JJ0201 Rev.2.01 Pages 12 Sep.15.21

PDF
www.renesas.com/jp/ja/document/apn/integrated-development-environment-e-studio-using-cmake-renesas-cc-rx-compiler-rev201

ZIP
www.renesas.com/jp/ja/document/scd/integrated-development-environment-e-studio-using-cmake-renesas-cc-rx-compiler-rev201-sample-code
 

  • こんにちは。NoMaYです。

    地雷を踏んでしまいました。CMakeのドキュメントには以下の通りスクリプトモードでは -- 以降のオプションはパースしないと書かれていますが、実際は(メインのパース処理とは別口で?)幾つかオプションチェックが入っていました。その為、CC-RL/RHでのプリプロセス処理後ソースファイルを生成させるオプション -P とアセンブリソースファイルを生成させるオプション -S が、CMakeのオプションの -P と -S と干渉して何やら頭の痛い事態になってしましました。(今まで気付かなかったのは、調査/試作していたコードでは先日投稿したCMake変数の件によってラッパースクリプトを使っていたところとは別口の処理となっていて運良く(運悪く?)動いてくれていたのが、削除したことで通常の処理と素朴に同じ口でラッパースクリプトを使うことになってサッパリ思うように動いてくれないことが発覚して、さんざん悩んだ挙句、ようやく事態に気付いたのでした。ヤレヤレ、、、)

    cmake(1)
    cmake.org/cmake/help/latest/manual/cmake.1.html#run-a-script
    ウェブページの画面コピー


     

  • こんにちは。NoMaYです。

    1つ前の投稿の件は、CMake側を直すべきですけれども、ラッパースクリプトの方にちょっと小細工を入れて(といっても既に幾つも小細工が入っているので微々たるものですけれども)、以下のような記述で当面しのごうと思います。なお、幾つかコンパイラのワーニングが表示されてしまいますけれども、これぐらいならば許容範囲内のものかなと思います。

    必要になりそうな状況:

    ● コンパイラがエラー/ワーニングを出すけれども(難解な)マクロ展開内でちょっと原因が分からなくてプリプロセス処理後ソースを確認したい
    ● コンパイラが(なぜか)アセンブリ言語レベルのエラー/ワーニングを出しているのでちょっと試しにアセンブリソースを生成させて確認したい

    CC-RXの場合の例: (CC-RXでは特殊なことは無いです)

    # The following setting selects the output type of compilation of the source.
    if(NOT DEFINED EXAMPLE_ALT_OUTPUT_TYPE)
      set(EXAMPLE_ALT_OUTPUT_TYPE 1) # 0: Usual object or 2: Preprocessed source or 3: Assembly source.
    endif()
    if(EXAMPLE_ALT_OUTPUT_TYPE EQUAL 1)
      set_property(SOURCE ${GSG_BASE_DIR}/src/test_dep_scan_etc_c.c
      APPEND PROPERTY COMPILE_OPTIONS
      -output=prep=test_dep_scan_etc_c.p
      )
    elseif(EXAMPLE_ALT_OUTPUT_TYPE EQUAL 2)
      set_property(SOURCE ${GSG_BASE_DIR}/src/test_dep_scan_etc_c.c
      APPEND PROPERTY COMPILE_OPTIONS
      -output=src=test_dep_scan_etc_c.s
      )
    endif()

     
    CC-RLの場合の例: (Unix Makefiles Generator等では '-P' とか '-S' とか記述することで逃げるようにしました)

    # The following setting selects the output type of compilation of the source.
    if(NOT DEFINED EXAMPLE_ALT_OUTPUT_TYPE)
      set(EXAMPLE_ALT_OUTPUT_TYPE 1) # 0: Usual object or 2: Preprocessed source or 3: Assembly source.
    endif()
    if(EXAMPLE_ALT_OUTPUT_TYPE EQUAL 1)
      set_property(SOURCE ${GSG_BASE_DIR}/src/test_dep_scan_etc_c.c
      APPEND PROPERTY COMPILE_OPTIONS
      $<IF:$<STREQUAL:${CMAKE_GENERATOR},Ninja>,-P,'-P'> -o test_dep_scan_etc_c.p
      )
    elseif(EXAMPLE_ALT_OUTPUT_TYPE EQUAL 2)
      set_property(SOURCE ${GSG_BASE_DIR}/src/test_dep_scan_etc_c.c
      APPEND PROPERTY COMPILE_OPTIONS
      $<IF:$<STREQUAL:${CMAKE_GENERATOR},Ninja>,-S,'-S'> -o test_dep_scan_etc_c.s
      )
    endif()

     
    CC-RHの場合の例: (Unix Makefiles Generator等では '-P' とか '-S' とか記述することで逃げるようにしました)

    # The following setting selects the output type of compilation of the source.
    if(NOT DEFINED EXAMPLE_ALT_OUTPUT_TYPE)
      set(EXAMPLE_ALT_OUTPUT_TYPE 1) # 0: Usual object or 2: Preprocessed source or 3: Assembly source.
    endif()
    if(EXAMPLE_ALT_OUTPUT_TYPE EQUAL 1)
      set_property(SOURCE ${GSG_BASE_DIR}/src/test_dep_scan_etc_c.c
      APPEND PROPERTY COMPILE_OPTIONS
      $<IF:$<STREQUAL:${CMAKE_GENERATOR},Ninja>,-P,'-P'> -otest_dep_scan_etc_c.p
      )
    elseif(EXAMPLE_ALT_OUTPUT_TYPE EQUAL 2)
      set_property(SOURCE ${GSG_BASE_DIR}/src/test_dep_scan_etc_c.c
      APPEND PROPERTY COMPILE_OPTIONS
      $<IF:$<STREQUAL:${CMAKE_GENERATOR},Ninja>,-S,'-S'> -otest_dep_scan_etc_c.s
      )
    endif()

     
    表示されるコンパイラのワーニングというのは以下のようなものです。

    CC-RXの場合の例:

    [build] W0511123:The "-output=obj" option is ignored when the "-output=prep" option is specified at the same time.
    [build] W0511147:The "-output" option is specified more than once. The latter is valid.

     

    [build] W0511123:The "-output=obj" option is ignored when the "-output=src" option is specified at the same time.
    [build] W0511147:The "-output" option is specified more than once. The latter is valid.

     
    CC-RLの場合の例:

    [build] W0511123:"-P"オプションが指定されたので"-c"オプションは無視しました。
    [build] W0511147:"-o"オプションが複数指定されています。後の指定が有効になります。

     

    [build] W0511123:"-S"オプションが指定されたので"-c"オプションは無視しました。
    [build] W0511147:"-o"オプションが複数指定されています。後の指定が有効になります。

     
    CC-RHの場合の例:

    [build] W0511123:"-P"オプションが指定されたので"-g"オプションは無視しました。
    [build] W0511123:"-P"オプションが指定されたので"-g_line"オプションは無視しました。
    [build] W0511123:"-P"オプションが指定されたので"-Xpass_source"オプションは無視しました。
    [build] W0511123:"-P"オプションが指定されたので"-Xcref"オプションは無視しました。
    [build] W0511123:"-P"オプションが指定されたので"-c"オプションは無視しました。
    [build] W0511147:"-o"オプションが複数指定されています。後の指定が有効になります。

     

    [build] W0511123:"-S"オプションが指定されたので"-c"オプションは無視しました。
    [build] W0511147:"-o"オプションが複数指定されています。後の指定が有効になります。

     
    以下、VSCodeの画面コピーです。

    CC-RXの場合の例:


    CC-RLの場合の例:


    CC-RHの場合の例:

     

  • こんにちは。NoMaYです。

    プリプロセス処理後ソースファイル生成とアセンブリソースファイル生成に関するオプション指定の件を反映させました(+αと)。

    ファイル一式を以下のzipファイルに固めました。CMakeへのパッチを含んでいますが、パッチはCMakeのインストールフォルダにファイルをコピーする必要が無いようにしました。今回も(まだまだ当面は?)、かなり長い名前のファイルやフォルダが含まれていますので、パスの深いフォルダで解凍すると解凍出来ないといったことがあると思います(今回もデフォルトでのビルド時は除外する設定としました。) あと、今回もデバッグメッセージがたくさん表示されます。

    CMake_Ninja_XXSC_CCXX_examples_20220515.zip

    cmake-3.23.0-original/Modules/CMakeCCompilerId.c.in
    cmake-3.23.0-original/Modules/CMakeCompilerIdDetection.cmake
    cmake-3.23.0-original/Modules/CMakeCXXCompilerId.cpp.in
    cmake-3.23.0-original/Modules/CMakeDetermineASMCompiler.cmake
    cmake-3.23.0-original/Modules/CMakeDetermineCCompiler.cmake
    cmake-3.23.0-original/Modules/CMakeDetermineCompiler.cmake
    cmake-3.23.0-original/Modules/CMakeDetermineCompilerId.cmake
    cmake-3.23.0-original/Modules/CMakeDetermineCXXCompiler.cmake
    cmake-3.23.0-original/Modules/CMakeFindBinUtils.cmake
    cmake-3.23.0-original/Modules/CMakePlatformId.h.in
    cmake-3.23.0-patch/Modules/CMakeCCompilerId.c.in
    cmake-3.23.0-patch/Modules/CMakeCompilerIdDetection.cmake
    cmake-3.23.0-patch/Modules/CMakeCXXCompilerId.cpp.in
    cmake-3.23.0-patch/Modules/CMakeDetermineASMCompiler.cmake
    cmake-3.23.0-patch/Modules/CMakeDetermineCCompiler.cmake
    cmake-3.23.0-patch/Modules/CMakeDetermineCompiler.cmake <-- 未変更
    cmake-3.23.0-patch/Modules/CMakeDetermineCompilerId.cmake
    cmake-3.23.0-patch/Modules/CMakeDetermineCXXCompiler.cmake
    cmake-3.23.0-patch/Modules/CMakeFindBinUtils.cmake
    cmake-3.23.0-patch/Modules/CMakePlatformId.h.in
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-ASM.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-AssemblerWrapper.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-C.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-CompilerWrapper.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-CXX.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-DetermineCompiler.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-FindBinUtils.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-LibGeneratorWrapper.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-LinkerWrapper.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS-XConverterWrapper.cmake
    cmake-3.23.0-patch/Modules/Compiler/RENESAS.cmake

    RH850F1KM_SampleProject/...略...
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain-ex1.cmake
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain-ex2.cmake
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain-ex3.cmake <-- 追加
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain-ex4.cmake <-- 追加
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain-ex5.cmake <-- 追加
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain-ex6.cmake <-- 追加
    renesas-todo-memo-cmake-test.txt
    ...略...

    rl78g23_fpb/...略...
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain-ex1.cmake
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain-ex2.cmake
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain-ex3.cmake <-- 追加
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain-ex4.cmake <-- 追加
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain-ex5.cmake <-- 追加
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain-ex6.cmake <-- 追加
    renesas-todo-memo-cmake-test.txt
    ...略...

    tb_rx65n/...略...
    tb_rx65n/renesas-rx-ccrx-toolchain-ex1.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex2.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex2xx.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex3.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex4.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex4xx.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex5.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex6.cmake
    tb_rx65n/renesas-rx-ccrx-toolchain-ex6xx.cmake
    renesas-todo-memo-cmake-test.txt
    ...略...