Support single static-library for libtim-vx.a (#237)
Fix external ovxlib build failure, and change install dir to CMAKE_INSTALL_LIBDIR Signed-off-by: xiang.zhang <xiang.zhang@verisilicon.com> Co-authored-by: yuenan.li <yuenan.li@verisilicon.com>
This commit is contained in:
parent
2c38f89d06
commit
321a53fd2a
|
|
@ -85,6 +85,12 @@ export DISABLE_IDE_DEBUG=1
|
||||||
3. add -DEXTERNAL_VIV_SDK=<low-level-driver/out/sdk> to cmake definitions, also remember -DCMAKE_TOOLCHAIN_FILE=<Your_Toolchain_Config>
|
3. add -DEXTERNAL_VIV_SDK=<low-level-driver/out/sdk> to cmake definitions, also remember -DCMAKE_TOOLCHAIN_FILE=<Your_Toolchain_Config>
|
||||||
4. then make
|
4. then make
|
||||||
|
|
||||||
|
|
||||||
|
#### Notes for integration
|
||||||
|
If you want to build tim-vx as a static library, and link it to your shared library or application, please be carefull with the linker, "-Wl,--whole-archive" is required.
|
||||||
|
|
||||||
|
@see samples/lenet/CMakeLists.txt for reference
|
||||||
|
|
||||||
### Bazel
|
### Bazel
|
||||||
|
|
||||||
[Install bazel](https://docs.bazel.build/versions/master/install.html) to get started.
|
[Install bazel](https://docs.bazel.build/versions/master/install.html) to get started.
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ set(TARGET_NAME "lenet")
|
||||||
aux_source_directory(. ${TARGET_NAME}_SRCS)
|
aux_source_directory(. ${TARGET_NAME}_SRCS)
|
||||||
add_executable(${TARGET_NAME} ${${TARGET_NAME}_SRCS})
|
add_executable(${TARGET_NAME} ${${TARGET_NAME}_SRCS})
|
||||||
|
|
||||||
target_link_libraries(${TARGET_NAME} PRIVATE tim-vx)
|
target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive tim-vx)
|
||||||
target_include_directories(${TARGET_NAME} PRIVATE
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
${PROJECT_SOURCE_DIR}/include
|
${PROJECT_SOURCE_DIR}/include
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,6 @@ message("src/tim/vx")
|
||||||
|
|
||||||
set(TARGET_NAME "tim-vx")
|
set(TARGET_NAME "tim-vx")
|
||||||
|
|
||||||
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()
|
|
||||||
add_subdirectory("vx/internal")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
aux_source_directory(./vx VX_SRC)
|
aux_source_directory(./vx VX_SRC)
|
||||||
aux_source_directory(./vx/ops OPS_SRC)
|
aux_source_directory(./vx/ops OPS_SRC)
|
||||||
|
|
||||||
|
|
@ -21,6 +11,16 @@ list(APPEND ${TARGET_NAME}_SRCS
|
||||||
${OPS_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(${TIM_VX_USE_EXTERNAL_OVXLIB})
|
||||||
if(NOT OVXLIB_INC)
|
if(NOT OVXLIB_INC)
|
||||||
message(FATAL_ERROR "Set OVXLIB_INC if using external OVXLIB (TIM_VX_USE_EXTERNAL_OVXLIB)")
|
message(FATAL_ERROR "Set OVXLIB_INC if using external OVXLIB (TIM_VX_USE_EXTERNAL_OVXLIB)")
|
||||||
|
|
@ -72,15 +72,20 @@ endif()
|
||||||
add_library(${TARGET_NAME} ${${TARGET_NAME}_SRCS})
|
add_library(${TARGET_NAME} ${${TARGET_NAME}_SRCS})
|
||||||
target_include_directories(${TARGET_NAME} PRIVATE ${INC_DIRS})
|
target_include_directories(${TARGET_NAME} PRIVATE ${INC_DIRS})
|
||||||
target_link_libraries(${TARGET_NAME} PUBLIC
|
target_link_libraries(${TARGET_NAME} PUBLIC
|
||||||
-Wl,--whole-archive tim_internal -Wl,--no-whole-archive ${EXTERNAL_LIBS})
|
-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}
|
install(TARGETS ${TARGET_NAME} ${TARGET_NAME}
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
|
|
||||||
install(TARGETS ${TARGET_NAME} ${TARGET_NAME}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/tim/vx
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/tim/vx
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/include/tim)
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/include/tim)
|
||||||
|
|
@ -103,7 +108,7 @@ if(TIM_VX_ENABLE_TEST)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/vx
|
${CMAKE_CURRENT_SOURCE_DIR}/vx
|
||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS unit_test DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
install(TARGETS unit_test DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory("utils")
|
add_subdirectory("utils")
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
message("src/tim/vx/internal")
|
|
||||||
|
|
||||||
set(TARGET_NAME "tim_internal")
|
|
||||||
set(OVXLIB_API_ATTR "__attribute__\(\(visibility\(\"default\"\)\)\)")
|
|
||||||
add_definitions(-DOVXLIB_API=${OVXLIB_API_ATTR})
|
|
||||||
|
|
||||||
aux_source_directory(src INTERNAL_SRC)
|
|
||||||
aux_source_directory(src/kernel INTERNAL_KERNEL)
|
|
||||||
aux_source_directory(src/kernel/cl INTERNAL_KERNEL_CL)
|
|
||||||
aux_source_directory(src/kernel/cpu INTERNAL_KERNEL_CPU)
|
|
||||||
aux_source_directory(src/kernel/evis INTERNAL_KERNEL_EVIS)
|
|
||||||
aux_source_directory(src/kernel/vx INTERNAL_KERNEL_VX)
|
|
||||||
aux_source_directory(src/ops INTERNAL_OPS)
|
|
||||||
aux_source_directory(src/libnnext INTERNAL_LIBNNEXT)
|
|
||||||
aux_source_directory(src/quantization INTERNAL_QUANTIZATION)
|
|
||||||
aux_source_directory(src/custom/ops INTERNAL_CUSTOM_OPS)
|
|
||||||
aux_source_directory(src/custom/ops/kernel INTERNAL_CUSTOM_OPS_KERNEL)
|
|
||||||
aux_source_directory(src/utils INTERNAL_UTILS)
|
|
||||||
|
|
||||||
set(${TARGET_NAME}_SRCS)
|
|
||||||
list(APPEND ${TARGET_NAME}_SRCS
|
|
||||||
${INTERNAL_SRC}
|
|
||||||
${INTERNAL_KERNEL}
|
|
||||||
${INTERNAL_KERNEL_CL}
|
|
||||||
${INTERNAL_KERNEL_CPU}
|
|
||||||
${INTERNAL_KERNEL_EVIS}
|
|
||||||
${INTERNAL_KERNEL_VX}
|
|
||||||
${INTERNAL_OPS}
|
|
||||||
${INTERNAL_LIBNNEXT}
|
|
||||||
${INTERNAL_QUANTIZATION}
|
|
||||||
${INTERNAL_CUSTOM_OPS}
|
|
||||||
${INTERNAL_CUSTOM_OPS_KERNEL}
|
|
||||||
${INTERNAL_UTILS}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(${TARGET_NAME} STATIC ${${TARGET_NAME}_SRCS})
|
|
||||||
target_link_libraries(${TARGET_NAME} PRIVATE ${OVXDRV_LIBRARIES})
|
|
||||||
target_include_directories(${TARGET_NAME} PRIVATE
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
||||||
${OVXDRV_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
message("src/tim/vx/internal")
|
||||||
|
|
||||||
|
set(OVXLIB_API_ATTR "__attribute__\(\(visibility\(\"default\"\)\)\)")
|
||||||
|
add_definitions(-DOVXLIB_API=${OVXLIB_API_ATTR})
|
||||||
|
|
||||||
|
aux_source_directory(./vx/internal/src INTERNAL_SRC)
|
||||||
|
aux_source_directory(./vx/internal/src/kernel INTERNAL_KERNEL)
|
||||||
|
aux_source_directory(./vx/internal/src/kernel/cl INTERNAL_KERNEL_CL)
|
||||||
|
aux_source_directory(./vx/internal/src/kernel/cpu INTERNAL_KERNEL_CPU)
|
||||||
|
aux_source_directory(./vx/internal/src/kernel/evis INTERNAL_KERNEL_EVIS)
|
||||||
|
aux_source_directory(./vx/internal/src/kernel/vx INTERNAL_KERNEL_VX)
|
||||||
|
aux_source_directory(./vx/internal/src/ops INTERNAL_OPS)
|
||||||
|
aux_source_directory(./vx/internal/src/libnnext INTERNAL_LIBNNEXT)
|
||||||
|
aux_source_directory(./vx/internal/src/quantization INTERNAL_QUANTIZATION)
|
||||||
|
aux_source_directory(./vx/internal/src/custom/ops INTERNAL_CUSTOM_OPS)
|
||||||
|
aux_source_directory(./vx/internal/src/custom/ops/kernel INTERNAL_CUSTOM_OPS_KERNEL)
|
||||||
|
aux_source_directory(./vx/internal/src/utils INTERNAL_UTILS)
|
||||||
|
|
||||||
|
list(APPEND ${TARGET_NAME}_SRCS
|
||||||
|
${INTERNAL_SRC}
|
||||||
|
${INTERNAL_KERNEL}
|
||||||
|
${INTERNAL_KERNEL_CL}
|
||||||
|
${INTERNAL_KERNEL_CPU}
|
||||||
|
${INTERNAL_KERNEL_EVIS}
|
||||||
|
${INTERNAL_KERNEL_VX}
|
||||||
|
${INTERNAL_OPS}
|
||||||
|
${INTERNAL_LIBNNEXT}
|
||||||
|
${INTERNAL_QUANTIZATION}
|
||||||
|
${INTERNAL_CUSTOM_OPS}
|
||||||
|
${INTERNAL_CUSTOM_OPS_KERNEL}
|
||||||
|
${INTERNAL_UTILS}
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue