load("//tools/buck:genrule.bzl", "genrule")

def rust_cxx_bridge(name, src, deps = []):
    genrule(
        name = "%s/header" % name,
        srcs = [src],
        out = src + ".h",
        cmd = "$(exe //:codegen) ${SRCS} -o ${OUT}",
        type = "cxxbridge",
    )

    genrule(
        name = "%s/source" % name,
        srcs = [src],
        out = src + ".cc",
        cmd = "$(exe //:codegen) ${SRCS} -o ${OUT}",
        type = "cxxbridge",
    )

    cxx_library(
        name = name,
        srcs = [":%s/source" % name],
        preferred_linkage = "static",
        deps = deps + [":%s/include" % name],
    )

    cxx_library(
        name = "%s/include" % name,
        exported_headers = [":%s/header" % name],
    )

load("//tools/buck:genrule.bzl", "genrule")

def rust_cxx_bridge(name, src, deps = []):
    genrule(
        name = "%s/header" % name,
        out = src + ".h",
        cmd = "cp $(location :%s/generated)/generated.h ${OUT}" % name,
    )

    genrule(
        name = "%s/source" % name,
        out = src + ".cc",
        cmd = "cp $(location :%s/generated)/generated.cc ${OUT}" % name,
    )

    genrule(
        name = "%s/generated" % name,
        srcs = [src],
        out = ".",
        cmd = "$(exe //:codegen) ${SRCS} -o ${OUT}/generated.h -o ${OUT}/generated.cc",
        type = "cxxbridge",
    )

    cxx_library(
        name = name,
        srcs = [":%s/source" % name],
        preferred_linkage = "static",
        deps = deps + [":%s/include" % name],
    )

    cxx_library(
        name = "%s/include" % name,
        exported_headers = [":%s/header" % name],
    )

Combine buck codegen steps into one run of cxxbridge