# OpenFhePke Emitter

load("@heir//lib/Target/CompilationTarget:defs.bzl", "heir_backend_config")
load("@rules_cc//cc:cc_library.bzl", "cc_library")

package(
    default_applicable_licenses = ["@heir//:license"],
    default_visibility = ["//visibility:public"],
)

cc_library(
    name = "OpenFheRegistration",
    srcs = [
        "OpenFheTranslateRegistration.cpp",
    ],
    hdrs = [
        "OpenFheTranslateRegistration.h",
    ],
    deps = [
        ":OpenFhePkeDebugEmitter",
        ":OpenFhePkeDebugHeaderEmitter",
        ":OpenFhePkeEmitter",
        ":OpenFhePkeHeaderEmitter",
        ":OpenFhePkePybindEmitter",
        ":OpenFheUtils",
        "@heir//lib/Dialect/LWE/IR:Dialect",
        "@heir//lib/Dialect/ModArith/IR:Dialect",
        "@heir//lib/Dialect/Openfhe/IR:Dialect",
        "@heir//lib/Dialect/Polynomial/IR:Dialect",
        "@heir//lib/Dialect/Preprocessing/IR:Dialect",
        "@heir//lib/Dialect/RNS/IR:Dialect",
        "@heir//lib/Dialect/TensorExt/IR:Dialect",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:AffineDialect",
        "@llvm-project//mlir:ArithDialect",
        "@llvm-project//mlir:ControlFlowDialect",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:MathDialect",
        "@llvm-project//mlir:MemRefDialect",
        "@llvm-project//mlir:SCFDialect",
        "@llvm-project//mlir:Support",
        "@llvm-project//mlir:TensorDialect",
        "@llvm-project//mlir:TranslateLib",
    ],
)

cc_library(
    name = "OpenFheUtils",
    srcs = ["OpenFheUtils.cpp"],
    hdrs = [
        "OpenFhePkeTemplates.h",
        "OpenFheUtils.h",
    ],
    deps = [
        "@heir//lib/Analysis/Cpp:ConstQualifierAnalysis",
        "@heir//lib/Analysis/SelectVariableNames",
        "@heir//lib/Dialect/Openfhe/IR:Dialect",
        "@heir//lib/Utils:TargetUtils",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:MemRefDialect",
        "@llvm-project//mlir:Support",
    ],
)

cc_library(
    name = "OpenFhePkeEmitter",
    srcs = ["OpenFhePkeEmitter.cpp"],
    hdrs = [
        "OpenFhePkeEmitter.h",
    ],
    deps = [
        ":OpenFheUtils",
        "@heir//lib/Analysis/Cpp:ConstQualifierAnalysis",
        "@heir//lib/Analysis/SelectVariableNames",
        "@heir//lib/Dialect:ModuleAttributes",
        "@heir//lib/Dialect/Openfhe/IR:Dialect",
        "@heir//lib/Dialect/Preprocessing/IR:Dialect",
        "@heir//lib/Utils:TargetUtils",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:AffineDialect",
        "@llvm-project//mlir:ArithDialect",
        "@llvm-project//mlir:ControlFlowDialect",
        "@llvm-project//mlir:DialectUtils",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:MathDialect",
        "@llvm-project//mlir:MemRefDialect",
        "@llvm-project//mlir:SCFDialect",
        "@llvm-project//mlir:Support",
        "@llvm-project//mlir:TensorDialect",
    ],
)

cc_library(
    name = "OpenFhePkeHeaderEmitter",
    srcs = ["OpenFhePkeHeaderEmitter.cpp"],
    hdrs = [
        "OpenFhePkeHeaderEmitter.h",
        "OpenFhePkeTemplates.h",
    ],
    deps = [
        ":OpenFheUtils",
        "@heir//lib/Analysis/Cpp:ConstQualifierAnalysis",
        "@heir//lib/Analysis/SelectVariableNames",
        "@heir//lib/Dialect:ModuleAttributes",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:Support",
    ],
)

cc_library(
    name = "OpenFhePkePybindEmitter",
    srcs = ["OpenFhePkePybindEmitter.cpp"],
    hdrs = [
        "OpenFhePkePybindEmitter.h",
        "OpenFhePkeTemplates.h",
    ],
    deps = [
        "@heir//lib/Utils:TargetUtils",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:Support",
    ],
)

cc_library(
    name = "OpenFhePkeDebugHeaderEmitter",
    srcs = ["OpenFhePkeDebugHeaderEmitter.cpp"],
    hdrs = [
        "OpenFhePkeDebugHeaderEmitter.h",
        "OpenFhePkeTemplates.h",
    ],
    deps = [
        ":OpenFheUtils",
        "@heir//lib/Analysis/SelectVariableNames",
        "@heir//lib/Dialect:ModuleAttributes",
        "@heir//lib/Utils:TargetUtils",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:Support",
    ],
)

cc_library(
    name = "OpenFhePkeDebugEmitter",
    srcs = ["OpenFhePkeDebugEmitter.cpp"],
    hdrs = [
        "OpenFhePkeDebugEmitter.h",
        "OpenFhePkeTemplates.h",
    ],
    deps = [
        ":OpenFheUtils",
        "@heir//lib/Dialect:ModuleAttributes",
        "@heir//lib/Dialect/Openfhe/IR:Dialect",
        "@heir//lib/Utils:TargetUtils",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:Support",
    ],
)

heir_backend_config(
    name = "openfhe_backend_config",
    srcs = ["TargetConfig.td"],
)
