set (CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0 -D_FORTIFY_SOURCE=2 -fPIC -fstack-protector-all -Wl,-z,relro,-z,now,-z,noexecstack")
set (CMAKE_C_FLAGS   "-D_GLIBCXX_USE_CXX11_ABI=0 -D_FORTIFY_SOURCE=2 -fPIC -fstack-protector-all -Wl,-z,relro,-z,now,-z,noexecstack")

set(TOP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
set(ATT_DIR ${TOP_DIR}/att)

cmake_minimum_required(VERSION 3.14)
project (Att[CXX])
add_compile_options(-std=c++17)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

add_compile_definitions(TOP_DIR=\"${TOP_DIR}\")
add_compile_definitions(UT_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}\")

file(GLOB SOURCES
        # common stub
        ${TOP_DIR}/tests/common/stub/stub_model_info.cpp
        ${TOP_DIR}/tests/common/stub/stub_matmul_modelinfo.cpp
        ${TOP_DIR}/tests/common/stub/stub_solver_model_info.cpp
        # generator/preprocess
        ${TOP_DIR}/tests/ut/att/testcase/preprocess/*.cpp
        # generator/solver_pass
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass/l0_solver/*.cpp
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass/l2_solver/*.cpp
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass/general_solver/*.cpp
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass/src/*.cpp
        # generator/solver_pass_gen
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass_gen/axes_reorder_gen/*.cpp
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass_gen/general_solver_gen/*.cpp
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass_gen/l2_solver_gen/*.cpp
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass_gen/l0_solver_gen/*.cpp
        ${TOP_DIR}/tests/ut/att/testcase/solver_pass_gen/manager/*.cpp
        # generator/core
        ${TOP_DIR}/tests/ut/att/testcase/generator/core/*.cpp
        # concat helpers/tests
        ${TOP_DIR}/tests/ut/att/testcase/concat/*.cpp
        # gen_model_info
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/*.cpp
        # gen_model_info/parser
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/parser/*.cpp
        # gen_model_info/expr_gen
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/expr_gen/*.cpp
        # gen_model_info/pass
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/pass/*.cpp
        # gen_model_info/utils
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/utils/*.cpp
        # gen_model_info/reuse_group_utils
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/reuse_group_utils/*.cpp
        # gen_model_info/api_perf_register
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/api_perf_register/*.cpp
        ${TOP_DIR}/autofuse/tests/v35/ut/att/gen_model_info/api_perf_register/test_reduce_min_max_api_perf_v2.cpp
        # gen_model_info/core
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/core/*.cpp
        # util
        ${TOP_DIR}/tests/ut/att/testcase/util/*.cpp
        # ascir
        ${TOP_DIR}/tests/ut/att/testcase/ascir/*.cpp
        # check_input
        ${TOP_DIR}/tests/ut/att/testcase/check_input/*.cpp
        ${TOP_DIR}/tests/ut/att/utils/*.cpp
    )

# solver_pass/src/*.cpp 是源码镜像,从 ATT_DIR 编译,排除以避免 multiple definition
list(FILTER SOURCES EXCLUDE REGEX "solver_pass/src/.+\\.cpp$")

add_executable(att_ut
        ${SOURCES}
        )

target_link_directories(att_ut PRIVATE ${ASCEND_INSTALL_LIB_PATH})

target_include_directories(att_ut PRIVATE
        ${TOP_DIR}/tests/ut/att/testcase
        ${TOP_DIR}/tests/ut/att/utils
        ${TOP_DIR}/tests/common/stub
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info
        ${TOP_DIR}/tests/ut/att/testcase/gen_model_info/core
        ${TOP_DIR}/
        ${TOP_DIR}
        ${TOP_DIR}/common
        ${TOP_DIR}/tests/depends/common/inc
        ${ATT_DIR}/util
        ${ATT_DIR}/dtree
        ${ATT_DIR}/common_utils
        ${ATT_DIR}/generator
        ${ATT_DIR}/generator/decision_tree
        ${ATT_DIR}/generator/preprocess
        ${ATT_DIR}/generator/solver_pass_gen
        ${ATT_DIR}/generator/decision_tree
        ${ATT_DIR}/gen_model_info
        ${ASCEND_INSTALL_PATH}/include
        ${ASCEND_INSTALL_PATH}/x86_64-linux/include/acl/error_codes
        ${CMAKE_BINARY_DIR}/proto/metadef_protos_af
        ${CMAKE_BINARY_DIR}/autofuse/ascir_builtin_ops
        ${TOP_DIR}/tests/ut/att/testcase/ascir
        ${TOP_DIR}/tests/ut/att/utils
        )

target_compile_options(att_ut PRIVATE
        -g --coverage -fprofile-arcs -ftest-coverage
        -fPIC
        -fno-common
        -Wextra
        -Wfloat-equal
        -fpermissive
        )

target_link_options(att_ut PRIVATE
        -rdynamic
        -Wl,-Bsymbolic
        -Wl,--exclude-libs,All
        )

target_link_libraries(att_ut PRIVATE
        GTest::gtest GTest::gmock GTest::gtest_main -lgcov pthread
        -Wl,--no-as-needed
        att
        asc_slog_stub
        autofuse_runtime_stub
        aihac_ir
        aihac_symbolizer_af
        ascgen_common
        ascir_builtin_ops
        aihac_ir_register
        ascir_ops_headers
        symengine
        Boost::boost
        graph_base_af
        error_manager
        metadef
        graph_af
        c_sec
        json
        ascend_protobuf
        )
add_dependencies(att_ut ascir_builtin_ops)