”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。
こんにちは。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です。Azure RTOSですが、前の投稿の件をひとまず応急処置して先を続けたところ、今度は、以下のアセンブルエラーが発生してしまいました。これは何だろう、と考えを巡らせて思い至ったのですが、以前に投稿したasrx.exeのサブコマンドファイルの内部処理のバッファ管理の不具合で、サブコマンドファイル中の -include オプションが途中で切れて -in オプションを指定されたものだと勘違いされてアセンブルエラーになってしまっているのではないかと推測されます。
F0553103:Option 'in' is not appropriate
以下、画面コピーです。
こんにちは。NoMaYです。CC-RXのアセンブラ(asrx.exe)のサブコマンドファイルの内部処理のバッファ管理の不具合の件ですが、サブコマンドファイルの内容を、スペースで区切るのでは無く、改行で区切るようCMakeが生成したサブコマンドファイルを小細工すると回避出来ることに気付きました。(そのことに気付いた今は、本件は、ヘルプ未記載のサブコマンドファイルの1行の長さの制限によるものだった、ということなのかなぁ、という気がしてきています。)ということで、いつものようにラッパースクリプト(今回はアセンブララッパースクリプト)で対処することにします。
こんにちは。NoMaYです。それから、CC-RXのアセンブラ(asrx.exe)では値指定のないシンボル定義がエラーになってしまう、という件(仕様)も同様にアセンブララッパースクリプトで小細工して対処することにします。(CC-RL/RHでは、そのようなシンボルでは値を1とする、という仕様になっているのですが、そうなるようアセンブララッパースクリプトで小細工してみます。)ですので、応急処置としてAzure RTOS側のMCU/MPU/コンパイラで共通だったCMakeLists.txtファイルの幾つかを以下のようにしていましたが、そうしなくても済むようにしてみます。getting-started/shared/lib/threadx/CMakeLists.txt
if(CMAKE_C_COMPILER_ID STREQUAL RENESAS) target_compile_definitions(${PROJECT_NAME} PUBLIC $<$<COMPILE_LANGUAGE:C>:TX_INCLUDE_USER_DEFINE_FILE>) target_compile_definitions(${PROJECT_NAME} PUBLIC $<$<COMPILE_LANGUAGE:ASM>:TX_INCLUDE_USER_DEFINE_FILE=1>)else() target_compile_definitions(${PROJECT_NAME} PUBLIC "TX_INCLUDE_USER_DEFINE_FILE" )endif()
getting-started/shared/lib/netxduo/CMakeLists.txt
if(CMAKE_C_COMPILER_ID STREQUAL RENESAS) target_compile_definitions(${PROJECT_NAME} PUBLIC $<$<COMPILE_LANGUAGE:C>:NX_INCLUDE_USER_DEFINE_FILE>) target_compile_definitions(${PROJECT_NAME} PUBLIC $<$<COMPILE_LANGUAGE:ASM>:NX_INCLUDE_USER_DEFINE_FILE=1>)else() target_compile_definitions(${PROJECT_NAME} PUBLIC "NX_INCLUDE_USER_DEFINE_FILE" )endif()
getting-started/shared/lib/jsmn/CMakeLists.txt
if(CMAKE_C_COMPILER_ID STREQUAL RENESAS) target_compile_definitions(${TARGET} PUBLIC $<$<COMPILE_LANGUAGE:C>:JSMN_HEADER> $<$<COMPILE_LANGUAGE:ASM>:JSMN_HEADER=1> )else() target_compile_definitions(${TARGET} PUBLIC JSMN_HEADER )endif()
以下、CC-RX/RL/RHのヘルプのシンボル定義オプションの画面コピーです。CC-RXCC-RLCC-RH
こんにちは。NoMaYです。実は既にアセンブララッパースクリプトでやっている小細工ですが、CC-RXのアセンブラ(asrx.exe)向けに-listfile=オプションの仕様を少し拡張しています。CC-RXでは、CC-RL/RHとは異なり、相対パスor絶対パスでファイル名を指定しなければならない(つまりディレクトリ名の指定は出来ない)のですが、CMakeの以下の記法においては、アセンブルされるソースファイル名を表す記法が存在しておらず(ちなみにコンパイルされるソースファイル名を表す記法も存在していません)、そのままでは-listfile=オプションにリストファイルの相対パスor絶対パスの何らかのファイル名を合成して記述することがすることが出来ません。そこで、アセンブララッパースクリプトで小細工して、以下の赤文字箇所のようにディレクトリ名を記述出来るようにしています。
set(CMAKE_C_FLAGS "-isa=rxv2 -goptimize -type_size_access_to_volatile -outcode=utf8 -debug -g_line -utf8 -nomessage=21644,20010,23034,23035,20177,23033")set(CMAKE_ASM_FLAGS "-isa=rxv2 -goptimize -debug -utf8")set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -listfile=.")set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -listfile=.")
add_compile_options( # Somehow space-separated flags cannot be used in the generator expression.$<$<COMPILE_LANGUAGE:C>:-isa=rxv2>$<$<COMPILE_LANGUAGE:C>:-goptimize>$<$<COMPILE_LANGUAGE:C>:-type_size_access_to_volatile>$<$<COMPILE_LANGUAGE:C>:-outcode=utf8>$<$<COMPILE_LANGUAGE:C>:-debug>$<$<COMPILE_LANGUAGE:C>:-g_line>$<$<COMPILE_LANGUAGE:C>:-utf8>$<$<COMPILE_LANGUAGE:C>:-nomessage=21644,20010,23034,23035,20177,23033>$<$<COMPILE_LANGUAGE:ASM>:-isa=rxv2>$<$<COMPILE_LANGUAGE:ASM>:-goptimize>$<$<COMPILE_LANGUAGE:ASM>:-debug>$<$<COMPILE_LANGUAGE:ASM>:-utf8>$<$<COMPILE_LANGUAGE:C>:-listfile=.>$<$<COMPILE_LANGUAGE:ASM>:-listfile=.>)
target_compile_options(tb_rx65n PRIVATE$<$<COMPILE_LANGUAGE:C>:-isa=rxv2 -goptimize -type_size_access_to_volatile -outcode=utf8 -debug -g_line -utf8 -nomessage=21644,20010,23034,23035,20177,23033>$<$<COMPILE_LANGUAGE:ASM>:-isa=rxv2 -goptimize -debug -utf8>$<$<COMPILE_LANGUAGE:C>:-listfile=.>$<$<COMPILE_LANGUAGE:ASM>:-listfile=.>)
以下、CC-RX/RL/RHのヘルプのアセンブルリスト指定オプションの画面コピーです。CC-RX (なお、-listfileのみの場合、ビルドフォルダ(カレントフォルダ)側では無く、ソースフォルダ側に、作成されます)CC-RLCC-RH
こんにちは。NoMaYです。CC-RXのアセンブラ(asrx.exe)の件(サブコマンドファイルの1行の長さの制限(?)の件と値指定のないシンボル定義がエラーになってしまう仕様の件)への対処を反映させました(+αと)。ファイル一式を以下のzipファイルに固めました。CMakeへのパッチを含んでいますが、パッチはCMakeのインストールフォルダにファイルをコピーする必要が無いようにしました。今回も(あと少しの間は?)、かなり長い名前のファイルやフォルダが含まれていますので、パスの深いフォルダで解凍すると解凍出来ないといったことがあると思います(今回もデフォルトでのビルド時は除外する設定としました。)CMake_Ninja_XXSC_CCXX_examples_20220621.zip
こんにちは。NoMaYです。Azure RTOSのMicrosoftさんのCMakeスクリプトでも、以前に投稿したFreeRTOS with IoT librariesのAWSさんのCMakeスクリプトの場合と同様に、同じライブラリを重複してリンクしようとするのでrlinkでライブラリ重複ワーニングが出る、ということが起きてますね。(CMakeだとそういうことが起こり易いとか?) なので同様に、ワーニングをrlinkオプションで抑止するようにしてみます。以下、画面コピーです。(といっても、Windowsのコマンドプロンプトの画面コピーですが。)
こんにちは。NoMaYです。GitHubのMicrosoftさんのAzure RTOSのリポジトリから(2022/05/25に)cloneしたソースでCMakeでリンクの最後までは辿り着くようにパッチを当てたファイルを以下のzipファイルに固めました。(CC-RX V3.04の無償評価版で試している都合で、サイズ制限によりリンクエラーになりますので、そこまで、ですけれども。動くかどうかはやってみないと、、、です。) 以下はビルドに必要なファイルの全てではありません。cloneしたフォルダに上書きするファイルです。(なおオレンジ色文字行のフォルダは上書きせずに無視しても構いません。) cloneした他のファイルも別途必要です。Microsoft_GitHub_AzureRTOS_20220525_20220623.zip
getting-started\cmake\renesas-rx-ccrx-toolchain.cmake (CC-RX版:追加)getting-started\cmake\renesas-rx-ccrx-rx65n.cmake (CC-RX版:追加)getting-started\cmake\utilities.cmake (変更)getting-started\cmake\utilities.org.cmake (変更前:比較参照用)getting-started\cmake\cmake-3.23.1-patch\…省略… (中身はCMake_Ninja_XXSC_CCXX_examples_20220621.zipのものと同一)getting-started\Renesas\RSK_RX65N_2MB\…省略… (GNURX版:未変更:比較参照用:なお上書きせずに無視しても構いません)getting-started\Renesas\RSK_RX65N_2MB_CCRX\CMakeLists.gnurx.txt (GNURX版:未変更:比較参照用)getting-started\Renesas\RSK_RX65N_2MB_CCRX\CMakeLists.txt (CC-RX版)getting-started\Renesas\RSK_RX65N_2MB_CCRX\readme.md (未変更)getting-started\Renesas\RSK_RX65N_2MB_CCRX\.vscode\cmake-kits.json (CC-RX版:未確認)getting-started\Renesas\RSK_RX65N_2MB_CCRX\app\…ソース省略…getting-started\Renesas\RSK_RX65N_2MB_CCRX\app\CMakeLists.gnurx.txt (GNURX版:未変更:比較参照用)getting-started\Renesas\RSK_RX65N_2MB_CCRX\app\CMakeLists.txt (CC-RX版)getting-started\Renesas\RSK_RX65N_2MB_CCRX\app\.vscode\cmake-kits.json (CC-RX版:未確認)getting-started\Renesas\RSK_RX65N_2MB_CCRX\app\startup\ccrx\linker_command.sub (CC-RX版:追加:セクション設定用)getting-started\Renesas\RSK_RX65N_2MB_CCRX\app\startup\ccrx\…ソース省略…getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\CMakeLists.txt (未変更)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\netxduo\…ソース省略…getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\netx_driver\CMakeLists.txt (未変更)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\netx_driver\LICENSE.txt (未変更)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\netx_driver\LICENSED-HARDWARE.txt (未変更)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\netx_driver\src\…ソース省略…getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\rx_driver_package\CMakeLists.gnurx.txt (GNURX版:未変更:比較参照用)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\rx_driver_package\CMakeLists.txt (CC-RX版)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\rx_driver_package\RSK_RX65N_2MB.gnurx.scfg (GNURX版:未変更:比較参照用)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\rx_driver_package\RSK_RX65N_2MB.scfg (CC-RX版)getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\rx_driver_package\.settings\…ファイル省略…getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\rx_driver_package\src\smc_gen\…ソース省略…getting-started\Renesas\RSK_RX65N_2MB_CCRX\lib\threadx\…ソース省略…getting-started\Renesas\RSK_RX65N_2MB_CCRX\projects\e2studio\.project (未変更)getting-started\Renesas\RSK_RX65N_2MB_CCRX\projects\e2studio\rsk_rx65n_2mb DebugOnly.launch (CC-RX版:未確認)getting-started\Renesas\RSK_RX65N_2MB_CCRX\tools\rebuild.gnurx.bat (GNURX版:未変更:比較参照用)getting-started\Renesas\RSK_RX65N_2MB_CCRX\tools\rebuild.bat (CC-RX版)getting-started\Renesas\RSK_RX65N_2MB_CCRX\tools\r_build.bat (CC-RX版:追加:作業用)getting-started\Renesas\RSK_RX65N_2MB_CCRX\tools\r_configure.bat (CC-RX版:追加:作業用)getting-started\shared\lib\netxduo\ports\rxv2\ccrx\CMakeLists.txt (CC-RX版:追加)getting-started\shared\lib\threadx\ports\rxv2\ccrx\CMakeLists.txt (CC-RX版:追加)
以下、RSK-RX65N 2MBのCC-RXの場合のToolchainファイル及び関連ファイルとCMakeLists.txtです。getting-started\cmake\renesas-rx-ccrx-toolchain.cmake
# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake-3.23.1-patch/Modules") set(CMAKE_SYSTEM_NAME Generic) #set(CMAKE_SYSTEM_PROCESSOR RX) # Do not set. The variable is reserved for future use and the value may change in the future. #set(CMAKE_SYSTEM_ARCH RXv2) # Do not set. The variable is reserved for future use and the value may change in the future. # 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 "ccrx${TOOLCHAIN_EXT}") if(DEFINED ENV{RX_CCRX_PATH}) # use the environment variable first file(TO_CMAKE_PATH $ENV{RX_CCRX_PATH} RX_TOOLCHAIN_PATH) message(STATUS "Using ENV variable RX_CCRX_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 CC-RX from path = ${RX_TOOLCHAIN_PATH}") else() message(FATAL_ERROR "Unable to find CC-RX. Either add to your PATH, or define RX_CCRX_PATH to the compiler location") endif() find_program(XCONV_ON_PATH "renesas_cc_converter${TOOLCHAIN_EXT}") if(DEFINED ENV{RX_XCONV_PATH}) # use the environment variable first file(TO_CMAKE_PATH $ENV{RX_XCONV_PATH} RX_EXTERNAL_TOOLCHAIN_PATH) message(STATUS "Using ENV variable RX_XCONV_PATH = ${RX_EXTERNAL_TOOLCHAIN_PATH}") elseif(COMPILER_ON_PATH) # then check on the current path get_filename_component(RX_EXTERNAL_TOOLCHAIN_PATH ${XCONV_ON_PATH} DIRECTORY) message(STATUS "Using e2 studio's X Converter from path = ${RX_TOOLCHAIN_PATH}") else() # not found message(NOTICE "Warning: Unable to find e2 studio's X Converter. Either add to your PATH, or define RX_XCONV_PATH to the converter location\n" "Debugging with RX GDB is not available when the converter is not executed." ) endif() set(CMAKE_C_COMPILER ${RX_TOOLCHAIN_PATH}/ccrx${TOOLCHAIN_EXT}) set(CMAKE_CXX_COMPILER ${RX_TOOLCHAIN_PATH}/ccrx${TOOLCHAIN_EXT}) set(CMAKE_ASM_COMPILER ${RX_TOOLCHAIN_PATH}/asrx${TOOLCHAIN_EXT}) set(CMAKE_RENESAS_XCONVERTER ${RX_TOOLCHAIN_PATH}renesas_cc_converter${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_C_FLAGS "${CPU_FLAGS} -nostuff=B -nomessage=21644,20010,23034,23035,20177,23033 -debug -g_line -goptimize") # -type_size_access_to_volatile set(CMAKE_C_FLAGS "${CPU_FLAGS} -nostuff=B -nomessage -debug -g_line -goptimize") # -type_size_access_to_volatile set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") set(CMAKE_ASM_FLAGS "${CPU_FLAGS} -debug -goptimize") set(CMAKE_LBG_FLAGS "-head=runtime,math,mathf,stdarg,stdio,stdlib,string,new") set(CMAKE_EXE_LINKER_FLAGS "-vect=_undefined_interrupt_source_isr -debug -optimize=symbol_delete -nomessage=1010,1320,0004,0101")
# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # Define the CPU architecture for Threadx set(THREADX_ARCH "rxv2") set(THREADX_TOOLCHAIN "ccrx") # Compiler flags needed to compile for this CPU set(CPU_FLAGS "-isa=rxv2") include(${CMAKE_CURRENT_LIST_DIR}/renesas-rx-ccrx-toolchain.cmake)
# 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) elseif(CMAKE_C_COMPILER_ID STREQUAL "RENESAS") add_custom_target(${TARGET}.bin ALL DEPENDS ${TARGET} COMMAND ${CMAKE_LINKER} -nologo ${TARGET}.abs -form=bin=${TARGET}.bin) 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") elseif(CMAKE_C_COMPILER_ID STREQUAL "RENESAS") target_link_options(${TARGET} PRIVATE -subcommand=${LINKER_SCRIPT}) target_link_options(${TARGET} PRIVATE -list=${TARGET}.map -show=all -total_size) 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()
# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. cmake_minimum_required(VERSION 3.13 FATAL_ERROR) set(CMAKE_C_STANDARD 99) set(GSG_BASE_DIR ${CMAKE_SOURCE_DIR}/../..) set(SHARED_SRC_DIR ${GSG_BASE_DIR}/shared/src) set(SHARED_LIB_DIR ${GSG_BASE_DIR}/shared/lib) # use the repo version of ninja on Windows as there is no Ninja installer if(WIN32) set(CMAKE_MAKE_PROGRAM ${GSG_BASE_DIR}/cmake/ninja CACHE STRING "Ninja location") endif() # Set the toolchain if not defined if(NOT CMAKE_TOOLCHAIN_FILE) set(CMAKE_TOOLCHAIN_FILE "${GSG_BASE_DIR}/cmake/renesas-rx-ccrx-rx65n.cmake.cmake") endif() include(${GSG_BASE_DIR}/cmake/utilities.cmake) # Define the Project project(rx65n_azure_iot C ASM) add_subdirectory(${SHARED_SRC_DIR} shared_src) add_subdirectory(lib) add_subdirectory(app)
こんにちは。NoMaYです。FreeRTOS with IoT librariesとAzure RTOSでリンク時に発生するワーニングを抑止するのに以下のオプションを指定するようにしたのですが、今しがた唐突に気付いたのは、指定するオプションが不適切だった、ことでした。不適切:
-nomessage=1010,1320,0004,0101 抑止したかったのは前の2つだけれども後の2つが副作用で意に反して表示されるので追加した
こうすべきだった:
-change_message=information=1010,1320
完全にうっかりしていました。すみません。