# ----------------------------------------------------------------------------------------------------------
# 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.
# ----------------------------------------------------------------------------------------------------------

set(PKG_NAME "cpudebug_deps")
string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER)

if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
    message(STATUS "Detected architecture: x86_64")
    set(TAR_ARCH x86)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|arm")
    message(STATUS "Detected architecture: ARM64")
    set(TAR_ARCH aarch64)
else ()
    message(WARNING "Unknown architecture: ${CMAKE_SYSTEM_PROCESSOR}")
endif ()

if (IS_DIRECTORY ${CMAKE_SOURCE_DIR}/libraries/lib AND NOT EXISTS ${CMAKE_SOURCE_DIR}/libraries/lib/cmake/targets-tikicpulib-${BUILD_TYPE_LOWER}.cmake)
    execute_process(
        COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_SOURCE_DIR}/libraries/lib
        COMMENT "Removing ${CMAKE_SOURCE_DIR}/libraries/lib directory..." 
    )
endif()

if (NOT EXISTS ${CMAKE_SOURCE_DIR}/libraries/lib/include/stub_fun.h)
    set(CPUDEBUG_PKG_NAME cann-asc-tools-cpudebug-deps-lib_${BUILD_TYPE_LOWER}_${ASC_TOOLS_VERSION}_linux-${CMAKE_SYSTEM_PROCESSOR}.tar.gz)
    file(GLOB CPUDEBUG_PKG
        LIST_DIRECTORIES True
        ${CANN_3RD_LIB_PATH}/${CPUDEBUG_PKG_NAME}
    )

    if(NOT EXISTS ${CPUDEBUG_PKG})
        set(CPUDEBUG_PKG_URL "https://cann-3rd.obs.cn-north-4.myhuaweicloud.com/cann/asc-tools-cpudebug/${CPUDEBUG_PKG_NAME}")
        message(STATUS "cpudebug pkg not found in ${CANN_3RD_LIB_PATH}, downloading from ${CPUDEBUG_PKG_URL}")
    else()
        set(CPUDEBUG_PKG_URL ${CPUDEBUG_PKG})
    endif()

    set(CPUDEBUG_PKG ${CANN_3RD_LIB_PATH}/${CPUDEBUG_PKG_NAME})
    include(FetchContent)
    FetchContent_Declare(
        ${PKG_NAME}
        URL ${CPUDEBUG_PKG_URL}
        TLS_VERIFY FALSE
        DOWNLOAD_DIR ${CANN_3RD_LIB_PATH}
        DOWNLOAD_NO_EXTRACT TRUE
    )
    FetchContent_MakeAvailable(${PKG_NAME})

    execute_process(
        COMMAND tar -xf ${CPUDEBUG_PKG} -C ${CMAKE_SOURCE_DIR}/libraries --strip-components 1
        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/libraries
        RESULT_VARIABLE result
    )
endif()

if(EXISTS ${CMAKE_SOURCE_DIR}/libraries/lib/cmake/targets-tikicpulib.cmake)
    execute_process(
        COMMAND mv targets-tikicpulib.cmake targets-cpudebug.cmake
        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/libraries/lib/cmake
    )
endif()

if(EXISTS ${CMAKE_SOURCE_DIR}/libraries/lib/cmake/targets-tikicpulib-release.cmake)
    execute_process(
        COMMAND mv targets-tikicpulib-release.cmake targets-cpudebug-release.cmake
        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/libraries/lib/cmake
    )
endif()

add_library(cpudebug_stubreg SHARED IMPORTED)
set_target_properties(cpudebug_stubreg PROPERTIES
    IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/libraries/lib/libcpudebug_stubreg.so"
)