Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .canon.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
csi-jetson:
default: true
image_arm64: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.6
image_arm64: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.7
minimum_date: 2023-10-26T20:00:00.0Z
update_interval: 168h0m0s
user: testbot
group: testbot
persistent: true

csi-pi:
image_arm64: ghcr.io/viam-modules/csi-camera/viam-cpp-base-pi:0.0.6
image_arm64: ghcr.io/viam-modules/csi-camera/viam-cpp-base-pi:0.0.7
minimum_date: 2023-10-26T20:00:00.0Z
update_interval: 168h0m0s
user: testbot
Expand Down
21 changes: 18 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ on:
jobs:
appimage:
name: Build
runs-on: buildjet-2vcpu-ubuntu-2204-arm
runs-on: buildjet-8vcpu-ubuntu-2204-arm
strategy:
matrix:
include:
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.6
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.7
TARGET: jetson
META_PATH: meta.json
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-pi:0.0.6
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-pi:0.0.7
TARGET: pi
META_PATH: meta-pi.json
container:
Expand All @@ -40,6 +40,14 @@ jobs:
echo "TARGET=${{ matrix.TARGET }}" >> $GITHUB_ENV
echo "META_PATH=${{ matrix.META_PATH }}" >> $GITHUB_ENV

- name: Restore Conan cache
uses: actions/cache@v4
with:
path: .conan-home
key: ${{ runner.os }}-${{ matrix.TARGET }}-conan-${{ hashFiles('conanfile.py', 'Makefile') }}
restore-keys: |
${{ runner.os }}-${{ matrix.TARGET }}-conan-

- name: Clean build artifacts
run: make clean

Expand All @@ -49,6 +57,13 @@ jobs:
- name: Build viam-csi binary
run: make build

- name: Verify no dynamic viam library deps
run: |
if ldd build-conan/build/Release/viam-csi | grep -i 'libviam'; then
echo "Unexpected dynamic viam library dependency found"
exit 1
fi

- name: Build viam-csi appimage
run: make package

Expand Down
14 changes: 11 additions & 3 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ on:

jobs:
publish:
runs-on: buildjet-2vcpu-ubuntu-2204-arm
runs-on: buildjet-8vcpu-ubuntu-2204-arm
strategy:
matrix:
include:
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.6
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.7
TARGET: jetson
META_PATH: meta.json
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-pi:0.0.6
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-pi:0.0.7
TARGET: pi
META_PATH: meta-pi.json
container:
Expand All @@ -27,6 +27,14 @@ jobs:
echo "TARGET=${{ matrix.TARGET }}" >> $GITHUB_ENV
echo "META_PATH=${{ matrix.META_PATH }}" >> $GITHUB_ENV

- name: Restore Conan cache
uses: actions/cache@v4
with:
path: .conan-home
key: ${{ runner.os }}-${{ matrix.TARGET }}-conan-${{ hashFiles('conanfile.py', 'Makefile') }}
restore-keys: |
${{ runner.os }}-${{ matrix.TARGET }}-conan-

- name: Clean build artifacts
run: make clean

Expand Down
25 changes: 15 additions & 10 deletions .github/workflows/unit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ on:
jobs:
unit-test:
name: Unit Tests
runs-on: buildjet-2vcpu-ubuntu-2204-arm
runs-on: buildjet-8vcpu-ubuntu-2204-arm
strategy:
matrix:
include:
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.6
- container: ghcr.io/viam-modules/csi-camera/viam-cpp-base-jetson:0.0.7
TARGET: jetson

container:
Expand All @@ -37,14 +37,19 @@ jobs:
echo "TARGET=${{ matrix.TARGET }}" >> $GITHUB_ENV
echo "META_PATH=${{ matrix.META_PATH }}" >> $GITHUB_ENV

- name: Restore Conan cache
uses: actions/cache@v4
with:
path: .conan-home
key: ${{ runner.os }}-${{ matrix.TARGET }}-conan-${{ hashFiles('conanfile.py', 'Makefile') }}
restore-keys: |
${{ runner.os }}-${{ matrix.TARGET }}-conan-

- name: Install module dependencies
run: make dep

- name: Build viam-csi binary
run: make build

- name: Run unit tests
run: |
export VIAM_CSI_DEVICE=${{ matrix.TARGET }}
export VIAM_CSI_TEST_MODE=1
ctest --test-dir build --rerun-failed --output-on-failure -VV
- name: Build and run unit tests
run: make conan-test TARGET=${{ matrix.TARGET }}
env:
VIAM_CSI_DEVICE: ${{ matrix.TARGET }}
VIAM_CSI_TEST_MODE: "1"
48 changes: 34 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@ set(GNU_INCLUDE_PATH /usr/include/aarch64-linux-gnu)
set(LOCAL_LIB_PATH /usr/local/lib)
set(LOCAL_INCLUDE_PATH /usr/local/include)

enable_testing()
find_package(GTest REQUIRED)
find_package(PkgConfig REQUIRED)
find_package(viam-cpp-sdk CONFIG REQUIRED)
pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0 gstreamer-app-1.0 gstreamer-base-1.0)
option(VIAM_CSI_ENABLE_TESTS "Build viam-csi unit tests" ON)

include_directories(
${GLIB_INCLUDE_DIRS}
Expand All @@ -35,23 +34,44 @@ link_directories(
# Main executable
add_executable(${PROJECT_NAME} main.cpp csi_camera.cpp utils.cpp)

target_link_libraries(${PROJECT_NAME}
${GSTREAMER_LIBRARIES}
target_link_libraries(${PROJECT_NAME}
${GSTREAMER_LIBRARIES}
viam-cpp-sdk::viamsdk
)

# Bullseye (glibc < 2.34) keeps POSIX AIO symbols in librt; Jammy+ merges them into libc.
# The SDK's Conan package places libviam_rust_utils.a last in link order but declares -lrt
# before it, so the linker discards rt before seeing the AIO references.
# Tell the linker to not discard unused symbols from librt on first pass.
if(UNIX AND NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-as-needed")
endif()

install(TARGETS ${PROJECT_NAME} DESTINATION usr/local/bin)


# Test executable
add_executable(${PROJECT_NAME}_test tests/unit/test_csi_camera.cpp)
if(VIAM_CSI_ENABLE_TESTS)
enable_testing()
find_package(GTest REQUIRED)

target_link_libraries(${PROJECT_NAME}_test
${GSTREAMER_LIBRARIES}
GTest::GTest
GTest::Main
viam-cpp-sdk::viamsdk
)
set(VIAM_CSI_GTEST_LIBS)
if(TARGET GTest::gtest AND TARGET GTest::gtest_main)
list(APPEND VIAM_CSI_GTEST_LIBS GTest::gtest GTest::gtest_main)
elseif(TARGET GTest::GTest AND TARGET GTest::Main)
list(APPEND VIAM_CSI_GTEST_LIBS GTest::GTest GTest::Main)
else()
message(FATAL_ERROR "Unable to resolve GTest targets from find_package(GTest)")
endif()

# Test executable
add_executable(${PROJECT_NAME}_test tests/unit/test_csi_camera.cpp)

target_link_libraries(${PROJECT_NAME}_test
${GSTREAMER_LIBRARIES}
${VIAM_CSI_GTEST_LIBS}
viam-cpp-sdk::viamsdk
)

# Add the test as a target
add_test(NAME ${PROJECT_NAME}_test COMMAND ${PROJECT_NAME}_test)
# Add the test as a target
add_test(NAME ${PROJECT_NAME}_test COMMAND ${PROJECT_NAME}_test)
endif()
56 changes: 45 additions & 11 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ BIN_DIR := ./bin
# Docker
HUB_USER := viam-modules/csi-camera
TEST_NAME := viam-csi-test
BASE_TAG := 0.0.6
BASE_TAG := 0.0.7

# Package
PACK_NAME := viam-csi
Expand All @@ -24,18 +24,55 @@ else ifeq ($(TARGET), pi)
RECIPE=./viam-csi-pi-arm64.yml
endif

# Conan
export CONAN_HOME := $(CURDIR)/.conan-home/.conan2
VENV_DIR := ./venv
CONAN_OUT := ./build-conan
CONAN_TEST_OUT := ./build-conan-test
CONAN_BIN := $(CONAN_OUT)/build/Release/viam-csi
CONAN_FLAGS := -s:a build_type=Release -s:a compiler.cppstd=17
CONAN_TEST_OPT := -o "&:with_tests=True"
CONAN_RUN = test -f $(VENV_DIR)/bin/activate && . $(VENV_DIR)/bin/activate; conan

.PHONY: conan-setup conan-install conan-build conan-build-with-tests conan-test build-conan-binary

conan-setup:
python3 -m venv $(VENV_DIR) 2>/dev/null || pip3 install conan --ignore-installed
$(CONAN_RUN) --version 2>/dev/null || pip install conan 2>/dev/null || true
$(CONAN_RUN) profile detect --force
$(CONAN_RUN) remote add viamconan https://viam.jfrog.io/artifactory/api/conan/viamconan --index 0 --force || true

conan-install:
$(CONAN_RUN) --version >/dev/null 2>&1 || $(MAKE) conan-setup
$(CONAN_RUN) install . --output-folder=$(CONAN_OUT) --build=missing $(CONAN_FLAGS)

conan-build:
$(CONAN_RUN) build . --output-folder=$(CONAN_OUT) --build=none $(CONAN_FLAGS)

conan-build-with-tests:
$(CONAN_RUN) install . --output-folder=$(CONAN_TEST_OUT) --build=missing $(CONAN_FLAGS) $(CONAN_TEST_OPT)
$(CONAN_RUN) build . --output-folder=$(CONAN_TEST_OUT) --build=none $(CONAN_FLAGS) $(CONAN_TEST_OPT)

conan-test: conan-install conan-build conan-build-with-tests
cd $(CONAN_TEST_OUT)/build/Release && \
. ./generators/conanrun.sh && \
ctest --output-on-failure

build-conan-binary:
$(MAKE) conan-install TARGET=$(TARGET)
$(MAKE) conan-build TARGET=$(TARGET)

# Module
# Builds/installs module.
.PHONY: build
build:
rm -rf $(BUILD_DIR) | true && \
mkdir -p build && \
cd build && \
cmake -DCMAKE_INSTALL_PREFIX=$(INSTALL_DIR) .. -G Ninja && \
ninja -j $(shell nproc)
$(MAKE) build-conan-binary TARGET=$(TARGET)

# Creates appimage cmake build.
# Creates appimage package.
package:
$(MAKE) build-conan-binary TARGET=$(TARGET)
@mkdir -p $(BUILD_DIR)
@cp $(CONAN_BIN) $(BUILD_DIR)/viam-csi
cd etc && \
PACK_NAME=$(PACK_NAME) \
PACK_TAG=$(PACK_TAG) \
Expand All @@ -46,10 +83,7 @@ lint:

# Removes all build and bin artifacts.
clean:
rm -rf $(BUILD_DIR) | true && \
rm -rf $(BIN_DIR) | true && \
rm -rf $(INSTALL_DIR) | true \
rm -rf ./etc/appimage-build | true && \
rm -rf $(BUILD_DIR) $(BIN_DIR) $(INSTALL_DIR) ./etc/appimage-build
rm -f ./etc/viam-csi-$(PACK_TAG)-aarch64.AppImage*

# Copies binary and appimage to bin folder
Expand Down
65 changes: 65 additions & 0 deletions conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import re

from conan import ConanFile
from conan.tools.build import check_min_cppstd
from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
from conan.tools.files import load


class ViamCsi(ConanFile):
name = "viam-csi"
license = "Apache-2.0"
url = "https://github.com/viam-modules/csi-camera"
package_type = "application"

settings = "os", "compiler", "build_type", "arch"
options = {"with_tests": [True, False]}
default_options = {
"with_tests": False,
"viam-cpp-sdk/*:shared": False,
}

exports_sources = (
"CMakeLists.txt",
"LICENSE",
"main.cpp",
"csi_camera.cpp",
"csi_camera.h",
"utils.cpp",
"utils.h",
"constraints.h",
"tests/*",
)

version = "0.0.2"

def set_version(self):
content = load(self, "CMakeLists.txt")
match = re.search(r"project\([^\)]*VERSION\s+([0-9]+\.[0-9]+\.[0-9]+)", content, re.MULTILINE | re.DOTALL)
if match:
self.version = match.group(1).strip()

def validate(self):
check_min_cppstd(self, 17)

def requirements(self):
# Phase 1 scope: migrate viam-cpp-sdk sourcing to Conan.
self.requires("viam-cpp-sdk/0.20.1")

def layout(self):
cmake_layout(self, src_folder=".")

def generate(self):
tc = CMakeToolchain(self)
tc.variables["VIAM_CSI_ENABLE_TESTS"] = self.options.with_tests
tc.generate()
CMakeDeps(self).generate()

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
cmake = CMake(self)
cmake.install()
23 changes: 3 additions & 20 deletions etc/Dockerfile.base
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,10 @@ RUN apt-get -y --no-install-recommends install \
gnupg \
gpg \
less \
libboost-all-dev \
libgrpc++-dev \
libprotobuf-dev \
libssl-dev \
ninja-build \
pkg-config \
protobuf-compiler \
protobuf-compiler-grpc \
python3-pip \
python3-venv \
software-properties-common \
sudo \
wget
Expand All @@ -46,21 +42,8 @@ RUN apt-get -y --no-install-recommends install -t llvm-toolchain-jammy-15 \

RUN apt-get -y install cmake

# Install viam-cpp-sdk
RUN mkdir -p ${HOME}/opt/src
RUN cd ${HOME}/opt/src && \
git clone https://github.com/viamrobotics/viam-cpp-sdk && \
cd viam-cpp-sdk && \
git checkout releases/v0.19.0 && \
mkdir build && \
cd build && \
cmake .. -G Ninja -DCMAKE_POLICY_VERSION_MINIMUM=3.5 && \
ninja all -j 3 && \
ninja install -j 3

RUN cp -r ${HOME}/opt/src/viam-cpp-sdk/build/install/* /usr/local/

# Install appimage-builder
RUN mkdir -p ${HOME}/opt/src
RUN apt install -y \
binutils \
coreutils \
Expand Down
Loading
Loading