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
 

Parents
  • こんにちは。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()
    




     

Reply
  • こんにちは。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()
    




     

Children
No Data