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です。

    > 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
     

  • NoMaYさん

    こんにちは、シェルティです。

    あけましておめでとうございます。また本年度もいろいろと情報交換させていただけますと幸いです。

    さてCMakeについてですがまだCMake公式にRXコンパイラ用ファイルを追加してもらう計画はないですね。この機に提案してみます。実は社内GitLabでもRX Driver Package のテストシステムはCMakeでビルド(CC-RX、GCC、IAR)しておりましてCMakeのコミュニティにコミットする材料は整っています。

    NoMaYさんに多大なご協力をいただいたAmazon FreeRTOS移植活動においても、オープンソースコミュニティにコミットしていく意義をMCU界隈の関係者に布教することもできてきました。Linux関係者と違いMCU関係者の間では、Amazon FreeRTOSの活動前までGitHubのプルリクエストってなんだ?というような状態でしたが、Amazon FreeRTOS本家にRXファミリのコードが取り込まれてOSと結合された状態で常に最新版でAWSにて動作検証される、ということが実体験として共有でき実ビジネスにも響いています。

    CMakeもただしく予算化して人を割り当てる提案ができれば、公式にコミットしていくことも可能と思います。その提案にCMake対応することによるビジネス可能性をうまく表現できれば、と思案中です。Amazon FreeRTOSやAzure RTOSなどの著名OSがCMakeを採用しており、MCUベンダ毎の依存コードもCMakeでコンポーネントとしてビルドできる状態でgit submoduleでリンクさせる、という形式がテンプレート化してきており、MCUベンダ側のソフトウェアパッケージ(Flexible Software PackageやRX Driver Package など)もCMakeに対応していないとオープンソースとの組み合わせビルドが困難になり世の中から取り残される、故にCMake対応は必須である、というような提案を書きつつあります。

    引き続き相談させていただけますと幸いです。

    以上です

  • シェルティさん、こんにちは。NoMaYです。#今年も宜しくお願いします。

    人員確保/予算確保は少しまだ先な感じですね。今しばらくはCMakeとCC-RX/CC-RL/CC-RHのことを調べてみようと思いました。ところで、ルネサスさんの社内GitLabのRX Driver Package のテストシステムのCMakeなのですが、先日私が気付いた、ルネサスコンパイラ向け定義ファイルをModules/Compiler/フォルダに追加するやり方のものでしょうか?もしもそうであれば、(ルネサス社としてさっと公開するのは難儀な話なのは分かった上でダメモトですけれど)かふぇルネでリプライに添付するなどで見せて頂くことは出来ますか?(何と言いますか、私は、ゼロから作ることを誇る派ではなく、既にあるものに積み上げることを尊ぶ派(最終的に原型が残ってなくても)なので、その話を聞いて無関心でいられないところでしたので。)(確認してみましたが、GitHubのルネサスさんのRX Driver Packageのリポジトリの中にはCMakeLists.txtや*.cmakeは無かったです。社内システムとのことでしたので無いとは思っていましたけれども。)

  • こんにちは。NoMaYです。

    > > ルネサスコンパイラ(CC-RX/CC-RL/CC-RH)向け定義ファイル
    > IARさんのコンパイラ向けの定義ファイルが既に存在しますので、それを手本にして作成するのが良いですかね、、、

    どうも思うように動いてくれないので調べていたら、Azure RTOSのARM Cortexのサンプルコードで、GNUARMとEWARMのCMakeファイルの記述の違いが、私が思い込んでいたものの斜め上をいく違いでした。互換性が良くないのかな?、、、

    GNUARMの場合 (赤文字箇所の部分も含めてGNURXの場合のスタイルと同様)

    getting-started\cmake\arm-gcc-cortex-toolchain.cmake

    # Copyright (c) Microsoft Corporation.
    # Licensed under the MIT License.

    set(CMAKE_SYSTEM_NAME Generic)

    set(TARGET_TRIPLET "arm-none-eabi-")

    # default to Debug build
    if(NOT CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release." FORCE)
    endif()

    # do some windows specific logic
    if(WIN32)
        set(TOOLCHAIN_EXT ".exe")
    else()
        set(TOOLCHAIN_EXT "")
    endif(WIN32)

    find_program(COMPILER_ON_PATH "${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT}")

    if(DEFINED ENV{ARM_GCC_PATH})
        # use the environment variable first    
        file(TO_CMAKE_PATH $ENV{ARM_GCC_PATH} ARM_TOOLCHAIN_PATH)
        message(STATUS "Using ENV variable ARM_GCC_PATH = ${ARM_TOOLCHAIN_PATH}")
    elseif(COMPILER_ON_PATH)
        # then check on the current path
        get_filename_component(ARM_TOOLCHAIN_PATH ${COMPILER_ON_PATH} DIRECTORY)
        message(STATUS "Using ARM GCC from path = ${ARM_TOOLCHAIN_PATH}")
    else()
        message(FATAL_ERROR "Unable to find ARM GCC. Either add to your PATH, or define ARM_GCC_PATH to the compiler location")
    endif()

    # Perform compiler test with the static library
    set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

    set(CMAKE_C_COMPILER    ${ARM_TOOLCHAIN_PATH}/${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT})
    set(CMAKE_CXX_COMPILER  ${ARM_TOOLCHAIN_PATH}/${TARGET_TRIPLET}g++${TOOLCHAIN_EXT})
    set(CMAKE_ASM_COMPILER  ${ARM_TOOLCHAIN_PATH}/${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT})
    set(CMAKE_LINKER        ${ARM_TOOLCHAIN_PATH}/${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT})
    set(CMAKE_SIZE_UTIL     ${ARM_TOOLCHAIN_PATH}/${TARGET_TRIPLET}size${TOOLCHAIN_EXT})
    set(CMAKE_OBJCOPY       ${ARM_TOOLCHAIN_PATH}/${TARGET_TRIPLET}objcopy${TOOLCHAIN_EXT})
    set(CMAKE_OBJDUMP       ${ARM_TOOLCHAIN_PATH}/${TARGET_TRIPLET}objdump${TOOLCHAIN_EXT})
    set(CMAKE_NM_UTIL       ${ARM_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 "-g3 --specs=nano.specs -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -fshort-enums -Wall -Wextra -Wuninitialized -Wmaybe-uninitialized -Wshadow -Wdouble-promotion -Werror -Wno-unused-parameter")
    set(CMAKE_C_FLAGS     "${MCPU_FLAGS} ${VFP_FLAGS} ${CMAKE_COMMON_FLAGS}")
    set(CMAKE_CXX_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS} ${CMAKE_COMMON_FLAGS}")
    set(CMAKE_ASM_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS} ${CMAKE_COMMON_FLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${LD_FLAGS} -fno-common -Wl,--gc-sections,-print-memory-usage")

    set(CMAKE_C_FLAGS_DEBUG "-O0")
    set(CMAKE_CXX_ASM_FLAGS_DEBUG "-O0")
    set(CMAKE_ASM_FLAGS_DEBUG "")

    set(CMAKE_C_FLAGS_RELEASE "-Os")
    set(CMAKE_CXX_FLAGS_RELEASE "-Os")
    set(CMAKE_ASM_FLAGS_RELEASE "")

     
    EWARMの場合 (特に赤文字箇所の部分がGNURXの場合のスタイルと異なるのは想定外)

    getting-started\cmake\arm-iar-cortex-toolchain.cmake

    set(CMAKE_SYSTEM_NAME Generic)

    # Set the EW installation root directory
    set(EWARM_ROOT_DIR "C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.4/arm")

    # default to Debug build
    if(NOT CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release." FORCE)
    endif()

    # Set up the CMake variables for compiler and assembler
    set(CMAKE_C_COMPILER "${EWARM_ROOT_DIR}/bin/iccarm.exe" "${CPU_FLAGS} -e")
    set(CMAKE_CXX_COMPILER "${EWARM_ROOT_DIR}/bin/iccarm.exe" "${CPU_FLAGS} --c++")
    set(CMAKE_ASM_COMPILER "${EWARM_ROOT_DIR}/bin/iasmarm.exe" "${CPU_FLAGS}")

    set(CMAKE_C_LINK_FLAGS "--semihosting")
    set(CMAKE_CXX_LINK_FLAGS "--semihosting")

    set(CMAKE_C_FLAGS_DEBUG_INIT "-On")
    set(CMAKE_CXX_FLAGS_DEBUG_INIT "-On")

     

  • こんにちは。NoMaYです。

    以下のアプリケーションノートでは、幾らか無理をしてソースファイルとヘッダファイルの依存関係情報(CC-RXに生成させたもの)をCMake(というかCMakeが生成するmakefile)に認識させようとしているのですが、CMake自体に依存関係を認識する機能があったようですね。そのものズバリのドキュメントには辿り付けていないのですが、たまたま気付いた以下のissueにそれらしき記載がありましたね。(もちろん、コンパイラが生成した依存関係情報を使う方が、正確さの点で勝りますけれど。)

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

    Oct 16, 2020 11:33pm GMT+0900
    [ENH] Compilation: Source file dependencies managment
    gitlab.kitware.com/cmake/cmake/-/issues/21321

    For Makefiles generators family, the dependencies are identified by CMake itself.

  • こんにちは。NoMaYです。

    > …最終的に望ましいのは以下のフォルダにルネサスコンパイラ(CC-RX/CC-RL/CC-RH)向け定義ファイルが追加されることですね…
    gitlab.kitware.com/cmake/cmake/-/tree/master/Modules/Compiler

    以下のように記述すると、CMakeインストールフォルダ側に定義ファイルを置かずとも、一時しのぎ的にプロジェクトフォルダ側に定義ファイルを置けますね。

    記述例:

    tb_rx65n/cmake/renesas-rx-ccrx-toolchain.cmake

    set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Modules")

     
    参照される定義ファイルの例:

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

    [関連リンク]

    cmake.org/cmake/help/latest/variable/CMAKE_MODULE_PATH.html
    cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html

    cmake.org/cmake/help/latest/manual/cmake-variables.7.html