set(OP_HOST_UT_EXE ${PKG_NAME}_op_host_ut)
add_optiling_ut_modules(${OP_TILING_MODULE_NAME})
add_infershape_ut_modules(${OP_INFERSHAPE_MODULE_NAME})
add_library(${OPHOST_NAME}_ut SHARED
$<$<TARGET_EXISTS:${OPHOST_NAME}_infer_obj>:$<TARGET_OBJECTS:${OPHOST_NAME}_infer_obj>>
$<$<TARGET_EXISTS:${OPHOST_NAME}_tiling_obj>:$<TARGET_OBJECTS:${OPHOST_NAME}_tiling_obj>>
$<$<TARGET_EXISTS:${COMMON_NAME}_obj>:$<TARGET_OBJECTS:${COMMON_NAME}_obj>>
$<$<TARGET_EXISTS:opbase_util_objs>:$<TARGET_OBJECTS:opbase_util_objs>>
$<$<TARGET_EXISTS:opbase_infer_objs>:$<TARGET_OBJECTS:opbase_infer_objs>>
$<$<TARGET_EXISTS:opbase_tiling_objs>:$<TARGET_OBJECTS:opbase_tiling_objs>>
)
target_link_libraries(${OPHOST_NAME}_ut PRIVATE
$<BUILD_INTERFACE:intf_llt_pub_asan_cxx17>
-Wl,--whole-archive
rt2_registry_static
-Wl,--no-whole-archive
tiling_api
)
add_executable(${OP_HOST_UT_EXE}
test_op_host_main.cpp
)
target_compile_definitions(${OP_HOST_UT_EXE} PRIVATE)
target_compile_options(${OP_HOST_UT_EXE} PUBLIC -fPIE -fno-access-control)
add_dependencies(${OP_HOST_UT_EXE} ${OPHOST_NAME}_ut)
target_include_directories(${OP_HOST_UT_EXE} PRIVATE
${ASCEND_DIR}/pkg_inc
)
target_link_directories(${OP_HOST_UT_EXE} PRIVATE
${ASCEND_DIR}/${SYSTEM_PREFIX}/lib64
)
target_link_libraries(${OP_HOST_UT_EXE} PRIVATE
$<BUILD_INTERFACE:intf_llt_pub_asan_cxx17>
-Wl,--whole-archive
${OP_TILING_MODULE_NAME}_cases
${OP_INFERSHAPE_MODULE_NAME}_cases
-Wl,--no-whole-archive
-Wl,--no-as-needed
metadef
unified_dlog
-Wl,--as-needed
register
opp_registry
graph
platform
GTest::gtest
)
if(ENABLE_UT_EXEC)
if(NOT "${GTEST_FILTER}" STREQUAL "")
set(GTEST_FILTER_ARG "--gtest_filter=${GTEST_FILTER}")
else()
set(GTEST_FILTER_ARG "")
endif()
if(ENABLE_ASAN)
execute_process(
COMMAND ${CMAKE_C_COMPILER} -print-file-name=libasan.so
OUTPUT_VARIABLE LIBASAN_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE result
)
if(NOT result EQUAL 0)
message(FATAL_ERROR "compiler not support asan, please disable asan")
endif()
execute_process(
COMMAND ${CMAKE_C_COMPILER} -print-file-name=libstdc++.so
OUTPUT_VARIABLE LIBSTDC_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE stdc_result
)
if(NOT stdc_result EQUAL 0)
message(FATAL_ERROR "not find libstdc++.so, please confirm.")
endif()
add_custom_command(
TARGET ${OP_HOST_UT_EXE}
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}
LD_PRELOAD=${LIBASAN_PATH}:${LIBSTDC_PATH}
ASAN_OPTIONS=detect_leaks=0 $<TARGET_FILE:${OP_HOST_UT_EXE}> ${GTEST_FILTER_ARG}
COMMENT "Run ops op_host utest with asan"
)
else()
add_custom_command(
TARGET ${OP_HOST_UT_EXE}
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} $<TARGET_FILE:${OP_HOST_UT_EXE}> ${GTEST_FILTER_ARG}
COMMENT "Run ops op_host utest"
)
endif()
endif()
if(ENABLE_VALGRIND)
add_custom_command(
TARGET ${OP_HOST_UT_EXE}
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} && valgrind --undef-value-errors=no
--leak-check=full $<TARGET_FILE:${OP_HOST_UT_EXE}> ${GTEST_FILTER_ARG}
COMMENT "Run ops op_host utest by valgrind"
)
endif()