118 lines
3.5 KiB
CMake
118 lines
3.5 KiB
CMake
# Compile-verify all examples as a single OBJECT library.
|
|
# Each .cpp compiles independently — no linking, no main() conflicts.
|
|
|
|
# --------------------------------------------------------------------------- #
|
|
# pico_deps — aggregates all pico-sdk and cs_midi include directories
|
|
# and compile definitions into one STATIC library. Everything links PRIVATE
|
|
# so INTERFACE_SOURCES compile only once here. Examples then copy the
|
|
# resolved includes/defs via generator expressions (no target_link_libraries
|
|
# on the OBJECT library, so no INTERFACE_SOURCES leak into it).
|
|
# --------------------------------------------------------------------------- #
|
|
|
|
add_library(pico_deps STATIC pico_deps_stub.c)
|
|
|
|
target_include_directories(pico_deps PUBLIC
|
|
${CMAKE_SOURCE_DIR}
|
|
${CMAKE_CURRENT_LIST_DIR}
|
|
)
|
|
|
|
target_link_libraries(pico_deps PRIVATE pico_stdlib hardware_adc hardware_sync cs_midi)
|
|
|
|
if(CS_MIDI_BLE)
|
|
target_link_libraries(pico_deps PRIVATE
|
|
pico_cyw43_arch_lwip_threadsafe_background
|
|
pico_btstack_ble
|
|
pico_btstack_cyw43
|
|
)
|
|
endif()
|
|
|
|
if(CS_MIDI_USB)
|
|
target_link_libraries(pico_deps PRIVATE tinyusb_device tinyusb_board)
|
|
endif()
|
|
|
|
if(CS_MIDI_SERIAL)
|
|
target_link_libraries(pico_deps PRIVATE hardware_uart)
|
|
endif()
|
|
|
|
# --------------------------------------------------------------------------- #
|
|
# Example sources
|
|
# --------------------------------------------------------------------------- #
|
|
|
|
set(EXAMPLE_SOURCES
|
|
# Output elements
|
|
output/note_button.cpp
|
|
output/cc_button.cpp
|
|
output/pc_button.cpp
|
|
output/note_chord_button.cpp
|
|
output/note_button_latched.cpp
|
|
output/note_button_latching.cpp
|
|
output/note_buttons.cpp
|
|
output/note_button_matrix.cpp
|
|
output/cc_button_latched.cpp
|
|
output/cc_button_latching.cpp
|
|
output/cc_buttons.cpp
|
|
output/cc_button_matrix.cpp
|
|
output/cc_potentiometer.cpp
|
|
output/pb_potentiometer.cpp
|
|
output/cc_rotary_encoder.cpp
|
|
output/cc_absolute_encoder.cpp
|
|
output/pb_absolute_encoder.cpp
|
|
output/cc_increment_decrement_buttons.cpp
|
|
output/program_changer.cpp
|
|
output/cc_potentiometers.cpp
|
|
output/borrowed_cc_rotary_encoder.cpp
|
|
|
|
# Input elements
|
|
input/note_led.cpp
|
|
input/note_range_leds.cpp
|
|
input/cc_value.cpp
|
|
input/pb_value.cpp
|
|
input/note_value.cpp
|
|
input/kp_value.cpp
|
|
input/cc_led.cpp
|
|
input/note_range.cpp
|
|
input/cc_range.cpp
|
|
|
|
# Interfaces
|
|
interfaces/ble_midi.cpp
|
|
interfaces/midi_pipes.cpp
|
|
|
|
# Banks
|
|
banks/bank_cc_values.cpp
|
|
banks/transposer.cpp
|
|
banks/encoder_selector.cpp
|
|
banks/many_buttons_selector.cpp
|
|
banks/switch_selector.cpp
|
|
banks/program_change_selector.cpp
|
|
banks/bankable_note_led.cpp
|
|
)
|
|
|
|
if(CS_MIDI_USB)
|
|
list(APPEND EXAMPLE_SOURCES
|
|
interfaces/usb_midi.cpp
|
|
usb_descriptors.c
|
|
)
|
|
endif()
|
|
|
|
if(CS_MIDI_SERIAL)
|
|
list(APPEND EXAMPLE_SOURCES interfaces/serial_midi.cpp)
|
|
endif()
|
|
|
|
if(CS_MIDI_BLE AND CS_MIDI_USB)
|
|
list(APPEND EXAMPLE_SOURCES interfaces/dual_midi.cpp)
|
|
endif()
|
|
|
|
# --------------------------------------------------------------------------- #
|
|
# OBJECT library — compile only, no linking.
|
|
# Uses resolved includes/defs from pico_deps directly to avoid
|
|
# pico-sdk INTERFACE_SOURCES being injected into this target.
|
|
# --------------------------------------------------------------------------- #
|
|
|
|
add_library(examples OBJECT ${EXAMPLE_SOURCES})
|
|
target_include_directories(examples PRIVATE
|
|
$<TARGET_PROPERTY:pico_deps,INCLUDE_DIRECTORIES>
|
|
)
|
|
target_compile_definitions(examples PRIVATE
|
|
$<TARGET_PROPERTY:pico_deps,COMPILE_DEFINITIONS>
|
|
)
|