#  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_binary", "cc_library")
load("@dev_source_monogon//build/utils:template_file.bzl", "template_file")

defs = [
    "NDEBUG",  # Doesn't compile without it because their assertions reference non-existent fields
    "_GNU_SOURCE",
    "ENABLE_BLKID",
    "HAVE_FSETXATTR",
    "HAVE_GETFSMAP",
    "HAVE_GETMNTENT",
    "HAVE_MNTENT",
    "VERSION=\\\"0.0.0\\\"",
]

template_file(
    name = "platform_defs.h",
    src = "include/platform_defs.h.in",
    substitutions = {
        "#undef SIZEOF_LONG": "#define SIZEOF_LONG sizeof(long)",  # Because C reasons
    },
)

cc_library(
    name = "util",
    srcs = [
        "libfrog/util.c",
        ":platform_defs.h",
    ],
    hdrs = ["libfrog/util.h"],
    local_defines = defs,
)

cc_library(
    name = "radix_tree",
    srcs = [
        "libfrog/radix-tree.c",
        ":platform_defs.h",
    ],
    hdrs = ["libfrog/radix-tree.h"],
    local_defines = defs,
)

cc_binary(
    name = "gen_crc32table",
    srcs = [
        "libfrog/crc32defs.h",
        "libfrog/gen_crc32table.c",
    ],
)

genrule(
    name = "crc32table",
    srcs = [],
    outs = ["crc32table.h"],
    cmd = "./$(location :gen_crc32table) > \"$@\"",
    tools = [":gen_crc32table"],
)

cc_library(
    name = "crc32c",
    srcs = [
        "include/xfs_arch.h",
        "libfrog/crc32.c",
        "libfrog/crc32defs.h",
        ":crc32table",
        ":platform_defs.h",
    ],
    hdrs = ["libfrog/crc32c.h"],
    local_defines = defs,
)

cc_library(
    name = "list_sort",
    srcs = ["libfrog/list_sort.c"],
    hdrs = ["include/list.h"],
    local_defines = defs,
)

cc_library(
    name = "fsgeom",
    srcs = ["libfrog/fsgeom.c"],
    hdrs = ["libfrog/fsgeom.h"],
    local_defines = defs,
    deps = [
        ":libxfs",
        ":util",
    ],
)

cc_library(
    name = "projects",
    srcs = [
        "include/input.h",
        "libfrog/projects.c",
        "libfrog/projects.h",
        ":platform_defs.h",
    ],
    hdrs = ["libfrog/projects.h"],
    local_defines = defs,
    deps = [
        ":libxfs",
    ],
)

cc_library(
    name = "convert",
    srcs = [
        "include/input.h",
        "libfrog/convert.c",
        ":platform_defs.h",
    ],
    hdrs = ["libfrog/convert.h"],
    local_defines = defs,
    deps = [
        ":projects",
    ],
)

cc_library(
    name = "topology",
    srcs = [
        "include/xfs_multidisk.h",
        "libfrog/topology.c",
    ],
    hdrs = [
        "include/libxcmd.h",
        "libfrog/topology.h",
    ],
    local_defines = defs,
    visibility = ["//visibility:public"],
    deps = [
        ":libxfs",
        "@util_linux//:blkid",
    ],
)

cc_library(
    name = "platform",
    srcs = ["libfrog/linux.c"],
    local_defines = defs,
    visibility = ["//visibility:public"],
    deps = [":libxfs"],
)

cc_library(
    name = "libxfs",
    srcs = glob([
        "libxfs/*.c",
        "libxfs/*.h",
    ]) + [
        ":platform_defs.h",
        "include/xfs.h",
        "libfrog/platform.h",
        "include/linux.h",
        "include/hlist.h",
        "include/cache.h",
        "include/bitops.h",
        "include/kmem.h",
        "include/atomic.h",
        "include/xfs_mount.h",
        "include/xfs_inode.h",
        "include/xfs_trans.h",
        "include/xfs_trace.h",
        "libfrog/linux.c",
        "include/xfs_fs_compat.h",
    ],
    hdrs = ["include/libxfs.h"],
    local_defines = defs,
    deps = [
        ":crc32c",
        ":list_sort",
        ":radix_tree",
        "@util_linux//:uuid",
    ],
)

cc_binary(
    name = "mkfs",
    srcs = [
        "include/xfs_multidisk.h",
        "mkfs/proto.c",
        "mkfs/xfs_mkfs.c",
    ],
    linkopts = ["-lpthread"],
    local_defines = defs,
    deps = [
        ":convert",
        ":fsgeom",
        ":libxfs",
        ":platform",
        ":topology",
        ":util",
        "@inih",
    ],
    visibility = ["//visibility:public"],
)
