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_SDK_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": [], }), )