-
Notifications
You must be signed in to change notification settings - Fork 2k
Expand file tree
/
Copy pathBUILD.bazel
More file actions
93 lines (82 loc) · 2.38 KB
/
BUILD.bazel
File metadata and controls
93 lines (82 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@rules_shell//shell:sh_binary.bzl", "sh_binary")
load("//misc/bazel:rust.bzl", "codeql_rust_binary")
load("//misc/bazel/3rdparty/tree_sitter_extractors_deps:defs.bzl", "aliases", "all_crate_deps", "crate_deps")
(ra_ap_syntax_label,) = crate_deps(
["ra_ap_syntax"],
"rust/extractor",
)
ra_ap_syntax_workspace, _, _ = str(ra_ap_syntax_label).partition("//")
alias(
name = "rust.ungram",
actual = "%s//:rust.ungram" % ra_ap_syntax_workspace,
visibility = ["//rust/codegen:__pkg__"],
)
_codegen = [
"grammar.rs",
"grammar/ast_src.rs",
]
_codegen_srcs = ["@rust-analyzer-src//:xtask/src/codegen/%s" % f for f in _codegen]
_codegen_outs = ["src/codegen/%s" % f for f in _codegen]
genrule(
name = "codegen",
srcs = _codegen_srcs,
outs = _codegen_outs,
cmd = "\n".join(
["mkdir -p $(RULEDIR)/src/codegen/grammar"] +
[
"cp $(location %s) $(RULEDIR)/%s" % item
for item in zip(_codegen_srcs, _codegen_outs)
],
),
)
codeql_rust_binary(
name = "ast-generator",
srcs = glob(
["src/**/*.rs"],
exclude = ["src/codegen/**"],
) + [":codegen"],
aliases = aliases(),
args = ["$(rlocationpath :rust.ungram)"],
data = [":rust.ungram"] + glob(["templates/*.mustache"]),
proc_macro_deps = all_crate_deps(
proc_macro = True,
),
visibility = ["//rust:__subpackages__"],
deps = all_crate_deps(
normal = True,
),
)
write_file(
name = "update",
out = "update.sh",
content = [
"#!/bin/bash",
". misc/bazel/runfiles.sh",
'DST_DIR="$(dirname "$(rlocation "$1")")"',
'mkdir -p "$DST_DIR/src/codegen/grammar"',
] + [
# using cat instead of cp to honor default umask
# (also, macOS does not support `cp --no-preserve=mode`)
'cat "$(rlocation "$%s")" > "$DST_DIR/%s"' % item
for item in enumerate(
["rust.ungram"] + _codegen_outs,
2,
)
],
is_executable = True,
)
sh_binary(
name = "inject-sources",
srcs = [":update"],
args = ["$(rlocationpath %s)" % f for f in [
"Cargo.toml",
":rust.ungram",
] + _codegen_outs],
data = [
"Cargo.toml",
":rust.ungram",
] + _codegen_outs,
deps = ["//misc/bazel:sh_runfiles"],
)
exports_files(["Cargo.toml"])