@@ -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()
|
||||
Reference in New Issue
Block a user