From 6d08e41ae2fd04c0a7d962b97617cf54c650eda3 Mon Sep 17 00:00:00 2001 From: William Vinnicombe Date: Thu, 22 Aug 2024 12:15:46 +0100 Subject: [PATCH] Add find_package compatible install --- CMakeLists.txt | 27 +++++++++++++++++++++++++++ cmake/pico-sdk-config.cmake | 6 ++++++ cmake/pico_toolchain_file.cmake | 17 +++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 cmake/pico-sdk-config.cmake create mode 100644 cmake/pico_toolchain_file.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ecb515e5..31ddd9636 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,4 +68,31 @@ if (NOT TARGET _pico_sdk_inclusion_marker) if (NOT PICO_SDK_TOP_LEVEL_PROJECT) pico_promote_common_scope_vars() endif() + + if (PICO_SDK_TOP_LEVEL_PROJECT) + # Create a ConfigVersion.cmake file + include(CMakePackageConfigHelpers) + write_basic_package_version_file( + ${CMAKE_BINARY_DIR}/pico-sdk-config-version.cmake + VERSION ${PICO_SDK_VERSION_STRING} + COMPATIBILITY SameMajorVersion + ARCH_INDEPENDENT + ) + + # Temporarily copy that file into source tree + install(CODE "file(COPY ${CMAKE_BINARY_DIR}/pico-sdk-config-version.cmake DESTINATION ${CMAKE_CURRENT_LIST_DIR}/cmake/)") + + # Install entire pico-sdk directory + get_filename_component(binDir ${CMAKE_BINARY_DIR} NAME) + install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + TYPE LIB + PATTERN "${binDir}*" EXCLUDE + PATTERN "*.git*" EXCLUDE + PATTERN "*.github*" EXCLUDE + PATTERN "*.vscode*" EXCLUDE + PATTERN "test*" EXCLUDE) + + # Delete temp file + install(CODE "file(REMOVE ${CMAKE_CURRENT_LIST_DIR}/cmake/pico-sdk-config-version.cmake)") + endif() endif() diff --git a/cmake/pico-sdk-config.cmake b/cmake/pico-sdk-config.cmake new file mode 100644 index 000000000..5980224cd --- /dev/null +++ b/cmake/pico-sdk-config.cmake @@ -0,0 +1,6 @@ + +if (DEFINED PICO_SDK_PATH) + pico_sdk_init() +else() + message(FATAL_ERROR "Must use the toolchain file at ${CMAKE_CURRENT_LIST_DIR}/pico_toolchain_file.cmake, else pico-sdk project will not build") +endif() diff --git a/cmake/pico_toolchain_file.cmake b/cmake/pico_toolchain_file.cmake new file mode 100644 index 000000000..d5ecd2c18 --- /dev/null +++ b/cmake/pico_toolchain_file.cmake @@ -0,0 +1,17 @@ +set(CMAKE_SYSTEM_NAME PICO) + +if (NOT DEFINED PICO_PREVIOUS_CMAKE_TOOLCHAIN_FILE) + unset(CMAKE_TOOLCHAIN_FILE CACHE) +else() + set(CMAKE_TOOLCHAIN_FILE ${PICO_PREVIOUS_CMAKE_TOOLCHAIN_FILE}) +endif() + +if (${PROJECT_NAME} MATCHES "CMAKE_TRY_COMPILE") + # Don't log toolchain searches when testing compiler + set(CMAKE_MESSAGE_LOG_LEVEL ERROR) +endif() +include(${CMAKE_CURRENT_LIST_DIR}/../pico_sdk_init.cmake) + +message("Toolchain file now ${CMAKE_TOOLCHAIN_FILE}") +set(CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" CACHE FILEPATH "") +include(${CMAKE_TOOLCHAIN_FILE})