# 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_compile_definitions(examples PRIVATE $ )