”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

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
 

  • > 4.1 CDT Core Builder を無効化する
    CDT Managed build (GUIで設定したオプションをmakefileに出力する仕組み)を無効にするやり方なので、FreeRTOSなどの既にCMakeで作ってあるものが前提になるかと。
    Visual Studioを使っているならビルドまでVisual Studioでやることになるので出番がありませんが。

  • ほや さん、こんにちは。NoMaYです。

    > 既にCMakeで作ってあるものが前提

    やっぱりそうですよね、、、そうなると、自分の中での本命は、CS+のIronPythonスクリプトで、CS+のプロジェクト情報を参照してCMakeの設定ファイルを自動生成する、というものを作って(出来ればmtpj保存時に実行されるようにして)、そうやって生成したCMakeの設定ファイルをVisual Studio 2022で使う、という流れかな、と思いました。

    CS+は、ラピッドスタートを使うと、とてもとても速く起動しますので、CC-RX/CC-RL/CC-RHのビルド設定ダイアログ代わりにVisual Studio 2022からCS+を起動してしまう、というのもアリかな、と思いました。それから、ひと手間増える感はありますけれども、CS+から単体スマートコンフィグレータを起動してコード生成してやることで、その点に関しても情報をCMakeの設定ファイルへ反映させることが出来そうかな、とも思いました。

    ただ、悩ましいのは、(今のところは?)CS+ではFreeRTOSプロジェクトを作れないことと、CS+にはFreeRTOSデバッグサポートが無い、というところです。ただ、後者は、ひょっとすると、(Microsoftさん以外の)誰かがVisual Studio用の汎用的なFreeRTOSデバッグ拡張機能を作ったりするかも知れませんけど、、、もっとも、Microsoftさんも先日Microsoft Azure向けFreeRTOS SDKをリリースしていましたので、Visual Studio用のAzure RTOSデバッグサポートを追加して、その後、FreeRTOSデバッグサポートも追加してくる、ということもあるかも知れないとも思います、、、

    [追記]

    最後のパラグラフを読み直していて、分かり難いかな、と思ったのは、私は、どうしても必要な時は(例えばリアルタイムRAM表示させたい時とか、トレースデータを見たい時とか)CS+を起動してしまえば良い、と思っているというところかも知れません、、、まあ、ですので、FreeRTOSデバッグサポートが必要になれば、e2 studioを起動するのですけれども、、

  • こんにちは。NoMaYです。

    ウェブで調べ物をしていて気付いたのですが、IARさんは自社のツールチェインとCMakeを連携させるやり方を提示した以下のアプリケーションノートを出していましたね。(GitHubのIARさんのリポジトリにあるのがドキュメント本体であるチュートリアルですかね、、、これらのウェブページにはRXやRL78やRH850の文字もありますね、、、)

    IAR Embedded Workbench でのCMake 使用
    www.iar.com/jp/knowledge/support/technical-notes/general/iar-embedded-workbench-cmake-

    Tutorial
    Building and testing with the IAR Systems tools in CMake
    github.com/IARSystems/cmake-tutorial
     

  • こんにちは。NoMaYです。

    Azure RTOSのRX65NのサンプルコードがCMake+GNURX+VSCodeのようなので、これを少し試してみようと思います。

    github.com/azure-rtos/getting-started/tree/master/Renesas/RSK_RX65N_2MB

    github.com/azure-rtos/getting-started/tree/master/Renesas/RX65N_Cloud_Kit

    [追記]

    うゎ~、RXマイコンのサンプルコードが沢山ある、、、TB-RX130向けのものまでありますねぇ、、、

    Azure RTOS - Additional samples
    github.com/azure-rtos/samples

    [関連リンク]

    簡単Azure IoT接続!~32bit MCU RX65NがAzure RTOSに対応~
    www.renesas.com/jp/ja/blogs/easy-azure-iot-connection-rx65n-32bit-mcu-supports-azure-rtos
     

  • こんにちは。NoMaYです。

    まだ使い方は良く分かりませんが、VSCodeでCMake Toolsという拡張機能をインストールするとCMakeでビルド出来るようになるみたい、、、

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




     

  • こんにちは。NoMaYです。

    まだ適切なやり方は分かりませんが、Visual Studio 2022で以下のようなCMakeSettings.jsonファイルを記述/追加するとAzure RTOSのRX65NのサンプルコードをCMake+GNURX+Visual Studio 2022でビルド出来るようになるみたい、、、

    CMakeSettings.json

    {
      "configurations": [
        {
          "name": "GNURX-Debug",
          "generator": "Ninja",
          "configurationType": "Debug",
          "inheritEnvironments": [],
          "buildRoot": "${projectDir}\\build",
          "installRoot": "${projectDir}\\install",
          "cmakeCommandArgs": "",
          "buildCommandArgs": "",
          "ctestCommandArgs": ""
        }
      ]
    }


    以下、Visual Studio 2022の画面コピーです。




     

  • こんにちは。NoMaYです。

    困った時のQiita頼みということで以下でググって幾つか読んでみましたが、これはちょっと違ったかなぁ、という感じでした。手書きするにせよCS+のIronPythonスクリプトで自動生成させるにせよ、必要そうなものより大掛かり過ぎる感じです。

    Google検索: CMake 使い方 Qiita
    www.google.com/search?q=CMake 使い方 Qiita

    別スレッドでやっていることとの絡みでいうと、こんな感じのことが、さほど手書き/CS+のIronPythonスクリプトで自動生成とかしなくても、出来れば良かった、のですけれども、、、

    (1) プロジェクトへのソースファイルの追加/削除を認識して良きに計らってくれる
    (2) DebugビルドとReleaseビルドの切り替えをVSCodeやVisual Studio 2022上で簡単に出来るようにしてくれる

    どちらも現状は(GUIにせよheadlessbuildにせよ)e2 studioを起動しなければ出来なくて、私の環境ではe2 studioの起動に数分掛かるのが難点だったのです。(2回目、3回目、といった起動になればグッと速くなるのですが、、、)

    [追記]

    DebugビルドとReleaseビルドの切り替えといってもコンパイル時の最適化オプションの切り替えが出来れば充分で、GCCの例ですとO3/OsとかとO0との切り替え程度です。(普段、その程度で事足りていましたので、、、)

  • こんにちは。NoMaYです。

    昨日はそのように思ったのですけれども、こういう機能もあることを知りました。ひとまず、振り出しに戻る、、、

    第13回 fileコマンドが拡張されているぞ!
    投稿日 : 2019年10月6日 最終更新日時 : 2019年10月6日 カテゴリー : 実践C++応用講座CMake編
    theolizer.com/cpp-school3/cpp-school3-13/

    1.ファイル・リストを返すGLOB/GLOB_RECURSE
    GLOB/GLOB_RECURSEはファイルやフォルダのパスをリストとして返します。必要なファイルだけをコピーする時などに便利です。
    また、add_executableやadd_libraryなどに渡すソース・ファイルのリストを生成するのにも使われることがあります。
    後者は特にソースを追加した際に、再生成を忘れて「あちゃっ」となることも少くないのですが、CONFIGURE_DEPENDSで対処できそうです。


  • こんにちは。NoMaYです。

    今まで、これからVisual StudioやVisual Studio CodeでCC-RX/CC-RL/CC-RHを使うならCMakeを使うのが良いのかな?という動機で調べていましたが、以下のこれとこれとの延長線でソース以外にもビルドスクリプトにも話を広げる、という観点もありますね。(というか、あるべき論、として考えると、そちらが主役であるべき、だったかも、、、)

    CC-RXもGNURXもC99仕様では_Pragmaプリプロセッサ演算子というものが使えるのですね(FITのコンパイラ対応の効率化に役立ちそうかも)
    japan.renesasrulz.com/cafe_rene/f/forum5/5079/cc-rx-gnurx-c99-_pragma-fit

    RX SmartConfigurator FIT e2studioプロジェクトをMinGWでbuildしてみる(もちろん実行出来ませんけれど)
    japan.renesasrulz.com/cafe_rene/f/forum21/7220/rx-smartconfigurator-fit-e2studio-mingw-build

    [追記]

    ヘッドレスビルドとcmakeの話
    github.com/renesas/amazon-freertos/wiki/Amazon-FreeRTOS-Qualification-Program#ヘッドレスビルドとcmakeの話
     

  • こんにちは。NoMaYです。

    冒頭のアプリケーションノートによれば今のe2 studioはCMakeをサポートしているとのことですので、Azure RTOSのRX65Nのサンプルコード(CMake+GNURX+Visual Studio 2022/VSCodeでビルド可能であることは確認済み)を読み込ませたらどうなるだろうと試してみると、以下のようにエラーになりますね。CMakeのパスエラーっぽいのですが、e2 studioがCMakeのパスを認識していないかというと、GUI版のCMake設定ツールは起動しますので、まったく知らないわけでは無さそうなのですけれども。(何か引数っぽいものも直さないといけなさそうですけども。)

    Configuring in: C:\Renesas\Azure\getting-started\Renesas\RX65N_Cloud_Kit\build\cmake.debug.win32.x86_64
    cmake -G MinGW Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS=ON C:\Renesas\Azure\getting-started\Renesas\RX65N_Cloud_Kit
    Error: build command 'cmake' not foundFailure running cmake:

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



     

  • こんにちは。NoMaYです。

    > Azure RTOSのRX65Nのサンプルコード…略…を読み込ませたらどうなるだろうと試してみると、以下のようにエラーになりますね。

    目が覚めた時にやっと気付いたのですが、冒頭のアプリケーションノートの記載で今のe2 studioはCMakeをサポートしているといっても、土台となっているEclipseでx86/amd64 MinGW向けビルドがサポートされるようになりました、というのが正確なところですね、きっと、、、

  • こんにちは。NoMaYです。

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

    アプリケーションノート 統合開発環境 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

    [追記]

    このアプリケーションノートのCMakeLists.txtでも以前に引用したサイトの記事のGLOB_RECURSEを使っていますね。

    [追記その2]

    このアプリケーションノートのCMakeLists.txtとccrx.cmakeですが、ちょっと美しく無いですかね。CMakeLists.txt先頭すぐに以下のようなCC-RXコンパイルオプションガチ依存の記述が、、、

    set(CMAKE_C_COMPILE_OBJECT "\"${CMAKE_C_COMPILER}\" ${CMAKE_C_FLAGS} -output=obj=<OBJECT> <SOURCE>")
    set(CMAKE_CXX_COMPILE_OBJECT "\"${CMAKE_CXX_COMPILER}\" ${CMAKE_CXX_FLAGS} -output=obj=<OBJECT> <SOURCE>")
    set(CMAKE_ASM_COMPILE_OBJECT "\"${CMAKE_ASM_COMPILER}\" ${CMAKE_ASM_FLAGS} -output=<OBJECT> <SOURCE>")
    set(CMAKE_C_LINK_EXECUTABLE "\"${CMAKE_LINKER}\" ${CMAKE_EXE_LINKER_FLAGS} <OBJECTS> -output=<TARGET>.abs")
    set(CMAKE_CXX_LINK_EXECUTABLE "\"${CMAKE_LINKER}\" ${CMAKE_EXE_LINKER_FLAGS} <OBJECTS> -output=<TARGET>.abs")

     
    [関連リンク]

    少し話が古いかも、、、

    Renesas CCRX Cmake - Unresolved symbol __INITSCT
    renesasrulz.com/rx/f/rx---forum/17545/renesas-ccrx-cmake---unresolved-symbol-__initsct
     

  • こんにちは。NoMaYです。

    MicrosoftさんのAzure RTOSのRX65Nのサンプルコード(CMake+GNURX+VSCode)のCMakeファイルを元にして、簡単なRXスマートコンフィグレータプロジェクト向けCMakeファイル(GNURX+VSCode)を作ってみました。ファイルは以下のzipファイルに固めました。

    CMake_RXSC_GNURX_example_20220103.zip

    .vscode/cmake-kits.json ← MicrosoftさんのAzure RTOSのRX65Nのサンプルコードのパスのみ変更
    cmake/renesas-rx-gcc-rx65n.cmake ← 上記のサンプルコードのまま
    cmake/renesas-rx-gcc-toolchain.cmake ← 上記のサンプルコードのまま
    cmake/utilities.cmake ← 上記のサンプルコードのまま
    CMakeLists.txt

     
    基本的に運用方法(GNURX+VSCode)としては以下となりますね。

    (1) 別途e2 studioのRXスマートコンフィグレータでコード生成する
    (2) RXスマートコンフィグレータでコンポーネントの追加/削除を行ったら手作業でファイルを変更する
    (3) 同様に自身のソースファイル/ヘッダファイルの追加/削除を行った場合も手作業でファイルを変更する
    (4) コンパイルオプション/リンクオプションを変更するときは手作業でファイルを変更する

    以下、CMakeファイルの内容とVSCodeの画面コピーです。

    CMakeLists.txt (赤文字部分を手作業で変更します)

    # Copyright (c) Microsoft Corporation.
    # Licensed under the MIT License.
    # Modified by NoMaY for RX SmartConfigurator simple project

    cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
    set(CMAKE_C_STANDARD 99)

    set(GSG_BASE_DIR ${CMAKE_SOURCE_DIR})

    # use the repo version of ninja on Windows as there is no Ninja installer
    if(WIN32)
        set(CMAKE_MAKE_PROGRAM "C:\\Program Files\\Ninja\\ninja.exe" CACHE STRING "Ninja location")
    endif()

    # Set the toolchain if not defined
    if(NOT CMAKE_TOOLCHAIN_FILE)
        if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
            set(CMAKE_TOOLCHAIN_FILE "${GSG_BASE_DIR}/cmake/renesas-rx-iar-rx65n.cmake")
        elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
            set(CMAKE_TOOLCHAIN_FILE "${GSG_BASE_DIR}/cmake/renesas-rx-gcc-rx65n.cmake")
        endif()
    endif()

    include(${GSG_BASE_DIR}/cmake/utilities.cmake)

    # Define the Project
    project(tb_rx65n C ASM)

    set(SOURCES
        src/smc_gen/general/r_cg_hardware_setup.c
        src/smc_gen/general/r_smc_cgc.c
        src/smc_gen/general/r_smc_cgc_user.c
        src/smc_gen/general/r_smc_interrupt.c

        src/smc_gen/r_bsp/board/generic_rx65n/hwsetup.c

        src/smc_gen/r_bsp/mcu/all/dbsct.c
        src/smc_gen/r_bsp/mcu/all/lowlvl.c
        src/smc_gen/r_bsp/mcu/all/mcu_locks.c
        src/smc_gen/r_bsp/mcu/all/r_bsp_common.c
        src/smc_gen/r_bsp/mcu/all/r_bsp_cpu.c
        src/smc_gen/r_bsp/mcu/all/r_bsp_interrupts.c
        src/smc_gen/r_bsp/mcu/all/r_bsp_locking.c
        src/smc_gen/r_bsp/mcu/all/r_bsp_mcu_startup.c
        src/smc_gen/r_bsp/mcu/all/r_bsp_software_interrupt.c
        src/smc_gen/r_bsp/mcu/all/r_rx_intrinsic_functions.c
        src/smc_gen/r_bsp/mcu/all/reset_program.S
        src/smc_gen/r_bsp/mcu/all/resetprg.c
        src/smc_gen/r_bsp/mcu/all/sbrk.c

        src/smc_gen/r_bsp/mcu/rx65n/mcu_clocks.c
        src/smc_gen/r_bsp/mcu/rx65n/mcu_init.c
        src/smc_gen/r_bsp/mcu/rx65n/mcu_interrupts.c
        src/smc_gen/r_bsp/mcu/rx65n/mcu_mapped_interrupts.c
        src/smc_gen/r_bsp/mcu/rx65n/vecttbl.c

        src/smc_gen/r_pincfg/Pin.c

        src/tb_rx65n.c
    )

    add_executable(${PROJECT_NAME} ${SOURCES})

    target_include_directories(${PROJECT_NAME}
        PRIVATE
        src/smc_gen/general
        src/smc_gen/r_bsp
        src/smc_gen/r_bsp/mcu/all
        src/smc_gen/r_config
        src/smc_gen/r_pincfg
    )

    if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
        set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/iar/linker_script.icf)
    else()
        set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/src/linker_script.ld)
        target_link_options(${PROJECT_NAME} PRIVATE -Wl,-e_PowerON_Reset)
    endif()

    post_build(${PROJECT_NAME})

     
    .vscode/cmake-kits.json (基本的に変更の必要は無いです)

    cmake-kits.json.20220103.txt
    [
        {
            "name": "Renesas RX65N GCC",
            "toolchainFile": "${workspaceFolder}/cmake/renesas-rx-gcc-rx65n.cmake"
        }
    ]


    cmake/renesas-rx-gcc-rx65n.cmake (必要ならコンパイルオプションを手作業で変更します)
    renesas-rx-gcc-rx65n.cmake.20220103.txt
    # Copyright (c) Microsoft Corporation.
    # Licensed under the MIT License.
    
    # Define the CPU architecture for Threadx
    set(THREADX_ARCH "rxv2")
    set(THREADX_TOOLCHAIN "gnu")
    
    set(MCPU_FLAGS "-m64bit-doubles -mcpu=rx64m -misa=v2 -mlittle-endian-data")
    
    include(${CMAKE_CURRENT_LIST_DIR}/renesas-rx-gcc-toolchain.cmake)
    


    cmake/renesas-rx-gcc-toolchaing.cmake (必要ならコンパイルオプション/リンクオプションを手作業で変更します)
    renesas-rx-gcc-toolchain.cmake.20220103.txt
    # Copyright (c) Microsoft Corporation.
    # Licensed under the MIT License.
    
    set(CMAKE_SYSTEM_NAME Generic)
    set(CMAKE_SYSTEM_PROCESSOR rx)
    set(TARGET_TRIPLET "rx-elf-")
    
    # do some windows specific logic
    if(WIN32)
        set(TOOLCHAIN_EXT ".exe")
    else()
        set(TOOLCHAIN_EXT "")
    endif(WIN32)
    
    # default to Release build
    if(NOT CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release." FORCE)
    endif()
    
    find_program(COMPILER_ON_PATH "${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT}")
    
    if(DEFINED ENV{RX_GCC_PATH}) 
        # use the environment variable first    
        file(TO_CMAKE_PATH $ENV{RX_GCC_PATH} RX_TOOLCHAIN_PATH)
        message(STATUS "Using ENV variable RX_GCC_PATH = ${RX_TOOLCHAIN_PATH}")
    elseif(COMPILER_ON_PATH) 
        # then check on the current path
        get_filename_component(RX_TOOLCHAIN_PATH ${COMPILER_ON_PATH} DIRECTORY)
        message(STATUS "Using RX GCC from path = ${RX_TOOLCHAIN_PATH}")
    endif()
    
    # perform compiler test with the static library
    set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
    
    set(CMAKE_C_COMPILER    ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT} CACHE STRING "")
    set(CMAKE_CXX_COMPILER  ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}g++${TOOLCHAIN_EXT} CACHE STRING "")
    set(CMAKE_ASM_COMPILER  ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT})
    set(CMAKE_LINKER        ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT})
    set(CMAKE_SIZE_UTIL     ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}size${TOOLCHAIN_EXT})
    set(CMAKE_OBJCOPY       ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}objcopy${TOOLCHAIN_EXT})
    set(CMAKE_OBJDUMP       ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}objdump${TOOLCHAIN_EXT})
    set(CMAKE_NM_UTIL       ${RX_TOOLCHAIN_PATH}/${TARGET_TRIPLET}nm${TOOLCHAIN_EXT})
    
    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
    
    set(CMAKE_COMMON_FLAGS "-ffunction-sections -fdata-sections -fdiagnostics-parseable-fixits -fno-strict-aliasing -fno-builtin -fshort-enums -Wuninitialized -Wdouble-promotion -Werror -Wno-unused-function -Wno-unused-parameter -Wno-incompatible-pointer-types")
    set(CMAKE_C_FLAGS 	"${MCPU_FLAGS} ${VFP_FLAGS} ${CMAKE_COMMON_FLAGS} ${LIBC_INCLUDE}")
    set(CMAKE_CXX_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS} ${CMAKE_COMMON_FLAGS}")
    set(CMAKE_ASM_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${LD_FLAGS} -fno-common -nostartfiles -Wl,--gc-sections --specs=nano.specs")
    
    set(CMAKE_C_FLAGS_DEBUG "-O0 -g3")
    set(CMAKE_CXX_ASM_FLAGS_DEBUG "-O0 -g3")
    set(CMAKE_ASM_FLAGS_DEBUG "-g3")
    
    set(CMAKE_C_FLAGS_RELEASE "-Os")
    set(CMAKE_CXX_FLAGS_RELEASE "-Os")
    set(CMAKE_ASM_FLAGS_RELEASE "")
    


    cmake/utilities.cmake (必要ならコマンドラインオプションを手作業で変更します)
    utilities.cmake.20220103.txt
    # Copyright (c) Microsoft Corporation.
    # Licensed under the MIT License.
    
    function(post_build TARGET)
        if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
            add_custom_target(${TARGET}.bin ALL 
                DEPENDS ${TARGET}
                COMMAND ${CMAKE_IAR_ELFTOOL} --bin ${TARGET}.elf ${TARGET}.bin)
        elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
            add_custom_target(${TARGET}.bin ALL 
                DEPENDS ${TARGET}
                COMMAND ${CMAKE_OBJCOPY} -Obinary ${TARGET}.elf ${TARGET}.bin
                COMMAND ${CMAKE_OBJCOPY} -Oihex ${TARGET}.elf ${TARGET}.hex)            
        else()
            message(FATAL_ERROR "Unknown CMAKE_C_COMPILER_ID ${CMAKE_C_COMPILER_ID}")
        endif()
    endfunction()
    
    function(set_target_linker TARGET LINKER_SCRIPT)
        if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
            target_link_options(${TARGET} PRIVATE --config ${LINKER_SCRIPT})
            target_link_options(${TARGET} PRIVATE --map=${TARGET}.map)
        elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
            target_link_options(${TARGET} PRIVATE -T${LINKER_SCRIPT})
            target_link_options(${TARGET} PRIVATE -Wl,-Map=${TARGET}.map)
            set_target_properties(${TARGET} PROPERTIES SUFFIX ".elf") 
    
        else()
            message(FATAL_ERROR "Unknown CMAKE_C_COMPILER_ID ${CMAKE_C_COMPILER_ID}")
        endif()
    endfunction()
    
    macro(print_all_variables)
        message(STATUS "print_all_variables------------------------------------------{")
        get_cmake_property(_variableNames VARIABLES)
        foreach (_variableName ${_variableNames})
            message(STATUS "${_variableName}=${${_variableName}}")
        endforeach()
        message(STATUS "print_all_variables------------------------------------------}")
    endmacro()
    




     

  • こんにちは。NoMaYです。

    昨日のCMakeファイル(GNURX+VSCode)をCC-RX+VSCode向けに作ろうとしているのですけれど、最終的に望ましいのは以下のフォルダにルネサスコンパイラ(CC-RX/CC-RL/CC-RH)向け定義ファイルが追加されることですね、、、どなたかやろうとされているかなぁ?、、、

    gitlab.kitware.com/cmake/cmake/-/tree/master/Modules/Compiler

    [関連リンク]

    gitlab.kitware.com/cmake/cmake/-/merge_requests

    gitlab.kitware.com/cmake/cmake/-/issues