xref: /aosp_15_r20/external/pigweed/third_party/freertos/freertos.BUILD.bazel (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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