# Copyright 2022 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(
    "//pw_build:pigweed.bzl",
    "pw_cc_binary",
    "pw_cc_library",
)

pw_cc_library(
    name = "base_lib",
    hdrs = ["base.h"],
)

pw_cc_binary(
    name = "base",
    srcs = ["base.cc"],
    deps = [
        ":base_lib",
        "//pw_containers",
    ],
)

pw_cc_binary(
    name = "linked_list_one_item",
    srcs = ["linked_list.cc"],
    defines = ["ITEM_COUNT=1"],
    deps = [
        ":base_lib",
        "//pw_containers",
    ],
)

pw_cc_binary(
    name = "linked_list_two_item",
    srcs = ["linked_list.cc"],
    defines = ["ITEM_COUNT=2"],
    deps = [
        ":base_lib",
        "//pw_containers",
    ],
)

pw_cc_binary(
    name = "linked_list_four_item",
    srcs = ["linked_list.cc"],
    defines = ["ITEM_COUNT=4"],
    deps = [
        ":base_lib",
        "//pw_containers",
    ],
)

pw_cc_binary(
    name = "intrusive_list_one_item",
    srcs = ["intrusive_list.cc"],
    defines = ["ITEM_COUNT=1"],
    deps = [
        ":base_lib",
        "//pw_containers",
    ],
)

pw_cc_binary(
    name = "intrusive_list_two_item",
    srcs = ["intrusive_list.cc"],
    defines = ["ITEM_COUNT=2"],
    deps = [
        ":base_lib",
        "//pw_containers",
    ],
)

pw_cc_binary(
    name = "intrusive_list_four_item",
    srcs = ["intrusive_list.cc"],
    defines = ["ITEM_COUNT=4"],
    deps = [
        ":base_lib",
        "//pw_containers",
    ],
)
