diff --git a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst index 8d8c9c85bb..1efbf1c5fb 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst @@ -253,6 +253,23 @@ These identifiers are used when :variable:`CMAKE__COMPILER_ID` is ``V850`` Renesas Electronics V850 32-bit +Renesas Compiler Platforms +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. versionadded:: 4.1 + +These identifiers are used when :variable:`CMAKE__COMPILER_ID` is +``Renesas``. + +``RH850`` + Renesas Electronics RH850 + +``RL78`` + Renesas Electronics RL78 + +``RX`` + Renesas Electronics RX + TASKING Platforms ^^^^^^^^^^^^^^^^^ diff --git a/Help/variable/CMAKE_LANG_COMPILER_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ID.rst index bed7dc2042..365e1d0217 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ID.rst @@ -42,6 +42,7 @@ Value Name ``PGI`` The Portland Group ``PathScale`` PathScale ``QCC`` QNX C/C++ compiler +``Renesas`` `Renesas Compiler`_ ``SCO`` SCO OpenServer/UnixWare C/C++ Compiler ``SDCC`` `Small Device C Compiler`_ ``SunPro`` Oracle Developer Studio @@ -70,6 +71,7 @@ languages. .. _NVIDIA CUDA Compiler: https://developer.nvidia.com/cuda-llvm-compiler .. _Open Watcom: https://open-watcom.github.io .. _OrangeC Compiler: https://github.com/LADSoft/OrangeC +.. _Renesas Compiler: https://www.renesas.com .. _Small Device C Compiler: https://sdcc.sourceforge.net .. _Tiny C Compiler: https://bellard.org/tcc .. _Tasking Compiler Toolsets: https://www.tasking.com diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in index ae53f91bc2..c79362e1bc 100644 --- a/Modules/CMakeCCompilerId.c.in +++ b/Modules/CMakeCCompilerId.c.in @@ -48,7 +48,7 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; # define C_STD __STDC_VERSION__ #endif -#if !defined(__STDC__) && !defined(__clang__) +#if !defined(__STDC__) && !defined(__clang__) && !defined(__RENESAS__) # if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) # define C_VERSION "90" # else @@ -70,7 +70,7 @@ const char* info_language_standard_default = const char* info_language_extensions_default = "INFO" ":" "extensions_default[" #if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ + defined(__TI_COMPILER_VERSION__) || defined(__RENESAS__)) && \ !defined(__STRICT_ANSI__) "ON" #else diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in index 5287e50cab..4d78c2abf8 100644 --- a/Modules/CMakeCXXCompilerId.cpp.in +++ b/Modules/CMakeCXXCompilerId.cpp.in @@ -108,7 +108,7 @@ const char* info_language_standard_default = "INFO" ":" "standard_default[" const char* info_language_extensions_default = "INFO" ":" "extensions_default[" #if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ + defined(__TI_COMPILER_VERSION__) || defined(__RENESAS__)) && \ !defined(__STRICT_ANSI__) "ON" #else diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake index aae3847c24..68182b8b69 100644 --- a/Modules/CMakeCompilerIdDetection.cmake +++ b/Modules/CMakeCompilerIdDetection.cmake @@ -68,6 +68,7 @@ function(compiler_id_detection outvar lang) GHS Tasking OrangeC + Renesas ) if ("x${lang}" STREQUAL "xC") list(APPEND ordered_compilers diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake index 7e0dffad35..5f72d2f8fc 100644 --- a/Modules/CMakeDetermineASMCompiler.cmake +++ b/Modules/CMakeDetermineASMCompiler.cmake @@ -161,6 +161,10 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_Tasking "--version") set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_Tasking "TASKING") + list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS Renesas) + set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_Renesas "-v") + set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_Renesas "(RX Family C/C\\+\\+ Compiler)|(RL78 Family Compiler)|(RH850 Family Compiler)") + include(CMakeDetermineCompilerId) set(userflags) CMAKE_DETERMINE_COMPILER_ID_VENDOR(ASM${ASM_DIALECT} "${userflags}") @@ -189,6 +193,10 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) set(CMAKE_ASM${ASM_DIALECT}_COMPILER_FRONTEND_VARIANT "GNU") endif() set(_variant " with ${CMAKE_ASM${ASM_DIALECT}_COMPILER_FRONTEND_VARIANT}-like command-line") + elseif("x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xRenesas") + string(REGEX MATCH "[A-Za-z0-9]+ Family (C/C\\+\\+ )*Compiler [V|E][0-9|.]+" _compiler_id "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT}") + string(REGEX MATCH "R[A-Za-z0-9]+" CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID "${_compiler_id}") + string(REGEX MATCH "V[0-9|.]+" CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION "${_compiler_id}") endif() _cmake_find_compiler_sysroot(ASM${ASM_DIALECT}) @@ -208,6 +216,8 @@ if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) endif() if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xIAR") set(_archid " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}") + elseif(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xRenesas") + set(_archid " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID} Family Assembler") else() set(_archid "") endif() diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 85c9754725..2b7d797920 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -386,6 +386,25 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src) endif() if(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIAR") set(_archid " ${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}") + elseif(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xRenesas") + # Architecture is "RH850", "RL78" or "RX", compiler name to show is "CC-RH", "CC-RL" or "CC-RX" + string(SUBSTRING ${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID} 0 2 _archid) + set(_archid " CC-${_archid}") + # Detected compiler version is in the form as "3.2.1", show it as "3.02.01" according to the compiler's document. + string(REPLACE "." ";" _version_list ${_version}) + list(GET _version_list 0 _version) + foreach(_i RANGE 1 2) + list(GET _version_list ${_i} _minor) + string(LENGTH ${_minor} _minor_len) + if (${_minor_len} EQUAL 1) + set(_minor "0${_minor}") + endif() + string(APPEND _version ".${_minor}") + unset(_minor) + unset(_minor_len) + endforeach() + string(REPLACE " " " V" _version ${_version}) + unset(_version_list) else() set(_archid "") endif() diff --git a/Modules/CMakePlatformId.h.in b/Modules/CMakePlatformId.h.in index 24c85674c1..1504d04c66 100644 --- a/Modules/CMakePlatformId.h.in +++ b/Modules/CMakePlatformId.h.in @@ -274,6 +274,20 @@ # define ARCHITECTURE_ID "" # endif +#elif defined(__RENESAS__) +# if defined(__CCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__CCRL__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__CCRH__) +# define ARCHITECTURE_ID "RH850" + +# else +# define ARCHITECTURE_ID "" +# endif + #else # define ARCHITECTURE_ID #endif diff --git a/Modules/Compiler/Renesas-ASM.cmake b/Modules/Compiler/Renesas-ASM.cmake new file mode 100644 index 0000000000..34ce638b72 --- /dev/null +++ b/Modules/Compiler/Renesas-ASM.cmake @@ -0,0 +1,13 @@ + +include(Compiler/Renesas) +__compiler_renesas(ASM) + +if(CMAKE_ASM_COMPILER_ARCHITECTURE_ID STREQUAL "RX") + set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS src;SRC;s;S) +elseif(CMAKE_ASM_COMPILER_ARCHITECTURE_ID STREQUAL "RL78") + set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm;ASM;s;S) +elseif(CMAKE_ASM_COMPILER_ARCHITECTURE_ID STREQUAL "RH850") + set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm;ASM;s;S) +else() + message(FATAL_ERROR "Architecture for Renesas compiler: ${CMAKE_ASM_COMPILER_ARCHITECTURE_ID} is not supported.") +endif() diff --git a/Modules/Compiler/Renesas-C-FeatureTests.cmake b/Modules/Compiler/Renesas-C-FeatureTests.cmake new file mode 100644 index 0000000000..d2b27c61b3 --- /dev/null +++ b/Modules/Compiler/Renesas-C-FeatureTests.cmake @@ -0,0 +1,14 @@ + +set(_cmake_oldestSupported "((__RENESAS_VERSION__ >> 24 & 0xFF)) >= 1") + + +set(Renesas_C11 "${_cmake_oldestSupported} && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L") +set(Renesas_C99 "${_cmake_oldestSupported} && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L") + +set(_cmake_feature_test_c_std_99 "${Renesas_C99}") +set(_cmake_feature_test_c_restrict "${Renesas_C99}") +set(_cmake_feature_test_c_variadic_macros "${Renesas_C99}") + +set(Renesas_C90 "${_cmake_oldestSupported}") +set(_cmake_feature_test_c_std_90 "${Renesas_C90}") +set(_cmake_feature_test_c_function_prototypes "${Renesas_C90}") diff --git a/Modules/Compiler/Renesas-C.cmake b/Modules/Compiler/Renesas-C.cmake new file mode 100644 index 0000000000..34aaebc29d --- /dev/null +++ b/Modules/Compiler/Renesas-C.cmake @@ -0,0 +1,10 @@ + +include(Compiler/Renesas) +__compiler_renesas(C) + +set(CMAKE_C90_STANDARD_COMPILE_OPTION "-lang=c") +set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-lang=c") +set(CMAKE_C99_STANDARD_COMPILE_OPTION "-lang=c99") +set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-lang=c99") + +__compiler_check_default_language_standard(C 1.0 90) diff --git a/Modules/Compiler/Renesas-CXX.cmake b/Modules/Compiler/Renesas-CXX.cmake new file mode 100644 index 0000000000..6b143741b1 --- /dev/null +++ b/Modules/Compiler/Renesas-CXX.cmake @@ -0,0 +1,3 @@ + +include(Compiler/Renesas) +__compiler_renesas(CXX) diff --git a/Modules/Compiler/Renesas-DetermineCompiler.cmake b/Modules/Compiler/Renesas-DetermineCompiler.cmake new file mode 100644 index 0000000000..5da8f28ff0 --- /dev/null +++ b/Modules/Compiler/Renesas-DetermineCompiler.cmake @@ -0,0 +1,7 @@ +set(_compiler_id_pp_test "defined(__RENESAS__)") + +set(_compiler_id_version_compute " +/* __RENESAS_VERSION__ = 0xVVRRPP00 */ +# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_HEX@(__RENESAS_VERSION__ >> 24 & 0xFF) +# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_HEX@(__RENESAS_VERSION__ >> 16 & 0xFF) +# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_HEX@(__RENESAS_VERSION__ >> 8 & 0xFF)") diff --git a/Modules/Compiler/Renesas.cmake b/Modules/Compiler/Renesas.cmake new file mode 100644 index 0000000000..fc738c4afc --- /dev/null +++ b/Modules/Compiler/Renesas.cmake @@ -0,0 +1,140 @@ + +include_guard() + +include(Compiler/CMakeCommonCompilerMacros) + +macro(__compiler_renesas lang) + + if(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID STREQUAL "RX") +# CC-RX + # Pass directly include and define flag to the assembler. + if ("${lang}" STREQUAL "ASM") + set(_ASM_PREFIX "-asmopt=") + endif() + set(CMAKE_INCLUDE_FLAG_${lang} "${_ASM_PREFIX}-include=") + set(CMAKE_${lang}_DEFINE_FLAG "${_ASM_PREFIX}-define=") + + set(CMAKE_LINK_LIBRARY_FLAG "-lnkopt=-library=") + set(CMAKE_${lang}_RESPONSE_FILE_FLAG "-subcommand=") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-lnkopt=" "") + + set(_RENESAS_DEBUG_FLAG "-debug") + if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 3.02) + string(APPEND _RENESAS_DEBUG_FLAG " -g_line") + endif() + + string(APPEND CMAKE_${lang}_FLAGS_INIT " ") + string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -optimize=0 ${_RENESAS_DEBUG_FLAG}") + string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG=1") + string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " ${_RENESAS_DEBUG_FLAG} ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG=1") + string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -size ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG=1") + + set(_PREP_OUT "-output=prep=") + set(_ASM_OUT "-output=src=") + set(_OBJ_OUT "-output=obj=") + set(_EXE_OUT "-output=abs=") + if ("${lang}" STREQUAL "ASM") + # Assembler dependency. + set(_DEP_OUT "${_ASM_PREFIX}-MM ${_ASM_PREFIX}-MT= ${_ASM_PREFIX}-MF=") + else() + # Compiler dependency. + set(_DEP_OUT "-MM -MT= -output=dep=") + endif() + + elseif(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID STREQUAL "RL78") +# CC-RL + # Pass directly include and define flag to the assembler. + if ("${lang}" STREQUAL "ASM") + set(_ASM_PREFIX "-asmopt=") + set(CMAKE_INCLUDE_FLAG_${lang} "${_ASM_PREFIX}-include=") + set(CMAKE_${lang}_DEFINE_FLAG "${_ASM_PREFIX}-define=") + endif() + + set(CMAKE_LINK_LIBRARY_FLAG "-lnkopt=-library=") + set(CMAKE_${lang}_RESPONSE_FILE_FLAG "-subcommand=") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-lnkopt=" "") + + set(_RENESAS_DEBUG_FLAG "-g") + if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 1.02) + string(APPEND _RENESAS_DEBUG_FLAG " -g_line") + endif() + + string(APPEND CMAKE_${lang}_FLAGS_INIT " ") + string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -Onothing ${_RENESAS_DEBUG_FLAG}") + string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG") + string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " ${_RENESAS_DEBUG_FLAG} ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG") + string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Osize ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG") + + set(_PREP_OUT "-P -o ") + set(_ASM_OUT "-S -o ") + set(_OBJ_OUT "-c -o ") + set(_EXE_OUT "-o ") + set(_DEP_OUT "-M -MT= -o ") + # Assembler dependency. -c is required to avoid to process to link + if ("${lang}" STREQUAL "ASM") + set(_DEP_OUT "-c ${_ASM_PREFIX}-MM ${_ASM_PREFIX}-MT= ${_ASM_PREFIX}-MF=") + endif() + + elseif(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID STREQUAL "RH850") +# CC-RH + set(CMAKE_LINK_LIBRARY_FLAG "-Xlk_option=-library=") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlk_option=" "") + # Pass directly include and define flag to the assembler. + if ("${lang}" STREQUAL "ASM") + set(_ASM_PREFIX "-Xasm_option=") + set(CMAKE_INCLUDE_FLAG_${lang} "${_ASM_PREFIX}-I") + set(CMAKE_${lang}_DEFINE_FLAG "${_ASM_PREFIX}-D") + endif() + + set(_RENESAS_DEBUG_FLAG "-g") + if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 1.05) + string(APPEND _RENESAS_DEBUG_FLAG " -g_line") + endif() + + string(APPEND CMAKE_${lang}_FLAGS_INIT " ") + string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -Onothing ${_RENESAS_DEBUG_FLAG}") + string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG") + string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " ${_RENESAS_DEBUG_FLAG} ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG") + string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Osize ${CMAKE_${lang}_DEFINE_FLAG}NDEBUG") + + set(_PREP_OUT "-P -o") + set(_ASM_OUT "-S -o") + set(_OBJ_OUT "-c -o") + set(_EXE_OUT "-o") + set(_DEP_OUT "-M -o") + # Assembler dependency. -c is required to avoid to process to link + if ("${lang}" STREQUAL "ASM") + set(_DEP_OUT "-c ${_ASM_PREFIX}-MM ${_ASM_PREFIX}-MT= ${_ASM_PREFIX}-MF=") + endif() + +# Otherwise, not supported architecture. + else() + message(FATAL_ERROR "Architecture for Renesas compiler: ${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID} is not supported.") + endif() + +# Common + set(CMAKE_EXECUTABLE_SUFFIX ".abs") + set(CMAKE_EXECUTABLE_SUFFIX_${lang} ".abs") + set(CMAKE_STATIC_LIBRARY_PREFIX "") + set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") + set(CMAKE_${lang}_DEPENDS_USE_COMPILER TRUE) + set(CMAKE_${lang}_DEPFILE_FORMAT custom) + # This is supported only when link process is called from driver. + set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "${CMAKE_${lang}_RESPONSE_FILE_FLAG}") + +# Compile commands + set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE " ${_PREP_OUT}") + set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE " ${_ASM_OUT}") + set(CMAKE_${lang}_COMPILE_OBJECT " ${_OBJ_OUT}") + set(CMAKE_${lang}_LINK_EXECUTABLE " ${_EXE_OUT}") + set(CMAKE_${lang}_DEPENDS_EXTRA_COMMANDS " ${_DEP_OUT}") + +# Link/Archive commands. Use rlink as the linker and archiver. + get_filename_component(_RENESAS_CC_PATH ${CMAKE_${lang}_COMPILER} DIRECTORY NO_CACHE) + set(_RLINK "\"${_RENESAS_CC_PATH}/rlink\"") + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "${_RLINK} -nologo -form=library -output= ") + set(CMAKE_${lang}_ARCHIVE_CREATE "${_RLINK} -nologo -form=library -output= ") + set(CMAKE_${lang}_ARCHIVE_APPEND "${_RLINK} -nologo -form=library -output= -library= ") + set(CMAKE_${lang}_ARCHIVE_FINISH "") + +endmacro() diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index c9becbe0b4..aa4e311b3d 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1390,3 +1390,7 @@ if(CMake_TEST_Diab_TOOLCHAINS) add_RunCMake_test(Diab -DCMake_TEST_Diab_TOOLCHAINS=${CMake_TEST_Diab_TOOLCHAINS}) set_property(TEST RunCMake.Diab APPEND PROPERTY LABELS "Diab") endif() +if (CMake_TEST_Renesas_TOOLCHAINS) + add_RunCMake_test(Renesas -DCMake_TEST_Renesas_TOOLCHAINS=${CMake_TEST_Renesas_TOOLCHAINS}) + set_property(TEST RunCMake.Renesas APPEND PROPERTY LABELS "Renesas") +endif() diff --git a/Tests/RunCMake/Renesas/CMakeLists.txt b/Tests/RunCMake/Renesas/CMakeLists.txt new file mode 100644 index 0000000000..955802cde9 --- /dev/null +++ b/Tests/RunCMake/Renesas/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 4.0) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Renesas/RunCMakeTest.cmake b/Tests/RunCMake/Renesas/RunCMakeTest.cmake new file mode 100644 index 0000000000..a27386e3f8 --- /dev/null +++ b/Tests/RunCMake/Renesas/RunCMakeTest.cmake @@ -0,0 +1,69 @@ +include(RunCMake) + +if(RunCMake_GENERATOR MATCHES "Makefile|Ninja") + file(GLOB _renesas_toolchains + "${CMake_TEST_Renesas_TOOLCHAINS}/*/*/bin/ccr*.exe" ) + if(_renesas_toolchains STREQUAL "") + message(FATAL_ERROR "Could not find any Renesas toolchains at: ${CMake_TEST_Renesas_TOOLCHAINS}.") + endif() +endif() + +function(run_toolchain case) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build) + run_cmake_with_options(${case} ${ARGN}) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${case}-build ${CMAKE_COMMAND} --build .) +endfunction() + +foreach(_renesas_toolchain IN LISTS _renesas_toolchains) + cmake_path(GET _renesas_toolchain PARENT_PATH BIN_DIR) + cmake_path(GET _renesas_toolchain FILENAME BIN_NAME) + + if(BIN_NAME MATCHES "ccrx.exe") +# CC-RX + set(ENV{BIN_RX} ${BIN_DIR}) + run_toolchain(renesas-c + -DCMAKE_SYSTEM_NAME=Generic + -DCMAKE_C_COMPILER=${_renesas_toolchain} + -DCMAKE_C_FLAGS="-isa=rxv2" + -DCMAKE_EXE_LINKER_FLAGS="-lnkopt=-start=P,C,D/100,B/8000" + ) + run_toolchain(renesas-asm-rx + -DCMAKE_SYSTEM_NAME=Generic + -DCMAKE_C_COMPILER=${_renesas_toolchain} + -DCMAKE_ASM_COMPILER=${_renesas_toolchain} + -DCMAKE_C_FLAGS="-isa=rxv2" + -DCMAKE_ASM_FLAGS="-isa=rxv2" + ) + elseif(BIN_NAME MATCHES "ccrl.exe") +# CC-RL + run_toolchain(renesas-c + -DCMAKE_SYSTEM_NAME=Generic + -DCMAKE_C_COMPILER=${_renesas_toolchain} + -DCMAKE_C_FLAGS="-cpu=S2" + -DCMAKE_EXE_LINKER_FLAGS="-lnkopt=-auto_section_layout" + ) + run_toolchain(renesas-asm-rl + -DCMAKE_SYSTEM_NAME=Generic + -DCMAKE_C_COMPILER=${_renesas_toolchain} + -DCMAKE_ASM_COMPILER=${_renesas_toolchain} + -DCMAKE_C_FLAGS="-cpu=S2" + -DCMAKE_ASM_FLAGS="-cpu=S2" + ) + elseif(BIN_NAME MATCHES "ccrh.exe") +# CC-RH + run_toolchain(renesas-c + -DCMAKE_SYSTEM_NAME=Generic + -DCMAKE_C_COMPILER=${_renesas_toolchain} + -DCMAKE_C_FLAGS="-Xcommon=rh850" + -DCMAKE_EXE_LINKER_FLAGS="-lnkopt=-start=SU,SI,B_1,R_1,C_1" + ) + run_toolchain(renesas-asm-rh + -DCMAKE_SYSTEM_NAME=Generic + -DCMAKE_C_COMPILER=${_renesas_toolchain} + -DCMAKE_ASM_COMPILER=${_renesas_toolchain} + -DCMAKE_C_FLAGS="-Xcommon=rh850" + -DCMAKE_ASM_FLAGS="-Xcommon=rh850" + ) + endif() +endforeach() diff --git a/Tests/RunCMake/Renesas/libmod.c b/Tests/RunCMake/Renesas/libmod.c new file mode 100644 index 0000000000..183d75e1bc --- /dev/null +++ b/Tests/RunCMake/Renesas/libmod.c @@ -0,0 +1,4 @@ +int renesas_libfun() +{ + return 42; +} diff --git a/Tests/RunCMake/Renesas/module-rh.asm b/Tests/RunCMake/Renesas/module-rh.asm new file mode 100644 index 0000000000..7b481fd0f7 --- /dev/null +++ b/Tests/RunCMake/Renesas/module-rh.asm @@ -0,0 +1,7 @@ +.public _main + +.section .text, text +_main: + .stack _main = 0 + mov 0x00000000, r10 + jmp [r31] diff --git a/Tests/RunCMake/Renesas/module-rl.asm b/Tests/RunCMake/Renesas/module-rl.asm new file mode 100644 index 0000000000..99ab6496dc --- /dev/null +++ b/Tests/RunCMake/Renesas/module-rl.asm @@ -0,0 +1,10 @@ +.PUBLIC _main + +.SECTION .textf,TEXTF +.TYPE _main,function,.LFE1-_main + +_main: + .STACK _main = 4 + clrw ax + ret +.LFE1: diff --git a/Tests/RunCMake/Renesas/module-rx.src b/Tests/RunCMake/Renesas/module-rx.src new file mode 100644 index 0000000000..cea140ee83 --- /dev/null +++ b/Tests/RunCMake/Renesas/module-rx.src @@ -0,0 +1,7 @@ +.SECTION P,CODE + +_main: + MOV.L #0, R1 + RTS + +.END diff --git a/Tests/RunCMake/Renesas/module.c b/Tests/RunCMake/Renesas/module.c new file mode 100644 index 0000000000..112e8d04b4 --- /dev/null +++ b/Tests/RunCMake/Renesas/module.c @@ -0,0 +1,15 @@ +#include "module.h" +#if defined(__USE_LIBFUN) +extern int renesas_libfun(); +#endif + +int i; +int main() +{ +#if defined(__USE_LIBFUN) + i = renesas_libfun(); +#else + i = INTERNAL; +#endif + return i; +} diff --git a/Tests/RunCMake/Renesas/module.h b/Tests/RunCMake/Renesas/module.h new file mode 100644 index 0000000000..a8a85a64c4 --- /dev/null +++ b/Tests/RunCMake/Renesas/module.h @@ -0,0 +1,12 @@ +#ifndef __MODULE_H__ +#define __MODULE_H__ + +#if defined(__cplusplus) +# define INTERNAL 64 +#elif !defined(__cplusplus) +# define INTERNAL 32 +#else +# error "Unable to determine INTERNAL symbol." +#endif + +#endif /* __MODULE_H__ */ diff --git a/Tests/RunCMake/Renesas/renesas-asm-rh.cmake b/Tests/RunCMake/Renesas/renesas-asm-rh.cmake new file mode 100644 index 0000000000..48a2e82d7c --- /dev/null +++ b/Tests/RunCMake/Renesas/renesas-asm-rh.cmake @@ -0,0 +1,2 @@ +enable_language(ASM) +add_executable(exec-asm module-rh.asm) diff --git a/Tests/RunCMake/Renesas/renesas-asm-rl.cmake b/Tests/RunCMake/Renesas/renesas-asm-rl.cmake new file mode 100644 index 0000000000..05a86cf6bf --- /dev/null +++ b/Tests/RunCMake/Renesas/renesas-asm-rl.cmake @@ -0,0 +1,2 @@ +enable_language(ASM) +add_executable(exec-asm module-rl.asm) diff --git a/Tests/RunCMake/Renesas/renesas-asm-rx.cmake b/Tests/RunCMake/Renesas/renesas-asm-rx.cmake new file mode 100644 index 0000000000..3d0e597386 --- /dev/null +++ b/Tests/RunCMake/Renesas/renesas-asm-rx.cmake @@ -0,0 +1,2 @@ +enable_language(ASM) +add_executable(exec-asm module-rx.src) diff --git a/Tests/RunCMake/Renesas/renesas-c.cmake b/Tests/RunCMake/Renesas/renesas-c.cmake new file mode 100644 index 0000000000..39325a7d81 --- /dev/null +++ b/Tests/RunCMake/Renesas/renesas-c.cmake @@ -0,0 +1,2 @@ +enable_language(C) +add_executable(exec-c module.c) diff --git a/Tests/RunCMake/Renesas/renesas-lib.cmake b/Tests/RunCMake/Renesas/renesas-lib.cmake new file mode 100644 index 0000000000..5caff94616 --- /dev/null +++ b/Tests/RunCMake/Renesas/renesas-lib.cmake @@ -0,0 +1,7 @@ +enable_language(C) +add_library(renesas-test-lib libmod.c) + +add_executable(exec-lib-c module.c) +target_compile_options(exec-lib-c) +target_compile_definitions(exec-lib-c PRIVATE __USE_LIBFUN) +target_link_libraries(exec-lib-c PRIVATE renesas-test-lib) diff --git a/Utilities/Sphinx/conf.py.in b/Utilities/Sphinx/conf.py.in index 275ebef9b1..c82358770b 100644 --- a/Utilities/Sphinx/conf.py.in +++ b/Utilities/Sphinx/conf.py.in @@ -109,6 +109,7 @@ linkcheck_allowed_redirects = { r'https://learn\.microsoft\.com/en-us/cpp/build/reference/openmp-enable-openmp-2-0-support': r'https://learn\.microsoft\.com/en-us/cpp/build/reference/openmp-enable-openmp-2-0-support\?.*', r'https://learn\.microsoft\.com/en-us/cpp/c-language/parsing-c-command-line-arguments': r'https://learn\.microsoft\.com/en-us/cpp/c-language/parsing-c-command-line-arguments\?.*', r'https://openjdk\.java\.net/jeps/313': r'https://openjdk\.org:443/jeps/313', + r'https://www\.renesas\.com': r'https://www\.renesas\.com/en', r'https://www\.sphinx-doc\.org': r'https://www\.sphinx-doc\.org/en/master/', }