Skip to content

Commit fc2315b

Browse files
committed
poc: add tfhe-rs with bazel deps
Signed-off-by: Asra Ali <[email protected]>
1 parent 22f97a8 commit fc2315b

File tree

6 files changed

+1286
-1
lines changed

6 files changed

+1286
-1
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ repos:
3939
hooks:
4040
- id: codespell
4141
args: ["-L", "crate, fpt"]
42-
42+
exclude: "^(.*[.]lock)"
4343

4444
# Changes tabs to spaces
4545
- repo: https://github.com/Lucas-C/pre-commit-hooks

MODULE.bazel

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,31 @@ git_override(
113113
commit = "c84a140c93352cdabbfb547c531be34515b12228",
114114
remote = "https://github.com/google/re2",
115115
)
116+
117+
bazel_dep(name = "rules_rust", version = "0.60.0")
118+
119+
crate = use_extension("@rules_rust//crate_universe:extensions.bzl", "crate")
120+
crate.spec(
121+
features = ["derive"],
122+
package = "clap",
123+
version = "4.1.8",
124+
)
125+
crate.spec(
126+
package = "rayon",
127+
version = "1.6.1",
128+
)
129+
crate.spec(
130+
features = ["derive"],
131+
package = "serde",
132+
version = "1.0.152",
133+
)
134+
crate.spec(
135+
features = [
136+
"shortint",
137+
"x86_64-unix",
138+
],
139+
package = "tfhe",
140+
version = "0.5.3",
141+
)
142+
crate.from_specs()
143+
use_repo(crate, "crates")

MODULE.bazel.lock

Lines changed: 1176 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/Examples/tfhe_rust/BUILD

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# See README.md for setup required to run these tests
22

3+
load("@heir//tools:heir-tfhe-rs.bzl", "tfhe_rs_lib")
34
load("//bazel:lit.bzl", "glob_lit_tests")
45

56
package(default_applicable_licenses = ["@heir//:license"])
@@ -31,3 +32,16 @@ glob_lit_tests(
3132
},
3233
test_file_exts = ["mlir"],
3334
)
35+
36+
tfhe_rs_lib(
37+
name = "test_add_one",
38+
heir_opt_flags = [
39+
"--forward-store-to-load",
40+
"--cggi-to-tfhe-rust",
41+
"--canonicalize",
42+
"--cse",
43+
],
44+
heir_translate_flags = ["--use-levels"],
45+
mlir_src = "test_add_one.mlir",
46+
rs_lib_target_name = "test_add_one_rs_lib",
47+
)

tools/BUILD

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,16 @@ bzl_library(
284284
],
285285
)
286286

287+
bzl_library(
288+
name = "heir_tfhe_rs",
289+
srcs = ["heir-tfhe-rs.bzl"],
290+
visibility = ["//visibility:public"],
291+
deps = [
292+
":heir_opt_bzl",
293+
":heir_translate_bzl",
294+
],
295+
)
296+
287297
bzl_library(
288298
name = "llc_bzl",
289299
srcs = ["llc.bzl"],

tools/heir-tfhe-rs.bzl

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"""A macro providing an end-to-end library for tfhe-rs codegen."""
2+
3+
load("@rules_rust//rust:defs.bzl", "rust_library")
4+
load("@heir//tools:heir-opt.bzl", "heir_opt")
5+
load("@heir//tools:heir-translate.bzl", "heir_translate")
6+
7+
def tfhe_rs_lib(name, mlir_src, rs_lib_target_name, heir_opt_flags = [], heir_translate_flags = [], data = [], tags = [], deps = [], **kwargs):
8+
"""A rule for running generating tfhe-rs and running a test on it.
9+
10+
Args:
11+
name: The name of the test target and the generated .rs file basename.
12+
mlir_src: The source mlir file to run through heir-translate
13+
rs_lib_target_name: The name of the generated rust_library target
14+
heir_opt_flags: Flags to pass to heir-opt before heir-translate
15+
heir_translate_flags: Flags to pass to heir-translate
16+
data: Data dependencies to be passed to heir_opt
17+
tags: Tags to pass to rust_library
18+
deps: Deps to pass to rust_library
19+
**kwargs: Keyword arguments to pass to rust_library.
20+
"""
21+
rs_codegen_target = name + ".heir_translate_rs"
22+
23+
generated_rs_filename = "%s_lib.rs" % name
24+
heir_opt_name = "%s_heir_opt" % name
25+
generated_heir_opt_name = "%s_heir_opt.mlir" % name
26+
heir_translate_flags = heir_translate_flags + ["--emit-tfhe-rust"]
27+
28+
if heir_opt_flags:
29+
heir_opt(
30+
name = heir_opt_name,
31+
src = mlir_src,
32+
pass_flags = heir_opt_flags,
33+
generated_filename = generated_heir_opt_name,
34+
data = data,
35+
)
36+
else:
37+
generated_heir_opt_name = mlir_src
38+
39+
heir_translate(
40+
name = rs_codegen_target,
41+
src = generated_heir_opt_name,
42+
pass_flags = heir_translate_flags,
43+
generated_filename = generated_rs_filename,
44+
)
45+
rust_library(
46+
name = rs_lib_target_name,
47+
srcs = [":" + generated_rs_filename],
48+
deps = deps + [
49+
"@crates//:serde",
50+
"@crates//:tfhe",
51+
"@crates//:rayon",
52+
"@crates//:clap"
53+
],
54+
tags = tags,
55+
data = data,
56+
**kwargs
57+
)

0 commit comments

Comments
 (0)