# Copyright 2021 The Pigweed Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. load( "@pigweed//pw_build:pigweed.bzl", "pw_cc_library", ) package(default_visibility = ["//visibility:public"]) licenses(["notice"]) pw_cc_library( name = "config_assert", hdrs = [ "public/pw_third_party/freertos/config_assert.h", ], includes = ["public"], deps = [ "@pigweed//pw_assert", ], ) constraint_setting( name = "port", ) constraint_value( name = "port_ARM_CM7", constraint_setting = ":port", ) constraint_value( name = "port_ARM_CM4F", constraint_setting = ":port", ) pw_cc_library( name = "freertos", srcs = [ "croutine.c", "event_groups.c", "list.c", "queue.c", "stream_buffer.c", "timers.c", ] + select({ ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F/port.c"], ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1/port.c"], "//conditions:default": [], }), includes = ["include/"] + select({ ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F"], ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1"], "//conditions:default": [], }), textual_hdrs = [ "include/FreeRTOS.h", "include/StackMacros.h", "include/croutine.h", "include/deprecated_definitions.h", "include/event_groups.h", "include/list.h", "include/message_buffer.h", "include/mpu_wrappers.h", "include/portable.h", "include/projdefs.h", "include/queue.h", "include/semphr.h", "include/stack_macros.h", "include/stream_buffer.h", "include/task.h", "include/timers.h", ] + select({ ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F/portmacro.h"], ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1/portmacro.h"], "//conditions:default": [], }), deps = [ ":pigweed_tasks_c", "@pigweed_config//:freertos_config", ], # Required because breaking out tasks_c results in the dependencies between # the libraries not being quite correct: to link pigweed_tasks_c you # actually need a bunch of the source files from here (e.g., list.c). alwayslink = 1, ) # Constraint setting used to determine if task statics should be disabled. constraint_setting( name = "disable_tasks_statics_setting", default_constraint_value = ":no_disable_task_statics", ) constraint_value( name = "disable_task_statics", constraint_setting = ":disable_tasks_statics_setting", ) constraint_value( name = "no_disable_task_statics", constraint_setting = ":disable_tasks_statics_setting", ) pw_cc_library( name = "pigweed_tasks_c", srcs = ["tasks.c"], defines = select({ ":disable_task_statics": [ "PW_THIRD_PARTY_FREERTOS_NO_STATICS=1", ], "//conditions:default": [], }), includes = [ "include/", ] + select({ ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F/"], ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1/"], "//conditions:default": [], }), local_defines = select({ ":disable_task_statics": [ "static=", ], "//conditions:default": [], }), # tasks.c transitively includes all these headers :/ textual_hdrs = [ "include/FreeRTOS.h", "include/portable.h", "include/projdefs.h", "include/list.h", "include/deprecated_definitions.h", "include/mpu_wrappers.h", "include/stack_macros.h", "include/task.h", "include/timers.h", ] + select({ ":port_ARM_CM4F": ["portable/GCC/ARM_CM4F/portmacro.h"], ":port_ARM_CM7": ["portable/GCC/ARM_CM7/r0p1/portmacro.h"], "//conditions:default": [], }), deps = ["@pigweed_config//:freertos_config"], ) # Constraint setting used to select the FreeRTOSConfig version. constraint_setting( name = "freertos_config_setting", ) alias( name = "freertos_config", actual = select({ "@pigweed//targets/stm32f429i_disc1_stm32cube:freertos_config_cv": "@pigweed//targets/stm32f429i_disc1_stm32cube:freertos_config", "//conditions:default": "default_freertos_config", }), ) pw_cc_library( name = "default_freertos_config", # The "default" config is not compatible with any configuration: you can't # build FreeRTOS without choosing a config. target_compatible_with = ["@platforms//:incompatible"], ) # Exported for # pw_thread_freertos/py/pw_thread_freertos/generate_freertos_tsktcb.py exports_files( ["tasks.c"], )