# -----------------------------------------------------------------------------------------------------------
# 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(CMakePrintHelpers)

if (NOT ENABLE_OPEN_SRC)
    set(METADEF_DIR ${TOP_DIR}/metadef)
    set(GE_METADEF_DIR ${TOP_DIR}/air/graph_metadef)
    set(GE_METADEF_INC_DIR ${TOP_DIR}/air/inc/graph_metadef)
    set(METADEF_PROTO_DIR ${TOP_DIR}/air/graph_metadef/proto)
    set(AIR_CODE_DIR ${TOP_DIR}/air)
endif()

message(STATUS "Variables in graph metadef project:")
include(${AIR_CODE_DIR}/cmake/intf_pub_linux.cmake)
include(${AIR_CODE_DIR}/cmake/function.cmake)
add_subdirectory(proto)
add_subdirectory(graph)
add_subdirectory(exe_graph)
add_subdirectory(register)
if (ENABLE_METADEF_UT OR ENABLE_METADEF_ST OR ENABLE_BENCHMARK)
    find_package(benchmark CONFIG REQUIRED)
    add_subdirectory(tests)
endif()

set(_metadef_install_targets lowering graph graph_base register aihac_symbolizer)
get_target_property(_mh_imported_install metadef_headers IMPORTED)
if(NOT _mh_imported_install)
    list(APPEND _metadef_install_targets metadef_headers)
endif()
install(TARGETS ${_metadef_install_targets}
    EXPORT graph_metadef-targets
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} ${INSTALL_OPTIONAL}
    ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR} ${INSTALL_OPTIONAL}
    RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} ${INSTALL_OPTIONAL}
)

if (NOT ENABLE_OPEN_SRC)
    install(TARGETS graph_base_static metadef_static
        ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR} ${INSTALL_OPTIONAL}
    )
    install(TARGETS atc_stub_graph_static stub_exe_graph_static stub_register_static
        ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}/stub ${INSTALL_OPTIONAL}
    )
endif ()

# 下列头文件发布是非法的,需要在后续整改中删掉
# --------------------start------------------------
install(FILES   ${GE_METADEF_DIR}/third_party/transformer/inc/axis_util.h
                ${GE_METADEF_DIR}/third_party/transformer/inc/expand_dimension.h
                ${GE_METADEF_DIR}/third_party/transformer/inc/transfer_shape_utils.h
                ${GE_METADEF_DIR}/third_party/transformer/inc/transfer_range_according_to_format.h
                ${GE_METADEF_DIR}/third_party/transformer/inc/transfer_shape_according_to_format.h
                ${GE_METADEF_DIR}/third_party/transformer/inc/transfer_shape_according_to_format_ext.h
                ${GE_METADEF_DIR}/third_party/transformer/inc/transfer_def.h
        DESTINATION ${INSTALL_INCLUDE_DIR}/metadef/transformer EXCLUDE_FROM_ALL
)
install(FILES   ${GE_METADEF_DIR}/register/op_tiling/op_tiling_constants.h
                ${GE_METADEF_DIR}/register/op_tiling/op_compile_info_manager.h
                ${GE_METADEF_DIR}/register/op_tiling/op_tiling_utils.h
        DESTINATION ${INSTALL_INCLUDE_DIR}/metadef/register/op_tiling EXCLUDE_FROM_ALL
)
install(FILES   ${GE_METADEF_DIR}/graph/normal_graph/operator_impl.h
                ${GE_METADEF_DIR}/graph/normal_graph/op_io.h
        DESTINATION ${INSTALL_INCLUDE_DIR}/metadef/graph EXCLUDE_FROM_ALL
)

install(FILES   ${GE_METADEF_DIR}/graph/utils/dumper/ge_graph_dumper.h
        DESTINATION ${INSTALL_INCLUDE_DIR}/metadef/graph/utils/dumper EXCLUDE_FROM_ALL
)
# ---------------------end-------------------------

install(DIRECTORY ${GE_METADEF_INC_DIR}/ DESTINATION ${INSTALL_INCLUDE_DIR}/metadef
    EXCLUDE_FROM_ALL FILES_MATCHING PATTERN "*.h"
)
install(DIRECTORY ${METADEF_PROTO_DIR}/ DESTINATION proto
    EXCLUDE_FROM_ALL FILES_MATCHING PATTERN "*.proto"
)

if (PACKAGE STREQUAL "opensdk")
    install(EXPORT graph_metadef-targets DESTINATION ${INSTALL_CONFIG_DIR}
        FILE graph_metadef-targets.cmake EXCLUDE_FROM_ALL
    )
    set(PKG_NAME graph_metadef)
    configure_package_config_file(${TOP_DIR}/cmake/config/pkg_config_template.cmake.in
        ${CMAKE_CURRENT_BINARY_DIR}/graph_metadef-config.cmake
        INSTALL_DESTINATION ${INSTALL_CONFIG_DIR}
        PATH_VARS INSTALL_BASE_DIR INSTALL_INCLUDE_DIR INSTALL_LIBRARY_DIR INSTALL_RUNTIME_DIR INSTALL_CONFIG_DIR
        INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}
    )
    unset(PKG_NAME)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/graph_metadef-config.cmake
        DESTINATION ${INSTALL_CONFIG_DIR} EXCLUDE_FROM_ALL
    )
endif()

if (ENABLE_OPEN_SRC)
    set(ARCH_LINX_PATH "${CMAKE_SYSTEM_PROCESSOR}-linux")

    install(TARGETS
                    lowering
                    graph
                    graph_base
                    register
                    aihac_symbolizer
        LIBRARY DESTINATION ${ARCH_LINX_PATH}/lib64 ${INSTALL_OPTIONAL} COMPONENT packages EXCLUDE_FROM_ALL
        ARCHIVE DESTINATION ${ARCH_LINX_PATH}/lib64 ${INSTALL_OPTIONAL} COMPONENT packages EXCLUDE_FROM_ALL
        RUNTIME DESTINATION ${ARCH_LINX_PATH}/bin ${INSTALL_OPTIONAL} COMPONENT packages EXCLUDE_FROM_ALL
    )
endif()