CMakeLists.txt 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. function(_pico_init_pioasm)
  2. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PICO_SDK_PATH}/tools)
  3. # todo CMAKE_CURRENT_FUNCTION_LIST_DIR ... what version?
  4. find_package(Pioasm REQUIRED)
  5. endfunction()
  6. # PICO_DEFAULT_PIOASM_OUTPUT_FORMAT, default output format used by pioasm when using pico_generate_pio_header, default=c-sdk, group=build
  7. function(pico_generate_pio_header TARGET PIO)
  8. _pico_init_pioasm()
  9. cmake_parse_arguments(pico_generate_pio_header "" "OUTPUT_FORMAT;OUTPUT_DIR" "" ${ARGN} )
  10. if (pico_generate_pio_header_OUTPUT_FORMAT)
  11. set(OUTPUT_FORMAT "${pico_generate_pio_header_OUTPUT_FORMAT}")
  12. elseif(DEFINED PICO_DEFAULT_PIOASM_OUTPUT_FORMAT)
  13. set(OUTPUT_FORMAT "${PICO_DEFAULT_PIOASM_OUTPUT_FORMAT}")
  14. else()
  15. set(OUTPUT_FORMAT "c-sdk")
  16. endif()
  17. if (pico_generate_pio_header_OUTPUT_DIR)
  18. get_filename_component(HEADER_DIR ${pico_generate_pio_header_OUTPUT_DIR} ABSOLUTE)
  19. else()
  20. set(HEADER_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  21. endif()
  22. get_filename_component(PIO_NAME ${PIO} NAME)
  23. set(HEADER "${HEADER_DIR}/${PIO_NAME}.h")
  24. #message("Will generate ${HEADER}")
  25. get_filename_component(HEADER_GEN_TARGET ${PIO} NAME_WE)
  26. set(HEADER_GEN_TARGET "${TARGET}_${HEADER_GEN_TARGET}_pio_h")
  27. add_custom_target(${HEADER_GEN_TARGET} DEPENDS ${HEADER})
  28. add_custom_command(OUTPUT ${HEADER}
  29. DEPENDS ${PIO}
  30. COMMAND Pioasm -o ${OUTPUT_FORMAT} ${PIO} ${HEADER}
  31. )
  32. add_dependencies(${TARGET} ${HEADER_GEN_TARGET})
  33. get_target_property(target_type ${TARGET} TYPE)
  34. if ("INTERFACE_LIBRARY" STREQUAL "${target_type}")
  35. target_include_directories(${TARGET} INTERFACE ${HEADER_DIR})
  36. else()
  37. target_include_directories(${TARGET} PUBLIC ${HEADER_DIR})
  38. endif()
  39. endfunction()
  40. function(pico_add_uf2_output TARGET)
  41. if (NOT ELF2UF2_FOUND)
  42. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PICO_SDK_PATH}/tools)
  43. find_package(ELF2UF2)
  44. endif()
  45. if (ELF2UF2_FOUND)
  46. add_custom_command(TARGET ${TARGET} POST_BUILD
  47. COMMAND ELF2UF2 $<TARGET_FILE:${TARGET}> $<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.uf2)
  48. endif()
  49. endfunction()