cmake_minimum_required(VERSION 3.13) # Interface selection — consumers set these before add_subdirectory() option(CS_MIDI_BLE "Enable BLE MIDI interface (BTstack)" ON) option(CS_MIDI_USB "Enable USB MIDI interface (TinyUSB)" OFF) option(CS_MIDI_SERIAL "Enable Serial MIDI interface (UART)" OFF) option(CS_MIDI_APPLEMIDI "Enable AppleMIDI interface (RTP-MIDI over WiFi)" OFF) option(CS_MIDI_HID_KEYBOARD "HID keyboard + Battery Service for BLE auto-reconnect" OFF) # Core sources — always compiled set(CS_MIDI_CORE_SOURCES AH/Debug/Debug.cpp AH/Error/Exit.cpp AH/PrintStream/PrintStream.cpp AH/STL/vector.cpp AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp AH/Hardware/Button.cpp AH/Hardware/IncrementButton.cpp AH/Hardware/IncrementDecrementButtons.cpp Submodules/Encoder/AHEncoder.cpp Control_Surface/Control_Surface_Class.cpp MIDI_Senders/RelativeCCSender.cpp Def/Cable.cpp Def/Channel.cpp Def/MIDIAddress.cpp MIDI_Parsers/SerialMIDI_Parser.cpp MIDI_Parsers/SysExBuffer.cpp MIDI_Parsers/MIDI_MessageTypes.cpp MIDI_Interfaces/MIDI_Interface.cpp MIDI_Interfaces/MIDI_Pipes.cpp ) set(CS_MIDI_SOURCES ${CS_MIDI_CORE_SOURCES}) if(CS_MIDI_BLE) list(APPEND CS_MIDI_SOURCES MIDI_Interfaces/BLEMIDI/BLEMIDIPacketBuilder.cpp MIDI_Interfaces/BLEMIDI/BTstack/gatt_midi.cpp MIDI_Interfaces/BLEMIDI/BTstack/advertising.cpp ) endif() if(CS_MIDI_USB) list(APPEND CS_MIDI_SOURCES MIDI_Parsers/USBMIDI_Parser.cpp MIDI_Interfaces/USBMIDI_Interface.cpp ) endif() if(CS_MIDI_SERIAL) list(APPEND CS_MIDI_SOURCES MIDI_Interfaces/SerialMIDI_Interface.cpp ) endif() if(CS_MIDI_APPLEMIDI) list(APPEND CS_MIDI_SOURCES MIDI_Interfaces/AppleMIDI/LwIPUDP.cpp MIDI_Interfaces/AppleMIDI/vendor/AppleMIDI.cpp MIDI_Interfaces/AppleMIDI_Interface.cpp ) endif() add_library(cs_midi STATIC ${CS_MIDI_SOURCES}) target_include_directories(cs_midi PUBLIC ${CMAKE_CURRENT_LIST_DIR} ) if(CS_MIDI_APPLEMIDI) target_include_directories(cs_midi PRIVATE ${CMAKE_CURRENT_LIST_DIR}/MIDI_Interfaces/AppleMIDI/vendor ) endif() target_compile_definitions(cs_midi PUBLIC MIDI_NUM_CABLES=1 $<$:CS_MIDI_BLE=1> $<$:CS_MIDI_USB=1> $<$:CS_MIDI_SERIAL=1> $<$:CS_MIDI_APPLEMIDI=1> $<$:CS_MIDI_HID_KEYBOARD=1> ) target_link_libraries(cs_midi PUBLIC pico_stdlib hardware_sync hardware_adc ) if(CS_MIDI_BLE) target_link_libraries(cs_midi PRIVATE pico_btstack_ble pico_btstack_cyw43 pico_cyw43_arch_lwip_threadsafe_background ) endif() if(CS_MIDI_SERIAL) target_link_libraries(cs_midi PRIVATE hardware_uart ) endif() if(CS_MIDI_USB) target_link_libraries(cs_midi PRIVATE tinyusb_device tinyusb_board ) endif() if(CS_MIDI_APPLEMIDI) target_link_libraries(cs_midi PRIVATE pico_cyw43_arch_lwip_threadsafe_background pico_lwip_mdns ) endif() target_compile_features(cs_midi PUBLIC cxx_std_17)