# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# This target exists so that Meson can be made aware that other targets depend
# on these headers.
freestanding_headers = declare_dependency(
  sources: [
    'float.h',
    'iso646.h',
    'limits.h',
    'stdalign.h',
    'stdarg.h',
    'stdbool.h',
    'stddef.h',
    'stdint.h',
    'stdnoreturn.h',
  ],
)
