好家伙,不是做冰箱警察来着,给我干哪里去了。算了,C/C++就C/C++吧。
先自己完全做一个简单的,然后可以学习人家的工程代码,再整合成项目。
下载wiki里面的mpi的例程,我们来简化这个小工程。
先整代码,把cc文件从我们需要的工程源文件luckfox_mpi.cc和main.cc挪到项目目录的src文件夹,剩下的examples就删掉。
原来的例程里面有个菜单,我们给删掉然后把编译结果补上
build.sh
#!/bin/bash
#switch to the script's directory
ROOT_PWD=$(cd "$(dirname $0)" && pwd)
#clean build folder
if [ "$1" = "clean" ]; then
if [ -d "${ROOT_PWD}/build" ]; then
rm -rf "${ROOT_PWD}/build"
echo " ${ROOT_PWD}/build has been deleted!"
fi
if [ -d "${ROOT_PWD}/install" ]; then
rm -rf "${ROOT_PWD}/install"
echo " ${ROOT_PWD}/install has been deleted!"
fi
exit
fi
#clean build folder
if [ -d ${ROOT_PWD}/build ]; then
rm -rf ${ROOT_PWD}/build
fi
mkdir ${ROOT_PWD}/build
cd ${ROOT_PWD}/build
cmake ..
make install
#copy the install folder to the RV1106 board
adb shell ./oem/usr/bin/RkLunch-stop.sh
adb shell rm -rf /mnt/sdcard/
adb push ${ROOT_PWD}/install/MyMD_demo /mnt/sdcard/
adb shell chmod +x /mnt/sdcard/MyMD_demo/MyMD
adb shell ./mnt/sdcard/MyMD_demo/MyMD
同时我们更改一下cmake,把项目所依赖的环境变量删掉,替换成常量降低耦合性。其中有一个大坑,就是一定要在配置好工具链之后再配置项目名,不然会出现两个project并且在cmake时无限循环。可以遵循这样的思路:版本,基本变量,编译器,项目,检查文件夹,配置连接位置,配置安装位置,添加目标架构定义,配置第三方库, 配置源代码文件并可执行,目标链接库,头文件位置,安装目录和安装规则。
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
set(SDK_PATH $ENV{LUCKFOX_SDK_PATH})
if(NOT SDK_PATH)
message(WARNING "Please Set Luckfox-pico SDK Path. Such as:export LUCKFOX_SDK_PATH=/home/user/luckfox-pico")
return()
endif()
set(CMAKE_C_COMPILER "${SDK_PATH}/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc"
)
set(CMAKE_CXX_COMPILER "${SDK_PATH}/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++"
)
project("MyMD")
#Processing Parameters
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src")
message(STATUS "Selected source directory: ${CMAKE_SOURCE_DIR}/src")
else()
message(FATAL_ERROR "No source directory!")
return()
endif()
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ 3rdparty.out)
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
add_definitions(-DRV1106_1103)
#Opencv 4
set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)
#Thread
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
file(GLOB SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc")
add_executable(${PROJECT_NAME} ${SRC_FILES})
add_compile_options(-g -Wall
-DISP_HW_V30 -DRKPLATFORM=ON -DARCH64=OFF
-DROCKIVA -DUAPI2
-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath-link,${CMAKE_CURRENT_SOURCE_DIR}/lib:/usr/lib")
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${LIBRKNNRT}
Threads::Threads
rockiva
sample_comm
rockit
rockchip_mpp
rkaiq
pthread
rtsp
)
target_include_directories(${PROJECT_NAME} PRIVATE
${OpenCV_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/utils
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/rknpu2/include
${CMAKE_CURRENT_SOURCE_DIR}/common
${CMAKE_CURRENT_SOURCE_DIR}/common/isp3.x
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/include/rknn
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq/uAPI2
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq/common
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq/xcore
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq/algos
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq/iq_parser
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq/iq_parser_v2
${CMAKE_CURRENT_SOURCE_DIR}/include/rkaiq/smartIr
)
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/install/${PROJECT_NAME}_demo")
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX})
Views: 31
