mirror of
https://github.com/raspberrypi/pico-sdk.git
synced 2025-02-11 00:39:55 +00:00
* 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.
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
# A transition in Bazel is a way to force changes to the way the build is
|
|
# evaluated for all dependencies of a given rule.
|
|
#
|
|
# Imagine the following simple dependency graph:
|
|
#
|
|
# ->: depends on
|
|
# a -> b -> c
|
|
#
|
|
# Normally, if you set `defines` on a, they couldn't apply to b or c because
|
|
# they are dependencies of a. There's no way for b or c to know about a's
|
|
# settings, because they don't even know a exists!
|
|
#
|
|
# We can fix this via a transition! If we put a transition in front of `a`
|
|
# that sets --copts=-DFOO=42, we're telling Bazel to build a and all of its
|
|
# dependencies under that configuration.
|
|
#
|
|
# Note: Flags must be referenced as e.g. `//command_line_option:copt` in
|
|
# transitions.
|
|
#
|
|
# `declare_transition()` eliminates the frustrating amount of boilerplate. All
|
|
# you need to do is provide a set of attrs, and then a `flag_overrides`
|
|
# dictionary that tells `declare_transition()` which attrs to pull flag values
|
|
# from. The common `src` attr tells the transition which build rule to apply
|
|
# the transition to.
|
|
def declare_transtion(attrs, flag_overrides, executable = True):
|
|
def _flag_override_impl(settings, attrs):
|
|
return {
|
|
key: str(getattr(attrs, value))
|
|
for key, value in flag_overrides.items()
|
|
}
|
|
|
|
_transition = transition(
|
|
implementation = _flag_override_impl,
|
|
inputs = [],
|
|
outputs = flag_overrides.keys(),
|
|
)
|
|
|
|
def _symlink_artifact_impl(ctx):
|
|
out = ctx.actions.declare_file(ctx.label.name)
|
|
if executable:
|
|
ctx.actions.symlink(output = out, target_file = ctx.executable.src)
|
|
return [DefaultInfo(files = depset([out]), executable = out)]
|
|
|
|
ctx.actions.symlink(
|
|
output = out,
|
|
target_file = ctx.attr.src[0][DefaultInfo].files.to_list()[0],
|
|
)
|
|
return [DefaultInfo(files = depset([out]))]
|
|
|
|
return rule(
|
|
implementation = _symlink_artifact_impl,
|
|
executable = executable,
|
|
attrs = {
|
|
"src": attr.label(
|
|
cfg = _transition,
|
|
executable = executable,
|
|
mandatory = True,
|
|
),
|
|
"_allowlist_function_transition": attr.label(
|
|
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
|
|
),
|
|
} | attrs,
|
|
)
|
|
|
|
rp2040_bootloader_binary = declare_transtion(
|
|
attrs = {
|
|
"_malloc": attr.label(default = "//src/rp2_common/boot_stage2:no_malloc"),
|
|
},
|
|
flag_overrides = {
|
|
# We don't want --custom_malloc to ever apply to the bootloader, so
|
|
# always explicitly override it here.
|
|
"//command_line_option:custom_malloc": "_malloc",
|
|
},
|
|
)
|