# Copyright 2020 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.

include($ENV{PW_ROOT}/pw_build/pigweed.cmake)

pw_add_module_library(pw_polyfill
  HEADERS
    public/pw_polyfill/language_feature_macros.h
    public/pw_polyfill/standard.h
  PUBLIC_INCLUDES
    public
)
if(Zephyr_FOUND AND CONFIG_PIGWEED_POLYFILL)
  zephyr_link_libraries(pw_polyfill)
endif()

# TODO(b/235237667): Remove this overrides target by migrating all users to
# explicitly depend on the polyfill(s) they require.
pw_add_module_library(pw_polyfill.overrides
  PUBLIC_DEPS
    pw_polyfill.span
)
if(Zephyr_FOUND AND CONFIG_PIGWEED_POLYFILL_OVERRIDES)
  zephyr_link_libraries(pw_polyfill.overrides)
endif()

# Provides <cstddef>'s std::byte.
pw_add_module_library(pw_polyfill.cstddef
  HEADERS
    cstddef_public_overrides/cstddef
    standard_library_public/pw_polyfill/standard_library/cstddef.h
  PUBLIC_INCLUDES
    cstddef_public_overrides
    standard_library_public
  PUBLIC_DEPS
    pw_polyfill.standard_library
)

# TODO(pwbug/603): Remove this polyfill.
pw_add_module_library(pw_polyfill.iterator
  HEADERS
    iterator_public_overrides/iterator
    standard_library_public/pw_polyfill/standard_library/iterator.h
  PUBLIC_INCLUDES
    iterator_public_overrides
    standard_library_public
  PUBLIC_DEPS
    pw_polyfill.standard_library
)

# Provides <span>.
pw_add_module_library(pw_polyfill.span
  PUBLIC_DEPS
    pw_span
)

pw_add_module_library(pw_polyfill.standard_library
  HEADERS
    standard_library_public/pw_polyfill/standard_library/namespace.h
  PUBLIC_INCLUDES
    standard_library_public
)
