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