pico-sdk/tools/Findpicotool.cmake
2024-08-08 08:54:38 -05:00

85 lines
3.3 KiB
CMake

# 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()