# Spotify Connect via cspot (philippe44 fork, git submodule external/cspot). GPL-3.0. # Project component (not part of the reusable aes67_* core). idf_component_register(SRCS "spotify.cpp" INCLUDE_DIRS "include" PRIV_REQUIRES aes67_web espressif__mdns mbedtls json pthread lwip esp_timer esp_http_server) # bell: only what cspot needs (Tremor Vorbis inside; no codec wrapper, sinks, MQTT, web server). set(BELL_DISABLE_CODECS ON CACHE BOOL "" FORCE) set(BELL_DISABLE_SINKS ON CACHE BOOL "" FORCE) set(BELL_DISABLE_MQTT ON CACHE BOOL "" FORCE) set(BELL_DISABLE_WEBSERVER ON CACHE BOOL "" FORCE) set(BELL_DISABLE_FMT ON CACHE BOOL "" FORCE) set(BELL_DISABLE_REGEX ON CACHE BOOL "" FORCE) set(BELL_ONLY_CJSON ON CACHE BOOL "" FORCE) set(BELL_EXTERNAL_CJSON idf::json CACHE STRING "" FORCE) option(BUILD_TESTING OFF) # Our fixes to the pinned cspot / bell sources (newer GCC, protobuf, CMake), kept as patch files: # patches/cspot/*.patch apply in external/cspot, patches/bell/*.patch in external/cspot/cspot/bell. # Each is applied once (skipped when it already reverse-applies). function(spotify_apply_patches dir repo) file(GLOB patches "${CMAKE_CURRENT_LIST_DIR}/patches/${dir}/*.patch") list(SORT patches) foreach(p ${patches}) execute_process(COMMAND git apply --reverse --check "${p}" WORKING_DIRECTORY "${repo}" RESULT_VARIABLE applied OUTPUT_QUIET ERROR_QUIET) if(NOT applied EQUAL 0) execute_process(COMMAND git apply "${p}" WORKING_DIRECTORY "${repo}" RESULT_VARIABLE rc) if(NOT rc EQUAL 0) message(FATAL_ERROR "spotify: patch does not apply: ${p}") endif() message(STATUS "spotify: applied ${p}") endif() endforeach() endfunction() spotify_apply_patches(cspot "${PROJECT_DIR}/external/cspot") spotify_apply_patches(bell "${PROJECT_DIR}/external/cspot/cspot/bell") # cspot/bell declare cmake_minimum_required(2.8.12); CMake 4 rejects < 3.5 unless told otherwise. set(CMAKE_POLICY_VERSION_MINIMUM 3.5) add_subdirectory(${PROJECT_DIR}/external/cspot/cspot ${CMAKE_CURRENT_BINARY_DIR}/cspot) # bell adds Xtensa (ESP32) assembly for a DSP biquad; the P4 is RISC-V and cspot does not use it. get_target_property(BELL_SRCS bell SOURCES) list(FILTER BELL_SRCS EXCLUDE REGEX "\\.S$") set_target_properties(bell PROPERTIES SOURCES "${BELL_SRCS}") target_link_libraries(${COMPONENT_LIB} PRIVATE cspot) target_compile_options(${COMPONENT_LIB} PRIVATE -std=gnu++20)