#  Copyright 2020 The Monogon Project Authors.
#
#  SPDX-License-Identifier: Apache-2.0
#
#  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
#
#      http://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("@rules_cc//cc:defs.bzl", "cc_library")
load("@dev_source_monogon//build/utils:template_file.bzl", "template_file")

genrule(
    name = "config-h",
    outs = ["configure.h"],
    cmd = "echo \"#define HAVE_LINUX_SECCOMP_H 1\" > \"$@\"",
    visibility = ["//visibility:public"],
)

genrule(
    name = "syscalls-tables",
    srcs = [
        "src/syscalls.perf.template",
        "src/syscalls.csv",
    ],
    outs = ["syscalls.perf.c"],
    cmd = """
    # From src/arch-gperf-generate, modified to not write over source files
    grep -v '^#' $(location src/syscalls.csv) | nl -ba -s, -v0 | \
        sed -e 's/^[[:space:]]\\+\\([0-9]\\+\\),\\([^,]\\+\\),\\(.*\\)/\\2,\\1,\\3/' \
            -e ':repeat; {s|\\([^,]\\+\\)\\(.*\\)[^_]PNR|\\1\\2,__PNR_\\1|g;}; t repeat' \
             > "$(@D)/syscalls_tmp.csv"

    # create the gperf file
    sed -e "/@@SYSCALLS_TABLE@@/r $(@D)/syscalls_tmp.csv" \
        -e '/@@SYSCALLS_TABLE@@/d' \
        $(location src/syscalls.perf.template) > "$(@D)/syscalls.perf"
    ./$(location @gperf//:gperf) -m 100 --null-strings --pic -tCEG -T -S1 --output-file="$(location syscalls.perf.c)" "$(@D)/syscalls.perf"
    """,
    tools = [
        "@gperf//:gperf",
    ],
)

template_file(
    name = "seccomp.h",
    src = "include/seccomp.h.in",
    substitutions = {
        # Irrelevant for Bazel. Just look at WORKSPACE.
        # Make it obviously invalid so nobody is mislead.
        "@VERSION_MAJOR@": "0",
        "@VERSION_MINOR@": "0",
        "@VERSION_MICRO@": "0",
    },
    visibility = ["//visibility:public"],
)

cc_library(
    name = "seccomp",
    srcs = glob(
        [
            "src/*.c",
            "src/*.h",
        ],
        exclude = [
            "src/arch-syscall-check.c",
            "src/arch-syscall-dump.c",
        ],
    ) + ["//:configure.h", ":syscalls.perf.c"],
    hdrs = [
        ":seccomp.h",
        "include/seccomp-syscalls.h",
    ],
    visibility = ["//visibility:public"],
)
