# 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) if (PICOTOOL_FETCH_FROM_GIT_PATH) get_filename_component(picotool_INSTALL_DIR "${PICOTOOL_FETCH_FROM_GIT_PATH}" ABSOLUTE) else () get_filename_component(picotool_INSTALL_DIR "${FETCHCONTENT_BASE_DIR}" ABSOLUTE) endif () set(picotool_INSTALL_DIR ${picotool_INSTALL_DIR} CACHE PATH "Directory where picotool has been installed" FORCE) 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() if (NOT PICOTOOL_GIT_REPOSITORY_URL) set(PICOTOOL_GIT_REPOSITORY_URL https://github.com/raspberrypi/picotool.git) endif() if (NOT PICOTOOL_GIT_BRANCH) if (PICO_SDK_VERSION_PRE_RELEASE_ID) set(PICOTOOL_GIT_BRANCH ${PICO_SDK_VERSION_PRE_RELEASE_ID}) else() set(PICOTOOL_GIT_BRANCH ${PICO_SDK_VERSION_STRING}) endif() endif() message("Downloading Picotool") FetchContent_Populate(picotool QUIET GIT_REPOSITORY ${PICOTOOL_GIT_REPOSITORY_URL} GIT_TAG ${PICOTOOL_GIT_BRANCH} SOURCE_DIR ${picotool_INSTALL_DIR}/picotool-src BINARY_DIR ${picotool_INSTALL_DIR}/picotool-build SUBBUILD_DIR ${picotool_INSTALL_DIR}/picotool-subbuild ) 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()