rkmpi is library provided by rockchip, without source code
however it's uclibc target and provided toolchain is quite outdated, creating problems when i try to use new libraries with it
it would be great if we can use rkmpi on musl or glibc environment
(no success yet)
starting from https://github.com/luckfox-eng29/luckfox_pico_rtsp_opencv/tree/master as base
cd lib
rm -rf *.so *.so.* *opencv*
# excluding opencv because i'm not planning to use it
we now have to convert *.a files to .o files
(we don't use ar x here because i found it dropping some symbols)
for f in *.a ; do mkdir "${f%.a}" && cd "${f%.a}" && arm-rockchip830-linux-uclibcgnueabihf-ld -Ur -o a.o --allow-multiple-definition --whole-archive -L.. -l:$f --no-whole-archive && cd ..; done
now we link that single .o file with libc and libstdc++
arm-rockchip830-linux-uclibcgnueabihf-g++ -Urc -o librkmpifat.a -Wl,--strip-all,-exclude-libs,ALL,-Ur,--allow-multiple-definition */*.o -static-libgcc -static-libstdc++ -nostartfiles
now replace the compiler path on CMakelist and disable PIC
cmake_minimum_required(VERSION 3.10)
set(PKG_CONFIG_EXECUTABLE "/usr/bin/pkg-config")
#set(PKG_CONFIG_PATH "/alpine/usr/lib/pkgconfig/lib")
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_C_COMPILER "/home/sodo/musl-gcc/armv7l-linux-musleabihf-cross/bin/armv7l-linux-musleabihf-gcc")
#set(CMAKE_CXX_COMPILER "${SDK_PATH}/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++"
#)
set(CMAKE_CXX_COMPILER "/home/sodo/musl-gcc/armv7l-linux-musleabihf-cross/bin/armv7l-linux-musleabihf-g++")
project(luckfox_rtsp_opencv)
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)
#set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib/cmake/opencv4")
#find_package(OpenCV REQUIRED)
#set(THREADS_PREFER_PTHREAD_FLAG ON)
#find_package(Threads REQUIRED)
add_executable(${PROJECT_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc
${CMAKE_CURRENT_SOURCE_DIR}/src/luckfox_mpi.cc
)
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} -fno-pic -no-pie -Wl,--allow-multiple-definition,--strip-all,-rpath-link,${CMAKE_CURRENT_SOURCE_DIR}/lib:/usr/lib")
target_link_libraries(${PROJECT_NAME} PRIVATE
#${OpenCV_LIBS}
rkmpifat
swscale
avutil
#pthread
#m
#dl
#Threads::Threads
)
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/rknpu2/include
${OpenCV_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/common
${CMAKE_CURRENT_SOURCE_DIR}/common/isp3.x
${CMAKE_CURRENT_SOURCE_DIR}/include
${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}/luckfox_rtsp_opencv_demo")
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX})
some symbols were missing mostly swscale and avutil stuff
but there's still more missing
like fa_utils_codec_name
i think they are from https://github.com/wizardst/Rockit/tree/8c6c5e59b6069735e95e34cca2607b9b6541b520/src/rt_media/FFMpeg