Skip to content

Commit 1941bce

Browse files
committed
Add OpenCV Makefile and embedded platform definitions
Helps minimize dependnecy on OpenCV fork
1 parent 175b13e commit 1941bce

File tree

9 files changed

+98
-6
lines changed

9 files changed

+98
-6
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ jobs:
1717
sudo apt install cmake python3 build-essential gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
1818
- name: Build MPY Cross
1919
run: make -C micropython/mpy-cross
20-
- name: Submodules
20+
- name: MicroPython submodules
2121
run: make -C micropython/ports/rp2 BOARD=SPARKFUN_XRP_CONTROLLER submodules
2222
- name: Set Pico SDK path
2323
run: echo "PICO_SDK_PATH=$GITHUB_WORKSPACE/micropython/lib/pico-sdk" >> "$GITHUB_ENV"
2424
- name: Build OpenCV
25-
run: make -C src/opencv PLATFORM=embedded/rp2350 --no-print-directory -j4
25+
run: make -C src/opencv PLATFORM=rp2350 --no-print-directory -j4
2626
- name: Build firmware
2727
run: make BOARD=SPARKFUN_XRP_CONTROLLER -j4
2828
- name: Upload UF2

.gitmodules

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
[submodule "src/opencv"]
2-
path = src/opencv
1+
[submodule "src/opencv/opencv"]
2+
path = src/opencv/opencv
33
url = https://github.com/sfe-SparkFro/opencv.git
44
[submodule "src/ulab"]
55
path = src/ulab

src/opencv

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/opencv/Makefile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
ifndef PLATFORM
2+
$(error PLATFORM not specified. Use 'make PLATFORM=rp2350' or similar.)
3+
endif
4+
5+
TOOLCHAIN_FILE = ../../platforms/${PLATFORM}.toolchain.cmake
6+
7+
# TODO: For some reason, specifying this in the toolchain file doesn't work
8+
CMAKE_ARGS += -DBUILD_LIST=core,imgproc,imgcodecs
9+
10+
# Generic build
11+
all:
12+
cd opencv && mkdir -p build && cmake -S . -B build -DPICO_BUILD_DOCS=0 -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} ${CMAKE_ARGS} && make -C build -f Makefile $(MAKEFLAGS) $(MAKE_ARGS)
13+
14+
# Clean the OpenCV build
15+
clean:
16+
cd opencv && rm -rf build

src/opencv/opencv

Submodule opencv added at 3dc189e

src/opencv/platforms/common.cmake

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Derived from:
2+
# https://github.com/joachimBurket/esp32-opencv/blob/master/esp32/doc/detailed_build_procedure.md
3+
set(CMAKE_BUILD_TYPE Release)
4+
set(BUILD_SHARED_LIBS OFF)
5+
set(CV_DISABLE_OPTIMIZATION OFF)
6+
set(WITH_IPP OFF)
7+
set(WITH_TBB OFF)
8+
set(WITH_OPENMP OFF)
9+
set(WITH_PTHREADS_PF OFF)
10+
set(WITH_QUIRC OFF)
11+
set(WITH_1394 OFF)
12+
set(WITH_CUDA OFF)
13+
set(WITH_OPENCL OFF)
14+
set(WITH_OPENCLAMDFFT OFF)
15+
set(WITH_OPENCLAMDBLAS OFF)
16+
set(WITH_VA_INTEL OFF)
17+
set(WITH_EIGEN OFF)
18+
set(WITH_GSTREAMER OFF)
19+
set(WITH_GTK OFF)
20+
set(WITH_JASPER OFF)
21+
set(WITH_JPEG OFF)
22+
set(WITH_OPENJPEG OFF)
23+
set(WITH_WEBP OFF)
24+
set(BUILD_ZLIB ON)
25+
set(BUILD_PNG ON)
26+
set(WITH_TIFF OFF)
27+
set(WITH_V4L OFF)
28+
set(WITH_LAPACK OFF)
29+
set(WITH_ITT OFF)
30+
set(WITH_PROTOBUF OFF)
31+
set(WITH_IMGCODEC_HDR OFF)
32+
set(WITH_IMGCODEC_SUNRASTER OFF)
33+
set(WITH_IMGCODEC_PXM OFF)
34+
set(WITH_IMGCODEC_PFM OFF)
35+
# TODO: For some reason, specifying this in the toolchain file doesn't work
36+
# set(BUILD_LIST core,imgproc,imgcodecs)
37+
set(BUILD_JAVA OFF)
38+
set(BUILD_opencv_python OFF)
39+
set(BUILD_opencv_java OFF)
40+
set(BUILD_opencv_apps OFF)
41+
set(BUILD_PACKAGE OFF)
42+
set(BUILD_PERF_TESTS OFF)
43+
set(BUILD_TESTS OFF)
44+
set(CV_ENABLE_INTRINSICS OFF)
45+
set(CV_TRACE OFF)
46+
set(OPENCV_ENABLE_MEMALIGN OFF)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#ifndef RP2350_UNSAFE_CV_XADD_H
2+
#define RP2350_UNSAFE_CV_XADD_H
3+
4+
// Fix for https://github.com/raspberrypi/pico-sdk/issues/2505
5+
static inline int unsafe_cv_xadd(int* addr, int delta)
6+
{
7+
int tmp = *addr;
8+
*addr += delta;
9+
return tmp;
10+
}
11+
#define CV_XADD(addr, delta) unsafe_cv_xadd(addr, delta)
12+
13+
#endif
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Define PICO_SDK_PATH in your environment before running this script
2+
if(NOT DEFINED ENV{PICO_SDK_PATH})
3+
message(FATAL_ERROR "PICO_SDK_PATH environment variable is not set. Please define it before running this script.")
4+
endif()
5+
6+
# Include the RP2350 toolchain file
7+
include("$ENV{PICO_SDK_PATH}/cmake/preload/toolchains/pico_arm_cortex_m33_gcc.cmake")
8+
9+
# Include the common embedded OpenCV settings
10+
include("${CMAKE_CURRENT_LIST_DIR}/common.cmake")
11+
12+
# Set RP2350 specific settings
13+
set(OPENCV_DISABLE_THREAD_SUPPORT ON)
14+
15+
# Fix for https://github.com/raspberrypi/pico-sdk/issues/2505
16+
set(CMAKE_C_FLAGS_INIT "${CMAKE_C_FLAGS_INIT} -DOPENCV_INCLUDE_PORT_FILE=\\\"${CMAKE_CURRENT_LIST_DIR}/include/rp2350_unsafe_cv_xadd.h\\\"")
17+
set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -DOPENCV_INCLUDE_PORT_FILE=\\\"${CMAKE_CURRENT_LIST_DIR}/include/rp2350_unsafe_cv_xadd.h\\\"")

src/opencv_upy.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ target_compile_definitions(usermod INTERFACE ULAB_MAX_DIMS=4)
3939
include(${CMAKE_CURRENT_LIST_DIR}/ulab/code/micropython.cmake)
4040

4141
# Include OpenCV
42-
set(OpenCV_DIR ${CMAKE_CURRENT_LIST_DIR}/opencv/build)
42+
set(OpenCV_DIR ${CMAKE_CURRENT_LIST_DIR}/opencv/opencv/build)
4343
find_package(OpenCV REQUIRED)
4444
target_include_directories(usermod INTERFACE ${OpenCV_INCLUDE_DIRS})
4545
target_link_libraries(usermod INTERFACE ${OpenCV_LIBS})

0 commit comments

Comments
 (0)