Initial public khodo snapshot
ci / checks (push) Successful in 38m58s

This commit is contained in:
khodowany
2026-09-04 19:30:11 -05:00
commit 4f9a269f85
99 changed files with 59585 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
set(PICO_BOARD pico2_w CACHE STRING "Pico board")
if(DEFINED ENV{PICO_SDK_PATH} AND NOT PICO_SDK_PATH)
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
endif()
set(PICO_SDK_FETCH_FROM_GIT OFF CACHE BOOL "Fetch Raspberry Pi Pico SDK from git")
set(PICO_SDK_FETCH_FROM_GIT_TAG "${VAMP_PICO_SDK_VERSION}" CACHE STRING "Pico SDK git tag to fetch")
if(NOT PICO_SDK_PATH AND PICO_SDK_FETCH_FROM_GIT)
include(FetchContent)
FetchContent_Declare(
pico_sdk
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk.git
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
)
FetchContent_Populate(pico_sdk)
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
endif()
if(NOT PICO_SDK_PATH)
message(FATAL_ERROR "PICO_SDK_PATH is not set and PICO_SDK_FETCH_FROM_GIT is OFF")
endif()
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
if(NOT EXISTS ${PICO_SDK_PATH}/pico_sdk_init.cmake)
message(FATAL_ERROR "PICO_SDK_PATH does not contain pico_sdk_init.cmake: ${PICO_SDK_PATH}")
endif()
include(${PICO_SDK_PATH}/pico_sdk_init.cmake)
project(product-vamp-pico VERSION ${VAMP_PROJECT_VERSION} LANGUAGES C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
pico_sdk_init()
add_executable(product-vamp-pico2w
src/vamp_style.cpp
src/vamp_style/font.cpp
src/vamp_pico/display.cpp
src/vamp_pico/http_client.cpp
src/vamp_pico/main.cpp
src/vamp_pico/touch.cpp
src/vamp_protocol/page_control.cpp
)
target_include_directories(product-vamp-pico2w PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/include/vamp_pico/capi
)
target_compile_definitions(product-vamp-pico2w PRIVATE
VAMP_PICO_WIFI_SSID="${VAMP_PICO_WIFI_SSID}"
VAMP_PICO_WIFI_PASSPHRASE="${VAMP_PICO_WIFI_PASSPHRASE}"
VAMP_ZERO_HOST="${VAMP_ZERO_HOST}"
VAMP_ZERO_PORT=${VAMP_ZERO_PORT}
)
target_link_libraries(product-vamp-pico2w PRIVATE
pico_stdlib
hardware_i2c
hardware_spi
pico_cyw43_arch_lwip_threadsafe_background
)
pico_enable_stdio_usb(product-vamp-pico2w 1)
pico_enable_stdio_uart(product-vamp-pico2w 0)
pico_add_extra_outputs(product-vamp-pico2w)
+11
View File
@@ -0,0 +1,11 @@
option(VAMP_PICO_FIRMWARE_PROJECT "Configure this CMake invocation as the Pi Pico 2 W firmware project" OFF)
option(VAMP_BUILD_PICO_FIRMWARE "Build the Pi Pico 2 W UF2 firmware artifact" OFF)
option(VAMP_BUILD_ZERO_IMAGE "Build the Pi Zero 2 W Docker image archive artifact" OFF)
option(BUILD_TESTING "Compatibility option accepted by Modulus; Product Vamp does not currently define tests" OFF)
set(VAMP_PICO_SDK_VERSION "2.3.0" CACHE STRING "Raspberry Pi Pico SDK git tag used when fetching the SDK")
set(VAMP_PICO_WIFI_SSID "Vamp Control" CACHE STRING "Default Pico Wi-Fi SSID")
set(VAMP_PICO_WIFI_PASSPHRASE "vamp-control" CACHE STRING "Default Pico Wi-Fi passphrase")
set(VAMP_ZERO_HOST "192.168.42.1" CACHE STRING "Default Zero control host for Pico firmware")
set(VAMP_ZERO_PORT "8080" CACHE STRING "Default Zero control port for Pico firmware")
set(VAMP_ZERO_IMAGE_TAG "product-vamp-zero:dev" CACHE STRING "Docker image tag embedded in package metadata")
+211
View File
@@ -0,0 +1,211 @@
include(GNUInstallDirs)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(modulus CONFIG REQUIRED)
find_package(Threads REQUIRED)
find_package(ligo CONFIG REQUIRED)
find_package(noto CONFIG REQUIRED)
find_package(luma CONFIG REQUIRED)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
execute_process(
COMMAND git rev-parse --short=12 HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE VAMP_GIT_SHA
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
if(NOT VAMP_GIT_SHA)
set(VAMP_GIT_SHA dev)
endif()
set(VAMP_STYLE_SOURCES
src/vamp_style.cpp
src/vamp_style/font.cpp
)
add_library(vamp-style STATIC ${VAMP_STYLE_SOURCES})
target_include_directories(vamp-style PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_compile_features(vamp-style PUBLIC cxx_std_17)
set(VAMP_PROTOCOL_SOURCES
src/vamp_protocol/page_control.cpp
)
add_library(vamp-protocol STATIC ${VAMP_PROTOCOL_SOURCES})
target_include_directories(vamp-protocol PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_compile_features(vamp-protocol PUBLIC cxx_std_17)
set(VAMP_CORE_SOURCES
src/vamp_zero/app.cpp
src/vamp_zero/color.cpp
src/vamp_zero/config.cpp
src/vamp_zero/database.cpp
src/vamp_zero/errors.cpp
src/vamp_zero/library.cpp
src/vamp_zero/page_control.cpp
src/vamp_zero/portal.cpp
src/vamp_zero/score.cpp
src/vamp_zero/types.cpp
src/vamp_zero/ui.cpp
)
add_library(vamp-zero-core STATIC ${VAMP_CORE_SOURCES})
target_include_directories(vamp-zero-core PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_compile_features(vamp-zero-core PUBLIC cxx_std_23)
target_compile_definitions(vamp-zero-core PUBLIC
VAMP_VERSION="${PROJECT_VERSION}"
VAMP_GIT_SHA="${VAMP_GIT_SHA}"
)
target_link_libraries(vamp-zero-core PUBLIC
vamp-style
vamp-protocol
modulus::modulus
modulus::boost_json
modulus::openssl
Threads::Threads
ligo::ligo
noto::noto
luma::luma
)
add_executable(vamp-zero src/vamp_zero/main.cpp)
target_compile_features(vamp-zero PRIVATE cxx_std_23)
target_link_libraries(vamp-zero PRIVATE vamp-zero-core)
set(VAMP_BUNDLE_DIR ${CMAKE_CURRENT_BINARY_DIR}/bundle)
set(VAMP_MANIFEST ${VAMP_BUNDLE_DIR}/manifest.json)
configure_file(package/manifest.json.in ${VAMP_MANIFEST} @ONLY)
file(GLOB_RECURSE VAMP_GENERATOR_INPUTS CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/data/*.json
${CMAKE_CURRENT_SOURCE_DIR}/data/**/*.json
${CMAKE_CURRENT_SOURCE_DIR}/generator/*.py
${CMAKE_CURRENT_SOURCE_DIR}/generator/**/*.py
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/fonts/*
${CMAKE_CURRENT_SOURCE_DIR}/package/assets/fonts/**/*
)
set(VAMP_GENERATED_ASSETS_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated-assets)
set(VAMP_GENERATED_ASSETS_STAMP ${CMAKE_CURRENT_BINARY_DIR}/generated-assets.stamp)
add_custom_command(
OUTPUT ${VAMP_GENERATED_ASSETS_STAMP}
COMMAND ${Python3_EXECUTABLE}
-m generator
--data-dir ${CMAKE_CURRENT_SOURCE_DIR}/data
--output-dir ${VAMP_GENERATED_ASSETS_DIR}
--static-assets-dir ${CMAKE_CURRENT_SOURCE_DIR}/package/assets
--clean
--check
COMMAND ${CMAKE_COMMAND} -E touch ${VAMP_GENERATED_ASSETS_STAMP}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${VAMP_GENERATOR_INPUTS}
VERBATIM
)
add_custom_target(vamp-generated-assets ALL DEPENDS ${VAMP_GENERATED_ASSETS_STAMP})
install(TARGETS vamp-zero
RUNTIME DESTINATION zero/bin
)
install(FILES package/config/vamp.example.json DESTINATION zero/config)
install(DIRECTORY ${VAMP_GENERATED_ASSETS_DIR}/ DESTINATION zero/share/product-vamp)
install(DIRECTORY package/migrations/ DESTINATION zero/share/product-vamp/migrations)
install(PROGRAMS
package/zero/install-zero.sh
package/zero/start-ap.sh
package/zero/start-zero.sh
DESTINATION zero
)
install(FILES
package/zero/product-vamp-ap.service
package/zero/product-vamp-zero.service
DESTINATION zero/systemd
)
install(FILES package/pico/wiring.md DESTINATION pico)
install(FILES ${VAMP_MANIFEST} DESTINATION .)
if(VAMP_BUILD_ZERO_IMAGE OR VAMP_BUILD_PICO_FIRMWARE)
find_program(BASH_EXECUTABLE bash REQUIRED)
endif()
if(VAMP_BUILD_ZERO_IMAGE)
find_program(DOCKER_EXECUTABLE docker REQUIRED)
set(VAMP_ZERO_IMAGE_CONTEXT ${CMAKE_CURRENT_BINARY_DIR}/zero-image-context)
set(VAMP_ZERO_IMAGE_TAR ${CMAKE_CURRENT_BINARY_DIR}/product-vamp-zero-linux-arm64.docker.tar)
add_custom_command(
OUTPUT ${VAMP_ZERO_IMAGE_TAR}
COMMAND ${CMAKE_COMMAND} -E rm -rf ${VAMP_ZERO_IMAGE_CONTEXT}
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/bin
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vamp-zero> ${VAMP_ZERO_IMAGE_CONTEXT}/usr/bin/vamp-zero
COMMAND ${CMAKE_COMMAND} -E copy package/zero/Dockerfile ${VAMP_ZERO_IMAGE_CONTEXT}/Dockerfile
COMMAND ${CMAKE_COMMAND} -E copy_directory ${VAMP_GENERATED_ASSETS_DIR} ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp
COMMAND ${CMAKE_COMMAND} -E make_directory ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp/config
COMMAND ${CMAKE_COMMAND} -E copy package/config/vamp.example.json ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp/config/vamp.example.json
COMMAND ${CMAKE_COMMAND} -E copy_directory package/migrations ${VAMP_ZERO_IMAGE_CONTEXT}/usr/share/product-vamp/migrations
COMMAND ${BASH_EXECUTABLE} package/scripts/build_zero_image.sh ${VAMP_ZERO_IMAGE_CONTEXT} ${VAMP_ZERO_IMAGE_TAR} ${VAMP_ZERO_IMAGE_TAG}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS
vamp-zero
package/scripts/build_zero_image.sh
package/zero/Dockerfile
package/config/vamp.example.json
package/migrations/001_foundation.sql
package/migrations/002_song_import_metadata.sql
package/migrations/003_practice_catalog.sql
package/migrations/004_practice_hierarchy.sql
${VAMP_GENERATED_ASSETS_STAMP}
VERBATIM
)
add_custom_target(vamp-zero-image ALL DEPENDS ${VAMP_ZERO_IMAGE_TAR})
install(FILES ${VAMP_ZERO_IMAGE_TAR} DESTINATION zero)
endif()
if(VAMP_BUILD_PICO_FIRMWARE)
set(VAMP_PICO_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/pico-build)
set(VAMP_PICO_UF2 ${CMAKE_CURRENT_BINARY_DIR}/product-vamp-pico2w.uf2)
file(GLOB VAMP_PICO_SOURCES CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/cmake/pico.cmake
${CMAKE_CURRENT_SOURCE_DIR}/cmake/vamp_options.cmake
${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/vamp_style/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/vamp_pico/*.h
${CMAKE_CURRENT_SOURCE_DIR}/include/vamp_pico/capi/*.h
${CMAKE_CURRENT_SOURCE_DIR}/include/vamp_pico/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/vamp_protocol/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/vamp_style.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/vamp_style/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/vamp_pico/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/vamp_protocol/*.cpp
)
add_custom_command(
OUTPUT ${VAMP_PICO_UF2}
COMMAND ${BASH_EXECUTABLE}
package/scripts/build_pico_firmware.sh
${VAMP_PICO_BUILD_DIR}
${VAMP_PICO_UF2}
${VAMP_PICO_SDK_VERSION}
"${VAMP_PICO_WIFI_SSID}"
"${VAMP_PICO_WIFI_PASSPHRASE}"
"${VAMP_ZERO_HOST}"
"${VAMP_ZERO_PORT}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS
package/scripts/build_pico_firmware.sh
${VAMP_PICO_SOURCES}
VERBATIM
)
add_custom_target(vamp-pico-firmware ALL DEPENDS ${VAMP_PICO_UF2})
install(FILES ${VAMP_PICO_UF2} DESTINATION pico)
endif()