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-RX対応していない(のならば、当然同様のシチュエーション(独自CPU)にあるCC-RL、CC-RHもCMake対応の検討範疇であろう)

    #あとすみません、最初に書いた「CC-RXがCMake対応していない」はご指摘通り完全に逆に書いており単なる書き間違いです。会議中等に内職で書き込むとこの手の書き間違いが多くなりますね。

    コンパイラチームには同時にCC-RL、CC-RHのことも考える必要がある旨改めて伝えておきます。

    また、本スレッドに書いてあるNoMaYさんの検証内容をおさらいすることも伝えてあります。

    以上です

  • こんにちは。NoMaYです。

    今まで統合開発環境に任せっきりで気付かなかったのですけれども、コンパイルする、プリプロセス後のソースを出力する、アセンブラソースを出力する、という基本的な操作でも、CC-RXとCC-RL/CC-RHとでは、コンパイルオプションが違っていたのですね、、、CC-RLで試し初めて、ようやく気付きました、、、

    調査/試作中のコンパイラ定義ファイルでの例 (右端の方です)

        if(0) # IAR C/C++ Compiler
            set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
            set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> --preprocess=cnl <PREPROCESSED_SOURCE>")
            set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -lAH <ASSEMBLY_SOURCE> -o <OBJECT>.dummy")
        endif()
        if("${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
          set(CMAKE_INCLUDE_FLAG_${lang} "-include=")
          set(CMAKE_DEFINE_FLAG_${lang} "-define=")
          # Note: <FLAGS> includes CMAKE_${lang}_FLAGS, CMAKE_${lang}_FLAGS_<config> and `lang standard option(s)`
          set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> -nologo ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=obj=<OBJECT> <SOURCE>")
          set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> -nologo ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=prep=<PREPROCESSED_SOURCE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> -nologo ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=src=<ASSEMBLY_SOURCE> <SOURCE>")
        else()
          # Note: <FLAGS> includes CMAKE_${lang}_FLAGS, CMAKE_${lang}_FLAGS_<config> and `lang standard option(s)`
          set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -c -o <OBJECT> <SOURCE>")
          set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -P -o <PREPROCESSED_SOURCE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -S -o <ASSEMBLY_SOURCE> <SOURCE>")
        endif()

     

  • こんにちは。NoMaYです。

    VSCodeの再起動手順をミスった勘違いでした。

    > (3) 環境変数Pathと環境変数BIN_RXにコンパイラのbinフォルダのパスが指定されていなければならない

    ヘルプに記載は無いですけど、CC-RX V3.04.00で、環境変数にまつわる振る舞いが変わっていますね、、、

    (A) 環境変数BIN_RXが定義されていなくてもlbgrx.exeが実行出来るようになった
    (B) 環境変数Pathにパスが含まれていなくてもccrx.exeが実行出来るようになった
    (B') (以前の挙動を未確認ですけれども)同様にasrx.exeも実行出来ている

    ただ、今まで認識が無かったですが、以下の挙動が表に出てくるようになりました。

    (C) リンカオプションで -noprelink 未指定時は、環境変数Pathにパスが含まれていなと、リンク時に以下のエラーになる

    F0563400:Cannot execute "prelnk"

  • こんにちは。NoMaYです。

    CC-RLは環境変数Pathにコンパイラのbinフォルダのパスが指定されていなくてもコンパイル出来ますね。(多分CC-RHも。) また、ライブラリジェネレータというものが無いので環境変数BIN_RXといったものも定義不要ですね。

    他方、別系統のクセとして、CC-RLに関して、デバイスファイル(*.DVFファイル)というものの存在がありますね。(CC-RHには無い。) 厄介なのは、このファイルは、コンパイラパッケージに含まれるものでは無くて、統合開発環境に含まれるものである、という点であるような気がしました。しかも、e2 studioでは以下のような分かり難い場所になります、、、

    調査/試作中のcmakeクロスコンパイルツールチェインファイルでの例

    # Compiler flags needed to compile for this CPU
    set(CPU_FLAGS "-cpu=S3")
    set(DEV_FLAGS "-dev=C:/Users/XXX/.eclipse/com.renesas.platform_1643561029/DebugComp/RL78/RL78/Common/DR7F100GLG.DVF")

     
    [追記]

    ひとまず、DVFファイルの場所はコンパイラやXコンバータ(デバッグ情報コンバータ)のパスに対する相対パスで推定することにしてみます。

    場所の例)

    CS+の場合
    C:\Renesas\CS+\CC\CC-RL\V1.11.00\bin\ ← コンパイラの場所
    C:\Renesas\CS+\CC\Device\RL78\Devicefile\ ← DVFファイルの場所

    e2 studioの場合
    C:\Users\XXX\.eclipse\com.renesas.platform_1643561029\Utilities\ccrl\ ← Xコンバータの場所
    C:\Users\XXX\.eclipse\com.renesas.platform_1643561029\DebugComp\RL78\RL78\Common\ ← DVFファイルの場所

    探査パターンの案)

    試行1: <コンパイラの場所>\..\..\..\Device\RL78\Devicefile\
    試行2: <Xコンバータの場所>\..\..\DebugComp\RL78\RL78\Common\

  • こんにちは。NoMaYです。

    今回、CC-RL(+VSCode)版の簡単なRL78スマートコンフィグレータプロジェクト向けCMakeファイルをMicrosoftさんのAzure RTOSのRX65Nのサンプルコード(CMake+GNURX+VSCode)のCMakeファイルを元にして作ってみました。前回はIARコンパイラ向け定義ファイルを元にCC-RX向けコンパイラ定義ファイルを作りましたが、今回はそこにCC-RL向け定義を加えてみました。ファイルは以下のzipファイルに固めました。(前回同様ライブラリはビルド出来ないと思います。)

    CMake_XXSC_CCXX_examples_20220130.zip

    cmake/Modules/Compiler/RENESAS-ASM.cmake
    cmake/Modules/Compiler/RENESAS-C.cmake
    cmake/Modules/Compiler/RENESAS-CXX.cmake
    cmake/Modules/Compiler/RENESAS-DetermineCompiler.cmake
    cmake/Modules/Compiler/RENESAS.cmake

    rl78g23_fpb/.vscode/cmake-kits.json
    rl78g23_fpb/cmake/renesas-rl78-ccrl-rl78g23.cmake
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain.cmake
    rl78g23_fpb/cmake/utilities.cmake
    rl78g23_fpb/src/rl78g23fpbdef.h
    rl78g23_fpb/src/rl78g23_fpb_main.c
    rl78g23_fpb/src/smc_gen/...略...
    rl78g23_fpb/linker_command.sub
    rl78g23_fpb/CMakeLists.txt

    tb_rx65n/.vscode/cmake-kits.json
    tb_rx65n/cmake/renesas-rx-ccrx-rx65n.cmake
    tb_rx65n/cmake/renesas-rx-ccrx-toolchain.cmake
    tb_rx65n/cmake/utilities.cmake
    tb_rx65n/src/sample_asm.src
    tb_rx65n/src/sample_cpp.cpp
    tb_rx65n/src/tb_rx65n.c
    tb_rx65n/src/smc_gen/...略...
    tb_rx65n/linker_command.sub
    tb_rx65n/CMakeLists.txt

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



     

  • こんにちは。NoMaYです。

    今回、CC-RH(+VSCode)版の簡単なRH850スマートコンフィグレータプロジェクト向けCMakeファイルを今までと同様にMicrosoftさんのAzure RTOSのRX65Nのサンプルコード(CMake+GNURX+VSCode)のCMakeファイルを元にして作ってみました。ソースはRH850スマートコンフィグレータのサンプルプロジェクトフォルダ内のRH850F1KM_SampleProjects下のものを組み合わせました。また、コンパイラ向け定義ファイルもCC-RH向け定義を加えてみました。ファイルは以下のzipファイルに固めました。(前々回前回同様ライブラリはビルド出来ないと思います。)

    CMake_XXSC_CCXX_examples_20220131.zip

    cmake/Modules/Compiler/RENESAS-ASM.cmake
    cmake/Modules/Compiler/RENESAS-C.cmake
    cmake/Modules/Compiler/RENESAS-CXX.cmake
    cmake/Modules/Compiler/RENESAS-DetermineCompiler.cmake
    cmake/Modules/Compiler/RENESAS.cmake

    RH850F1KM_SampleProject/.settings/com.renesas.smc.generationsetting.properties
    RH850F1KM_SampleProject/.vscode/cmake-kits.json
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-rh850f1km.cmake
    RH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain.cmake
    RH850F1KM_SampleProject/cmake/utilities.cmake
    RH850F1KM_SampleProject/sample_src/sc_boot.asm
    RH850F1KM_SampleProject/sample_src/sc_cstart.asm
    RH850F1KM_SampleProject/sample_src/sc_intprg.c
    RH850F1KM_SampleProject/src/smc_gen/...略...
    RH850F1KM_SampleProject/iodefine.h
    RH850F1KM_SampleProject/linker_command.sub
    RH850F1KM_SampleProject/CMakeLists.txt
    RH850F1KM_SampleProject/SC_CS+CCRH.mtpj
    RH850F1KM_SampleProject/SC_CS+CCRH.scfg
    RH850F1KM_SampleProject/SC_CS+CCRH_build_options.txt

    rl78g23_fpb/.vscode/cmake-kits.json
    rl78g23_fpb/cmake/renesas-rl78-ccrl-rl78g23.cmake
    rl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain.cmake
    rl78g23_fpb/cmake/utilities.cmake
    rl78g23_fpb/src/rl78g23fpbdef.h
    rl78g23_fpb/src/rl78g23_fpb_main.c
    rl78g23_fpb/src/smc_gen/...略...
    rl78g23_fpb/linker_command.sub
    rl78g23_fpb/CMakeLists.txt

    tb_rx65n/.vscode/cmake-kits.json
    tb_rx65n/cmake/renesas-rx-ccrx-rx65n.cmake
    tb_rx65n/cmake/renesas-rx-ccrx-toolchain.cmake
    tb_rx65n/cmake/utilities.cmake
    tb_rx65n/src/sample_asm.src
    tb_rx65n/src/sample_cpp.cpp
    tb_rx65n/src/tb_rx65n.c
    tb_rx65n/src/smc_gen/...略...
    tb_rx65n/linker_command.sub
    tb_rx65n/CMakeLists.txt

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



     

  • こんにちは。NoMaYです。

    Ninjaも使えそうです。以前に試してうまく行かなかったのは、くだんのアプリケーションノートのCMakeファイルに記述されていたオプションで依存関係ファイルを生成させたのが良く無かったようです。そのオプションで依存関係ファイルを生成させると、makeでは読み込める内容であっても、Ninjaでは読み込めない(以前に試した時はCMakeでも読み込めない)内容になるようです。(実は、たまたま、何か勘違いをして)あっさりしたオプションで試したらうまく行きました、、、

    Ninja
    ninja-build.org/


    くだんのアプリケーションノートのcmakeファイルに記述されていたオプション (右端の方で -MT が2つなのが良く無さそう)

    ########## Add function to scan and generate dependency files
    function(dep_scan out_objects)
      string(REPLACE " -" ";-" DEPENDENCY_C_OPTIONS ${CMAKE_C_FLAGS})
      string(REPLACE " -" ";-" DEPENDENCY_CPP_OPTIONS ${CMAKE_CXX_FLAGS})
      string(REPLACE " -" ";-" DEPENDENCY_ASM_OPTIONS ${CMAKE_ASM_FLAGS})
      set(result)
      foreach(in_f ${ARGN})
        get_filename_component(ext ${in_f} LAST_EXT)
        file(RELATIVE_PATH rel_f ${CMAKE_CURRENT_SOURCE_DIR} ${in_f})
        set(depend_f "CMakeFiles/${PROJECT_NAME}.dir/${rel_f}.d")
        set(obj_f "CMakeFiles/${PROJECT_NAME}.dir/${rel_f}.obj")
        if(${ext} STREQUAL ".c")
          add_custom_command (
            COMMENT "Generate dependency: ${depend_f}"
            OUTPUT ${depend_f}
            COMMAND ${CMAKE_C_COMPILER} ${DEPENDENCY_C_OPTIONS} -MM -MP -output=dep=${depend_f} -MT=${obj_f} -MT=${depend_f} ${in_f}
            DEPENDS "${in_f}"
            VERBATIM
          )
        elseif(${ext} STREQUAL ".cpp")
          add_custom_command (
            COMMENT "Generate dependency: ${depend_f}"
            OUTPUT ${depend_f}
            COMMAND ${CMAKE_CXX_COMPILER} ${DEPENDENCY_CPP_OPTIONS} -MM -MP -output=dep=${depend_f} -MT=${obj_f} -MT=${depend_f} ${in_f}
            DEPENDS "${in_f}"
            VERBATIM
          )
        elseif((${ext} STREQUAL ".asm") OR (${ext} STREQUAL ".s") OR (${ext} STREQUAL ".src"))
          add_custom_command (
            COMMENT "Generate dependency: ${depend_f}"
            OUTPUT ${depend_f}
            COMMAND ${CMAKE_ASM_COMPILER} ${DEPENDENCY_ASM_OPTIONS} -MM -MP -output=${depend_f} -MF=${depend_f} -MT=${obj_f} -MT=${depend_f} ${in_f}
            DEPENDS "${in_f}"
            VERBATIM
          )
        endif()
        list(APPEND result ${depend_f})
      endforeach()
      set(${out_objects} "${result}" PARENT_SCOPE)
    endfunction()
    ########## Call dep_scan
    dep_scan(d_files ${SOURCE} ${src_asm})

     

    調査/試作中のコンパイラ定義ファイルでの例 (右端の方です)

        if("${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
          set(CMAKE_INCLUDE_FLAG_${lang} "-include=")
          set(CMAKE_DEFINE_FLAG_${lang} "-define=")
          # Note: <FLAGS> includes CMAKE_${lang}_FLAGS, CMAKE_${lang}_FLAGS_<config> and `lang standard option(s)`
          # FIXME: Should ${RENESAS_${lang}_FLAGS} be used?
          set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> -nologo ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=obj=<OBJECT> <SOURCE>"
                                                       "<CMAKE_${lang}_COMPILER> -nologo ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -MM -output=dep=<DEP_FILE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> -nologo ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=prep=<PREPROCESSED_SOURCE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> -nologo ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=src=<ASSEMBLY_SOURCE> <SOURCE>")
        elseif("${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78")
          set(CMAKE_DEFINE_FLAG_ASM "-D") # This is the same as default setting.
          set(CMAKE_INCLUDE_FLAG_ASM "-I") # This is the same as default setting.
          # Note: <FLAGS> includes CMAKE_${lang}_FLAGS, CMAKE_${lang}_FLAGS_<config> and `lang standard option(s)`
          # FIXME: Should ${RENESAS_${lang}_FLAGS} be used?
          set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -c -o <OBJECT> <SOURCE>"
                                                       "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -MM -o <DEP_FILE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -P -o <PREPROCESSED_SOURCE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -S -o <ASSEMBLY_SOURCE> <SOURCE>")
        elseif("${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850")
          set(CMAKE_DEFINE_FLAG_ASM "-D") # This is the same as default setting.
          set(CMAKE_INCLUDE_FLAG_ASM "-I") # This is the same as default setting.
          # Note: <FLAGS> includes CMAKE_${lang}_FLAGS, CMAKE_${lang}_FLAGS_<config> and `lang standard option(s)`
          # FIXME: Should ${RENESAS_${lang}_FLAGS} be used?
          set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -c -o<OBJECT> <SOURCE>"
                                                       "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -MM -Xno_warning=11123 -o<DEP_FILE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -P -o<PREPROCESSED_SOURCE> <SOURCE>")
          set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${RENESAS_${lang}_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -S -o<ASSEMBLY_SOURCE> <SOURCE>")
        endif()

     

    if("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
        set(CMAKE_DEFINE_FLAG_ASM "-define=")
        set(CMAKE_INCLUDE_FLAG_ASM "-include=")
        # Note: <FLAGS> includes CMAKE_ASM_FLAGS, CMAKE_ASM_FLAGS_<config>
        # FIXME: Should ${RENESAS_ASM_FLAGS} be used?
        set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -nologo ${RENESAS_ASM_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=<OBJECT> <SOURCE>"
                                     "<CMAKE_ASM_COMPILER> -nologo ${RENESAS_ASM_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -MM -MF=<DEP_FILE> <SOURCE>")
        set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS src;asm;s)
    elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78")
        set(CMAKE_DEFINE_FLAG_ASM "-define=")
        set(CMAKE_INCLUDE_FLAG_ASM "-include=")
        # Note: <FLAGS> includes CMAKE_ASM_FLAGS, CMAKE_ASM_FLAGS_<config>
        # FIXME: Should ${RENESAS_ASM_FLAGS} be used?
        set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> ${RENESAS_ASM_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -output=<OBJECT> <SOURCE>"
                                     "<CMAKE_ASM_COMPILER> ${RENESAS_ASM_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -MM -MF=<DEP_FILE> <SOURCE>")
        set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm;s)
    elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850")
        set(CMAKE_DEFINE_FLAG_ASM "-D") # This is the same as default setting.
        set(CMAKE_INCLUDE_FLAG_ASM "-I") # This is the same as default setting.
        # Note: <FLAGS> includes CMAKE_ASM_FLAGS, CMAKE_ASM_FLAGS_<config>
        # FIXME: Should ${RENESAS_ASM_FLAGS} be used?
        set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> ${RENESAS_ASM_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -o<OBJECT> <SOURCE>"
                                     "<CMAKE_ASM_COMPILER> ${RENESAS_ASM_FLAGS} <DEFINES> <INCLUDES> <FLAGS> -MM -MF=<DEP_FILE> <SOURCE>")
        set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm;s)
    endif()

     

    [関連リンク]

    C/C++ header dependencies - Ninjaマニュアル
    ninja-build.org/manual.html#ref_headers

    Options Controlling the Preprocessor - GCCドキュメント
    gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
     
    [追記]

    なお、CC-RX(やCC-RLやCC-RHも?)では、-M や -MD や -MMD といったオプションは、受け付けないようです。

    [追記2]

    CC-RLとCC-RHのコンパイラの方は -M オプションは受け付けますね。(アセンブラの方は受け付けません。)

  • こんにちは。NoMaYです。

    Ninjaは前の投稿のようにCC-RX/RL/RHが生成したヘッダファイル依存関係情報ファイルを認識してくれたのですが、CMakeは相変わらず認識してくれず、そのせいで、(CMakeが生成した)makefileをmakeで使おうとした場合、せっかく生成した依存関係ファイルが使われないようです。あれこれ調べてみると、どうも以下の(A)は駄目で、(B)であれば良い、ようでした。

    (A) 2個以上の依存関係に分かれていると駄目

    CMakeFiles/tb_rx65n.dir/src/test_c_dep.c.obj: C:/Renesas/GitHubDesktop/workspaces/work_cmake/TestCMakeCCxx/tb_rx65n/src/test_c_dep.c
    CMakeFiles/tb_rx65n.dir/src/test_c_dep.c.obj: C:/Renesas/GitHubDesktop/workspaces/work_cmake/TestCMakeCCxx/tb_rx65n/src/test_c_dep.h

     
    (B) 依存関係が1個だけであれば良い

    CMakeFiles/tb_rx65n.dir/src/test_c_dep.c.obj: \
     C:/Renesas/GitHubDesktop/workspaces/work_cmake/TestCMakeCCxx/tb_rx65n/src/test_c_dep.c \
     C:/Renesas/GitHubDesktop/workspaces/work_cmake/TestCMakeCCxx/tb_rx65n/src/test_c_dep.h \

     

  • こんにちは。NoMaYです。

    CC-RX/RL/RHではヘッダファイル依存関係情報ファイルを生成する為だけに(コンパイルとは別に)コンパイラを起動する必要があるのですが、過去そのようなコンパイラが他にもあってCMakeにはその為の機能があるようです。後で試してみようと思います。

    gitlab.kitware.com/cmake/cmake/-/blob/master/Modules/Compiler/NVHPC-C.cmake

    if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 21.07)
      set(CMAKE_DEPFILE_FLAGS_C "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
      set(CMAKE_C_DEPFILE_FORMAT gcc)
      set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
    else()
      # Before NVHPC 21.07 the `-MD` flag implicitly
      # implies `-E` and therefore compilation and dependency generation
      # can't occur in the same invocation
      set(CMAKE_C_DEPENDS_EXTRA_COMMANDS "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -x c -M <SOURCE> -MT <OBJECT> -MD<DEP_FILE>")
    endif()

     
    gitlab.kitware.com/cmake/cmake/-/blob/master/Modules/Compiler/NVHPC-CXX.cmake

    if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21.07)
      set(CMAKE_DEPFILE_FLAGS_CXX "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
      set(CMAKE_CXX_DEPFILE_FORMAT gcc)
      set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
    else()
      # Before NVHPC 21.07 the `-MD` flag implicitly
      # implies `-E` and therefore compilation and dependency generation
      # can't occur in the same invocation
      set(CMAKE_CXX_DEPENDS_EXTRA_COMMANDS "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -x c++ -M <SOURCE> -MT <OBJECT> -MD<DEP_FILE>")
    endif()

     

  • こんにちは。NoMaYです。

    CMakeのCC-RX/RL/RH向けコンパイラ定義ファイルのNinja対応版を以下のzipファイルに固めました。(先ほど投稿したCMakeの機能を使いました。)

    CMake_Ninja_XXSC_CCXX_examples_20220202.zip

    cmake/Modules/Compiler/RENESAS-ASM.cmake
    cmake/Modules/Compiler/RENESAS-C.cmake
    cmake/Modules/Compiler/RENESAS-CXX.cmake
    cmake/Modules/Compiler/RENESAS-DetermineCompiler.cmake
    cmake/Modules/Compiler/RENESAS.cmake

    RH850F1KM_SampleProject/...略...

    rl78g23_fpb/...略...

    tb_rx65n/...略...

     
    以下、VSCodeの画面コピーです。(Ninjaはビルドの速さを謳うだけあってビルドの経過時間を表示する点が特徴的ですね。)

    CC-RXの例


    CC-RLの例


    CC-RHの例