Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
uses: actions/checkout@v4
with:
repository: raspberrypi/pico-sdk
ref: develop
ref: rpi-connect-preview
path: pico-sdk
submodules: ${{ matrix.mbedtls && 'recursive' || 'false' }}

Expand Down Expand Up @@ -119,7 +119,7 @@ jobs:
uses: actions/checkout@v4
with:
repository: raspberrypi/pico-sdk
ref: develop
ref: rpi-connect-preview
path: pico-sdk
submodules: 'recursive'
- name: Build and Install
Expand All @@ -131,7 +131,7 @@ jobs:
uses: actions/checkout@v4
with:
repository: raspberrypi/pico-examples
ref: develop
ref: rpi-connect-preview
path: pico-examples
- name: Build Pico Examples
run: |
Expand Down
32 changes: 31 additions & 1 deletion BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("//bazel:defs.bzl", "otp_header_parse", "picotool_binary_data_header")
load("//bazel:defs.bzl", "otp_header_parse", "picotool_binary_data_header", "provision_boards_header")

package(default_visibility = ["//visibility:public"])

Expand All @@ -13,6 +13,13 @@ picotool_binary_data_header(
out = "xip_ram_perms_elf.h",
)

# TODO: Make it possible to build the prebuilt from source.
picotool_binary_data_header(
name = "rpi_connect_provision_elf",
src = "//rpi_connect_provision:rpi_connect_provision_prebuilt",
out = "rpi_connect_provision_elf.h",
)

# TODO: Make it possible to build the prebuilt from source.
picotool_binary_data_header(
name = "enc_bootloader_elf",
Expand Down Expand Up @@ -65,6 +72,19 @@ cc_library(
],
)

cc_library(
name = "rpi_connect_provision",
srcs = ["get_rpi_connect_provision.cpp"],
hdrs = [
"get_rpi_connect_provision.h",
"rpi_connect_provision_elf.h",
],
deps = [
"//bazel:data_locs",
"//lib/whereami",
],
)

cc_library(
name = "enc_bootloader",
srcs = ["get_enc_bootloader.cpp"],
Expand All @@ -79,6 +99,13 @@ cc_library(
],
)

# Any board target carries all the SDK board headers
provision_boards_header(
name = "provision_boards",
board = "@pico-sdk//src/boards:pico2_w",
out = "provision_boards.h",
)

filegroup(
name = "data_locs_header",
srcs = ["data_locs.h"],
Expand All @@ -100,10 +127,12 @@ cc_binary(
"cli.h",
"clipp/clipp.h",
"get_enc_bootloader.cpp",
"get_rpi_connect_provision.cpp",
"get_xip_ram_perms.cpp",
"main.cpp",
"otp.cpp",
"otp.h",
"provision_boards.h",
] + select({
# MSVC can't handle long strings, so use this manually generated
# header instead.
Expand Down Expand Up @@ -139,6 +168,7 @@ cc_binary(
}),
deps = [
":enc_bootloader",
":rpi_connect_provision",
":xip_ram_perms",
"//bazel:data_locs",
"//bintool",
Expand Down
88 changes: 74 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,18 @@ if (NOT DEFINED USE_PRECOMPILED)
endif()


# BUILD_BYPRODUCTS lists the files the project produces, so rules that depend
# on them are re-run when they change (depending on the target only orders it)
function(add_embedded_data_project TARGET)
cmake_parse_arguments(PARSE_ARGV 1 OPTS "" "PREFIX;SOURCE_DIR;BINARY_DIR" "CMAKE_ARGS")
cmake_parse_arguments(PARSE_ARGV 1 OPTS "" "PREFIX;SOURCE_DIR;BINARY_DIR" "CMAKE_ARGS;BUILD_BYPRODUCTS")

if (USE_PRECOMPILED)
ExternalProject_Add(${TARGET}
PREFIX ${OPTS_PREFIX}
SOURCE_DIR ${OPTS_SOURCE_DIR}
BINARY_DIR ${OPTS_BINARY_DIR}
CMAKE_ARGS ${OPTS_CMAKE_ARGS}
BUILD_BYPRODUCTS ${OPTS_BUILD_BYPRODUCTS}
INSTALL_COMMAND ""
BUILD_ALWAYS 1
)
Expand All @@ -82,13 +85,15 @@ function(add_embedded_data_project TARGET)
SOURCE_DIR ${OPTS_SOURCE_DIR}
BINARY_DIR ${OPTS_BINARY_DIR}
CMAKE_ARGS ${OPTS_CMAKE_ARGS}
BUILD_BYPRODUCTS ${OPTS_BUILD_BYPRODUCTS}
BUILD_ALWAYS 1
)
endif()
endfunction()


# compile enc_bootloader.elf
set(ENC_BOOTLOADER_ELF ${CMAKE_BINARY_DIR}/enc_bootloader/enc_bootloader.elf)
add_embedded_data_project(enc_bootloader
PREFIX enc_bootloader
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/enc_bootloader
Expand All @@ -99,11 +104,11 @@ add_embedded_data_project(enc_bootloader
"-DUSE_PRECOMPILED:BOOL=${USE_PRECOMPILED}"
"-DUSE_MBEDTLS=0"
"-DPICO_DEBUG_INFO_IN_RELEASE=OFF"
BUILD_BYPRODUCTS ${ENC_BOOTLOADER_ELF}
)

set(ENC_BOOTLOADER_ELF ${CMAKE_BINARY_DIR}/enc_bootloader/enc_bootloader.elf)

if (TARGET mbedtls)
set(ENC_BOOTLOADER_MBEDTLS_ELF ${CMAKE_BINARY_DIR}/enc_bootloader_mbedtls/enc_bootloader.elf)
add_embedded_data_project(enc_bootloader_mbedtls
PREFIX enc_bootloader_mbedtls
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/enc_bootloader
Expand All @@ -114,13 +119,13 @@ if (TARGET mbedtls)
"-DUSE_PRECOMPILED:BOOL=${USE_PRECOMPILED}"
"-DUSE_MBEDTLS=1"
"-DPICO_DEBUG_INFO_IN_RELEASE=OFF"
BUILD_BYPRODUCTS ${ENC_BOOTLOADER_MBEDTLS_ELF}
)

set(ENC_BOOTLOADER_MBEDTLS_ELF ${CMAKE_BINARY_DIR}/enc_bootloader_mbedtls/enc_bootloader.elf)
endif()

if (NOT PICOTOOL_NO_LIBUSB)
# compile xip_ram_perms.elf
set(XIP_RAM_PERMS_ELF ${CMAKE_BINARY_DIR}/xip_ram_perms/xip_ram_perms.elf)
add_embedded_data_project(xip_ram_perms
PREFIX xip_ram_perms
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/xip_ram_perms
Expand All @@ -130,11 +135,25 @@ if (NOT PICOTOOL_NO_LIBUSB)
"-DPICO_SDK_PATH:FILEPATH=${PICO_SDK_PATH}"
"-DUSE_PRECOMPILED:BOOL=${USE_PRECOMPILED}"
"-DPICO_DEBUG_INFO_IN_RELEASE=OFF"
BUILD_BYPRODUCTS ${XIP_RAM_PERMS_ELF}
)

set(XIP_RAM_PERMS_ELF ${CMAKE_BINARY_DIR}/xip_ram_perms/xip_ram_perms.elf)
# compile rpi_connect_provision.elf
set(RPI_CONNECT_PROVISION_ELF ${CMAKE_BINARY_DIR}/rpi_connect_provision/rpi_connect_provision.elf)
add_embedded_data_project(rpi_connect_provision
PREFIX rpi_connect_provision
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/rpi_connect_provision
BINARY_DIR ${CMAKE_BINARY_DIR}/rpi_connect_provision
CMAKE_ARGS
"-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}"
"-DPICO_SDK_PATH:FILEPATH=${PICO_SDK_PATH}"
"-DUSE_PRECOMPILED:BOOL=${USE_PRECOMPILED}"
"-DPICO_DEBUG_INFO_IN_RELEASE=OFF"
BUILD_BYPRODUCTS ${RPI_CONNECT_PROVISION_ELF}
)

# compile flash_id
set(FLASH_ID_BIN ${CMAKE_BINARY_DIR}/picoboot_flash_id/flash_id.bin)
add_embedded_data_project(flash_id
PREFIX picoboot_flash_id
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/picoboot_flash_id
Expand All @@ -144,10 +163,9 @@ if (NOT PICOTOOL_NO_LIBUSB)
"-DPICO_SDK_PATH:FILEPATH=${PICO_SDK_PATH}"
"-DUSE_PRECOMPILED:BOOL=${USE_PRECOMPILED}"
"-DPICO_DEBUG_INFO_IN_RELEASE=OFF"
BUILD_BYPRODUCTS ${FLASH_ID_BIN}
)

set(FLASH_ID_BIN ${CMAKE_BINARY_DIR}/picoboot_flash_id/flash_id.bin)

# We want to generate headers from WELCOME.HTM etc.
ExternalProject_Add(otp_header_parser
PREFIX otp_header_parser
Expand All @@ -171,6 +189,33 @@ if (NOT PICOTOOL_NO_LIBUSB)
set_property(TARGET otp_header_parse PROPERTY IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/otp_header_parser/otp_header_parse)
endif()

# Board pin defaults for provision connect --board, from the SDK board headers
ExternalProject_Add(board_header_parser
PREFIX board_header_parser
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/board_header_parser
BINARY_DIR ${CMAKE_BINARY_DIR}/board_header_parser
BUILD_ALWAYS 1
DOWNLOAD_COMMAND ""
INSTALL_COMMAND ""
)

add_executable(board_header_parse IMPORTED)
add_dependencies(board_header_parse board_header_parser)
if (is_multi_config)
set_property(TARGET board_header_parse PROPERTY IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/board_header_parser/${tmp_config}/board_header_parse)
else()
set_property(TARGET board_header_parse PROPERTY IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/board_header_parser/board_header_parse)
endif()

file(GLOB BOARD_HEADERS CONFIGURE_DEPENDS ${PICO_SDK_PATH}/src/boards/include/boards/*.h)
set(PROVISION_BOARDS_H ${CMAKE_CURRENT_BINARY_DIR}/provision_boards.h)
add_custom_target(generate_provision_boards DEPENDS ${PROVISION_BOARDS_H})
add_custom_command(OUTPUT ${PROVISION_BOARDS_H}
COMMENT "Generating ${PROVISION_BOARDS_H}"
DEPENDS ${CMAKE_CURRENT_LIST_DIR}/board_header_parser/board_header_parse.cpp ${BOARD_HEADERS}
COMMAND board_header_parse ${PROVISION_BOARDS_H} ${BOARD_HEADERS}
)

if (PICOTOOL_CODE_OTP)
set(GENERATED_H ${CMAKE_CURRENT_BINARY_DIR}/otp_contents.h)
add_custom_target(generate_otp_header DEPENDS ${GENERATED_H})
Expand Down Expand Up @@ -219,37 +264,46 @@ endif()

add_custom_target(embedded_data DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/xip_ram_perms_elf.h
${CMAKE_CURRENT_BINARY_DIR}/rpi_connect_provision_elf.h
${CMAKE_CURRENT_BINARY_DIR}/flash_id_bin.h)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/rpi_connect_provision_elf.h
COMMAND ${CMAKE_COMMAND}
-D BINARY_FILE=${RPI_CONNECT_PROVISION_ELF}
-D OUTPUT_NAME=rpi_connect_provision_elf
-P ${CMAKE_CURRENT_LIST_DIR}/cmake/binh.cmake
DEPENDS rpi_connect_provision ${RPI_CONNECT_PROVISION_ELF}
COMMENT "Configuring rpi_connect_provision_elf.h"
VERBATIM)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/xip_ram_perms_elf.h
COMMAND ${CMAKE_COMMAND}
-D BINARY_FILE=${XIP_RAM_PERMS_ELF}
-D OUTPUT_NAME=xip_ram_perms_elf
-P ${CMAKE_CURRENT_LIST_DIR}/cmake/binh.cmake
DEPENDS xip_ram_perms
DEPENDS xip_ram_perms ${XIP_RAM_PERMS_ELF}
COMMENT "Configuring xip_ram_perms_elf.h"
VERBATIM)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enc_bootloader_elf.h
COMMAND ${CMAKE_COMMAND}
-D BINARY_FILE=${ENC_BOOTLOADER_ELF}
-D OUTPUT_NAME=enc_bootloader_elf
-P ${CMAKE_CURRENT_LIST_DIR}/cmake/binh.cmake
DEPENDS enc_bootloader
DEPENDS enc_bootloader ${ENC_BOOTLOADER_ELF}
COMMENT "Configuring enc_bootloader_elf.h"
VERBATIM)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enc_bootloader_mbedtls_elf.h
COMMAND ${CMAKE_COMMAND}
-D BINARY_FILE=${ENC_BOOTLOADER_MBEDTLS_ELF}
-D OUTPUT_NAME=enc_bootloader_mbedtls_elf
-P ${CMAKE_CURRENT_LIST_DIR}/cmake/binh.cmake
DEPENDS enc_bootloader_mbedtls
DEPENDS enc_bootloader_mbedtls ${ENC_BOOTLOADER_MBEDTLS_ELF}
COMMENT "Configuring enc_bootloader_mbedtls_elf.h"
VERBATIM)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/flash_id_bin.h
COMMAND ${CMAKE_COMMAND}
-D BINARY_FILE=${FLASH_ID_BIN}
-D OUTPUT_NAME=flash_id_bin
-P ${CMAKE_CURRENT_LIST_DIR}/cmake/binh.cmake
DEPENDS flash_id
DEPENDS flash_id ${FLASH_ID_BIN}
COMMENT "Configuring flash_id_bin.h"
VERBATIM)

Expand Down Expand Up @@ -288,8 +342,8 @@ add_executable(picotool
main.cpp)
add_dependencies(picotool embedded_data_no_libusb)
if (NOT PICOTOOL_NO_LIBUSB)
target_sources(picotool PRIVATE get_xip_ram_perms.cpp)
add_dependencies(picotool generate_otp_header embedded_data)
target_sources(picotool PRIVATE get_xip_ram_perms.cpp get_rpi_connect_provision.cpp)
add_dependencies(picotool generate_otp_header generate_provision_boards embedded_data)
endif()
set(PROJECT_VERSION 2.3.2-develop)
set(PICOTOOL_VERSION 2.3.2-develop)
Expand Down Expand Up @@ -422,4 +476,10 @@ if (NOT PICOTOOL_NO_LIBUSB)
${XIP_RAM_PERMS_ELF}
DESTINATION ${INSTALL_DATADIR}
)

#Install rpi_connect_provision.elf
install(FILES
${RPI_CONNECT_PROVISION_ELF}
DESTINATION ${INSTALL_DATADIR}
)
endif()
Loading
Loading