mirror of
https://github.com/raspberrypi/pico-sdk.git
synced 2025-02-14 00:40:53 +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.
146 lines
4.1 KiB
Plaintext
146 lines
4.1 KiB
Plaintext
load("@rules_cc//cc/toolchains:action_type_config.bzl", "cc_action_type_config")
|
|
load("@rules_cc//cc/toolchains:tool.bzl", "cc_tool")
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
cc_tool(
|
|
name = "arm-none-eabi-ar_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-ar.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-ar",
|
|
}),
|
|
)
|
|
|
|
cc_action_type_config(
|
|
name = "arm-none-eabi-ar",
|
|
action_types = ["@rules_cc//cc/toolchains/actions:ar_actions"],
|
|
tools = [":arm-none-eabi-ar_tool"],
|
|
)
|
|
|
|
cc_tool(
|
|
name = "arm-none-eabi-g++_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-g++.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-g++",
|
|
}),
|
|
data = glob([
|
|
"**/*.spec",
|
|
"**/*.specs",
|
|
"arm-none-eabi/include/**",
|
|
"lib/gcc/arm-none-eabi/*/include/**",
|
|
"lib/gcc/arm-none-eabi/*/include-fixed/**",
|
|
"libexec/**",
|
|
]),
|
|
)
|
|
|
|
cc_action_type_config(
|
|
name = "arm-none-eabi-g++",
|
|
action_types = ["@rules_cc//cc/toolchains/actions:cpp_compile_actions"],
|
|
tools = [":arm-none-eabi-g++_tool"],
|
|
)
|
|
|
|
cc_tool(
|
|
name = "arm-none-eabi-gcc_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-gcc.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-gcc",
|
|
}),
|
|
data = glob([
|
|
"**/*.spec",
|
|
"**/*.specs",
|
|
"arm-none-eabi/include/**",
|
|
"lib/gcc/arm-none-eabi/*/include/**",
|
|
"lib/gcc/arm-none-eabi/*/include-fixed/**",
|
|
"libexec/**",
|
|
]) +
|
|
# The assembler needs to be explicitly added. Note that the path is
|
|
# intentionally different here as `as` is called from arm-none-eabi-gcc.
|
|
# `arm-none-eabi-as` will not suffice for this context.
|
|
select({
|
|
"@platforms//os:windows": ["//:arm-none-eabi/bin/as.exe"],
|
|
"//conditions:default": ["//:arm-none-eabi/bin/as"],
|
|
}),
|
|
)
|
|
|
|
cc_action_type_config(
|
|
name = "arm-none-eabi-gcc",
|
|
action_types = [
|
|
"@rules_cc//cc/toolchains/actions:assembly_actions",
|
|
"@rules_cc//cc/toolchains/actions:c_compile",
|
|
],
|
|
tools = [":arm-none-eabi-gcc_tool"],
|
|
)
|
|
|
|
# This tool is actually just g++ under the hood, but this specifies a
|
|
# different set of data files to pull into the sandbox at runtime.
|
|
cc_tool(
|
|
name = "arm-none-eabi-ld_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-g++.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-g++",
|
|
}),
|
|
data = glob([
|
|
"**/*.a",
|
|
"**/*.ld",
|
|
"**/*.o",
|
|
"**/*.spec",
|
|
"**/*.specs",
|
|
"**/*.so",
|
|
"libexec/**",
|
|
]),
|
|
)
|
|
|
|
cc_action_type_config(
|
|
name = "arm-none-eabi-ld",
|
|
action_types = ["@rules_cc//cc/toolchains/actions:link_actions"],
|
|
tools = [":arm-none-eabi-ld_tool"],
|
|
)
|
|
|
|
cc_tool(
|
|
name = "arm-none-eabi-objcopy_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-objcopy.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-objcopy",
|
|
}),
|
|
)
|
|
|
|
cc_action_type_config(
|
|
name = "arm-none-eabi-objcopy",
|
|
action_types = ["@rules_cc//cc/toolchains/actions:objcopy_embed_data"],
|
|
tools = [":arm-none-eabi-objcopy_tool"],
|
|
)
|
|
|
|
cc_tool(
|
|
name = "arm-none-eabi-strip_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-strip.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-strip",
|
|
}),
|
|
)
|
|
|
|
cc_action_type_config(
|
|
name = "arm-none-eabi-strip",
|
|
action_types = ["@rules_cc//cc/toolchains/actions:strip"],
|
|
tools = [":arm-none-eabi-strip_tool"],
|
|
)
|
|
|
|
cc_tool(
|
|
name = "arm-none-eabi-objdump_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-objdump.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-objdump",
|
|
}),
|
|
)
|
|
|
|
# There is not yet a well-known action type for objdump.
|
|
|
|
cc_tool(
|
|
name = "arm-none-eabi-gcov_tool",
|
|
src = select({
|
|
"@platforms//os:windows": "//:bin/arm-none-eabi-gcov.exe",
|
|
"//conditions:default": "//:bin/arm-none-eabi-gcov",
|
|
}),
|
|
)
|
|
|
|
# There is not yet a well-known action type for gcov.
|