load("@rules_cc//cc:cc_library.bzl", "cc_library")

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

cc_library(
    name = "PipelineRegistration",
    srcs = ["PipelineRegistration.cpp"],
    hdrs = ["PipelineRegistration.h"],
    deps = [
        "@heir//lib/Dialect/BGV/Conversions/BGVToLWE",
        "@heir//lib/Dialect/LWE/Conversions/LWEToPolynomial",
        "@heir//lib/Dialect/ModArith/Conversions/ModArithToArith",
        "@heir//lib/Dialect/Polynomial/Conversions/PolynomialToModArith",
        "@heir//lib/Dialect/Secret/Conversions/SecretToCGGI",
        "@heir//lib/Transforms/ConvertIfToSelect",
        "@heir//lib/Transforms/ConvertSecretExtractToStaticExtract",
        "@heir//lib/Transforms/ConvertSecretForToStaticFor",
        "@heir//lib/Transforms/ConvertSecretInsertToStaticInsert",
        "@heir//lib/Transforms/ConvertSecretWhileToStaticFor",
        "@heir//lib/Transforms/ElementwiseToAffine",
        "@heir//lib/Transforms/EmitCInterface",
        "@heir//lib/Transforms/LowerPolynomialEval",
        "@heir//lib/Transforms/MemrefToArith:MemrefToArithRegistration",
        "@heir//lib/Transforms/PolynomialApproximation",
        "@llvm-project//mlir:AffineToStandard",
        "@llvm-project//mlir:AffineTransforms",
        "@llvm-project//mlir:ArithTransforms",
        "@llvm-project//mlir:BufferizationToMemRef",
        "@llvm-project//mlir:BufferizationTransforms",
        "@llvm-project//mlir:ConvertToLLVM",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:LinalgTransforms",
        "@llvm-project//mlir:MemRefTransforms",
        "@llvm-project//mlir:Pass",
        "@llvm-project//mlir:SCFToControlFlow",
        "@llvm-project//mlir:Transforms",
    ],
)

cc_library(
    name = "BooleanPipelineRegistration",
    srcs = ["BooleanPipelineRegistration.cpp"],
    hdrs = ["BooleanPipelineRegistration.h"],
    defines = select({
        "@heir//:config_enable_yosys": [],
        "//conditions:default": ["HEIR_NO_YOSYS=1"],
    }),
    deps = [
        ":PipelineRegistration",
        "@heir//lib/Dialect/Arith/Conversions/ArithToCGGI",
        "@heir//lib/Dialect/CGGI/Conversions/CGGIToJaxite",
        "@heir//lib/Dialect/CGGI/Conversions/CGGIToSCIFRBool",
        "@heir//lib/Dialect/CGGI/Conversions/CGGIToTfheRust",
        "@heir//lib/Dialect/CGGI/Conversions/CGGIToTfheRustBool",
        "@heir//lib/Dialect/Debug/Transforms",
        "@heir//lib/Dialect/Debug/Transforms:ValidateNames",
        "@heir//lib/Dialect/LWE/Conversions/LWEToPolynomial",
        "@heir//lib/Dialect/Secret/Conversions/SecretToCGGI",
        "@heir//lib/Dialect/Secret/Transforms:DistributeGeneric",
        "@heir//lib/Transforms/AddClientInterface",
        "@heir//lib/Transforms/BooleanVectorizer",
        "@heir//lib/Transforms/DropUnitDims",
        "@heir//lib/Transforms/FoldConstantTensors",
        "@heir//lib/Transforms/ForwardInsertToExtract",
        "@heir//lib/Transforms/ForwardStoreToLoad",
        "@heir//lib/Transforms/FullLoopUnroll",
        "@heir//lib/Transforms/LinalgCanonicalizations",
        "@heir//lib/Transforms/MemrefToArith:ExpandCopy",
        "@heir//lib/Transforms/MemrefToArith:MemrefToArithRegistration",
        "@heir//lib/Transforms/ReductionCanonicalizations",
        "@heir//lib/Transforms/Secretize",
        "@heir//lib/Transforms/TensorLinalgToAffineLoops",
        "@heir//lib/Transforms/TensorToScalars",
        "@heir//lib/Transforms/UnusedMemRef",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:AffineTransforms",
        "@llvm-project//mlir:ArithTransforms",
        "@llvm-project//mlir:BufferizationTransforms",
        "@llvm-project//mlir:FuncDialect",
        "@llvm-project//mlir:LinalgTransforms",
        "@llvm-project//mlir:MemRefTransforms",
        "@llvm-project//mlir:Pass",
        "@llvm-project//mlir:TensorToLinalg",
        "@llvm-project//mlir:Transforms",
    ] + select({
        "@heir//:config_enable_yosys": [
            "@heir//lib/Transforms/YosysOptimizer",
        ],
        "//conditions:default": [],
    }),
)

cc_library(
    name = "ArithmeticPipelineRegistration",
    srcs = ["ArithmeticPipelineRegistration.cpp"],
    hdrs = ["ArithmeticPipelineRegistration.h"],
    deps = [
        ":PipelineRegistration",
        "@heir//lib/Dialect/BGV/Conversions/BGVToLWE",
        "@heir//lib/Dialect/CKKS/Transforms:CKKSToLWE",
        "@heir//lib/Dialect/Debug/Transforms",
        "@heir//lib/Dialect/Debug/Transforms:ValidateNames",
        "@heir//lib/Dialect/LWE/Conversions/LWEToLattigo",
        "@heir//lib/Dialect/LWE/Conversions/LWEToOpenfhe",
        "@heir//lib/Dialect/LWE/Conversions/LWEToPolynomial",
        "@heir//lib/Dialect/LWE/Transforms:AddDebugPort",
        "@heir//lib/Dialect/Lattigo/Transforms:AllocToInPlace",
        "@heir//lib/Dialect/Lattigo/Transforms:ConfigureCryptoContext",
        "@heir//lib/Dialect/Openfhe/Transforms:AllocToInPlace",
        "@heir//lib/Dialect/Openfhe/Transforms:ConfigureCryptoContext",
        "@heir//lib/Dialect/Openfhe/Transforms:CountAddAndKeySwitch",
        "@heir//lib/Dialect/Openfhe/Transforms:FastRotationPrecompute",
        "@heir//lib/Dialect/Secret/Conversions/SecretToBGV",
        "@heir//lib/Dialect/Secret/Conversions/SecretToCGGI",
        "@heir//lib/Dialect/Secret/Conversions/SecretToCKKS",
        "@heir//lib/Dialect/Secret/Conversions/SecretToModArith",
        "@heir//lib/Dialect/Secret/IR:Dialect",
        "@heir//lib/Dialect/Secret/Transforms:AddDebugPort",
        "@heir//lib/Dialect/Secret/Transforms:DistributeGeneric",
        "@heir//lib/Dialect/Secret/Transforms:ImportExecutionResult",
        "@heir//lib/Dialect/TensorExt/Conversions/TensorExtToTensor",
        "@heir//lib/Dialect/TensorExt/Transforms:CollapseInsertionChains",
        "@heir//lib/Dialect/TensorExt/Transforms:ImplementRotateAndReduce",
        "@heir//lib/Dialect/TensorExt/Transforms:ImplementShiftNetwork",
        "@heir//lib/Dialect/TensorExt/Transforms:InsertRotate",
        "@heir//lib/Dialect/TensorExt/Transforms:RotateAndReduce",
        "@heir//lib/Transforms/ActivationCanonicalizations",
        "@heir//lib/Transforms/AddClientInterface",
        "@heir//lib/Transforms/ApplyFolders",
        "@heir//lib/Transforms/BooleanVectorizer",
        "@heir//lib/Transforms/CompareToSignRewrite",
        "@heir//lib/Transforms/ConvertToCiphertextSemantics",
        "@heir//lib/Transforms/DropUnitDims",
        "@heir//lib/Transforms/ElementwiseToAffine",
        "@heir//lib/Transforms/FoldConstantTensors",
        "@heir//lib/Transforms/FoldPlaintextMasks",
        "@heir//lib/Transforms/ForwardInsertSliceToExtractSlice",
        "@heir//lib/Transforms/ForwardInsertToExtract",
        "@heir//lib/Transforms/FullLoopUnroll",
        "@heir//lib/Transforms/GenerateParam",
        "@heir//lib/Transforms/InlineActivations",
        "@heir//lib/Transforms/LayoutOptimization",
        "@heir//lib/Transforms/LayoutPropagation",
        "@heir//lib/Transforms/LinalgCanonicalizations",
        "@heir//lib/Transforms/MemrefToArith:MemrefToArithRegistration",
        "@heir//lib/Transforms/OperationBalancer",
        "@heir//lib/Transforms/OptimizeRelinearization",
        "@heir//lib/Transforms/PopulateScale",
        "@heir//lib/Transforms/PropagateAnnotation",
        "@heir//lib/Transforms/ReductionCanonicalizations",
        "@heir//lib/Transforms/RemoveUnusedPureCall",
        "@heir//lib/Transforms/SecretInsertMgmt",
        "@heir//lib/Transforms/Secretize",
        "@heir//lib/Transforms/SelectRewrite",
        "@heir//lib/Transforms/SplitPreprocessing",
        "@heir//lib/Transforms/TensorLinalgToAffineLoops",
        "@heir//lib/Transforms/ValidateNoise",
        "@llvm-project//llvm:Support",
        "@llvm-project//mlir:AffineTransforms",
        "@llvm-project//mlir:Pass",
        "@llvm-project//mlir:Transforms",
    ],
)
