cmake_minimum_required(VERSION 3.13)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

set(PICO_SDK_PATH "${CMAKE_CURRENT_LIST_DIR}/../libs/pico-sdk")
include("${PICO_SDK_PATH}/external/pico_sdk_import.cmake")

set(PICO_PIO_USB_DIR "${CMAKE_CURRENT_LIST_DIR}/../libs/pico-pio-hirsute")
add_subdirectory(${PICO_PIO_USB_DIR} pico_pio_usb)

set(target_name hirsute)

project(${target_name} C CXX ASM)

add_executable(${target_name}
    hirsute.c
)

target_sources(${target_name} PRIVATE
    hirsute.c
    usb_descriptors.c
    ${PICO_SDK_PATH}/lib/tinyusb/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c
    ${PICO_SDK_PATH}/lib/tinyusb/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
)

pico_sdk_init()

target_link_options(${target_name} PRIVATE -Xlinker --print-memory-usage)
target_compile_options(${target_name} PRIVATE -Wall -Wextra)

target_compile_definitions(${target_name} PRIVATE PIO_USB_USE_TINYUSB)
target_include_directories(${target_name} PRIVATE ${CMAKE_CURRENT_LIST_DIR})

target_link_libraries(${target_name} PRIVATE pico_stdlib pico_multicore pico_pio_usb tinyusb_device tinyusb_host tinyusb_board)

pico_add_extra_outputs(${target_name})

add_custom_command(
    COMMAND picotool load ${target_name}.uf2 && picotool reboot
    COMMENT "Loading ${target_name}.uf2 to the board"
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    VERBATIM
    POST_BUILD
    TARGET ${target_name}
)
