forked from VeriSilicon/TIM-VX
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
115 lines (94 loc) · 3.51 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
message("src/tim/vx")
set(TARGET_NAME "tim-vx")
aux_source_directory(./vx VX_SRC)
aux_source_directory(./vx/ops OPS_SRC)
set(${TARGET_NAME}_SRCS)
list(APPEND ${TARGET_NAME}_SRCS
${VX_SRC}
${OPS_SRC}
)
if(${TIM_VX_USE_EXTERNAL_OVXLIB})
find_library(OVXLIB_LIB NAMES "ovxlib")
message(STATUS "Using external OVXLIB from ${OVXLIB_LIB}")
add_library(tim_internal SHARED IMPORTED)
set_target_properties(tim_internal PROPERTIES IMPORTED_LOCATION ${OVXLIB_LIB})
target_link_libraries(tim_internal INTERFACE ${OVXDRV_LIBRARIES})
else()
include(vx/internal/tim_internal.cmake)
endif()
if(${TIM_VX_USE_EXTERNAL_OVXLIB})
if(NOT OVXLIB_INC)
message(FATAL_ERROR "Set OVXLIB_INC if using external OVXLIB (TIM_VX_USE_EXTERNAL_OVXLIB)")
endif()
set(OVXLIB_INCLUDE_DIR ${OVXLIB_INC})
else()
set(OVXLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/src/tim/vx/internal/include")
endif()
message(STATUS "OVXLIB include directory: ${OVXLIB_INCLUDE_DIR}")
if(TIM_VX_ENABLE_LAYOUT_INFER)
aux_source_directory(./transform LAYOUT_INFER_FRAMEWORK_SRCS)
aux_source_directory(./transform/ops LAYOUT_INFER_OP_SRCS)
list(APPEND ${TARGET_NAME}_SRCS
${LAYOUT_INFER_FRAMEWORK_SRCS}
${LAYOUT_INFER_OP_SRCS}
)
endif()
foreach(src_file ${${TARGET_NAME}_SRCS})
if(${src_file} MATCHES ".*_test\.cc")
list(REMOVE_ITEM ${TARGET_NAME}_SRCS ${src_file})
list(APPEND ${TARGET_NAME}_TEST_SRCS ${src_file})
endif()
endforeach()
set(EXTERNAL_LIBS)
set(INC_DIRS)
list(APPEND INC_DIRS
${PROJECT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/vx
${CMAKE_CURRENT_SOURCE_DIR}/transform
${OVXLIB_INCLUDE_DIR}
${OVXDRV_INCLUDE_DIRS}
)
if(${TIM_VX_ENABLE_VIPLITE})
aux_source_directory(./lite LITE_SRC)
list(APPEND ${TARGET_NAME}_SRCS
${LITE_SRC})
list(APPEND EXTERNAL_LIBS ${VIPLITE_DRV_LIBRARIES})
list(APPEND INC_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/lite
${VIPLITE_DRV_INCLUDE_DIR}
)
endif()
add_library(${TARGET_NAME} ${${TARGET_NAME}_SRCS})
target_include_directories(${TARGET_NAME} PRIVATE ${INC_DIRS})
target_link_libraries(${TARGET_NAME} PUBLIC
-Wl,--no-whole-archive ${EXTERNAL_LIBS} ${OVXDRV_LIBRARIES})
if(${TIM_VX_USE_EXTERNAL_OVXLIB})
#-Wl,--whole-archive should not applied to external library, but only for shared library
target_link_libraries(${TARGET_NAME} PUBLIC tim_internal)
endif()
if (NOT CMAKE_INSTALL_LIBDIR)
set(CMAKE_INSTALL_LIBDIR "lib")
endif()
install(TARGETS ${TARGET_NAME} ${TARGET_NAME}
DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/tim/vx
DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/tim)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/tim/lite
DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/tim)
if(TIM_VX_ENABLE_LAYOUT_INFER)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/tim/transform
DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/tim)
endif()
if(TIM_VX_ENABLE_TEST)
include(GoogleTest)
add_executable(unit_test ${${TARGET_NAME}_TEST_SRCS})
target_link_libraries(unit_test PRIVATE gtest gtest_main gmock gmock_main ${TARGET_NAME} ${OVXDRV_LIBRARIES})
target_include_directories(unit_test PRIVATE
${PROJECT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/vx
${OVXLIB_INCLUDE_DIR}
${INC_DIRS}
)
install(TARGETS unit_test DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
endif()
add_subdirectory("utils")