Add cross compile for A311D

* Support auto-downloading toolchain and SDK from http
  * Support one-click cross compilation

Usage:
  mkdir build && cd build
  cmake .. -DHARDWARE=A311D
  make -j4

Signed-off-by: Zongwu.Yang <Zongwu.Yang@verisilicon.com>
This commit is contained in:
Zongwu.Yang 2021-02-07 11:16:49 +08:00 committed by Kainan Cha
parent dc9931e126
commit eb01d28a1a
4 changed files with 75 additions and 37 deletions

View File

@ -9,8 +9,12 @@ set(OVXLIB_API_ATTR "__attribute__\(\(visibility\(\"default\"\)\)\)")
message(${OVXLIB_API_ATTR}) message(${OVXLIB_API_ATTR})
add_definitions(-DOVXLIB_API=${OVXLIB_API_ATTR}) add_definitions(-DOVXLIB_API=${OVXLIB_API_ATTR})
# find dependencies if("${HARDWARE}" STREQUAL "A311D")
find_package(OvxDrv REQUIRED PATHS ${PROJECT_SOURCE_DIR}/cmake) include(cmake/A311D.cmake)
else()
include(cmake/X86_64.cmake)
endif()
include_directories(${PROJECT_SOURCE_DIR}/include/tim/vx) include_directories(${PROJECT_SOURCE_DIR}/include/tim/vx)
include_directories(${OVXDRV_INCLUDE_DIRS}) include_directories(${OVXDRV_INCLUDE_DIRS})

40
cmake/A311D.cmake Normal file
View File

@ -0,0 +1,40 @@
set(PKG_NAME "OVXDRV")
message("Downloading A311D toolchain ...")
file(DOWNLOAD "https://cnbj1.fds.api.xiaomi.com/mace/third-party/gcc-linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz"
${PROJECT_SOURCE_DIR}/build/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
EXPECTED_MD5 "6ec789d642584a01e240ab3366599dbb"
SHOW_PROGRESS)
execute_process(COMMAND
tar xf ${PROJECT_SOURCE_DIR}/build/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz)
set(TOOLCHAIN_DIR ${PROJECT_SOURCE_DIR}/build/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu)
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++)
set(CMAKE_AR ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc-ar)
set(CMAKE_AS ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc-as)
set(CMAKE_LD ${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc-ld)
message("Downloading A311D SDK ...")
file(DOWNLOAD "https://github.com/VeriSilicon/TIM-VX/releases/download/v1.1.28/aarch64_A311D_D312513_A294074_R311680_T312233_O312045.tgz"
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045.tgz
EXPECTED_MD5 "26f4766c25a4776caf41b93e9b1c6af9"
SHOW_PROGRESS)
execute_process(COMMAND
tar xf ${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045.tgz)
set(OVXDRV_INCLUDE_DIRS)
list(APPEND OVXDRV_INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/include
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/include/CL)
set(OVXDRV_LIBRARIES)
list(APPEND OVXDRV_LIBRARIES
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/lib/libCLC.so
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/lib/libGAL.so
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/lib/libOpenVX.so
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/lib/libOpenVXU.so
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/lib/libVSC.so
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/lib/libArchModelSw.so
${PROJECT_SOURCE_DIR}/build/aarch64_A311D_D312513_A294074_R311680_T312233_O312045/lib/libNNArchPerf.so)
mark_as_advanced(${OVXDRV_INCLUDE_DIRS} ${OVXDRV_LIBRARIES})

View File

@ -1,35 +0,0 @@
message("==================================================")
message("Processing OvxDrvConfig.cmake ...")
set(PKG_NAME "OVXDRV")
set(OVXDRV_INCLUDE_DIRS)
list(APPEND OVXDRV_INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/prebuilt-sdk/x86_64_linux/include
${PROJECT_SOURCE_DIR}/prebuilt-sdk/x86_64_linux/include/CL)
set(LIBS CLC GAL OpenVX OpenVXU VSC ArchModelSw NNArchPerf)
if(CMAKE_CROSSCOMPILING)
# todo (sven) add any library if only avaiable in cross build
endif()
list(LENGTH LIBS count)
math(EXPR count "${count} - 1")
foreach(i RANGE ${count})
list(GET LIBS ${i} lib)
find_library(${PKG_NAME}_FOUND_LIB_${i}
NAMES ${lib}
PATHS ${PROJECT_SOURCE_DIR}/prebuilt-sdk/x86_64_linux/lib
)
message("found lib ${lib} at ${${PKG_NAME}_FOUND_LIB_${i}}")
list(APPEND ${PKG_NAME}_LIBRARIES ${${PKG_NAME}_FOUND_LIB_${i}})
message("--->" ${PKG_NAME}_LIBRARIES ${${PKG_NAME}_FOUND_LIB_${i}})
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(${PKG_NAME} DEFAULT_MSG
${PKG_NAME}_LIBRARIES)
mark_as_advanced(${PKG_NAME}_INCLUDE_DIRS ${PKG_NAME}_LIBRARIES)
message("==================================================")

29
cmake/X86_64.cmake Normal file
View File

@ -0,0 +1,29 @@
message("Processing X86_64.cmake ...")
set(PKG_NAME "OVXDRV")
set(OVXDRV_INCLUDE_DIRS)
list(APPEND OVXDRV_INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/prebuilt-sdk/x86_64_linux/include
${PROJECT_SOURCE_DIR}/prebuilt-sdk/x86_64_linux/include/CL)
set(LIBS CLC GAL OpenVX OpenVXU VSC ArchModelSw NNArchPerf)
list(LENGTH LIBS count)
math(EXPR count "${count} - 1")
foreach(i RANGE ${count})
list(GET LIBS ${i} lib)
find_library(${PKG_NAME}_FOUND_LIB_${i}
NAMES ${lib}
PATHS ${PROJECT_SOURCE_DIR}/prebuilt-sdk/x86_64_linux/lib
)
message("found lib ${lib} at ${${PKG_NAME}_FOUND_LIB_${i}}")
list(APPEND ${PKG_NAME}_LIBRARIES ${${PKG_NAME}_FOUND_LIB_${i}})
message("--->" ${PKG_NAME}_LIBRARIES ${${PKG_NAME}_FOUND_LIB_${i}})
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(${PKG_NAME} DEFAULT_MSG
${PKG_NAME}_LIBRARIES)
mark_as_advanced(${PKG_NAME}_INCLUDE_DIRS ${PKG_NAME}_LIBRARIES)