# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.

# SPDX-License-Identifier: MIT

if(CONFIG_LIBC_STD)

    aml_add_library()

    aml_library_include_directories(
        "${CMAKE_CURRENT_LIST_DIR}"
    )

    aml_library_sources(
        syscalls.c
    )

    if(CONFIG_STACK_PROTECTOR_STRONG)
        add_subdirectory(libssp)
        add_subdirectory(libssp_nonshared)
    endif()

    set(SYMBOL_WRAP "--wrap=_malloc_r,--wrap=_free_r,--wrap=_realloc_r,--wrap=_calloc_r")
    set(SYMBOL_WRAP "${SYMBOL_WRAP},--wrap=malloc,--wrap=free,--wrap=realloc,--wrap=calloc")
    if(CONFIG_LIBC_STD_MEMALIGN)
        set(SYMBOL_WRAP "${SYMBOL_WRAP},--wrap=_memalign_r,--wrap=memalign")
    endif()
    if(CONFIG_BACKTRACE_UT)
        set(SYMBOL_WRAP "${SYMBOL_WRAP},--wrap=__aeabi_unwind_cpp_pr0,--wrap=__aeabi_unwind_cpp_pr1,--wrap=__aeabi_unwind_cpp_pr2")
    endif()
    if(CONFIG_LTO_OPTIMIZATION)
        set(LTO_SYMBOL_FORCED
            -u__wrap__malloc_r -u__wrap__free_r -u__wrap__realloc_r -u__wrap__calloc_r
            -u__wrap__getpid_r -u__wrap__kill_r -u__wrap_realloc -u__wrap_calloc
            -u_isatty -u_fstat
        )
        if(CONFIG_LIBC_STD_MEMALIGN)
            set(LTO_SYMBOL_FORCED
                ${LTO_SYMBOL_FORCED}
                -u__wrap__memalign_r -u__wrap_memalign
            )
        endif()
        if(CONFIG_BACKTRACE_UT)
            set(LTO_SYMBOL_FORCED
                ${LTO_SYMBOL_FORCED}
                -u__wrap___aeabi_unwind_cpp_pr0 -u__wrap___aeabi_unwind_cpp_pr1 -u__wrap___aeabi_unwind_cpp_pr2
            )
        endif()
    endif()
    if(CONFIG_RISCV)
        set(SYMBOL_FORCED
            -u_printf_float
        )
    endif()
    set(SYMBOL_LIST
        ${SYMBOL_WRAP}
        ${SYMBOL_FORCED}
        ${LTO_SYMBOL_FORCED}
    )
    target_link_options(
        ${TARGET_NAME}
        PRIVATE
        -Wl,${SYMBOL_LIST}
    )

    if(CONFIG_VFS)
        aml_library_link_libraries(lib__vfs)
    endif()
    if(CONFIG_LOG_BUFFER)
        aml_library_link_libraries(utilities__logbuffer)
    endif()
    aml_library_link_libraries(kernel__${KERNEL})
    aml_library_link_libraries(drivers)
    aml_link_libraries()

endif()

