cmake_minimum_required(VERSION 3.14.1)
set(CMAKE_C_STANDARD 11)
find_package(PkgConfig REQUIRED)
set(DPDK_STATIC_LIBRARIES
rte_eal
rte_ethdev
rte_fib
rte_hash
rte_mbuf
rte_mempool
rte_mempool_ring
rte_rib
rte_timer
rte_net_virtio
rte_telemetry
rte_pdump
rte_distributor
rte_ipsec
rte_efd
rte_member
rte_ring
rte_bpf
rte_pcapng
rte_net_bond
)
project(knet_ut)
cmake_minimum_required(VERSION 3.16)
add_compile_options(-g -fPIC -O0 -fpermissive -fprofile-arcs -ftest-coverage -fsanitize=address -static-libasan)
set(UT_NAME knet_ut_BIN)
add_definitions(-DTEST_SDV_DEBUG)
add_definitions(-DKNET_TEST)
add_definitions(-DKNET_MP_DAEMON)
add_definitions(-DKNET_STATIC=)
add_definitions(-DSDV_LOG_LEVEL=4)
set(KNET_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..)
set(KNET_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../src/knet)
set(SDV_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
FILE(GLOB_RECURSE testcases_list
${CMAKE_CURRENT_SOURCE_DIR}/common/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock/*.c
${CMAKE_CURRENT_SOURCE_DIR}/testcases/*.cpp
)
FILE(GLOB_RECURSE KNET_SRC ${KNET_SRC_DIR}/*.c)
set(TEST_SRC main.cpp ${testcases_list} ${KNET_SRC})
set(DPDK_INCLUDE_DIRS ${KNET_ROOT_DIR}/build/opensource/include/dpdk)
set(CJSON_INCLUDE_DIRS ${KNET_ROOT_DIR}/build/opensource/include/cJSON)
set(SECUREC_INCLUDE_DIRS ${KNET_ROOT_DIR}/build/opensource/include/securec)
set(KNET_INCLUDE_DIRS ${KNET_ROOT_DIR}/build/include/h)
set(DPDK_LIB_DIRS ${KNET_ROOT_DIR}/build/opensource/lib/dpdk)
set(CJSON_LIB_DIRS ${KNET_ROOT_DIR}/build/opensource/lib/cJSON)
set(SECUREC_LIB_DIRS ${KNET_ROOT_DIR}/build/opensource/lib/securec)
set(KNET_LIB_DIRS ${KNET_ROOT_DIR}/build/lib)
set(SECURE_C boundscheck)
function(find_header_directories base_dir result_var)
set(dirs "")
file(GLOB_RECURSE h_files "${base_dir}/src/*.h")
foreach(h_file IN LISTS h_files)
get_filename_component(dir ${h_file} DIRECTORY)
list(APPEND dirs ${dir})
endforeach()
list(REMOVE_DUPLICATES dirs)
set(${result_var} ${dirs} PARENT_SCOPE)
endfunction()
find_header_directories(${KNET_ROOT_DIR} ALL_HEADER_DIRS)
message("普通信息:当前源码目录是 ${KNET_SRC_DIR}")
add_executable(${UT_NAME} ${TEST_SRC})
target_include_directories(${UT_NAME} PRIVATE
${DPDK_INCLUDE_DIRS}
${CJSON_INCLUDE_DIRS}
${SDV_ROOT_DIR}/mock
${SDV_ROOT_DIR}/common
${KNET_INCLUDE_DIRS}
${SECUREC_INCLUDE_DIRS}
${ALL_HEADER_DIRS}
)
target_link_directories(${UT_NAME} PRIVATE
${DPDK_LIB_DIRS}
${CJSON_LIB_DIRS}
${KNET_LIB_DIRS}
${SECUREC_LIB_DIRS}
)
target_link_libraries(${UT_NAME} PRIVATE
dpstack
dl pthread gtest gmock
-Wl,--whole-archive
-Wl,--as-needed
${DPDK_STATIC_LIBRARIES}
-Wl,--no-whole-archive
-Wl,--export-dynamic
dl
cap
${SECURE_C}
cjson
gcov
-fsanitize=address
)
set_target_properties(${UT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SDV_ROOT_DIR})