blob: ea3eaa6b22bc90360494ef3784f5484c6b590b94 [file] [log] [blame]
load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@com_github_johnynek_bazel_jar_jar//:jar_jar.bzl", "jar_jar")
load("@rules_jvm_external//:defs.bzl", "javadoc")
load("//:maven.bzl", "JAZZER_VERSION")
load("//bazel:jar.bzl", "strip_jar")
load("//sanitizers:sanitizers.bzl", "SANITIZER_CLASSES")
java_binary(
name = "jazzer_standalone",
main_class = "com.code_intelligence.jazzer.Jazzer",
visibility = [
"//:__pkg__",
"//launcher:__pkg__",
],
runtime_deps = [
":jazzer_import",
"//deploy:jazzer-api",
],
)
strip_jar(
name = "jazzer",
out = "jazzer.jar",
jar = ":jazzer_shaded",
paths_to_keep = [
"com/code_intelligence/jazzer/**",
"jaz/**",
"META-INF/MANIFEST.MF",
"win32-x86/**",
"win32-x86-64/**",
],
visibility = ["//visibility:public"],
)
java_library(
name = "constants",
srcs = [":constants_java"],
visibility = ["//visibility:public"],
)
java_import(
name = "jazzer_import",
jars = [":jazzer"],
visibility = ["//:__subpackages__"],
deps = ["//deploy:jazzer-api"],
)
jar_jar(
name = "jazzer_shaded",
input_jar = "jazzer_unshaded_deploy.jar",
rules = "jazzer_shade_rules.jarjar",
)
java_binary(
name = "jazzer_unshaded",
# Note: We can't add
# //src/main/java/com/code_intelligence/jazzer/runtime:java_bootstrap_unshaded itself as
# that would also strip out external dependencies common between Jazzer and its bootstrap jar,
# such as e.g. RulesJni, which should be shaded into distinct classes.
deploy_env = [
"//src/main/java/com/code_intelligence/jazzer/api:api_deploy_env",
"//src/main/java/com/code_intelligence/jazzer/runtime:jazzer_bootstrap_env",
],
main_class = "com.code_intelligence.jazzer.Jazzer",
runtime_deps = [":jazzer_lib"],
)
# Docs are only generated for the com.code_intelligence.jazzer package. Everything else is not
# considered a public interface.
javadoc(
name = "jazzer-docs",
javadocopts = select({
"//deploy:emit_linked_javadoc": [
"-link",
"https://docs.oracle.com/en/java/javase/17/docs/api/",
"-link",
"https://codeintelligencetesting.github.io/jazzer-docs/jazzer-api/",
],
"//conditions:default": [],
}),
visibility = ["//deploy:__pkg__"],
deps = [":jazzer_lib"],
)
strip_jar(
name = "jazzer-sources",
jar = ":jazzer_transitive_sources_deploy-src.jar",
paths_to_keep = [
"com/code_intelligence/jazzer/**",
"jaz/**",
"META-INF/MANIFEST.MF",
],
visibility = ["//deploy:__pkg__"],
)
# The _deploy-src.jar for this target includes the sources for the jazzer_bootstrap library.
java_binary(
name = "jazzer_transitive_sources",
main_class = "com.code_intelligence.jazzer.Jazzer",
runtime_deps = [
":jazzer_lib",
"//src/main/java/com/code_intelligence/jazzer/runtime:jazzer_bootstrap_lib",
],
)
java_library(
name = "jazzer_lib",
srcs = ["Jazzer.java"],
visibility = ["//deploy:__pkg__"],
runtime_deps = select({
"@platforms//os:windows": [],
"//conditions:default": ["//src/main/native/com/code_intelligence/jazzer:jazzer_preload"],
}) + [
# Only used by JUnit, but including it here means we don't need to shade ASM in
# jazzer-junit.
"//src/main/java/com/code_intelligence/jazzer/utils:unsafe_utils",
],
deps = [
"//src/main/java/com/code_intelligence/jazzer/driver",
"//src/main/java/com/code_intelligence/jazzer/runtime:constants",
"//src/main/java/com/code_intelligence/jazzer/utils:log",
"@fmeum_rules_jni//jni/tools/native_loader",
],
)
write_file(
name = "constants_java",
out = "Constants.java",
content = [
"package com.code_intelligence.jazzer;",
"public final class Constants {",
" public static final String JAZZER_VERSION = \"%s\";" % JAZZER_VERSION,
"}",
],
)