| # Finds (or builds) the picotool executable |
| # |
| # This will define the following imported targets |
| # |
| # picotool |
| # |
| cmake_minimum_required(VERSION 3.17) |
| |
| if (NOT TARGET picotool) |
| include(ExternalProject) |
| |
| if (DEFINED ENV{PICOTOOL_FETCH_FROM_GIT_PATH} AND (NOT PICOTOOL_FETCH_FROM_GIT_PATH)) |
| set(PICOTOOL_FETCH_FROM_GIT_PATH $ENV{PICOTOOL_FETCH_FROM_GIT_PATH}) |
| message("Using PICOTOOL_FETCH_FROM_GIT_PATH from environment ('${PICOTOOL_FETCH_FROM_GIT_PATH}')") |
| endif () |
| |
| include(FetchContent) |
| set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) |
| if (PICOTOOL_FETCH_FROM_GIT_PATH) |
| get_filename_component(FETCHCONTENT_BASE_DIR "${PICOTOOL_FETCH_FROM_GIT_PATH}" ABSOLUTE) |
| endif () |
| |
| set(picotool_BUILD_TARGET picotoolBuild) |
| set(picotool_TARGET picotool) |
| |
| if (NOT TARGET ${picotool_BUILD_TARGET}) |
| if (NOT PICOTOOL_FETCH_FROM_GIT_PATH) |
| message(WARNING |
| "No installed picotool with version ${picotool_VERSION_REQUIRED} found - building from source\n" |
| "It is recommended to build and install picotool separately, or to set PICOTOOL_FETCH_FROM_GIT_PATH " |
| "to a common directory for all your SDK projects" |
| ) |
| endif() |
| |
| FetchContent_Declare( |
| picotool |
| GIT_REPOSITORY https://github.com/raspberrypi/picotool.git |
| GIT_TAG 2.0.0 |
| GIT_PROGRESS true |
| ) |
| |
| FetchContent_GetProperties(picotool) |
| set(picotool_INSTALL_DIR ${FETCHCONTENT_BASE_DIR} CACHE PATH "Directory where picotool has been installed" FORCE) |
| if (NOT picotool_POPULATED) |
| message("Downloading Picotool") |
| FetchContent_Populate(picotool) |
| endif () |
| set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) |
| |
| add_custom_target(picotoolForceReconfigure |
| ${CMAKE_COMMAND} -E touch_nocreate "${CMAKE_SOURCE_DIR}/CMakeLists.txt" |
| VERBATIM) |
| |
| ExternalProject_Add(${picotool_BUILD_TARGET} |
| PREFIX picotool |
| SOURCE_DIR ${picotool_SOURCE_DIR} |
| BINARY_DIR ${picotool_BINARY_DIR} |
| INSTALL_DIR ${picotool_INSTALL_DIR} |
| DEPENDS picotoolForceReconfigure |
| CMAKE_ARGS |
| "--no-warn-unused-cli" |
| "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}" |
| "-DPICO_SDK_PATH:FILEPATH=${PICO_SDK_PATH}" |
| "-DPICOTOOL_NO_LIBUSB=1" |
| "-DPICOTOOL_FLAT_INSTALL=1" |
| "-DCMAKE_INSTALL_PREFIX=${picotool_INSTALL_DIR}" |
| "-DCMAKE_RULE_MESSAGES=OFF" # quieten the build |
| "-DCMAKE_INSTALL_MESSAGE=NEVER" # quieten the install |
| BUILD_ALWAYS 1 # force dependency checking |
| EXCLUDE_FROM_ALL TRUE |
| TEST_COMMAND |
| ${picotool_INSTALL_DIR}/picotool/picotool |
| version ${picotool_VERSION_REQUIRED} |
| TEST_AFTER_INSTALL TRUE |
| ) |
| endif() |
| |
| set(picotool_EXECUTABLE ${picotool_INSTALL_DIR}/picotool/picotool) |
| add_executable(${picotool_TARGET} IMPORTED GLOBAL) |
| set_property(TARGET ${picotool_TARGET} PROPERTY IMPORTED_LOCATION |
| ${picotool_EXECUTABLE}) |
| |
| add_dependencies(${picotool_TARGET} ${picotool_BUILD_TARGET}) |
| endif() |