|  | #  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"], | 
|  | ) |