blob: a5c0411e4e9f0f9da560a463cc30d7f85344caa0 [file] [log] [blame]
load("//bazel:defs.bzl", "otp_header_parse", "picotool_binary_data_header")
package(default_visibility = ["//visibility:public"])
PICOTOOL_SDK_VERSION_STRING = module_version() if module_version() != None else "0.0.1-WORKSPACE"
picotool_binary_data_header(
name = "rp2350_rom",
src = "bootrom.end.bin",
out = "rp2350.rom.h",
)
# TODO: Make it possible to build the prebuilt from source.
picotool_binary_data_header(
name = "xip_ram_perms_elf",
src = "//xip_ram_perms:xip_ram_perms_prebuilt",
out = "xip_ram_perms_elf.h",
)
# TODO: Make it possible to build the prebuilt from source.
picotool_binary_data_header(
name = "flash_id_bin",
src = "//picoboot_flash_id:picoboot_flash_id_prebuilt",
out = "flash_id_bin.h",
)
cc_library(
name = "xip_ram_perms",
srcs = ["xip_ram_perms.cpp"],
hdrs = [
"xip_ram_perms.h",
"xip_ram_perms_elf.h",
],
deps = [
"//bazel:data_locs",
"//lib/whereami",
],
)
filegroup(
name = "data_locs_header",
srcs = ["data_locs.h"],
)
otp_header_parse(
name = "otp_header",
src = "@pico-sdk//src/rp2350/hardware_regs:otp_data_header",
out = "rp2350.json.h",
target_compatible_with = select({
"@rules_cc//cc/compiler:msvc-cl": ["@platforms//:incompatible"],
"//conditions:default": [],
}),
)
cc_binary(
name = "picotool",
srcs = [
"cli.h",
"clipp/clipp.h",
"main.cpp",
"otp.cpp",
"otp.h",
"rp2350.rom.h",
"xip_ram_perms.cpp",
] + select({
# MSVC can't handle long strings, so use this manually generated
# header instead.
"@rules_cc//cc/compiler:msvc-cl": [],
"//conditions:default": ["rp2350.json.h"],
}),
copts = select({
"@rules_cc//cc/compiler:msvc-cl": [
"/std:c++20",
],
"//conditions:default": [
"-fexceptions",
"-Wno-delete-non-abstract-non-virtual-dtor",
"-Wno-reorder-ctor",
"-Wno-unused-variable",
"-Wno-unused-but-set-variable",
],
}),
defines = [
'PICOTOOL_VERSION=\\"{}\\"'.format(PICOTOOL_VERSION_STRING),
'SYSTEM_VERSION=\\"host\\"',
'COMPILER_INFO=\\"local\\"',
"SUPPORT_A0=0",
"SUPPORT_A2=1",
"PICOTOOL_CODE_OTP=0",
# TODO: Make it possible to compile from source.
"USE_PRECOMPILED=1",
],
# Windows does not behave nicely with the automagic force_dynamic_linkage_enabled.
dynamic_deps = select({
"@rules_libusb//:force_dynamic_linkage_enabled": ["@libusb//:libusb_dynamic"],
"//conditions:default": [],
}),
deps = [
":xip_ram_perms",
"//bazel:data_locs",
"//bintool",
"//elf",
"//elf2uf2",
"//errors",
"//lib/nlohmann_json:json",
"//picoboot_connection",
"@libusb",
"@pico-sdk//src/common/boot_picobin_headers",
"@pico-sdk//src/common/boot_picoboot_headers",
"@pico-sdk//src/common/boot_uf2_headers",
"@pico-sdk//src/common/pico_base_headers",
"@pico-sdk//src/common/pico_binary_info",
"@pico-sdk//src/common/pico_usb_reset_interface_headers",
"@pico-sdk//src/rp2350/hardware_regs:otp_data",
"@pico-sdk//src/rp2_common/pico_bootrom:pico_bootrom_headers",
"@pico-sdk//src/rp2_common/pico_stdio_usb:reset_interface_headers",
] + select({
# MSVC can't handle long strings, so use this manually generated
# header instead.
"@rules_cc//cc/compiler:msvc-cl": ["//otp_header_parser:pre_generated_otp_header"],
"//conditions:default": [],
}),
)