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

#### CPACK to package run #####
message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
    message(STATUS "Detected architecture: x86_64")
    set(ARCH x86_64)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|arm")
    message(STATUS "Detected architecture: ARM64")
    set(ARCH aarch64)
else ()
    message(WARNING "Unknown architecture: ${CMAKE_SYSTEM_PROCESSOR}")
    set(ARCH ${CMAKE_SYSTEM_PROCESSOR})
endif ()
# 打印路径
message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
message(STATUS "CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "CMAKE_BINARY_DIR = ${CMAKE_BINARY_DIR}")
set(ARCH_LINUX_PATH "${ARCH}-linux")

# ============= 组件打包 =============
function(install_public_packages)
    set(script_prefix ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts)
    install(DIRECTORY ${script_prefix}/
        DESTINATION share/info/metadef/script
        FILE_PERMISSIONS
        OWNER_READ OWNER_WRITE OWNER_EXECUTE  # 文件权限
        GROUP_READ GROUP_EXECUTE
        WORLD_READ WORLD_EXECUTE
        DIRECTORY_PERMISSIONS
        OWNER_READ OWNER_WRITE OWNER_EXECUTE  # 目录权限
        GROUP_READ GROUP_EXECUTE
        WORLD_READ WORLD_EXECUTE
        COMPONENT metadef
    )
    set(SCRIPTS_FILES
        ${CANN_CMAKE_DIR}/scripts/install/check_version_required.awk
        ${CANN_CMAKE_DIR}/scripts/install/common_func.inc
        ${CANN_CMAKE_DIR}/scripts/install/common_interface.sh
        ${CANN_CMAKE_DIR}/scripts/install/common_interface.csh
        ${CANN_CMAKE_DIR}/scripts/install/common_interface.fish
        ${CANN_CMAKE_DIR}/scripts/install/version_compatiable.inc
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/cleanup.sh
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/help.info
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/install.sh
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/run_metadef_install.sh
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/run_metadef_uninstall.sh
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/run_metadef_upgrade.sh
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/uninstall.sh
        ${CMAKE_CURRENT_SOURCE_DIR}/scripts/package/metadef/scripts/ver_check.sh
    )

    install(FILES ${SCRIPTS_FILES}
        DESTINATION share/info/metadef/script
        COMPONENT metadef
        PERMISSIONS
        OWNER_READ OWNER_WRITE OWNER_EXECUTE  # 文件权限
        GROUP_READ GROUP_EXECUTE
        WORLD_READ WORLD_EXECUTE
    )
    set(COMMON_FILES
        ${CANN_CMAKE_DIR}/scripts/install/install_common_parser.sh
        ${CANN_CMAKE_DIR}/scripts/install/common_func_v2.inc
        ${CANN_CMAKE_DIR}/scripts/install/common_installer.inc
        ${CANN_CMAKE_DIR}/scripts/install/script_operator.inc
        ${CANN_CMAKE_DIR}/scripts/install/version_cfg.inc
    )

    set(PACKAGE_FILES
        ${COMMON_FILES}
        ${CANN_CMAKE_DIR}/scripts/install/multi_version.inc
    )
    install(FILES ${CMAKE_BINARY_DIR}/version.metadef.info
        DESTINATION share/info/metadef
        RENAME version.info
        COMPONENT metadef
    )
    install(FILES ${PACKAGE_FILES}
        DESTINATION share/info/metadef/script
        COMPONENT metadef
    )
endfunction()

# ============= 创建install =============
install_public_packages()

message(STATUS "************Install metadef packages***************")
install(TARGETS exe_graph rt2_registry_static opp_registry metadef
        LIBRARY DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/lib64 COMPONENT metadef
        ARCHIVE DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/lib64 COMPONENT metadef
)
install(TARGETS stub_exe_graph stub_metadef stub_opp_registry rt2_registry_static
        LIBRARY DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/devlib/linux/${ARCH} COMPONENT metadef
        ARCHIVE DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/devlib/linux/${ARCH} COMPONENT metadef
)
install(TARGETS stub_exe_graph stub_metadef stub_opp_registry
        LIBRARY DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/devlib/minios/aarch64 COMPONENT metadef
        ARCHIVE DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/devlib/minios/aarch64 COMPONENT metadef
)
install(TARGETS stub_exe_graph stub_metadef stub_opp_registry rt2_registry_static
        LIBRARY DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/devlib COMPONENT metadef
        ARCHIVE DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/devlib COMPONENT metadef
)

set(EXTERNAL_RUNTIME_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/tiling_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/kernel_run_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/shape.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/compute_node_info.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/tensor_data.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/op_execute_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/op_execute_launch_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/storage_format.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/stride.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/tensor.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/runtime_tensor.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/continuous_vector.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/exe_res_generation_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/infer_shape_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/range.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/runtime_attrs.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/base_type.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/expand_dims_type.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/infer_datatype_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/infer_shape_range_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/context_extend.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/storage_shape.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/tiling_parse_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/kernel_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/tiling_data.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/extended_kernel_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/exe_graph/runtime/op_execute_prepare_context.h
)
install(FILES ${EXTERNAL_RUNTIME_FILES}
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/exe_graph/runtime
    COMPONENT metadef
)
set(EXTERNAL_GRAPH_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/tensor.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/c_types.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/ge_error_codes.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/error_codes.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/infer_format_context.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/compiler_def.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/ascend_string.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/types.h
)
install(FILES ${EXTERNAL_GRAPH_FILES}
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/graph
    COMPONENT metadef
)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/graph/utils/type_utils.h
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/graph/utils
    COMPONENT metadef
)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/utils/extern_math_util.h
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/utils
    COMPONENT metadef
)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/ge/ge_allocator.h
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/ge
    COMPONENT metadef
)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/ge_common/ge_api_types.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/ge_common/ge_api_error_codes.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/ge_common/api_error_codes.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/ge_common/ge_error_codes.h
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/external/ge_common
    COMPONENT metadef
)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/registry/op_impl_space_registry_v2.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/registry/opp_package_utils.h
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/registry
    COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/base/type/ascend_string_impl.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/type
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/base/asc/opcheck/op_check_register_impl.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/asc/opcheck
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/base/asc/opdef/op_config_registry_impl.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/asc/opdef
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/base/asc/opdef/op_def_factory_impl.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/asc/opdef
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/base/asc/opdef/op_def_impl.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/asc/opdef
        COMPONENT metadef 
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/base/utils/type_utils_impl.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/utils
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/common/checker.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/common
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/common/ge_common/error_codes_define.h
              ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/common/ge_common/scope_guard.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/common/ge_common
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/common/ge_common/debug/ge_log.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/common/ge_common/debug
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/exe_graph/runtime/gert_mem_allocator.h
              ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/exe_graph/runtime/gert_mem_block.h
              ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/exe_graph/runtime/gert_tensor_data.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/exe_graph/runtime
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/graph/any_value.h
              ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/graph/def_types.h
              ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/graph/type_utils.h
              ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/graph/type_id.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/graph
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_inc/base/asc/tilingdata_base_impl.h
        DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/pkg_inc/base/asc
        COMPONENT metadef
)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/context_holder.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/op_context_builder_base.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/op_tiling_parse_context_builder.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/op_tiling_context_builder.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/op_infer_datatype_context_builder.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/op_infer_shape_context_builder.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/op_infer_shape_range_context_builder.h
              ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/context_builder/op_kernel_run_context_builder.h
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/base/context_builder
    COMPONENT metadef
)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/base/runtime/runtime_attrs_def.h
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/base/runtime
    COMPONENT metadef
)
set(EXTERNAL_REGISTRY_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/op_impl_registry.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/op_impl_kernel_registry.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/register_types.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/register_fmk_types.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/register_error_codes.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/op_bin_info.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/tilingdata_base.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/device_op_impl_registry.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/register/register.h
)
install(FILES ${EXTERNAL_REGISTRY_FILES}
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/register
    COMPONENT metadef
)

set(EXTERNAL_ASC_REGISTRY_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/asc/register/op_config_registry.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/asc/register/op_def_factory.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/asc/register/op_def.h
    ${CMAKE_CURRENT_SOURCE_DIR}/inc/external/asc/register/op_def_registry.h
)
install(FILES ${EXTERNAL_ASC_REGISTRY_FILES}
    DESTINATION ${CMAKE_SYSTEM_PROCESSOR}-linux/include/register/asc
    COMPONENT metadef
)

if (NOT ENABLE_COV AND NOT ENABLE_UT)
    set_cann_cpack_config(metadef ENABLE_DEVICE ${ENABLE_BUILD_DEVICE} PACKAGE_TYPE ${PACKAGE_TYPE})
endif()