xref: /aosp_15_r20/external/pigweed/third_party/freertos/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 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 Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/error.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("freertos.gni")
21*61c4878aSAndroid Build Coastguard Worker
22*61c4878aSAndroid Build Coastguard Worker# This file defines a GN source_set for an external installation of freertos.
23*61c4878aSAndroid Build Coastguard Worker# To use, checkout the freertos source into a directory, then set the build arg
24*61c4878aSAndroid Build Coastguard Worker# dir_pw_third_party_freertos to point to that directory. The freertos library
25*61c4878aSAndroid Build Coastguard Worker# will be available in GN at "$dir_pw_third_party/freertos".
26*61c4878aSAndroid Build Coastguard Workerif (dir_pw_third_party_freertos == "") {
27*61c4878aSAndroid Build Coastguard Worker  group("freertos") {
28*61c4878aSAndroid Build Coastguard Worker  }
29*61c4878aSAndroid Build Coastguard Worker} else if (pw_third_party_freertos_PORT == "") {
30*61c4878aSAndroid Build Coastguard Worker  pw_error("freertos") {
31*61c4878aSAndroid Build Coastguard Worker    message_lines = [
32*61c4878aSAndroid Build Coastguard Worker      "FreeRTOS is being used by $current_toolchain, but pw_third_party_freertos_PORT is not set.",
33*61c4878aSAndroid Build Coastguard Worker      "If this toolchain is intentionally using FreeRTOS, ensure your toolchain configuration for this target sets pw_third_party_freertos_PORT.",
34*61c4878aSAndroid Build Coastguard Worker    ]
35*61c4878aSAndroid Build Coastguard Worker  }
36*61c4878aSAndroid Build Coastguard Worker} else if (pw_third_party_freertos_CONFIG == "") {
37*61c4878aSAndroid Build Coastguard Worker  pw_error("freertos") {
38*61c4878aSAndroid Build Coastguard Worker    message_lines = [
39*61c4878aSAndroid Build Coastguard Worker      "FreeRTOS is being used by $current_toolchain, but pw_third_party_freertos_CONFIG is not set.",
40*61c4878aSAndroid Build Coastguard Worker      "If this toolchain is intentionally using FreeRTOS, ensure your toolchain configuration for this target sets pw_third_party_freertos_CONFIG.",
41*61c4878aSAndroid Build Coastguard Worker    ]
42*61c4878aSAndroid Build Coastguard Worker  }
43*61c4878aSAndroid Build Coastguard Worker} else {
44*61c4878aSAndroid Build Coastguard Worker  config("disable_warnings") {
45*61c4878aSAndroid Build Coastguard Worker    cflags = [
46*61c4878aSAndroid Build Coastguard Worker      "-Wno-unused-parameter",
47*61c4878aSAndroid Build Coastguard Worker      "-Wno-cast-qual",
48*61c4878aSAndroid Build Coastguard Worker      "-Wno-int-in-bool-context",
49*61c4878aSAndroid Build Coastguard Worker    ]
50*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":*" ]
51*61c4878aSAndroid Build Coastguard Worker  }
52*61c4878aSAndroid Build Coastguard Worker
53*61c4878aSAndroid Build Coastguard Worker  config("public_includes") {
54*61c4878aSAndroid Build Coastguard Worker    include_dirs = [ "$dir_pw_third_party_freertos/include" ]
55*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":*" ]
56*61c4878aSAndroid Build Coastguard Worker  }
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Worker  pw_source_set("freertos") {
59*61c4878aSAndroid Build Coastguard Worker    public_configs = [ ":public_includes" ]
60*61c4878aSAndroid Build Coastguard Worker    allow_circular_includes_from = [
61*61c4878aSAndroid Build Coastguard Worker      pw_third_party_freertos_PORT,
62*61c4878aSAndroid Build Coastguard Worker      ":freertos_tasks",
63*61c4878aSAndroid Build Coastguard Worker    ]
64*61c4878aSAndroid Build Coastguard Worker    public_deps = [
65*61c4878aSAndroid Build Coastguard Worker      pw_third_party_freertos_CONFIG,
66*61c4878aSAndroid Build Coastguard Worker      pw_third_party_freertos_PORT,
67*61c4878aSAndroid Build Coastguard Worker    ]
68*61c4878aSAndroid Build Coastguard Worker    public = [
69*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/FreeRTOS.h",
70*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/StackMacros.h",
71*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/croutine.h",
72*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/deprecated_definitions.h",
73*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/event_groups.h",
74*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/list.h",
75*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/message_buffer.h",
76*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/mpu_prototypes.h",
77*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/mpu_wrappers.h",
78*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/portable.h",
79*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/projdefs.h",
80*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/queue.h",
81*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/semphr.h",
82*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/stack_macros.h",
83*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/stream_buffer.h",
84*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/task.h",
85*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/include/timers.h",
86*61c4878aSAndroid Build Coastguard Worker    ]
87*61c4878aSAndroid Build Coastguard Worker    configs = [ ":disable_warnings" ]
88*61c4878aSAndroid Build Coastguard Worker    sources = [
89*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/croutine.c",
90*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/event_groups.c",
91*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/list.c",
92*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/queue.c",
93*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/stream_buffer.c",
94*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/timers.c",
95*61c4878aSAndroid Build Coastguard Worker    ]
96*61c4878aSAndroid Build Coastguard Worker    deps = [ ":freertos_tasks" ]
97*61c4878aSAndroid Build Coastguard Worker  }
98*61c4878aSAndroid Build Coastguard Worker
99*61c4878aSAndroid Build Coastguard Worker  # In order to link against internal kernel data structures through the use of
100*61c4878aSAndroid Build Coastguard Worker  # extern "C", statics can be optionally disabled for the tasks.c source file
101*61c4878aSAndroid Build Coastguard Worker  # to enable use of things like pw_thread_freertos/util.h's ForEachThread.
102*61c4878aSAndroid Build Coastguard Worker  config("disable_statics") {
103*61c4878aSAndroid Build Coastguard Worker    cflags = [
104*61c4878aSAndroid Build Coastguard Worker      "-Dstatic=",
105*61c4878aSAndroid Build Coastguard Worker      "-DPW_THIRD_PARTY_FREERTOS_NO_STATICS=1",
106*61c4878aSAndroid Build Coastguard Worker    ]
107*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":*" ]
108*61c4878aSAndroid Build Coastguard Worker  }
109*61c4878aSAndroid Build Coastguard Worker
110*61c4878aSAndroid Build Coastguard Worker  pw_source_set("freertos_tasks") {
111*61c4878aSAndroid Build Coastguard Worker    public_configs = [ ":public_includes" ]
112*61c4878aSAndroid Build Coastguard Worker    configs = [ ":disable_warnings" ]
113*61c4878aSAndroid Build Coastguard Worker    if (pw_third_party_freertos_DISABLE_TASKS_STATICS) {
114*61c4878aSAndroid Build Coastguard Worker      configs += [ ":disable_statics" ]
115*61c4878aSAndroid Build Coastguard Worker    }
116*61c4878aSAndroid Build Coastguard Worker    sources = [ "$dir_pw_third_party_freertos/tasks.c" ]
117*61c4878aSAndroid Build Coastguard Worker    deps = [
118*61c4878aSAndroid Build Coastguard Worker      pw_third_party_freertos_CONFIG,
119*61c4878aSAndroid Build Coastguard Worker      pw_third_party_freertos_PORT,
120*61c4878aSAndroid Build Coastguard Worker    ]
121*61c4878aSAndroid Build Coastguard Worker  }
122*61c4878aSAndroid Build Coastguard Worker
123*61c4878aSAndroid Build Coastguard Worker  # ARM CM33 port of FreeRTOS
124*61c4878aSAndroid Build Coastguard Worker  config("arm_cm33_includes") {
125*61c4878aSAndroid Build Coastguard Worker    include_dirs =
126*61c4878aSAndroid Build Coastguard Worker        [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM33_NTZ/non_secure" ]
127*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":arm_cm33" ]
128*61c4878aSAndroid Build Coastguard Worker  }
129*61c4878aSAndroid Build Coastguard Worker
130*61c4878aSAndroid Build Coastguard Worker  pw_source_set("arm_cm33") {
131*61c4878aSAndroid Build Coastguard Worker    public_configs = [
132*61c4878aSAndroid Build Coastguard Worker      ":arm_cm33_includes",
133*61c4878aSAndroid Build Coastguard Worker      ":public_includes",
134*61c4878aSAndroid Build Coastguard Worker    ]
135*61c4878aSAndroid Build Coastguard Worker    public_deps = [ pw_third_party_freertos_CONFIG ]
136*61c4878aSAndroid Build Coastguard Worker    public = [
137*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.h",
138*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/portable/GCC/ARM_CM33_NTZ/non_secure/portmacro.h",
139*61c4878aSAndroid Build Coastguard Worker    ]
140*61c4878aSAndroid Build Coastguard Worker    sources = [
141*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/portable/GCC/ARM_CM33_NTZ/non_secure/port.c",
142*61c4878aSAndroid Build Coastguard Worker      "$dir_pw_third_party_freertos/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c",
143*61c4878aSAndroid Build Coastguard Worker    ]
144*61c4878aSAndroid Build Coastguard Worker    configs = [ ":disable_warnings" ]
145*61c4878aSAndroid Build Coastguard Worker  }
146*61c4878aSAndroid Build Coastguard Worker
147*61c4878aSAndroid Build Coastguard Worker  # ARM CM7 port of FreeRTOS
148*61c4878aSAndroid Build Coastguard Worker  config("arm_cm7_includes") {
149*61c4878aSAndroid Build Coastguard Worker    include_dirs = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM7/r0p1" ]
150*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":arm_cm7" ]
151*61c4878aSAndroid Build Coastguard Worker  }
152*61c4878aSAndroid Build Coastguard Worker
153*61c4878aSAndroid Build Coastguard Worker  # NB: Use :arm_cm7_after_r0p1 instead if you can
154*61c4878aSAndroid Build Coastguard Worker  pw_source_set("arm_cm7") {
155*61c4878aSAndroid Build Coastguard Worker    public_configs = [
156*61c4878aSAndroid Build Coastguard Worker      ":arm_cm7_includes",
157*61c4878aSAndroid Build Coastguard Worker      ":public_includes",
158*61c4878aSAndroid Build Coastguard Worker    ]
159*61c4878aSAndroid Build Coastguard Worker    public_deps = [ pw_third_party_freertos_CONFIG ]
160*61c4878aSAndroid Build Coastguard Worker    public =
161*61c4878aSAndroid Build Coastguard Worker        [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM7/r0p1/portmacro.h" ]
162*61c4878aSAndroid Build Coastguard Worker    sources =
163*61c4878aSAndroid Build Coastguard Worker        [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM7/r0p1/port.c" ]
164*61c4878aSAndroid Build Coastguard Worker    configs = [ ":disable_warnings" ]
165*61c4878aSAndroid Build Coastguard Worker  }
166*61c4878aSAndroid Build Coastguard Worker
167*61c4878aSAndroid Build Coastguard Worker  # CM7 r0p0 and r0p1 cores have errata that requires workarounds. Freertos
168*61c4878aSAndroid Build Coastguard Worker  # recommends using the CM4F port on newer CM7 core revisions for better
169*61c4878aSAndroid Build Coastguard Worker  # performance.
170*61c4878aSAndroid Build Coastguard Worker  # See Freertos' ARM_CM7/ReadMe.txt.
171*61c4878aSAndroid Build Coastguard Worker  pw_source_set("arm_cm7_after_r0p1") {
172*61c4878aSAndroid Build Coastguard Worker    public_deps = [ ":arm_cm4f" ]
173*61c4878aSAndroid Build Coastguard Worker  }
174*61c4878aSAndroid Build Coastguard Worker
175*61c4878aSAndroid Build Coastguard Worker  # ARM CM4F port of FreeRTOS.
176*61c4878aSAndroid Build Coastguard Worker  config("arm_cm4f_includes") {
177*61c4878aSAndroid Build Coastguard Worker    include_dirs = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM4F" ]
178*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":arm_cm4f" ]
179*61c4878aSAndroid Build Coastguard Worker  }
180*61c4878aSAndroid Build Coastguard Worker
181*61c4878aSAndroid Build Coastguard Worker  pw_source_set("arm_cm4f") {
182*61c4878aSAndroid Build Coastguard Worker    public_configs = [
183*61c4878aSAndroid Build Coastguard Worker      ":arm_cm4f_includes",
184*61c4878aSAndroid Build Coastguard Worker      ":public_includes",
185*61c4878aSAndroid Build Coastguard Worker    ]
186*61c4878aSAndroid Build Coastguard Worker    public_deps = [ pw_third_party_freertos_CONFIG ]
187*61c4878aSAndroid Build Coastguard Worker    public =
188*61c4878aSAndroid Build Coastguard Worker        [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM4F/portmacro.h" ]
189*61c4878aSAndroid Build Coastguard Worker    sources = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM4F/port.c" ]
190*61c4878aSAndroid Build Coastguard Worker    configs = [ ":disable_warnings" ]
191*61c4878aSAndroid Build Coastguard Worker  }
192*61c4878aSAndroid Build Coastguard Worker
193*61c4878aSAndroid Build Coastguard Worker  # ARM CM3 port of FreeRTOS.
194*61c4878aSAndroid Build Coastguard Worker  config("arm_cm3_includes") {
195*61c4878aSAndroid Build Coastguard Worker    include_dirs = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM3" ]
196*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":arm_cm3" ]
197*61c4878aSAndroid Build Coastguard Worker  }
198*61c4878aSAndroid Build Coastguard Worker
199*61c4878aSAndroid Build Coastguard Worker  pw_source_set("arm_cm3") {
200*61c4878aSAndroid Build Coastguard Worker    public_configs = [
201*61c4878aSAndroid Build Coastguard Worker      ":arm_cm3_includes",
202*61c4878aSAndroid Build Coastguard Worker      ":public_includes",
203*61c4878aSAndroid Build Coastguard Worker    ]
204*61c4878aSAndroid Build Coastguard Worker    public_deps = [ pw_third_party_freertos_CONFIG ]
205*61c4878aSAndroid Build Coastguard Worker    public = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM3/portmacro.h" ]
206*61c4878aSAndroid Build Coastguard Worker    sources = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM3/port.c" ]
207*61c4878aSAndroid Build Coastguard Worker    configs = [ ":disable_warnings" ]
208*61c4878aSAndroid Build Coastguard Worker  }
209*61c4878aSAndroid Build Coastguard Worker
210*61c4878aSAndroid Build Coastguard Worker  # ARM CM0 port of FreeRTOS.
211*61c4878aSAndroid Build Coastguard Worker  config("arm_cm0_includes") {
212*61c4878aSAndroid Build Coastguard Worker    include_dirs = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM0" ]
213*61c4878aSAndroid Build Coastguard Worker    visibility = [ ":arm_cm0" ]
214*61c4878aSAndroid Build Coastguard Worker  }
215*61c4878aSAndroid Build Coastguard Worker
216*61c4878aSAndroid Build Coastguard Worker  pw_source_set("arm_cm0") {
217*61c4878aSAndroid Build Coastguard Worker    public_configs = [
218*61c4878aSAndroid Build Coastguard Worker      ":arm_cm0_includes",
219*61c4878aSAndroid Build Coastguard Worker      ":public_includes",
220*61c4878aSAndroid Build Coastguard Worker    ]
221*61c4878aSAndroid Build Coastguard Worker    public_deps = [ pw_third_party_freertos_CONFIG ]
222*61c4878aSAndroid Build Coastguard Worker    public = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM0/portmacro.h" ]
223*61c4878aSAndroid Build Coastguard Worker    sources = [ "$dir_pw_third_party_freertos/portable/GCC/ARM_CM0/port.c" ]
224*61c4878aSAndroid Build Coastguard Worker    configs = [ ":disable_warnings" ]
225*61c4878aSAndroid Build Coastguard Worker  }
226*61c4878aSAndroid Build Coastguard Worker}
227*61c4878aSAndroid Build Coastguard Worker
228*61c4878aSAndroid Build Coastguard Workerconfig("public_include_path") {
229*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
230*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
231*61c4878aSAndroid Build Coastguard Worker}
232*61c4878aSAndroid Build Coastguard Worker
233*61c4878aSAndroid Build Coastguard Workerpw_source_set("config_assert") {
234*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":public_include_path" ]
235*61c4878aSAndroid Build Coastguard Worker  public_deps = [ dir_pw_assert ]
236*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_third_party/freertos/config_assert.h" ]
237*61c4878aSAndroid Build Coastguard Worker}
238*61c4878aSAndroid Build Coastguard Worker
239*61c4878aSAndroid Build Coastguard Workerpw_source_set("support") {
240*61c4878aSAndroid Build Coastguard Worker  deps = [
241*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_string:util",
242*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_third_party/freertos",
243*61c4878aSAndroid Build Coastguard Worker    dir_pw_assert,
244*61c4878aSAndroid Build Coastguard Worker  ]
245*61c4878aSAndroid Build Coastguard Worker  sources = [
246*61c4878aSAndroid Build Coastguard Worker    "pw_assert_malloc_failed_hook.cc",
247*61c4878aSAndroid Build Coastguard Worker    "pw_assert_stack_overflow_hook.cc",
248*61c4878aSAndroid Build Coastguard Worker    "static_task_allocation.cc",
249*61c4878aSAndroid Build Coastguard Worker  ]
250*61c4878aSAndroid Build Coastguard Worker}
251*61c4878aSAndroid Build Coastguard Worker
252*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
253*61c4878aSAndroid Build Coastguard Worker  sources = [ "docs.rst" ]
254*61c4878aSAndroid Build Coastguard Worker}
255