blob: f5bec11e8a8d87730f92375edeb4d6a4532ed335 [file] [log] [blame]
# Description: Bazel's Starlark interpreter
#
# This BUILD file defines two java_library rules that
# define a single Java package in two parts,
# the Starlark parser and evaluator.
# Eventually the Java package will be split in two,
# but splitting only the build rules helps enforce
# that only evaluator -> frontend dependencies are permitted,
# without the churn to clients of renaming classes one at a time
# as they move between two different Java packages.
#
# Until the split, clients should depend only on
# //third_party/bazel/src/main/java/com/google/devtools/build/lib:syntax,
# which is a facade for the complete package.
load("@rules_java//java:defs.bzl", "java_library")
package(default_visibility = ["//src:__subpackages__"])
licenses(["notice"]) # Apache 2.0
filegroup(
name = "srcs",
srcs = glob(["**"]),
visibility = ["//src/main/java/com/google/devtools/build/lib:__pkg__"],
)
# The Starlark frontend (syntax, scanner, parser, resolver)
java_library(
name = "frontend",
srcs = [
"Argument.java",
"AssignmentStatement.java",
"BinaryOperatorExpression.java",
"CallExpression.java",
"Comment.java",
"Comprehension.java",
"ConditionalExpression.java",
"DefStatement.java",
"DictExpression.java",
"DotExpression.java",
"Expression.java",
"ExpressionStatement.java",
"FileLocations.java",
"FileOptions.java",
"FlowStatement.java",
"ForStatement.java",
"Identifier.java",
"IfStatement.java",
"IndexExpression.java",
"IntegerLiteral.java",
"Lexer.java",
"ListExpression.java",
"LoadStatement.java",
"Location.java",
"Node.java",
"NodePrinter.java",
"NodeVisitor.java",
"Parameter.java",
"Parser.java",
"ParserInput.java",
"Resolver.java",
"ReturnStatement.java",
"SliceExpression.java",
"StarlarkFile.java",
"Statement.java",
"StringLiteral.java",
"SyntaxError.java",
"TokenKind.java",
"UnaryOperatorExpression.java",
],
deps = [
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
"//src/main/java/net/starlark/java/spelling",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
"//third_party/protobuf:protobuf_java",
],
)
# The Starlark evaluator
java_library(
name = "evaluator",
srcs = [
"BuiltinCallable.java",
"CallUtils.java",
"ClassObject.java",
"CpuProfiler.java",
"Debug.java",
"Debugger.java",
"Dict.java",
"Eval.java",
"EvalException.java",
"EvalExceptionWithStackTrace.java",
"EvalUtils.java",
"FlagGuardedValue.java",
"FormatParser.java",
"HasBinary.java",
"JNI.java",
"MethodDescriptor.java",
"MethodLibrary.java",
"Module.java",
"Mutability.java",
"NoneType.java",
"ParamDescriptor.java",
"Printer.java",
"RangeList.java",
"Sequence.java",
"Starlark.java",
"StarlarkCallable.java",
"StarlarkFunction.java",
"StarlarkIndexable.java",
"StarlarkIterable.java",
"StarlarkList.java",
"StarlarkSemantics.java",
"StarlarkThread.java",
"StarlarkValue.java",
"StringModule.java",
"Tuple.java",
],
deps = [
":frontend",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/net/starlark/java/annot",
"//src/main/java/net/starlark/java/spelling",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
"//third_party/protobuf:protobuf_java",
],
)
# Dynamic library for Starlark CPU profiler.
# The application or test must arrange for the library to be added
# to the java.library.path directory (e.g. by 'java -Djava.library.path=<dir>').
# What a mess.
filegroup(
name = "cpu_profiler",
srcs = select({
"//src/conditions:darwin": [":libcpu_profiler.dylib"],
"//src/conditions:windows": [":cpu_profiler.dll"],
"//conditions:default": [":libcpu_profiler.so"], # POSIX
}),
)
genrule(
name = "cpu_profiler_darwin",
srcs = ["libcpu_profiler.so"],
outs = ["libcpu_profiler.dylib"],
cmd = "cp $< $@",
visibility = ["//visibility:private"],
)
genrule(
name = "cpu_profiler_windows",
srcs = ["libcpu_profiler.so"],
outs = ["cpu_profiler.dll"],
cmd = "cp $< $@",
visibility = ["//visibility:private"],
)
# The C++ portion of the Starlark CPU profiler.
cc_binary(
name = "libcpu_profiler.so",
srcs = select({
"//src/conditions:darwin": ["cpu_profiler_posix.cc"],
# There is no config_setting for Linux.
# See https://github.com/bazelbuild/bazel/issues/11107
"//src/conditions:linux_aarch64": ["cpu_profiler_posix.cc"],
"//src/conditions:linux_arm": ["cpu_profiler_posix.cc"],
"//src/conditions:linux_ppc": ["cpu_profiler_posix.cc"],
"//src/conditions:linux_s390x": ["cpu_profiler_posix.cc"],
"//src/conditions:linux_x86_64": ["cpu_profiler_posix.cc"],
"//conditions:default": ["cpu_profiler_unimpl.cc"],
}),
linkshared = 1,
visibility = ["//visibility:private"],
deps = ["@bazel_tools//tools/jdk:jni"],
)