# TODO(leo): I have not been able to figure out a clever way of separating this
# into multiple rules, particularly musl, which hardcodes sandbox paths into its
# toolchain such that a different rule cannot consume it.
#
# For now, using a single massive genrule is the least annoying way to do this.
# As soon as we build more than just mkfs.xfs, we should re-visit this.
#
# Some possibilities:
#
#  - Build the musl toolchain in the build container and use native rules
#    for headers_install and util_linux (they should, in theory, generate
#    well-defined artifacts that we can use in the build).
#
#    This would use Bazel's toolchain definition mechanism to consume the
#    external toolchain, and would be compatible with the native C rules.
#
#    Maybe we can even build the external toolchain inside Bazel somehow?
#
#  - Write a custom rule that handles the toolchain.
#
#  - Converting *everything* to native rules is probably not an option due
#    to how complex the third party build systems we touch are.

genrule(
    name = "utils",
    srcs = [
        "@xfsprogs_dev//:all",
        "@musl//:all",
        "@util_linux//:all",
        "@linux_kernel//:all",
    ],
    outs = [
        "mkfs.xfs",
    ],
    cmd = """
    MUSL=$$PWD/$(RULEDIR)/musl_prefix

    echo "Compiling and installing musl..."
    (
        cd external/musl
        ./configure --prefix=$$MUSL
        make -j 8 install
    ) > /dev/null

    echo "Installing Linux kernel headers..."
    (
        cd external/linux_kernel
        make headers_install ARCH=x86_64 INSTALL_HDR_PATH=$$MUSL
    ) > /dev/null

    echo "Compiling util_linux..."
    (
        cd external/util_linux
        ./autogen.sh
        ./configure \
        CC="$$MUSL/bin/musl-gcc" \
        --without-systemd \
        --without-udev \
        --without-btrfs \
        --disable-pylibmount \
        --without-tinfo \
        --prefix=$$MUSL \
        --disable-makeinstall-chown \
        --disable-makeinstall-setuid \
        --with-bashcompletiondir=$$MUSL/usr/share/bash-completion
        make -j8 libuuid.la libblkid.la
        echo "Installing util_linux..."
        cp -v .libs/* $$MUSL/lib/
        mkdir -p $$MUSL/include/{uuid,blkid}
        cp libuuid/src/uuid.h $$MUSL/include/uuid/
        cp libblkid/src/blkid.h $$MUSL/include/blkid/
    ) > /dev/null

    echo "Compiling mkfs.xfs..."
    (
        cd external/xfsprogs_dev
        make configure
        ./configure CC="$$MUSL/bin/musl-gcc" CFLAGS="-static" --prefix=$$MUSL
        echo COMPILERING
        make mkfs
    ) > /dev/null

    cp external/xfsprogs_dev/mkfs/mkfs.xfs $(RULEDIR)
    """,
    visibility = ["//visibility:public"],
)
