#
# Copyright (c) 2020 Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the License); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

function(ethosu_link_options target scope)
    cmake_parse_arguments(ARG "" "LINK_FILE" "" ${ARGN})

    if (CMAKE_CXX_COMPILER_ID STREQUAL "ARMClang")
        set(LINK_FILE_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_LINK_FILE}.scatter)
        set(LINK_FILE_OPTION "--scatter")

    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        set(LINK_FILE ${ARG_LINK_FILE}.ld)
        set(LINK_FILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/${LINK_FILE})
        set(LINK_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/${LINK_FILE})
        set(LINK_FILE_OPTION "-T")

        set(prop "$<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>")
        add_custom_command(
            OUTPUT ${LINK_FILE_OUT}
            DEPENDS ${LINK_FILE_IN}
            BYPRODUCTS ${LINK_FILE_OUT}
            COMMAND ${CMAKE_C_COMPILER} -E -x c -P -o ${LINK_FILE_OUT} ${LINK_FILE_IN}
            COMMAND_EXPAND_LISTS "$<$<BOOL:${prop}>:-D$<JOIN:${prop},;-D>>"
            COMMENT "Preprocessing and generating linker script"
            VERBATIM)
        add_custom_target(${target}-linker-script
            DEPENDS ${LINK_FILE_OUT}
            VERBATIM)
        add_dependencies(${target} ${target}-linker-script)
    endif()

    target_link_options(${target} ${scope} ${LINK_FILE_OPTION} ${LINK_FILE_OUT})
    set_target_properties(${target} PROPERTIES LINK_DEPENDS ${LINK_FILE_OUT})
endfunction()
