Skip to content

Instantly share code, notes, and snippets.

@djdisodo
Created January 28, 2025 15:11
Show Gist options
  • Select an option

  • Save djdisodo/0134a9755e0b03bb31f87f48c5094cbc to your computer and use it in GitHub Desktop.

Select an option

Save djdisodo/0134a9755e0b03bb31f87f48c5094cbc to your computer and use it in GitHub Desktop.
rv1103 rkmpi on musl

why?

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

how

(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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment