blob: 7d57514cbeb90b2b2bd93bf793d65909b53b17a3 [file] [log] [blame]
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=<PREPROCESSED_SOURCE>")
set(_ASM_OUT "-output=src=<ASSEMBLY_SOURCE>")
set(_OBJ_OUT "-output=obj=<OBJECT>")
set(_EXE_OUT "-output=abs=<TARGET>")
if ("${lang}" STREQUAL "ASM")
# Assembler dependency.
set(_DEP_OUT "${_ASM_PREFIX}-MM ${_ASM_PREFIX}-MT=<OBJECT> ${_ASM_PREFIX}-MF=<DEP_FILE>")
else()
# Compiler dependency.
set(_DEP_OUT "-MM -MT=<OBJECT> -output=dep=<DEP_FILE>")
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 <PREPROCESSED_SOURCE>")
set(_ASM_OUT "-S -o <ASSEMBLY_SOURCE>")
set(_OBJ_OUT "-c -o <OBJECT>")
set(_EXE_OUT "-o <TARGET>")
set(_DEP_OUT "-M -MT=<OBJECT> -o <DEP_FILE>")
# 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=<OBJECT> ${_ASM_PREFIX}-MF=<DEP_FILE>")
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<PREPROCESSED_SOURCE>")
set(_ASM_OUT "-S -o<ASSEMBLY_SOURCE>")
set(_OBJ_OUT "-c -o<OBJECT>")
set(_EXE_OUT "-o<TARGET>")
set(_DEP_OUT "-M -o<DEP_FILE>")
# 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=<OBJECT> ${_ASM_PREFIX}-MF=<DEP_FILE>")
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 "<CMAKE_${lang}_COMPILER> <SOURCE> <DEFINES> <INCLUDES> <FLAGS> ${_PREP_OUT}")
set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <SOURCE> <DEFINES> <INCLUDES> <FLAGS> ${_ASM_OUT}")
set(CMAKE_${lang}_COMPILE_OBJECT "<CMAKE_${lang}_COMPILER> <SOURCE> <DEFINES> <INCLUDES> <FLAGS> ${_OBJ_OUT}")
set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_${lang}_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${_EXE_OUT}")
set(CMAKE_${lang}_DEPENDS_EXTRA_COMMANDS "<CMAKE_${lang}_COMPILER> <SOURCE> <DEFINES> <INCLUDES> <FLAGS> ${_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=<TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_${lang}_ARCHIVE_CREATE "${_RLINK} -nologo -form=library -output=<TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_${lang}_ARCHIVE_APPEND "${_RLINK} -nologo -form=library -output=<TARGET> -library=<TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_${lang}_ARCHIVE_FINISH "")
endmacro()