1# Finds (or builds) the pioasm executable
2#
3# This will define the following imported targets
4#
5#     pioasm
6#
7
8if (NOT TARGET pioasm)
9    # todo we would like to use pckgconfig to look for it first
10    # see https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/
11
12    include(ExternalProject)
13
14    set(PIOASM_SOURCE_DIR ${PICO_SDK_PATH}/tools/pioasm)
15    set(PIOASM_BINARY_DIR ${CMAKE_BINARY_DIR}/pioasm)
16    set(PIOASM_INSTALL_DIR ${CMAKE_BINARY_DIR}/pioasm-install CACHE PATH "Directory where pioasm has been installed" FORCE)
17
18    set(pioasmBuild_TARGET pioasmBuild)
19    set(pioasm_TARGET pioasm)
20
21    if (NOT TARGET ${pioasmBuild_TARGET})
22        pico_message_debug("PIOASM will need to be built")
23#        message("Adding external project ${pioasmBuild_Target} in ${CMAKE_CURRENT_LIST_DIR}}")
24        ExternalProject_Add(${pioasmBuild_TARGET}
25                PREFIX pioasm
26                SOURCE_DIR ${PIOASM_SOURCE_DIR}
27                BINARY_DIR ${PIOASM_BINARY_DIR}
28                INSTALL_DIR ${PIOASM_INSTALL_DIR}
29                CMAKE_ARGS
30                    "--no-warn-unused-cli"
31                    "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}"
32                    "-DPIOASM_FLAT_INSTALL=1"
33                    "-DCMAKE_INSTALL_PREFIX=${PIOASM_INSTALL_DIR}"
34                    "-DCMAKE_RULE_MESSAGES=OFF" # quieten the build
35                    "-DCMAKE_INSTALL_MESSAGE=NEVER" # quieten the install
36                CMAKE_CACHE_ARGS "-DPIOASM_EXTRA_SOURCE_FILES:STRING=${PIOASM_EXTRA_SOURCE_FILES}"
37                BUILD_ALWAYS 1 # force dependency checking
38                EXCLUDE_FROM_ALL TRUE
39                )
40    endif()
41
42    if (CMAKE_HOST_WIN32)
43        set(pioasm_EXECUTABLE ${PIOASM_INSTALL_DIR}/pioasm/pioasm.exe)
44    else()
45        set(pioasm_EXECUTABLE ${PIOASM_INSTALL_DIR}/pioasm/pioasm)
46    endif()
47    add_executable(${pioasm_TARGET} IMPORTED GLOBAL)
48    set_property(TARGET ${pioasm_TARGET} PROPERTY IMPORTED_LOCATION
49            ${pioasm_EXECUTABLE})
50
51    add_dependencies(${pioasm_TARGET} ${pioasmBuild_TARGET})
52endif()
53