1*61c4878aSAndroid Build Coastguard Worker# Copyright 2024 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 Worker# This is a BUILD.bazel file template for FreeRTOS. 16*61c4878aSAndroid Build Coastguard Worker# 17*61c4878aSAndroid Build Coastguard Worker# TODO(b/326625641): Contribute this to upstream FreeRTOS. 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard Worker# buildifier: disable=module-docstring 20*61c4878aSAndroid Build Coastguard Workerpackage(default_visibility = ["//visibility:public"]) 21*61c4878aSAndroid Build Coastguard Worker 22*61c4878aSAndroid Build Coastguard Worker# Label flag that points to the cc_library target providing freertos_config.h. 23*61c4878aSAndroid Build Coastguard Workerlabel_flag( 24*61c4878aSAndroid Build Coastguard Worker name = "freertos_config", 25*61c4878aSAndroid Build Coastguard Worker build_setting_default = ":default_freertos_config", 26*61c4878aSAndroid Build Coastguard Worker) 27*61c4878aSAndroid Build Coastguard Worker 28*61c4878aSAndroid Build Coastguard Workercc_library( 29*61c4878aSAndroid Build Coastguard Worker name = "default_freertos_config", 30*61c4878aSAndroid Build Coastguard Worker # The "default" config is not compatible with any configuration: you can't 31*61c4878aSAndroid Build Coastguard Worker # build FreeRTOS without choosing a config. 32*61c4878aSAndroid Build Coastguard Worker target_compatible_with = ["@platforms//:incompatible"], 33*61c4878aSAndroid Build Coastguard Worker) 34*61c4878aSAndroid Build Coastguard Worker 35*61c4878aSAndroid Build Coastguard Worker# Constraint setting used to select the FreeRTOSConfig version. 36*61c4878aSAndroid Build Coastguard Workerconstraint_setting( 37*61c4878aSAndroid Build Coastguard Worker name = "freertos_config_setting", 38*61c4878aSAndroid Build Coastguard Worker) 39*61c4878aSAndroid Build Coastguard Worker 40*61c4878aSAndroid Build Coastguard Workerconstraint_setting( 41*61c4878aSAndroid Build Coastguard Worker name = "port", 42*61c4878aSAndroid Build Coastguard Worker) 43*61c4878aSAndroid Build Coastguard Worker 44*61c4878aSAndroid Build Coastguard Worker# Cortex-M33 with No TrustZone 45*61c4878aSAndroid Build Coastguard Workerconstraint_value( 46*61c4878aSAndroid Build Coastguard Worker name = "port_ARM_CM33_NTZ", 47*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":port", 48*61c4878aSAndroid Build Coastguard Worker) 49*61c4878aSAndroid Build Coastguard Worker 50*61c4878aSAndroid Build Coastguard Workerconstraint_value( 51*61c4878aSAndroid Build Coastguard Worker name = "port_ARM_CM4F", 52*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":port", 53*61c4878aSAndroid Build Coastguard Worker) 54*61c4878aSAndroid Build Coastguard Worker 55*61c4878aSAndroid Build Coastguard Workerconstraint_value( 56*61c4878aSAndroid Build Coastguard Worker name = "port_ARM_CM0", 57*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":port", 58*61c4878aSAndroid Build Coastguard Worker) 59*61c4878aSAndroid Build Coastguard Worker 60*61c4878aSAndroid Build Coastguard Workerconstraint_value( 61*61c4878aSAndroid Build Coastguard Worker name = "port_ARM_CM3", 62*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":port", 63*61c4878aSAndroid Build Coastguard Worker) 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Workerconstraint_value( 66*61c4878aSAndroid Build Coastguard Worker name = "port_ARM_CM7", 67*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":port", 68*61c4878aSAndroid Build Coastguard Worker) 69*61c4878aSAndroid Build Coastguard Worker 70*61c4878aSAndroid Build Coastguard Workerconstraint_value( 71*61c4878aSAndroid Build Coastguard Worker name = "port_Xtensa", 72*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":port", 73*61c4878aSAndroid Build Coastguard Worker) 74*61c4878aSAndroid Build Coastguard Worker 75*61c4878aSAndroid Build Coastguard Workercc_library( 76*61c4878aSAndroid Build Coastguard Worker name = "freertos", 77*61c4878aSAndroid Build Coastguard Worker srcs = [ 78*61c4878aSAndroid Build Coastguard Worker "croutine.c", 79*61c4878aSAndroid Build Coastguard Worker "event_groups.c", 80*61c4878aSAndroid Build Coastguard Worker "list.c", 81*61c4878aSAndroid Build Coastguard Worker "queue.c", 82*61c4878aSAndroid Build Coastguard Worker "stream_buffer.c", 83*61c4878aSAndroid Build Coastguard Worker "timers.c", 84*61c4878aSAndroid Build Coastguard Worker ] + select({ 85*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM0": ["portable/GCC/ARM_CM0/port.c"], 86*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM3": ["portable/GCC/ARM_CM3/port.c"], 87*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM33_NTZ": [ 88*61c4878aSAndroid Build Coastguard Worker "portable/GCC/ARM_CM33_NTZ/non_secure/port.c", 89*61c4878aSAndroid Build Coastguard Worker "portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c", 90*61c4878aSAndroid Build Coastguard Worker ], 91*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F/port.c"], 92*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1/port.c"], 93*61c4878aSAndroid Build Coastguard Worker ":port_Xtensa": [ 94*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/mpu.S", 95*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/port.c", 96*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/portasm.S", 97*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/portclib.c", 98*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/portmpu.c", 99*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_context.S", 100*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_coproc_handler.S", 101*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_intr.c", 102*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_intr_asm.S", 103*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_intr_wrapper.c", 104*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_overlay_os_hook.c", 105*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_vectors.S", 106*61c4878aSAndroid Build Coastguard Worker ], 107*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 108*61c4878aSAndroid Build Coastguard Worker }), 109*61c4878aSAndroid Build Coastguard Worker includes = ["include/"], 110*61c4878aSAndroid Build Coastguard Worker textual_hdrs = [ 111*61c4878aSAndroid Build Coastguard Worker "include/FreeRTOS.h", 112*61c4878aSAndroid Build Coastguard Worker "include/StackMacros.h", 113*61c4878aSAndroid Build Coastguard Worker "include/croutine.h", 114*61c4878aSAndroid Build Coastguard Worker "include/deprecated_definitions.h", 115*61c4878aSAndroid Build Coastguard Worker "include/event_groups.h", 116*61c4878aSAndroid Build Coastguard Worker "include/list.h", 117*61c4878aSAndroid Build Coastguard Worker "include/message_buffer.h", 118*61c4878aSAndroid Build Coastguard Worker "include/mpu_wrappers.h", 119*61c4878aSAndroid Build Coastguard Worker "include/portable.h", 120*61c4878aSAndroid Build Coastguard Worker "include/projdefs.h", 121*61c4878aSAndroid Build Coastguard Worker "include/queue.h", 122*61c4878aSAndroid Build Coastguard Worker "include/semphr.h", 123*61c4878aSAndroid Build Coastguard Worker "include/stack_macros.h", 124*61c4878aSAndroid Build Coastguard Worker "include/stream_buffer.h", 125*61c4878aSAndroid Build Coastguard Worker "include/task.h", 126*61c4878aSAndroid Build Coastguard Worker "include/timers.h", 127*61c4878aSAndroid Build Coastguard Worker ], 128*61c4878aSAndroid Build Coastguard Worker deps = [ 129*61c4878aSAndroid Build Coastguard Worker ":freertos_config", 130*61c4878aSAndroid Build Coastguard Worker ":freertos_malloc", 131*61c4878aSAndroid Build Coastguard Worker ":freertos_port_headers", 132*61c4878aSAndroid Build Coastguard Worker ":tasks_c", 133*61c4878aSAndroid Build Coastguard Worker ], 134*61c4878aSAndroid Build Coastguard Worker # Required because breaking out tasks_c results in the dependencies between 135*61c4878aSAndroid Build Coastguard Worker # the libraries not being quite correct: to link tasks_c you actually need 136*61c4878aSAndroid Build Coastguard Worker # a bunch of the source files from here (e.g., list.c). 137*61c4878aSAndroid Build Coastguard Worker alwayslink = 1, 138*61c4878aSAndroid Build Coastguard Worker) 139*61c4878aSAndroid Build Coastguard Worker 140*61c4878aSAndroid Build Coastguard Workercc_library( 141*61c4878aSAndroid Build Coastguard Worker name = "freertos_port_headers", 142*61c4878aSAndroid Build Coastguard Worker hdrs = select({ 143*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM0": ["portable/GCC/ARM_CM0/portmacro.h"], 144*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM3": ["portable/GCC/ARM_CM3/portmacro.h"], 145*61c4878aSAndroid Build Coastguard Worker # TODO: https://pwbug.dev/352591911 - Decide if we should support older 146*61c4878aSAndroid Build Coastguard Worker # versions that are missing portmacrocommon.h. 147*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM33_NTZ": glob(["portable/GCC/ARM_CM33_NTZ/non_secure/*.h"]), 148*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F/portmacro.h"], 149*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1/portmacro.h"], 150*61c4878aSAndroid Build Coastguard Worker ":port_Xtensa": [ 151*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/portbenchmark.h", 152*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/portmacro.h", 153*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/porttrace.h", 154*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_api.h", 155*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_config.h", 156*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_context.h", 157*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_rtos.h", 158*61c4878aSAndroid Build Coastguard Worker "portable/ThirdParty/XCC/Xtensa/xtensa_timer.h", 159*61c4878aSAndroid Build Coastguard Worker ], 160*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 161*61c4878aSAndroid Build Coastguard Worker }), 162*61c4878aSAndroid Build Coastguard Worker includes = select({ 163*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM0": ["portable/GCC/ARM_CM0/"], 164*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM3": ["portable/GCC/ARM_CM3/"], 165*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM33_NTZ": ["portable/GCC/ARM_CM33_NTZ/non_secure"], 166*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F/"], 167*61c4878aSAndroid Build Coastguard Worker ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1/"], 168*61c4878aSAndroid Build Coastguard Worker ":port_Xtensa": ["portable/ThirdParty/XCC/Xtensa"], 169*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 170*61c4878aSAndroid Build Coastguard Worker }), 171*61c4878aSAndroid Build Coastguard Worker) 172*61c4878aSAndroid Build Coastguard Worker 173*61c4878aSAndroid Build Coastguard Worker# Headers transitively included by using "FreeRTOS.h" 174*61c4878aSAndroid Build Coastguard Workercc_library( 175*61c4878aSAndroid Build Coastguard Worker name = "freertos_headers", 176*61c4878aSAndroid Build Coastguard Worker hdrs = [ 177*61c4878aSAndroid Build Coastguard Worker "include/FreeRTOS.h", 178*61c4878aSAndroid Build Coastguard Worker "include/deprecated_definitions.h", 179*61c4878aSAndroid Build Coastguard Worker "include/list.h", 180*61c4878aSAndroid Build Coastguard Worker "include/mpu_wrappers.h", 181*61c4878aSAndroid Build Coastguard Worker "include/portable.h", 182*61c4878aSAndroid Build Coastguard Worker "include/projdefs.h", 183*61c4878aSAndroid Build Coastguard Worker "include/stack_macros.h", 184*61c4878aSAndroid Build Coastguard Worker "include/task.h", 185*61c4878aSAndroid Build Coastguard Worker "include/timers.h", 186*61c4878aSAndroid Build Coastguard Worker ], 187*61c4878aSAndroid Build Coastguard Worker includes = [ 188*61c4878aSAndroid Build Coastguard Worker "include/", 189*61c4878aSAndroid Build Coastguard Worker ], 190*61c4878aSAndroid Build Coastguard Worker visibility = ["//visibility:private"], 191*61c4878aSAndroid Build Coastguard Worker deps = [ 192*61c4878aSAndroid Build Coastguard Worker ":freertos_config", 193*61c4878aSAndroid Build Coastguard Worker ":freertos_port_headers", 194*61c4878aSAndroid Build Coastguard Worker ], 195*61c4878aSAndroid Build Coastguard Worker) 196*61c4878aSAndroid Build Coastguard Worker 197*61c4878aSAndroid Build Coastguard Worker# Constraint setting used to determine if task statics should be disabled. 198*61c4878aSAndroid Build Coastguard Workerconstraint_setting( 199*61c4878aSAndroid Build Coastguard Worker name = "disable_tasks_statics_setting", 200*61c4878aSAndroid Build Coastguard Worker default_constraint_value = ":no_disable_task_statics", 201*61c4878aSAndroid Build Coastguard Worker) 202*61c4878aSAndroid Build Coastguard Worker 203*61c4878aSAndroid Build Coastguard Workerconstraint_value( 204*61c4878aSAndroid Build Coastguard Worker name = "disable_task_statics", 205*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":disable_tasks_statics_setting", 206*61c4878aSAndroid Build Coastguard Worker) 207*61c4878aSAndroid Build Coastguard Worker 208*61c4878aSAndroid Build Coastguard Workerconstraint_value( 209*61c4878aSAndroid Build Coastguard Worker name = "no_disable_task_statics", 210*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":disable_tasks_statics_setting", 211*61c4878aSAndroid Build Coastguard Worker) 212*61c4878aSAndroid Build Coastguard Worker 213*61c4878aSAndroid Build Coastguard Workercc_library( 214*61c4878aSAndroid Build Coastguard Worker name = "tasks_c", 215*61c4878aSAndroid Build Coastguard Worker srcs = ["tasks.c"], 216*61c4878aSAndroid Build Coastguard Worker copts = [ 217*61c4878aSAndroid Build Coastguard Worker "-Wno-cast-qual", 218*61c4878aSAndroid Build Coastguard Worker ], 219*61c4878aSAndroid Build Coastguard Worker local_defines = select({ 220*61c4878aSAndroid Build Coastguard Worker ":disable_task_statics": [ 221*61c4878aSAndroid Build Coastguard Worker "static=", 222*61c4878aSAndroid Build Coastguard Worker ], 223*61c4878aSAndroid Build Coastguard Worker "//conditions:default": [], 224*61c4878aSAndroid Build Coastguard Worker }), 225*61c4878aSAndroid Build Coastguard Worker deps = [":freertos_headers"], 226*61c4878aSAndroid Build Coastguard Worker) 227*61c4878aSAndroid Build Coastguard Worker 228*61c4878aSAndroid Build Coastguard Worker# Constraint setting for malloc implementation. 229*61c4878aSAndroid Build Coastguard Workerconstraint_setting( 230*61c4878aSAndroid Build Coastguard Worker name = "malloc", 231*61c4878aSAndroid Build Coastguard Worker default_constraint_value = ":no_malloc", 232*61c4878aSAndroid Build Coastguard Worker) 233*61c4878aSAndroid Build Coastguard Worker 234*61c4878aSAndroid Build Coastguard Workerconstraint_value( 235*61c4878aSAndroid Build Coastguard Worker name = "no_malloc", 236*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":malloc", 237*61c4878aSAndroid Build Coastguard Worker) 238*61c4878aSAndroid Build Coastguard Worker 239*61c4878aSAndroid Build Coastguard Workerconstraint_value( 240*61c4878aSAndroid Build Coastguard Worker name = "malloc_heap_1", 241*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":malloc", 242*61c4878aSAndroid Build Coastguard Worker) 243*61c4878aSAndroid Build Coastguard Worker 244*61c4878aSAndroid Build Coastguard Workerconstraint_value( 245*61c4878aSAndroid Build Coastguard Worker name = "malloc_heap_2", 246*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":malloc", 247*61c4878aSAndroid Build Coastguard Worker) 248*61c4878aSAndroid Build Coastguard Worker 249*61c4878aSAndroid Build Coastguard Workerconstraint_value( 250*61c4878aSAndroid Build Coastguard Worker name = "malloc_heap_3", 251*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":malloc", 252*61c4878aSAndroid Build Coastguard Worker) 253*61c4878aSAndroid Build Coastguard Worker 254*61c4878aSAndroid Build Coastguard Workerconstraint_value( 255*61c4878aSAndroid Build Coastguard Worker name = "malloc_heap_4", 256*61c4878aSAndroid Build Coastguard Worker constraint_setting = ":malloc", 257*61c4878aSAndroid Build Coastguard Worker) 258*61c4878aSAndroid Build Coastguard Worker 259*61c4878aSAndroid Build Coastguard Workercc_library( 260*61c4878aSAndroid Build Coastguard Worker name = "freertos_malloc", 261*61c4878aSAndroid Build Coastguard Worker srcs = select({ 262*61c4878aSAndroid Build Coastguard Worker ":malloc_heap_1": ["portable/MemMang/heap_1.c"], 263*61c4878aSAndroid Build Coastguard Worker ":malloc_heap_2": ["portable/MemMang/heap_2.c"], 264*61c4878aSAndroid Build Coastguard Worker ":malloc_heap_3": ["portable/MemMang/heap_3.c"], 265*61c4878aSAndroid Build Coastguard Worker ":malloc_heap_4": ["portable/MemMang/heap_4.c"], 266*61c4878aSAndroid Build Coastguard Worker ":no_malloc": [], 267*61c4878aSAndroid Build Coastguard Worker }), 268*61c4878aSAndroid Build Coastguard Worker visibility = ["//visibility:private"], 269*61c4878aSAndroid Build Coastguard Worker deps = [":freertos_headers"], 270*61c4878aSAndroid Build Coastguard Worker) 271*61c4878aSAndroid Build Coastguard Worker 272*61c4878aSAndroid Build Coastguard Worker# Exported for 273*61c4878aSAndroid Build Coastguard Worker# pw_thread_freertos/py/pw_thread_freertos/generate_freertos_tsktcb.py 274*61c4878aSAndroid Build Coastguard Workerexports_files( 275*61c4878aSAndroid Build Coastguard Worker ["tasks.c"], 276*61c4878aSAndroid Build Coastguard Worker) 277