こんにちは。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.21www.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.21PDFwww.renesas.com/jp/ja/document/apn/integrated-development-environment-e-studio-using-cmake-renesas-cc-rx-compiler-rev201ZIPwww.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 CPUset(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.cmakecmake/Modules/Compiler/RENESAS-C.cmakecmake/Modules/Compiler/RENESAS-CXX.cmakecmake/Modules/Compiler/RENESAS-DetermineCompiler.cmakecmake/Modules/Compiler/RENESAS.cmakerl78g23_fpb/.vscode/cmake-kits.jsonrl78g23_fpb/cmake/renesas-rl78-ccrl-rl78g23.cmakerl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain.cmakerl78g23_fpb/cmake/utilities.cmakerl78g23_fpb/src/rl78g23fpbdef.hrl78g23_fpb/src/rl78g23_fpb_main.crl78g23_fpb/src/smc_gen/...略...rl78g23_fpb/linker_command.subrl78g23_fpb/CMakeLists.txttb_rx65n/.vscode/cmake-kits.jsontb_rx65n/cmake/renesas-rx-ccrx-rx65n.cmaketb_rx65n/cmake/renesas-rx-ccrx-toolchain.cmaketb_rx65n/cmake/utilities.cmaketb_rx65n/src/sample_asm.srctb_rx65n/src/sample_cpp.cpptb_rx65n/src/tb_rx65n.ctb_rx65n/src/smc_gen/...略...tb_rx65n/linker_command.subtb_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.cmakecmake/Modules/Compiler/RENESAS-C.cmakecmake/Modules/Compiler/RENESAS-CXX.cmakecmake/Modules/Compiler/RENESAS-DetermineCompiler.cmakecmake/Modules/Compiler/RENESAS.cmakeRH850F1KM_SampleProject/.settings/com.renesas.smc.generationsetting.propertiesRH850F1KM_SampleProject/.vscode/cmake-kits.jsonRH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-rh850f1km.cmakeRH850F1KM_SampleProject/cmake/renesas-rh850-ccrh-toolchain.cmakeRH850F1KM_SampleProject/cmake/utilities.cmakeRH850F1KM_SampleProject/sample_src/sc_boot.asmRH850F1KM_SampleProject/sample_src/sc_cstart.asmRH850F1KM_SampleProject/sample_src/sc_intprg.cRH850F1KM_SampleProject/src/smc_gen/...略...RH850F1KM_SampleProject/iodefine.hRH850F1KM_SampleProject/linker_command.subRH850F1KM_SampleProject/CMakeLists.txtRH850F1KM_SampleProject/SC_CS+CCRH.mtpjRH850F1KM_SampleProject/SC_CS+CCRH.scfgRH850F1KM_SampleProject/SC_CS+CCRH_build_options.txtrl78g23_fpb/.vscode/cmake-kits.jsonrl78g23_fpb/cmake/renesas-rl78-ccrl-rl78g23.cmakerl78g23_fpb/cmake/renesas-rl78-ccrl-toolchain.cmakerl78g23_fpb/cmake/utilities.cmakerl78g23_fpb/src/rl78g23fpbdef.hrl78g23_fpb/src/rl78g23_fpb_main.crl78g23_fpb/src/smc_gen/...略...rl78g23_fpb/linker_command.subrl78g23_fpb/CMakeLists.txttb_rx65n/.vscode/cmake-kits.jsontb_rx65n/cmake/renesas-rx-ccrx-rx65n.cmaketb_rx65n/cmake/renesas-rx-ccrx-toolchain.cmaketb_rx65n/cmake/utilities.cmaketb_rx65n/src/sample_asm.srctb_rx65n/src/sample_cpp.cpptb_rx65n/src/tb_rx65n.ctb_rx65n/src/smc_gen/...略...tb_rx65n/linker_command.subtb_rx65n/CMakeLists.txt
こんにちは。NoMaYです。Ninjaも使えそうです。以前に試してうまく行かなかったのは、くだんのアプリケーションノートのCMakeファイルに記述されていたオプションで依存関係ファイルを生成させたのが良く無かったようです。そのオプションで依存関係ファイルを生成させると、makeでは読み込める内容であっても、Ninjaでは読み込めない(以前に試した時はCMakeでも読み込めない)内容になるようです。(実は、たまたま、何か勘違いをして)あっさりしたオプションで試したらうまく行きました、、、Ninjaninja-build.org/くだんのアプリケーションノートのcmakeファイルに記述されていたオプション (右端の方で -MT が2つなのが良く無さそう)
########## Add function to scan and generate dependency filesfunction(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_scandep_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_headersOptions 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.cCMakeFiles/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.cmakecmake/Modules/Compiler/RENESAS-C.cmakecmake/Modules/Compiler/RENESAS-CXX.cmakecmake/Modules/Compiler/RENESAS-DetermineCompiler.cmakecmake/Modules/Compiler/RENESAS.cmakeRH850F1KM_SampleProject/...略...rl78g23_fpb/...略...tb_rx65n/...略...
以下、VSCodeの画面コピーです。(Ninjaはビルドの速さを謳うだけあってビルドの経過時間を表示する点が特徴的ですね。)CC-RXの例CC-RLの例CC-RHの例