1*61c4878aSAndroid Build Coastguard Worker# Copyright 2022 The Pigweed Authors 2*61c4878aSAndroid Build Coastguard Worker# 3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 5*61c4878aSAndroid Build Coastguard Worker# the License at 6*61c4878aSAndroid Build Coastguard Worker# 7*61c4878aSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*61c4878aSAndroid Build Coastguard Worker# 9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 13*61c4878aSAndroid Build Coastguard Worker# the License. 14*61c4878aSAndroid Build Coastguard Worker 15*61c4878aSAndroid Build Coastguard Workerload("@rules_python//sphinxdocs:sphinx_docs_library.bzl", "sphinx_docs_library") 16*61c4878aSAndroid Build Coastguard Workerload("//pw_build:compatibility.bzl", "incompatible_with_mcu") 17*61c4878aSAndroid Build Coastguard Workerload("//pw_build:merge_flags.bzl", "flags_from_dict") 18*61c4878aSAndroid Build Coastguard Workerload("//pw_build:pw_cc_binary.bzl", "pw_cc_binary") 19*61c4878aSAndroid Build Coastguard Workerload("//pw_build:pw_copy_and_patch_file.bzl", "pw_copy_and_patch_file") 20*61c4878aSAndroid Build Coastguard Workerload("//pw_toolchain/cc/current_toolchain:conditions.bzl", "if_compiler_is_clang") 21*61c4878aSAndroid Build Coastguard Workerload("//targets/rp2040:flash.bzl", "flash_rp2040", "flash_rp2350") 22*61c4878aSAndroid Build Coastguard Workerload("//targets/rp2040:transition.bzl", "RP2_SYSTEM_FLAGS", "rp2040_binary", "rp2350_binary") 23*61c4878aSAndroid Build Coastguard Worker 24*61c4878aSAndroid Build Coastguard Workerpackage(default_visibility = ["//visibility:public"]) 25*61c4878aSAndroid Build Coastguard Worker 26*61c4878aSAndroid Build Coastguard Workerlicenses(["notice"]) 27*61c4878aSAndroid Build Coastguard Worker 28*61c4878aSAndroid Build Coastguard Workerconfig_setting( 29*61c4878aSAndroid Build Coastguard Worker name = "pico_clang_build", 30*61c4878aSAndroid Build Coastguard Worker constraint_values = [ 31*61c4878aSAndroid Build Coastguard Worker "//pw_build/constraints/chipset:rp2040", 32*61c4878aSAndroid Build Coastguard Worker ], 33*61c4878aSAndroid Build Coastguard Worker flag_values = { 34*61c4878aSAndroid Build Coastguard Worker "@bazel_tools//tools/cpp:compiler": "clang", 35*61c4878aSAndroid Build Coastguard Worker }, 36*61c4878aSAndroid Build Coastguard Worker) 37*61c4878aSAndroid Build Coastguard Worker 38*61c4878aSAndroid Build Coastguard Worker# This is an incomplete platform, do NOT try to pass this 39*61c4878aSAndroid Build Coastguard Worker# as a --platforms flag value. Use :rp2040 or :rp2350. 40*61c4878aSAndroid Build Coastguard Workerplatform( 41*61c4878aSAndroid Build Coastguard Worker name = "rp2_common", 42*61c4878aSAndroid Build Coastguard Worker constraint_values = [ 43*61c4878aSAndroid Build Coastguard Worker "@freertos//:disable_task_statics", 44*61c4878aSAndroid Build Coastguard Worker "freertos_config_cv", 45*61c4878aSAndroid Build Coastguard Worker "//pw_build/constraints/chipset:rp2040", # TODO: https://pwbug.dev/343487589 - Use Pico SDK constraints. 46*61c4878aSAndroid Build Coastguard Worker "//pw_build/constraints/rtos:freertos", 47*61c4878aSAndroid Build Coastguard Worker "//pw_cpu_exception:enabled", 48*61c4878aSAndroid Build Coastguard Worker "//pw_interrupt_cortex_m:backend", 49*61c4878aSAndroid Build Coastguard Worker "@rust_crates//:no_std", 50*61c4878aSAndroid Build Coastguard Worker "@platforms//os:none", 51*61c4878aSAndroid Build Coastguard Worker ], 52*61c4878aSAndroid Build Coastguard Worker flags = flags_from_dict(RP2_SYSTEM_FLAGS), 53*61c4878aSAndroid Build Coastguard Worker visibility = ["//visibility:private"], 54*61c4878aSAndroid Build Coastguard Worker) 55*61c4878aSAndroid Build Coastguard Worker 56*61c4878aSAndroid Build Coastguard Workerplatform( 57*61c4878aSAndroid Build Coastguard Worker name = "rp2040", 58*61c4878aSAndroid Build Coastguard Worker constraint_values = [ 59*61c4878aSAndroid Build Coastguard Worker "@freertos//:port_ARM_CM0", 60*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//bazel/constraint:rp2040", 61*61c4878aSAndroid Build Coastguard Worker # For toolchain selection. 62*61c4878aSAndroid Build Coastguard Worker "@platforms//cpu:armv6-m", 63*61c4878aSAndroid Build Coastguard Worker "@pw_toolchain//constraints/arm_mcpu:cortex-m0plus", 64*61c4878aSAndroid Build Coastguard Worker ], 65*61c4878aSAndroid Build Coastguard Worker flags = flags_from_dict({ 66*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//bazel/config:PICO_DEFAULT_LINKER_SCRIPT": ":rp2040_linker_script", 67*61c4878aSAndroid Build Coastguard Worker }), 68*61c4878aSAndroid Build Coastguard Worker parents = [":rp2_common"], 69*61c4878aSAndroid Build Coastguard Worker) 70*61c4878aSAndroid Build Coastguard Worker 71*61c4878aSAndroid Build Coastguard Workerplatform( 72*61c4878aSAndroid Build Coastguard Worker name = "rp2350", 73*61c4878aSAndroid Build Coastguard Worker constraint_values = [ 74*61c4878aSAndroid Build Coastguard Worker "@freertos//:port_ARM_CM33_NTZ", 75*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//bazel/constraint:rp2350", 76*61c4878aSAndroid Build Coastguard Worker # For toolchain selection. 77*61c4878aSAndroid Build Coastguard Worker "@platforms//cpu:armv8-m", 78*61c4878aSAndroid Build Coastguard Worker "@pw_toolchain//constraints/arm_mcpu:cortex-m33", 79*61c4878aSAndroid Build Coastguard Worker ], 80*61c4878aSAndroid Build Coastguard Worker flags = flags_from_dict({ 81*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//bazel/config:PICO_DEFAULT_LINKER_SCRIPT": ":rp2350_linker_script", 82*61c4878aSAndroid Build Coastguard Worker }), 83*61c4878aSAndroid Build Coastguard Worker parents = [":rp2_common"], 84*61c4878aSAndroid Build Coastguard Worker) 85*61c4878aSAndroid Build Coastguard Worker 86*61c4878aSAndroid Build Coastguard Workercc_library( 87*61c4878aSAndroid Build Coastguard Worker name = "extra_platform_libs", 88*61c4878aSAndroid Build Coastguard Worker deps = [ 89*61c4878aSAndroid Build Coastguard Worker ":pre_init", 90*61c4878aSAndroid Build Coastguard Worker "//pw_tokenizer:linker_script", 91*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/pico_stdlib", 92*61c4878aSAndroid Build Coastguard Worker ] + if_compiler_is_clang( 93*61c4878aSAndroid Build Coastguard Worker [ 94*61c4878aSAndroid Build Coastguard Worker "//pw_libcxx", 95*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/pico_clib_interface:llvm_libc_interface", 96*61c4878aSAndroid Build Coastguard Worker ], 97*61c4878aSAndroid Build Coastguard Worker otherwise = [], 98*61c4878aSAndroid Build Coastguard Worker ), 99*61c4878aSAndroid Build Coastguard Worker) 100*61c4878aSAndroid Build Coastguard Worker 101*61c4878aSAndroid Build Coastguard Workeralias( 102*61c4878aSAndroid Build Coastguard Worker name = "pico_sdk_clib_select", 103*61c4878aSAndroid Build Coastguard Worker actual = if_compiler_is_clang( 104*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/pico_clib_interface:llvm_libc_interface", 105*61c4878aSAndroid Build Coastguard Worker otherwise = "@pico-sdk//src/rp2_common/pico_clib_interface:newlib_interface", 106*61c4878aSAndroid Build Coastguard Worker ), 107*61c4878aSAndroid Build Coastguard Worker) 108*61c4878aSAndroid Build Coastguard Worker 109*61c4878aSAndroid Build Coastguard Workercc_library( 110*61c4878aSAndroid Build Coastguard Worker name = "freertos_config", 111*61c4878aSAndroid Build Coastguard Worker hdrs = [ 112*61c4878aSAndroid Build Coastguard Worker "config/FreeRTOSConfig.h", 113*61c4878aSAndroid Build Coastguard Worker ], 114*61c4878aSAndroid Build Coastguard Worker includes = ["config/"], 115*61c4878aSAndroid Build Coastguard Worker target_compatible_with = [":freertos_config_cv"], 116*61c4878aSAndroid Build Coastguard Worker deps = [ 117*61c4878aSAndroid Build Coastguard Worker "//third_party/freertos:config_assert", 118*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/cmsis:cmsis_core", 119*61c4878aSAndroid Build Coastguard Worker ], 120*61c4878aSAndroid Build Coastguard Worker) 121*61c4878aSAndroid Build Coastguard Worker 122*61c4878aSAndroid Build Coastguard Workerconstraint_value( 123*61c4878aSAndroid Build Coastguard Worker name = "freertos_config_cv", 124*61c4878aSAndroid Build Coastguard Worker constraint_setting = "@freertos//:freertos_config_setting", 125*61c4878aSAndroid Build Coastguard Worker) 126*61c4878aSAndroid Build Coastguard Worker 127*61c4878aSAndroid Build Coastguard Workercc_library( 128*61c4878aSAndroid Build Coastguard Worker name = "unit_test_app", 129*61c4878aSAndroid Build Coastguard Worker testonly = True, 130*61c4878aSAndroid Build Coastguard Worker srcs = [ 131*61c4878aSAndroid Build Coastguard Worker "unit_test_app.cc", 132*61c4878aSAndroid Build Coastguard Worker ], 133*61c4878aSAndroid Build Coastguard Worker deps = [ 134*61c4878aSAndroid Build Coastguard Worker "//pw_status", 135*61c4878aSAndroid Build Coastguard Worker "//pw_system", 136*61c4878aSAndroid Build Coastguard Worker "//pw_unit_test:rpc_service", 137*61c4878aSAndroid Build Coastguard Worker ], 138*61c4878aSAndroid Build Coastguard Worker alwayslink = True, 139*61c4878aSAndroid Build Coastguard Worker) 140*61c4878aSAndroid Build Coastguard Worker 141*61c4878aSAndroid Build Coastguard Worker# This is just a stub to silence warnings saying that boot.cc and *.h files are 142*61c4878aSAndroid Build Coastguard Worker# missing from the bazel build. There's no plans yet to do a Bazel build for 143*61c4878aSAndroid Build Coastguard Worker# the Pi Pico. 144*61c4878aSAndroid Build Coastguard Workerfilegroup( 145*61c4878aSAndroid Build Coastguard Worker name = "rp2040_files", 146*61c4878aSAndroid Build Coastguard Worker srcs = [ 147*61c4878aSAndroid Build Coastguard Worker "config/rp2040_hal_config.h", 148*61c4878aSAndroid Build Coastguard Worker ], 149*61c4878aSAndroid Build Coastguard Worker) 150*61c4878aSAndroid Build Coastguard Worker 151*61c4878aSAndroid Build Coastguard Worker# This is a duplication of the contents of pigweed_module_config.h since we 152*61c4878aSAndroid Build Coastguard Worker# can't do a -include because copts do not propagate to dependencies. 153*61c4878aSAndroid Build Coastguard Workercc_library( 154*61c4878aSAndroid Build Coastguard Worker name = "pigweed_module_config", 155*61c4878aSAndroid Build Coastguard Worker hdrs = ["config/pigweed_module_config.h"], 156*61c4878aSAndroid Build Coastguard Worker defines = [ 157*61c4878aSAndroid Build Coastguard Worker # LINT.IfChange 158*61c4878aSAndroid Build Coastguard Worker "PW_THREAD_FREERTOS_CONFIG_JOINING_ENABLED=1", 159*61c4878aSAndroid Build Coastguard Worker "PW_ASSERT_BASIC_ACTION=PW_ASSERT_BASIC_ACTION_EXIT", 160*61c4878aSAndroid Build Coastguard Worker # LINT.ThenChange(//targets/rp2040/config/pigweed_module_config.h) 161*61c4878aSAndroid Build Coastguard Worker ], 162*61c4878aSAndroid Build Coastguard Worker) 163*61c4878aSAndroid Build Coastguard Worker 164*61c4878aSAndroid Build Coastguard Workercc_library( 165*61c4878aSAndroid Build Coastguard Worker name = "pre_init", 166*61c4878aSAndroid Build Coastguard Worker srcs = [ 167*61c4878aSAndroid Build Coastguard Worker "boot.cc", 168*61c4878aSAndroid Build Coastguard Worker ], 169*61c4878aSAndroid Build Coastguard Worker target_compatible_with = [":freertos_config_cv"], 170*61c4878aSAndroid Build Coastguard Worker deps = [ 171*61c4878aSAndroid Build Coastguard Worker ":freertos_config", 172*61c4878aSAndroid Build Coastguard Worker "//pw_assert", 173*61c4878aSAndroid Build Coastguard Worker "//pw_assert:backend_impl", 174*61c4878aSAndroid Build Coastguard Worker "//pw_cpu_exception:entry_backend_impl", 175*61c4878aSAndroid Build Coastguard Worker "//pw_string", 176*61c4878aSAndroid Build Coastguard Worker "//pw_system:init", 177*61c4878aSAndroid Build Coastguard Worker "//third_party/freertos:support", 178*61c4878aSAndroid Build Coastguard Worker "@freertos", 179*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/hardware_exception:hardware_exception", 180*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/pico_stdlib", 181*61c4878aSAndroid Build Coastguard Worker ], 182*61c4878aSAndroid Build Coastguard Worker alwayslink = 1, 183*61c4878aSAndroid Build Coastguard Worker) 184*61c4878aSAndroid Build Coastguard Worker 185*61c4878aSAndroid Build Coastguard Workercc_library( 186*61c4878aSAndroid Build Coastguard Worker name = "device_handler", 187*61c4878aSAndroid Build Coastguard Worker srcs = [ 188*61c4878aSAndroid Build Coastguard Worker "device_handler.cc", 189*61c4878aSAndroid Build Coastguard Worker ], 190*61c4878aSAndroid Build Coastguard Worker strip_include_prefix = "public", 191*61c4878aSAndroid Build Coastguard Worker deps = [ 192*61c4878aSAndroid Build Coastguard Worker "//pw_cpu_exception_cortex_m:snapshot", 193*61c4878aSAndroid Build Coastguard Worker "//pw_system:device_handler.facade", 194*61c4878aSAndroid Build Coastguard Worker "//pw_thread_freertos:snapshot", 195*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/hardware_watchdog:hardware_watchdog", 196*61c4878aSAndroid Build Coastguard Worker ], 197*61c4878aSAndroid Build Coastguard Worker) 198*61c4878aSAndroid Build Coastguard Worker 199*61c4878aSAndroid Build Coastguard Workerpw_cc_binary( 200*61c4878aSAndroid Build Coastguard Worker name = "system_async_example", 201*61c4878aSAndroid Build Coastguard Worker testonly = True, 202*61c4878aSAndroid Build Coastguard Worker srcs = ["system_async_example.cc"], 203*61c4878aSAndroid Build Coastguard Worker # TODO(b/365184562): This target does not build with asan and fuzztest. 204*61c4878aSAndroid Build Coastguard Worker target_compatible_with = select({ 205*61c4878aSAndroid Build Coastguard Worker "//pw_fuzzer:use_fuzztest": ["@platforms//:incompatible"], 206*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 207*61c4878aSAndroid Build Coastguard Worker }), 208*61c4878aSAndroid Build Coastguard Worker deps = [ 209*61c4878aSAndroid Build Coastguard Worker "//pw_channel:rp2_stdio_channel", 210*61c4878aSAndroid Build Coastguard Worker "//pw_libcxx", 211*61c4878aSAndroid Build Coastguard Worker "//pw_multibuf:testing", 212*61c4878aSAndroid Build Coastguard Worker "//pw_system:async", 213*61c4878aSAndroid Build Coastguard Worker "//third_party/freertos:support", 214*61c4878aSAndroid Build Coastguard Worker "@freertos", 215*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/pico_stdlib", 216*61c4878aSAndroid Build Coastguard Worker ], 217*61c4878aSAndroid Build Coastguard Worker) 218*61c4878aSAndroid Build Coastguard Worker 219*61c4878aSAndroid Build Coastguard Workerrp2040_binary( 220*61c4878aSAndroid Build Coastguard Worker name = "rp2040_system_async_example", 221*61c4878aSAndroid Build Coastguard Worker testonly = True, 222*61c4878aSAndroid Build Coastguard Worker binary = ":system_async_example", 223*61c4878aSAndroid Build Coastguard Worker) 224*61c4878aSAndroid Build Coastguard Worker 225*61c4878aSAndroid Build Coastguard Workerflash_rp2040( 226*61c4878aSAndroid Build Coastguard Worker name = "flash_rp2040_system_async_example", 227*61c4878aSAndroid Build Coastguard Worker testonly = True, 228*61c4878aSAndroid Build Coastguard Worker rp2040_binary = ":rp2040_system_async_example", 229*61c4878aSAndroid Build Coastguard Worker) 230*61c4878aSAndroid Build Coastguard Worker 231*61c4878aSAndroid Build Coastguard Workerpw_copy_and_patch_file( 232*61c4878aSAndroid Build Coastguard Worker name = "rp2040_memmap_default", 233*61c4878aSAndroid Build Coastguard Worker src = "@pico-sdk//src/rp2_common/pico_crt0/rp2040:memmap_default.ld", 234*61c4878aSAndroid Build Coastguard Worker out = "patched_rp2040_memmap_default.ld", 235*61c4878aSAndroid Build Coastguard Worker patch_file = "patches/rp2040_memmap_default.ld.patch", 236*61c4878aSAndroid Build Coastguard Worker) 237*61c4878aSAndroid Build Coastguard Worker 238*61c4878aSAndroid Build Coastguard Workercc_library( 239*61c4878aSAndroid Build Coastguard Worker name = "rp2040_linker_script", 240*61c4878aSAndroid Build Coastguard Worker additional_linker_inputs = [":rp2040_memmap_default"], 241*61c4878aSAndroid Build Coastguard Worker linkopts = ["-T$(execpath :rp2040_memmap_default)"], 242*61c4878aSAndroid Build Coastguard Worker deps = [ 243*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/pico_standard_link:default_flash_region", 244*61c4878aSAndroid Build Coastguard Worker ], 245*61c4878aSAndroid Build Coastguard Worker) 246*61c4878aSAndroid Build Coastguard Worker 247*61c4878aSAndroid Build Coastguard Workerrp2350_binary( 248*61c4878aSAndroid Build Coastguard Worker name = "rp2350_system_async_example", 249*61c4878aSAndroid Build Coastguard Worker testonly = True, 250*61c4878aSAndroid Build Coastguard Worker binary = ":system_async_example", 251*61c4878aSAndroid Build Coastguard Worker) 252*61c4878aSAndroid Build Coastguard Worker 253*61c4878aSAndroid Build Coastguard Workerflash_rp2350( 254*61c4878aSAndroid Build Coastguard Worker name = "flash_rp2350_system_async_example", 255*61c4878aSAndroid Build Coastguard Worker testonly = True, 256*61c4878aSAndroid Build Coastguard Worker rp2350_binary = ":rp2350_system_async_example", 257*61c4878aSAndroid Build Coastguard Worker) 258*61c4878aSAndroid Build Coastguard Worker 259*61c4878aSAndroid Build Coastguard Workerpw_copy_and_patch_file( 260*61c4878aSAndroid Build Coastguard Worker name = "rp2350_memmap_default", 261*61c4878aSAndroid Build Coastguard Worker src = "@pico-sdk//src/rp2_common/pico_crt0/rp2350:memmap_default.ld", 262*61c4878aSAndroid Build Coastguard Worker out = "patched_rp2350_memmap_default.ld", 263*61c4878aSAndroid Build Coastguard Worker patch_file = "patches/rp2350_memmap_default.ld.patch", 264*61c4878aSAndroid Build Coastguard Worker) 265*61c4878aSAndroid Build Coastguard Worker 266*61c4878aSAndroid Build Coastguard Workercc_library( 267*61c4878aSAndroid Build Coastguard Worker name = "rp2350_linker_script", 268*61c4878aSAndroid Build Coastguard Worker additional_linker_inputs = [":rp2350_memmap_default"], 269*61c4878aSAndroid Build Coastguard Worker linkopts = ["-T$(execpath :rp2350_memmap_default)"], 270*61c4878aSAndroid Build Coastguard Worker deps = [ 271*61c4878aSAndroid Build Coastguard Worker "@pico-sdk//src/rp2_common/pico_standard_link:default_flash_region", 272*61c4878aSAndroid Build Coastguard Worker ], 273*61c4878aSAndroid Build Coastguard Worker) 274*61c4878aSAndroid Build Coastguard Worker 275*61c4878aSAndroid Build Coastguard Workersphinx_docs_library( 276*61c4878aSAndroid Build Coastguard Worker name = "docs", 277*61c4878aSAndroid Build Coastguard Worker srcs = [ 278*61c4878aSAndroid Build Coastguard Worker "target_docs.rst", 279*61c4878aSAndroid Build Coastguard Worker "upstream.rst", 280*61c4878aSAndroid Build Coastguard Worker ], 281*61c4878aSAndroid Build Coastguard Worker target_compatible_with = incompatible_with_mcu(), 282*61c4878aSAndroid Build Coastguard Worker) 283