Skip to content

Commit 3953cb2

Browse files
Merge pull request #153 from google/antlr
antlr: drop rules_antlr for custom rules
2 parents fa4f9ae + 91243fa commit 3953cb2

6 files changed

Lines changed: 86 additions & 28 deletions

File tree

bazel/BUILD

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
11
package(default_visibility = ["//visibility:public"])
2+
3+
load("@rules_java//java:defs.bzl", "java_binary")
4+
5+
java_binary(
6+
name = "antlr4_tool",
7+
runtime_deps = ["@antlr4_jar//jar"],
8+
main_class = "org.antlr.v4.Tool",
9+
)

bazel/antlr.bzl

Lines changed: 63 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,18 @@
1616
Generate C++ parser and lexer from a grammar file.
1717
"""
1818

19-
load("@rules_antlr//antlr:antlr4.bzl", "antlr")
20-
21-
def antlr_cc_library(name, src, package = None, listener = False, visitor = True):
19+
def antlr_cc_library(name, src, package):
2220
"""Creates a C++ lexer and parser from a source grammar.
2321
2422
Args:
2523
name: Base name for the lexer and the parser rules.
2624
src: source ANTLR grammar file
2725
package: The namespace for the generated code
28-
listener: generate ANTLR listener (default: False)
29-
visitor: generate ANTLR visitor (default: True)
3026
"""
3127
generated = name + "_grammar"
32-
antlr(
28+
antlr_library(
3329
name = generated,
34-
srcs = [src],
35-
language = "Cpp",
36-
listener = listener,
37-
visitor = visitor,
30+
src = src,
3831
package = package,
3932
)
4033
native.cc_library(
@@ -46,3 +39,63 @@ def antlr_cc_library(name, src, package = None, listener = False, visitor = True
4639
],
4740
linkstatic = 1,
4841
)
42+
43+
def _antlr_library(ctx):
44+
output = ctx.actions.declare_directory(ctx.attr.name)
45+
46+
antlr_args = ctx.actions.args()
47+
antlr_args.add("-Dlanguage=Cpp")
48+
antlr_args.add("-no-listener")
49+
antlr_args.add("-visitor")
50+
antlr_args.add("-o", output.path)
51+
antlr_args.add("-package", ctx.attr.package)
52+
antlr_args.add(ctx.file.src)
53+
54+
basename = ctx.file.src.basename[:-3]
55+
suffixes = ["Lexer", "Parser", "BaseVisitor", "Visitor"]
56+
57+
ctx.actions.run(
58+
arguments = [antlr_args],
59+
inputs = [ctx.file.src],
60+
outputs = [output],
61+
executable = ctx.executable._tool,
62+
progress_message = "Processing ANTLR grammar",
63+
)
64+
65+
files = []
66+
for suffix in suffixes:
67+
header = ctx.actions.declare_file(basename + suffix + ".h")
68+
source = ctx.actions.declare_file(basename + suffix + ".cpp")
69+
generated = output.path + "/" + ctx.file.src.short_path[:-3] + suffix
70+
71+
ctx.actions.run_shell(
72+
mnemonic = "CopyHeader" + suffix,
73+
inputs = [output],
74+
outputs = [header],
75+
command = 'cp "{generated}" "{out}"'.format(generated = generated + ".h", out = header.path),
76+
)
77+
ctx.actions.run_shell(
78+
mnemonic = "CopySource" + suffix,
79+
inputs = [output],
80+
outputs = [source],
81+
command = 'cp "{generated}" "{out}"'.format(generated = generated + ".cpp", out = source.path),
82+
)
83+
84+
files.append(header)
85+
files.append(source)
86+
87+
compilation_context = cc_common.create_compilation_context(headers = depset(files))
88+
return [DefaultInfo(files = depset(files)), CcInfo(compilation_context = compilation_context)]
89+
90+
antlr_library = rule(
91+
implementation = _antlr_library,
92+
attrs = {
93+
"src": attr.label(allow_single_file = [".g4"], mandatory = True),
94+
"package": attr.string(),
95+
"_tool": attr.label(
96+
executable = True,
97+
cfg = "host",
98+
default = Label("//bazel:antlr4_tool"),
99+
),
100+
},
101+
)

bazel/deps.bzl

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Main dependencies of cel-cpp.
33
"""
44

5-
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
5+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_jar")
66

77
def base_deps():
88
"""Base evaluator and test dependencies."""
@@ -69,15 +69,9 @@ def base_deps():
6969

7070
def parser_deps():
7171
"""ANTLR dependency for the parser."""
72-
http_archive(
73-
name = "rules_antlr",
74-
sha256 = "26e6a83c665cf6c1093b628b3a749071322f0f70305d12ede30909695ed85591",
75-
strip_prefix = "rules_antlr-0.5.0",
76-
urls = ["https://github.com/marcohu/rules_antlr/archive/0.5.0.tar.gz"],
77-
)
72+
# Apr 15, 2022
73+
ANTLR4_VERSION = "4.10.1"
7874

79-
ANTLR4_RUNTIME_GIT_SHA = "70b2edcf98eb612a92d3dbaedb2ce0b69533b0cb" # Dec 7, 2021
80-
ANTLR4_RUNTIME_SHA = "fae73909f95e1320701e29ac03bab9233293fb5b90d3ce857279f1b46b614c83"
8175
http_archive(
8276
name = "antlr4_runtimes",
8377
build_file_content = """
@@ -89,9 +83,14 @@ cc_library(
8983
includes = ["runtime/Cpp/runtime/src"],
9084
)
9185
""",
92-
sha256 = ANTLR4_RUNTIME_SHA,
93-
strip_prefix = "antlr4-" + ANTLR4_RUNTIME_GIT_SHA,
94-
urls = ["https://github.com/antlr/antlr4/archive/" + ANTLR4_RUNTIME_GIT_SHA + ".tar.gz"],
86+
sha256 = "a320568b738e42735946bebc5d9d333170e14a251c5734e8b852ad1502efa8a2",
87+
strip_prefix = "antlr4-" + ANTLR4_VERSION,
88+
urls = ["https://github.com/antlr/antlr4/archive/v" + ANTLR4_VERSION + ".tar.gz"],
89+
)
90+
http_jar(
91+
name = "antlr4_jar",
92+
urls = ["https://www.antlr.org/download/antlr-" + ANTLR4_VERSION + "-complete.jar"],
93+
sha256 = "41949d41f20d31d5b8277187735dd755108df52b38db6c865108d3382040f918",
9594
)
9695

9796
def flatbuffers_deps():

bazel/deps_extra.bzl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Transitive dependencies.
44

55
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
66
load("@com_google_googleapis//:repository_rules.bzl", "switched_rules_by_language")
7-
load("@rules_antlr//antlr:repositories.bzl", "rules_antlr_dependencies")
87
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
98
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")
109

@@ -50,5 +49,4 @@ def cel_cpp_deps_extra():
5049
cc = True,
5150
go = True, # cel-spec requirement
5251
)
53-
rules_antlr_dependencies("4.8")
5452
cel_spec_deps_extra()

parser/parser.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@
4343
#include "internal/strings.h"
4444
#include "internal/unicode.h"
4545
#include "internal/utf8.h"
46-
#include "parser/internal/cel_grammar.inc/cel_parser_internal/CelBaseVisitor.h"
47-
#include "parser/internal/cel_grammar.inc/cel_parser_internal/CelLexer.h"
48-
#include "parser/internal/cel_grammar.inc/cel_parser_internal/CelParser.h"
46+
#include "parser/internal/CelBaseVisitor.h"
47+
#include "parser/internal/CelLexer.h"
48+
#include "parser/internal/CelParser.h"
4949
#include "parser/macro.h"
5050
#include "parser/options.h"
5151
#include "parser/source_factory.h"

parser/source_factory.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include "absl/strings/string_view.h"
2525
#include "absl/types/optional.h"
2626
#include "antlr4-runtime.h"
27-
#include "parser/internal/cel_grammar.inc/cel_parser_internal/CelParser.h"
27+
#include "parser/internal/CelParser.h"
2828

2929
namespace google::api::expr::parser {
3030

0 commit comments

Comments
 (0)