blob: 59bf09f9e953d1a1b5b25252b098ae9e28e36967 [file] [log] [blame]
Austin Schuh208337d2022-01-01 14:29:11 -08001function(_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)
5endfunction()
6
Ravago Jonesd208ae72023-02-13 02:24:07 -08007# PICO_DEFAULT_PIOASM_OUTPUT_FORMAT, default output format used by pioasm when using pico_generate_pio_header, default=c-sdk, group=build
Austin Schuh208337d2022-01-01 14:29:11 -08008function(pico_generate_pio_header TARGET PIO)
9 _pico_init_pioasm()
Ravago Jonesd208ae72023-02-13 02:24:07 -080010 cmake_parse_arguments(pico_generate_pio_header "" "OUTPUT_FORMAT;OUTPUT_DIR" "" ${ARGN} )
11
12 if (pico_generate_pio_header_OUTPUT_FORMAT)
13 set(OUTPUT_FORMAT "${pico_generate_pio_header_OUTPUT_FORMAT}")
14 elseif(DEFINED PICO_DEFAULT_PIOASM_OUTPUT_FORMAT)
15 set(OUTPUT_FORMAT "${PICO_DEFAULT_PIOASM_OUTPUT_FORMAT}")
16 else()
17 set(OUTPUT_FORMAT "c-sdk")
18 endif()
Austin Schuh208337d2022-01-01 14:29:11 -080019
20 if (pico_generate_pio_header_OUTPUT_DIR)
21 get_filename_component(HEADER_DIR ${pico_generate_pio_header_OUTPUT_DIR} ABSOLUTE)
22 else()
23 set(HEADER_DIR "${CMAKE_CURRENT_BINARY_DIR}")
24 endif()
25 get_filename_component(PIO_NAME ${PIO} NAME)
26 set(HEADER "${HEADER_DIR}/${PIO_NAME}.h")
27 #message("Will generate ${HEADER}")
28 get_filename_component(HEADER_GEN_TARGET ${PIO} NAME_WE)
29 set(HEADER_GEN_TARGET "${TARGET}_${HEADER_GEN_TARGET}_pio_h")
30
31 add_custom_target(${HEADER_GEN_TARGET} DEPENDS ${HEADER})
32
33 add_custom_command(OUTPUT ${HEADER}
34 DEPENDS ${PIO}
Ravago Jonesd208ae72023-02-13 02:24:07 -080035 COMMAND Pioasm -o ${OUTPUT_FORMAT} ${PIO} ${HEADER}
Austin Schuh208337d2022-01-01 14:29:11 -080036 )
37 add_dependencies(${TARGET} ${HEADER_GEN_TARGET})
38 get_target_property(target_type ${TARGET} TYPE)
39 if ("INTERFACE_LIBRARY" STREQUAL "${target_type}")
40 target_include_directories(${TARGET} INTERFACE ${HEADER_DIR})
41 else()
42 target_include_directories(${TARGET} PUBLIC ${HEADER_DIR})
43 endif()
44endfunction()
45
46function(pico_add_uf2_output TARGET)
47 if (NOT ELF2UF2_FOUND)
48 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PICO_SDK_PATH}/tools)
49 find_package(ELF2UF2)
50 endif()
51 if (ELF2UF2_FOUND)
52 add_custom_command(TARGET ${TARGET} POST_BUILD
53 COMMAND ELF2UF2 $<TARGET_FILE:${TARGET}> $<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.uf2)
54 endif()
55endfunction()