# Copyright 2023 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)

# Add library linkage for Zephyr
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_BASE64                  pw_base64)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_BYTES                   pw_bytes)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_CHECKSUM                pw_checksum)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_CONTAINERS              pw_containers)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_DIGITAL_IO              pw_digital_io)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_FUNCTION                pw_function)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_HDLC_RPC                pw_hdlc.default_addresses pw_hdlc.encoder pw_hdlc.decoder )
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_MULTISINK               pw_multisink)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_MULTISINK_UTIL          pw_multisink.util)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_PREPROCESSOR            pw_preprocessor)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_POLYFILL                pw_polyfill)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RESULT                  pw_result)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_ROUTER_EGRESS           pw_router.egress)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_ROUTER_EGRESS_FUNCTION  pw_router.egress_function)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_ROUTER_PACKET_PARSER    pw_router.packet_parser)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_ROUTER_STATIC_ROUTER    pw_router.static_router)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_CLIENT              pw_rpc.client)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_CLIENT_SERVER       pw_rpc.client_server)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_COMMON              pw_rpc.common)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_SERVER              pw_rpc.server)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_NANOPB_CLIENT       pw_rpc.nanopb.client_api)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_NANOPB_COMMON       pw_rpc.nanopb.common)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_NANOPB_ECHO_SERVICE pw_rpc.nanopb.echo_service)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_NANOPB_METHOD       pw_rpc.nanopb.method)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_RPC_NANOPB_METHOD_UNION pw_rpc.nanopb.method_union)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_SPAN                    pw_span)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_STATUS                  pw_status)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_STREAM                  pw_stream)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_STRING                  pw_string)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_SYS_IO                  pw_sys_io)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_THREAD_SLEEP            pw_thread.sleep)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_TOKENIZER               pw_tokenizer)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_TOKENIZER_BASE64        pw_tokenizer.base64)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_DETOKENIZER             pw_tokenizer.decoder)
pw_zephyrize_libraries_ifdef(CONFIG_PIGWEED_VARINT                  pw_varint)

# Set Pigweed configs from Kconfig
pw_set_config_from_zephyr(CONFIG_PIGWEED_MULTISINK_LOCK_INTERRUPT_SAFE PW_MULTISINK_CONFIG_LOCK_INTERRUPT_SAFE)

# Add test libraries
if(CONFIG_TEST)
target_link_libraries_ifdef(CONFIG_PIGWEED_BASE64 app PRIVATE pw_base64.base64_test.lib)
endif(CONFIG_TEST)
