# Add executable. Default name is the project name, version 0.1

set(TARGET_NAME ${PROJECT_NAME})
message(STATUS "Configuring ${TARGET_NAME}")

set(${PROJECT_NAME}_SOURCES "main.cpp")
set(${PROJECT_NAME}_INCLUDES "")
set(${PROJECT_NAME}_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/lib/freertos/config")
set(${PROJECT_NAME}_DEPENDENCIES pico_stdlib FreeRTOS-Kernel-Heap4)

set(SUBDIRS_LIST "")

SubDirListRecurse(${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR} SUBDIRS_LIST)

foreach(SUBDIR IN LISTS SUBDIRS_LIST)
  file(GLOB_RECURSE SUBDIR_SOURCES ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR}/*.cc ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR}/*.cpp)
  list(APPEND ${PROJECT_NAME}_SOURCES ${SUBDIR_SOURCES})
  file(GLOB_RECURSE SUBDIR_INCLUDES ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR}/*.h)
  list(APPEND ${PROJECT_NAME}_INCLUDES ${SUBDIR_INCLUDES})
  list(APPEND ${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR})
endforeach()

add_executable(${TARGET_NAME} ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_INCLUDES})

pico_set_program_name(${TARGET_NAME} "${TARGET_NAME}")
pico_set_program_version(${TARGET_NAME} "0.1")

# Modify the below lines to enable/disable output over UART/USB
pico_enable_stdio_uart(${TARGET_NAME} 0)
pico_enable_stdio_usb(${TARGET_NAME} 1)

# Add the standard include files to the build
target_include_directories(${TARGET_NAME} PRIVATE ${${PROJECT_NAME}_INCLUDE_DIRS})

# Add any user requested libraries
add_dependencies(${TARGET_NAME} ${${PROJECT_NAME}_DEPENDENCIES})
target_link_libraries(${TARGET_NAME} ${${PROJECT_NAME}_DEPENDENCIES})

pico_add_extra_outputs(${TARGET_NAME})

add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.uf2 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})