# Copyright 2019 The Marl 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.

cc_library(
    name = "marl",
    srcs = glob(
        [
            "src/**/*.cpp",
            "src/**/*.c",
            "src/**/*.h",
        ],
        exclude = glob([
            "src/**/*_bench.cpp",
            "src/**/*_test.cpp",
        ]),
    ) + select({
        "@bazel_tools//src/conditions:windows": [],
        "//conditions:default": glob(["src/**/*.S"]),
    }),
    hdrs = glob([
        "include/marl/**/*.h",
    ]),
    includes = [
        "include",
    ],
    linkopts = select({
        "@bazel_tools//src/conditions:linux_x86_64": ["-pthread"],
        "//conditions:default": [],
    }),
    visibility = [
        "//visibility:public",
    ],
)

cc_test(
    name = "tests",
    srcs = glob([
        "src/**/*_test.cpp",
    ]),
    deps = [
        "//:marl",
        "@googletest//:gtest",
    ],
)
