# -----------------------------------------------------------------------------------------------------------
# Copyright (c) 2025 Huawei Technologies Co., Ltd.
# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
# CANN Open Software License Agreement Version 2.0 (the "License").
# Please refer to the License for details. You may not use this file except in compliance with the License.
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
# See LICENSE in the root of the software repository for the full text of the License.
# -----------------------------------------------------------------------------------------------------------

include(${CMAKE_CURRENT_SOURCE_DIR}/c_base_headers.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/../liteos_headers.cmake)
#------------------------- c_base -------------------------
set(C_BASE_SRC
    src/vector.c
    src/sort_vector.c
    src/mem_pool.c
    src/ref_obj.c
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:src/error_manager.c>
)

add_library(c_base_static STATIC
    ${C_BASE_SRC}
)

target_compile_definitions(c_base_static PRIVATE
    $<IF:$<STREQUAL:${TARGET_SYSTEM_NAME},LiteOS>,NANO_OS_TYPE=1,NANO_OS_TYPE=0>
)

target_link_libraries(c_base_static
    PRIVATE
        $<BUILD_INTERFACE:intf_llt_pub>
        c_sec_headers
)

message(STATUS "LiteOS file header path ${NANO_LITEOS_HEADER_FILES_PATH}")
target_include_directories(c_base_static PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/../c_mmpa/inc
    ${CMAKE_CURRENT_SOURCE_DIR}/inc
    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../stub/inc>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},LiteOS>:$<BUILD_INTERFACE:${NANO_LITEOS_HEADER_FILES_PATH}>>
)

target_compile_options(c_base_static PRIVATE
    -fno-common
    -fno-strict-aliasing
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-Wall>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-Wextra>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-Werror>
    $<$<NOT:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>>:-O2>
    $<$<NOT:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>>:-fPIC>
    ${CMAKE_EXTRA_COMPILE_OPTIONS}
)

set_target_properties(c_base_static PROPERTIES
    OUTPUT_NAME c_base
)

#------------------------- c_json -------------------------
set(C_JSON_SRC
    src/json_parser.c
)

add_library(c_json_static STATIC
    ${C_JSON_SRC}
)

target_link_libraries(c_json_static
    PRIVATE
        $<BUILD_INTERFACE:intf_llt_pub>
        c_sec_headers
)

target_include_directories(c_json_static PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/../c_mmpa/inc
    ${CMAKE_CURRENT_SOURCE_DIR}/inc
    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../stub/inc>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},LiteOS>:$<BUILD_INTERFACE:${NANO_LITEOS_HEADER_FILES_PATH}>>
)

target_compile_options(c_json_static PRIVATE
    -fno-common
    -fno-strict-aliasing
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-Wall>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-Wextra>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-Werror>
    $<$<NOT:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>>:-O2>
    $<$<NOT:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>>:-fPIC>
    ${CMAKE_EXTRA_COMPILE_OPTIONS}
)

target_compile_definitions(c_json_static PRIVATE
  $<IF:$<STREQUAL:${TARGET_SYSTEM_NAME},LiteOS>,NANO_OS_TYPE=1,NANO_OS_TYPE=0>
)

set_target_properties(c_json_static PROPERTIES
    OUTPUT_NAME c_json
)

#------------------------- install -------------------------
install_package(
    PACKAGE c_base
    TARGETS c_base_static c_base_headers c_json_static
    DIRECTORY   ${CMAKE_CURRENT_SOURCE_DIR}/inc/
    DESTINATION ${INSTALL_INCLUDE_DIR}/c_base
)