This is an automated change with the following commands:
$ find . -name "BUILD.bazel" -o -name "*.bzl" \
-exec buildifier -lint=fix {} \;
* Add missing `load()` statements for things provided by @rules_cc. This
is required for Bazel >9.
* Sort attributes on build targets.
* Add missing trailing commas where applicable.
* Add empty 'check_gpio_param' to host GPIO
All the approriate gpio_xxx functions now call check_gpio_param. This
provides an easy way for a project to add simple range checking by
defining a final version of check_gpio_param, which whatever error
mechanism it chooses if an invalid value is passed.
Refs #2736
* Declare all host GPIO functions weak
This allows them to be easily overridden by user code for testing
purposes.
Refs #2736
* Mark all parameters in host GPIO unused
This prevents lots of compiler warnings if the default warning level
is increased.
Refs #2736
* Add missing functions/types to host GPIO
Some RP2350 GPIO_FUNC_ enums don't match the values defined in the
rp2350 hardware header but the actual values shouldn't matter if only
the enums are used (i.e. no magic numbers).
Refs #2736
Since ARM hosts have builtins listed in hardware/sync.h, these builtins
should be clobbered. Newer versions of LLVM/Clang emit an error when
clobbering these builtins, so this switches the overrides to use the
same patterns as pico_atomic to clobber the builtins.
* Add `PICO_MINIMAL_STORED_VECTOR_TABLE` config replacing (`PICO_NO_STORED_VECTOR_TABLE` which was a lie
* Add `PICO_NUM_VTABLE_IRQS`` which allows you to limit the number of IRQs included in both the STORED or RAM vector tables, and make the rest of the SDK behave properly based on that
* Because these new variables in `pico_crt0` are circularly dependent somewhat with variables in `hardware_irq` hoist all the interdependent variables into a new `pico_platform_common` which is common to all `rp2` platforms
* Move some previously duplicated `pico_platform` code into `pico_platform_common`
Net effect:
1. if you set PICO_MINIMAL_STORED_VECTOR_TABLE=1, you get a 4 word VTABLE on Arm.. you still get a RAM vector table with up to PICO_NUM_VTABLE_IRQs (defaults to NUM_IRQs) but everything - including things like `isr_pendsv` point to `__unhandled_user_irq`.
2. PICO_NUM_VTABLE_IRQs (default NUM_IRQS) sets the number of IRQs that have handlers in the VTABLE (this affects the space reserved, and what the irq APIs let you touch - at least as far as invalid_params_if!)
3. If you set PICO_MINIMAL_STORED_VECTOR_TABLE=1 for a no flash binary, then PICO_NUM_VTABLE_IRQs is forced to 0 as there is no reserved space for the handlers.
Co-authored-by: graham sanderson <graham.sanderson@raspberrypi.com>
* [Bazel] Fix bazel build, add presubmit
* Fixes a missing dep in the Bazel build breaking the host build.
* Automagically finds all board headers.
* Improves presubmit script polish for GH Action readiness.
* Adds a GitHub action workflow for the Bazel build.
* Disable failing checks
* Disables Windows, as there's a mix of real build errors and
overly-ambitious checks that don't work on Windows.
* Disables extra checks temporarily since it's currently failing.
* add PANIC and AUTO_INIT_MUTEX to pico_minimize_runtime; fix build with PICO_PANIC_FUNCTION=
* add pico_minimize_runtime for host builds - does nothing
* Add ALL option to pico_minimize_runtime
* Update config-extraction scripts to work with multiple chips
* Standardise wording between common options
* Various config-related fixes
* Update pico_rand to use correct busctrl_hw struct-name
* Don't start config descriptions with "The ..."
* Add host Bazel build
Updates target_compatible_with across the repo to ensure that wildcard
builds for both host and rp2040 succeed.
* Get unit tests building
* Add Python script to identify build system differences
Uses the build system tags to make it easier to identify differences
between the CMake and Bazel builds.
* Temporarily disable pico divider test
* Support PICO_BARE_METAL in Bazel
* Support PICO_NO_GC_SECTIONS in Bazel
* Support boot2 configuration in Bazel
Adds support for PICO_DEFAULT_BOOT_STAGE2 and
PICO_DEFAULT_BOOT_STAGE2_FILE in the Bazel build.
* Allowlist some CMake-only options
* Support CXX configuration options in Bazel
* Move multiple_choice_flag.bzl
* Support all pico boards
* Support linking multiple stdio implementations
Changes the Bazel build so stdio implementations are no longer mutually
exclusive.
* Add PICO_BOOT_STAGE2_LINK_IMAGE
* Support PICO_CMSIS_PATH in Bazel
* Support PICO_USE_DEFAULT_MAX_PAGE_SIZE in Bazel
* Silence PICO_CMSIS_VENDOR and PICO_CMSIS_DEVICE differences
* Support PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS in Bazel
* Properly support version defines
* Support embedding binary info in Bazel
* Embed build type in binary
* Support different linker scripts in Bazel build
* Finish out missing PICO_BUILD_DEFINE in Bazel build
* Support PICO_NO_TARGET_NAME
* Reorganize initial configuration options in Bazel
Cleans up and reorganizes some of the initial configuration options
added to the Bazel build so everything is consistent.
* Add builds for pioasm and elf2uf2
* Use Python rules from rules_python
* Actually link in output formats in pioasm tool
* Make tools have public visibility
* Add UF2 Bazel aspect
* Add TODOs for pioasm/uf2 helpers
* Fix compile flag typo
* Update Bazel SDK configuration strings to match recent CMake changes
* Fix pico_divider test
* Clean up straggling TODOs
* Clarify pico_stdio_test compatibility
* Initial Bazel Pico W support
* Add new files from develop
* Clean up compatibility expressions in Bazel build
* Clean up rp2 constraint handling in Bazel
* More Bazel docs cleanup
* Format Bazel build files
* Consolidate transitions in the Pico SDK
* Make every _allowlist_function_transition explicit
* More docs cleanup
* Add a few missing defines
* Improve PICO_CONFIG_HEADER correctness in Bazel
* Minor docs clarifications
* Build boot_stage2 with Bazel
Introduces the initial foundations of a Bazel build, including a
toolchain, critical generated headers, platform patterns, and enough
BUILD files to build boot_stage2.
* Bazel libraries to support picotool
* Move SDK defines to toolchain
* Switch to `archive_override` in MODULE.bazel
Uses archive_override where applicable to allow transitive bzlmod deps
to propagate.
* Multiplatform objcopy selection in Bazel build
Makes an objcopy alias that redirects to the objcopy tool for the
current exec platform, which allows boot_stage2 to build on Linux,
macOS, and Windows.
* Generate Bazel build files
Adds initial set of generated Bazel build files. Note that these do not
yet build, as dependency cycles are present.
* Fix dependency cycles in Bazel build
Fixes many dependency cycles, some were unintentionally created by the
build file generator, others are true dependency cycles that require
manual workarounds.
* Silence warning in pico_stdio Bazel build
Silences a stray warning in the Bazel build.
* Fix wildcard Bazel build
This makes `bazel build //...` succeed, and also prevents the fetching
of toolchains that aren't compatible with the current execution
environment (i.e. Windows computers will no longer try to download macOS
toolchains).
* Get the SDK working
Finishes out the remainder of the work required to successfully compile
a working blinky example.
* Fix UART stdio dependencies in Bazel build
Fixes some dependencies around pico_stdlib so that pico_stdlib links
properly and UART stdio works.
* Add linux support to Bazel build
* Get Bazel deps from registry
Adds external an external registry for resolving Bazel module
dependencies.
* Fix host configuration for picotool
Provides the appropriate defines for host builds to support the picotool
build.
* Remove -ffreestanding from Bazel toolchain
The -ffreestanding toolchain flag is quite strict, so remove it from the
Bazel toolchain.
* Remove unused .bzl file
* Reduce Bazel compiler flags
Cuts out most of the Bazel toolchain flags and only specifies the
bare-minimum set of flags. Also, adds wrapper linker flags for functions
the SDK wraps.
* Get USB serial working
Adds initial TinyUSB support and enough integration to get USB serial
working.
* Remove "Generated build file"
Removes comments that indicates BUILD.bazel files are generated. This
was used during initial bringup to indicate hand-crafted vs
automatically generated BUILD.bazel files.
* Do not build USB libraries unless configured
Prevents USB libraries from being built unless the build is properly
configured to use them.
* Switch to rules_cc toolchains
Moves toolchain configuration to use the new rules in rules_cc.
* Minor cleanup in parse_version.py
Cleans up trailing whitespace and runs the black formatter on
parse_version.py.
* Simplify constraint dimensions in Bazel build
Consolidates the class/chip constraint settings to be a single
constraint_setting with a config_setting that represents the rp2 class.
* Update pin of rules_cc in Bazel build
Includes a necessary fix for the target_compatible_with expression in
the cc_toolchain to work as intended.
* Move toolchains from pico.bzl to BUILD.bazel
Moves toolchain definitions from pico.bzl to BUILD.bazel to make them
easier to find and read.
* Run buildifier on Bazel build files
Fix trivial formatting issues by running buildifier on all BUILD.bazel
files.
* Make objcopy rule
Makes a simple objcopy rule to remove direct references to the ARM
toolchains.
* Fix link flags in Bazel build
Critical flags were not being applied to link steps. This applies -mcpu
and -mthumb to the link steps to make the produced binaries work again.
* Mention missing host build support
* Fix various Bazel library rules
* pico_bit_ops was incomplete.
* pico_double and pico_float were trying to link in the "none"
implementation.
* Extend Bazel build documentation
Improves documentation and comments across the Bazel build.
* Clean up auxilary tools in Bazel build
Switches genrules to use skylib rules to simplify things. Reworks
version header generation to use the Bazel module version rather than
parsing CMake.
* Update boot_stage2 Bazel build file
Moves `includes` to be enumerated on the correct library.
* Add WORKSPACE version fallback
WORKSPACE Bazel projects don't support querying module version, so add a
fallback of '0.0.1-WORKSPACE' so the build can succeed.
* Fix malloc handling in Bazel build
* Fix Bazel dependency cycle in pico_malloc
* Prevent malloc from being linked into boot_stage2
Prevents Bazel from ever trying to link malloc into the boot_stage2
binary.
* Remove custom bootloader platform
A dedicated boot_stage2 platform introduces a lot of complexity that
needs to be more thought-through.
* Allow pre-processor overrides for Clock/PLL setup
* Use `_KHZ` rather than `_MHZ` for `XOSC_` `SYS_CLOCK_` etc definitions (`_MHZ` versions are provided for compatibility when `_KHZ` is a multiple of 1000)
Co-authored-by: graham sanderson <graham.sanderson@raspberrypi.com>
* switch all .S files to unified asm, and use a new macro `pico_default_asm_setup` to setup compiler to help porting to other compilers. Also some minor tweaks:
* switch some code to use more recent helper methods (e.g. busy_wait_at_least_n_cycles)
* add documentation to host divider header (I had this ages ago and never promoted)
* fixup erroneous docs about 32p32 values in all divider headers
* fix some compiler warnings
* rename recently added `unified_asm` macro to `pico_default_asm`
1. Make sure Pico SDK libraries have the correct dependencies on other SDK libraries
2. Pico SDK libraries all have _headers variants to include the headers. This may facilitate building user STATIC libraries without
pulling in SDK code, though care will still need to be taken w.r.t. values of #defines
3. Make sure the _headers versions also have the correct dependencies
Note: There are a few exceptions to 1. for some non code libraries like pico_standard_link and pico_cxx_options
* Extract all poll/threadsafe_background/freertos from cyw43_arch into new abstraction async_context:
* provides support for asynchronous events (timers/IRQ notifications) to be handled in a safe context.
* now guarantees all callbacks happen on a single core.
* is reusable by multiple different libraries (stdio_usb can now be ported to this but hasn't been yet).
* supports multiple independent instances (independent instances will not block each other).
* cyw43_arch libraries cleaned up to use the new abstraction. Note each distinct cyw43_arch type is now a very thin layer that creates the right type of context and adds cyw43_driver and lwip support as appropriate.
Additionally,
* Add new pico_time and hardware_alarm APIs
* Add from_us_since_boot()
* Add alarm_pool_create_with_unused_hardware_alarm()
* Add alarm_pool_add_alarm_at_force_in_context()
* Add hardware_alarm_claim_unused()
* Add hardware_alarm_force_irq()
* Added panic_compact() and some minor comment cleanup; moved FIRST_USER_IRQ define to platform_defs.h
* fix __force_inline for different GCC versions in cpp mode (the affected versions are different from c mode), and build kitchsink.c as a cpp file too for testing
* silly bug in host platform.h
* Platform updates
- Add PICO_RP2040=1 to rp2040 builds
- Add new PICO_RP2040_B0/1/2_SUPPORTED macros and retailer chip specific code to use
- Add doxygen to platform.h
- Make pico.h includable from assembly (because header order is important and tricky) - split out platform_asm.h
- Switch to using PICO_RP2040_B0_SUPPORTED in board headers
* add stdio_usb_connected() method
* add PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS to allow waiting for CDC connection during init(*
* add puts_raw and putchar_raw to skip any CR/LF translation
Fixes the following warning:
```
[...]/pico-sdk/src/host/hardware_divider/include/hardware/divider.h:81:26: warning: operand of ?: changes signedness from 'int' to 'uint32_t' {aka 'unsigned int'} due to unsignedness of other operand [-Wsign-compare]
return b ? (a / b) : -1;
^~
```