aboutsummaryrefslogtreecommitdiff
path: root/third_party
diff options
context:
space:
mode:
Diffstat (limited to 'third_party')
-rw-r--r--third_party/BUILD.bazel14
-rw-r--r--third_party/asm.BUILD32
-rw-r--r--third_party/bazel-toolchain-export-dynamic-macos-asan.patch12
-rw-r--r--third_party/classgraph.BUILD8
-rw-r--r--third_party/gflags-use-double-dash-args.patch11
-rw-r--r--third_party/jacoco-make-probe-adapter-subclassable.patch69
-rw-r--r--third_party/jacoco-make-probe-inserter-subclassable.patch109
-rw-r--r--third_party/jacoco_internal.BUILD18
-rw-r--r--third_party/libFuzzer.BUILD27
-rw-r--r--third_party/libjpeg_turbo.BUILD69
-rw-r--r--third_party/typetools.BUILD7
11 files changed, 376 insertions, 0 deletions
diff --git a/third_party/BUILD.bazel b/third_party/BUILD.bazel
new file mode 100644
index 00000000..0643e4f6
--- /dev/null
+++ b/third_party/BUILD.bazel
@@ -0,0 +1,14 @@
+load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
+
+bool_flag(
+ name = "toolchain",
+ build_setting_default = False,
+)
+
+config_setting(
+ name = "uses_toolchain",
+ flag_values = {
+ ":toolchain": "true",
+ },
+ visibility = ["//visibility:public"],
+)
diff --git a/third_party/asm.BUILD b/third_party/asm.BUILD
new file mode 100644
index 00000000..2f659fc6
--- /dev/null
+++ b/third_party/asm.BUILD
@@ -0,0 +1,32 @@
+java_library(
+ name = "asm",
+ srcs = glob(["asm/src/main/**/*.java"]),
+ visibility = ["//visibility:public"],
+)
+
+java_library(
+ name = "asm_commons",
+ srcs = glob(["asm-commons/src/main/**/*.java"]),
+ deps = [
+ ":asm",
+ ":asm_analysis",
+ ":asm_tree",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+java_library(
+ name = "asm_tree",
+ srcs = glob(["asm-tree/src/main/**/*.java"]),
+ deps = [":asm"],
+ visibility = ["//visibility:public"],
+)
+
+java_library(
+ name = "asm_analysis",
+ srcs = glob(["asm-analysis/src/main/**/*.java"]),
+ deps = [
+ ":asm",
+ ":asm_tree",
+ ],
+)
diff --git a/third_party/bazel-toolchain-export-dynamic-macos-asan.patch b/third_party/bazel-toolchain-export-dynamic-macos-asan.patch
new file mode 100644
index 00000000..05020e28
--- /dev/null
+++ b/third_party/bazel-toolchain-export-dynamic-macos-asan.patch
@@ -0,0 +1,12 @@
+diff --git toolchain/BUILD.llvm_repo toolchain/BUILD.llvm_repo
+--- toolchain/BUILD.llvm_repo
++++ toolchain/BUILD.llvm_repo
+@@ -124,3 +124,8 @@ filegroup(
+ name = "strip",
+ srcs = ["bin/llvm-strip"],
+ )
++
++cc_import(
++ name = "macos_asan_dynamic",
++ shared_library = "lib/clang/13.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib",
++)
diff --git a/third_party/classgraph.BUILD b/third_party/classgraph.BUILD
new file mode 100644
index 00000000..ab51f11c
--- /dev/null
+++ b/third_party/classgraph.BUILD
@@ -0,0 +1,8 @@
+java_library(
+ name = "classgraph",
+ srcs = glob([
+ "src/main/java/io/github/classgraph/**/*.java",
+ "src/main/java/nonapi/io/github/classgraph/**/*.java",
+ ]),
+ visibility = ["//visibility:public"],
+)
diff --git a/third_party/gflags-use-double-dash-args.patch b/third_party/gflags-use-double-dash-args.patch
new file mode 100644
index 00000000..554b41bd
--- /dev/null
+++ b/third_party/gflags-use-double-dash-args.patch
@@ -0,0 +1,11 @@
+--- src/gflags_reporting.cc
++++ src/gflags_reporting.cc
+@@ -118,7 +118,7 @@
+ // Goes to some trouble to make pretty line breaks.
+ string DescribeOneFlag(const CommandLineFlagInfo& flag) {
+ string main_part;
+- SStringPrintf(&main_part, " -%s (%s)",
++ SStringPrintf(&main_part, " --%s (%s)",
+ flag.name.c_str(),
+ flag.description.c_str());
+ const char* c_string = main_part.c_str();
diff --git a/third_party/jacoco-make-probe-adapter-subclassable.patch b/third_party/jacoco-make-probe-adapter-subclassable.patch
new file mode 100644
index 00000000..7e51195a
--- /dev/null
+++ b/third_party/jacoco-make-probe-adapter-subclassable.patch
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: EPL-2.0 and Apache-2.0
+// These patches apply to JaCoCo (https://github.com/jacoco/jacoco) and are hereby made available under the terms of the
+// Eclipse Public License 2.0 available at:
+// http://www.eclipse.org/legal/epl-2.0
+diff --git org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
+index 0cc06ada..b65efb03 100644
+--- org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
++++ org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
+@@ -31,6 +31,8 @@ import org.jacoco.core.internal.analysis.ClassCoverageImpl;
+ import org.jacoco.core.internal.analysis.StringPool;
+ import org.jacoco.core.internal.data.CRC64;
+ import org.jacoco.core.internal.flow.ClassProbesAdapter;
++import org.jacoco.core.internal.flow.ClassProbesVisitor;
++import org.jacoco.core.internal.flow.IClassProbesAdapterFactory;
+ import org.jacoco.core.internal.instr.InstrSupport;
+ import org.objectweb.asm.ClassReader;
+ import org.objectweb.asm.ClassVisitor;
+@@ -52,6 +54,8 @@ public class Analyzer {
+
+ private final StringPool stringPool;
+
++ private final IClassProbesAdapterFactory classProbesAdapterFactory;
++
+ /**
+ * Creates a new analyzer reporting to the given output.
+ *
+@@ -63,9 +67,21 @@ public class Analyzer {
+ */
+ public Analyzer(final ExecutionDataStore executionData,
+ final ICoverageVisitor coverageVisitor) {
++ this(executionData, coverageVisitor, new IClassProbesAdapterFactory() {
++ @Override
++ public ClassProbesAdapter makeClassProbesAdapter(ClassProbesVisitor cv, boolean trackFrames) {
++ return new ClassProbesAdapter(cv, trackFrames);
++ };
++ });
++ }
++
++ public Analyzer(final ExecutionDataStore executionData,
++ final ICoverageVisitor coverageVisitor,
++ final IClassProbesAdapterFactory classProbesAdapterFactory) {
+ this.executionData = executionData;
+ this.coverageVisitor = coverageVisitor;
+ this.stringPool = new StringPool();
++ this.classProbesAdapterFactory = classProbesAdapterFactory;
+ }
+
+ /**
+@@ -99,7 +115,7 @@ public class Analyzer {
+ coverageVisitor.visitCoverage(coverage);
+ }
+ };
+- return new ClassProbesAdapter(analyzer, false);
++ return classProbesAdapterFactory.makeClassProbesAdapter(analyzer, false);
+ }
+
+ private void analyzeClass(final byte[] source) {
+diff --git org.jacoco.core/src/org/jacoco/core/internal/flow/IClassProbesAdapterFactory.java org.jacoco.core/src/org/jacoco/core/internal/flow/IClassProbesAdapterFactory.java
+new file mode 100644
+index 00000000..45fc2709
+--- /dev/null
++++ org.jacoco.core/src/org/jacoco/core/internal/flow/IClassProbesAdapterFactory.java
+@@ -0,0 +1,6 @@
++package org.jacoco.core.internal.flow;
++
++public interface IClassProbesAdapterFactory {
++ ClassProbesAdapter makeClassProbesAdapter(ClassProbesVisitor cv,
++ boolean trackFrames);
++}
diff --git a/third_party/jacoco-make-probe-inserter-subclassable.patch b/third_party/jacoco-make-probe-inserter-subclassable.patch
new file mode 100644
index 00000000..3885fa1f
--- /dev/null
+++ b/third_party/jacoco-make-probe-inserter-subclassable.patch
@@ -0,0 +1,109 @@
+// SPDX-License-Identifier: EPL-2.0 and Apache-2.0
+// These patches apply to JaCoCo (https://github.com/jacoco/jacoco) and are hereby made available under the terms of the
+// Eclipse Public License 2.0 available at:
+// http://www.eclipse.org/legal/epl-2.0
+diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
+index 476c9e34..bc192dc6 100644
+--- org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
++++ org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
+@@ -24,6 +24,7 @@ import org.objectweb.asm.MethodVisitor;
+ public class ClassInstrumenter extends ClassProbesVisitor {
+
+ private final IProbeArrayStrategy probeArrayStrategy;
++ private final IProbeInserterFactory probeInserterFactory;
+
+ private String className;
+
+@@ -40,6 +41,22 @@ public class ClassInstrumenter extends ClassProbesVisitor {
+ final ClassVisitor cv) {
+ super(cv);
+ this.probeArrayStrategy = probeArrayStrategy;
++ this.probeInserterFactory = new IProbeInserterFactory() {
++ @Override
++ public ProbeInserter makeProbeInserter(int access, String name,
++ String desc, MethodVisitor mv,
++ IProbeArrayStrategy arrayStrategy) {
++ return new ProbeInserter(access, name, desc, mv, arrayStrategy);
++ }
++ };
++ }
++
++ public ClassInstrumenter(final IProbeArrayStrategy probeArrayStrategy,
++ final IProbeInserterFactory probeInserterFactory,
++ final ClassVisitor cv) {
++ super(cv);
++ this.probeArrayStrategy = probeArrayStrategy;
++ this.probeInserterFactory = probeInserterFactory;
+ }
+
+ @Override
+@@ -71,8 +88,9 @@ public class ClassInstrumenter extends ClassProbesVisitor {
+ return null;
+ }
+ final MethodVisitor frameEliminator = new DuplicateFrameEliminator(mv);
+- final ProbeInserter probeVariableInserter = new ProbeInserter(access,
+- name, desc, frameEliminator, probeArrayStrategy);
++ final ProbeInserter probeVariableInserter =
++ probeInserterFactory.makeProbeInserter(access, name, desc,
++ frameEliminator, probeArrayStrategy);
+ return new MethodInstrumenter(probeVariableInserter,
+ probeVariableInserter);
+ }
+diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserterFactory.java org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserterFactory.java
+new file mode 100644
+index 00000000..19c2a7e2
+--- /dev/null
++++ org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserterFactory.java
+@@ -0,0 +1,8 @@
++package org.jacoco.core.internal.instr;
++
++import org.objectweb.asm.MethodVisitor;
++
++public interface IProbeInserterFactory {
++ ProbeInserter makeProbeInserter(int access, String name, String desc,
++ MethodVisitor mv, IProbeArrayStrategy arrayStrategy);
++}
+diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
+index 71808ac8..3df93f63 100644
+--- org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
++++ org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
+@@ -78,7 +78,7 @@ public final class InstrSupport {
+ * Data type of the field that stores coverage information for a class (
+ * <code>boolean[]</code>).
+ */
+- public static final String DATAFIELD_DESC = "[Z";
++ public static final String DATAFIELD_DESC = "java/nio/ByteBuffer";
+
+ // === Init Method ===
+
+diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
+index 0f5b99ff..ba5daa6d 100644
+--- org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
++++ org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
+@@ -25,7 +25,7 @@ import org.objectweb.asm.TypePath;
+ * addition the probe array has to be retrieved at the beginning of the method
+ * and stored in a local variable.
+ */
+-class ProbeInserter extends MethodVisitor implements IProbeInserter {
++public class ProbeInserter extends MethodVisitor implements IProbeInserter {
+
+ private final IProbeArrayStrategy arrayStrategy;
+
+@@ -36,7 +36,7 @@ class ProbeInserter extends MethodVisitor implements IProbeInserter {
+ private final boolean clinit;
+
+ /** Position of the inserted variable. */
+- private final int variable;
++ protected final int variable;
+
+ /** Maximum stack usage of the code to access the probe array. */
+ private int accessorStackSize;
+@@ -56,7 +56,7 @@ class ProbeInserter extends MethodVisitor implements IProbeInserter {
+ * callback to create the code that retrieves the reference to
+ * the probe array
+ */
+- ProbeInserter(final int access, final String name, final String desc,
++ public ProbeInserter(final int access, final String name, final String desc,
+ final MethodVisitor mv, final IProbeArrayStrategy arrayStrategy) {
+ super(InstrSupport.ASM_API_VERSION, mv);
+ this.clinit = InstrSupport.CLINIT_NAME.equals(name);
diff --git a/third_party/jacoco_internal.BUILD b/third_party/jacoco_internal.BUILD
new file mode 100644
index 00000000..9e6140a7
--- /dev/null
+++ b/third_party/jacoco_internal.BUILD
@@ -0,0 +1,18 @@
+java_library(
+ name = "jacoco_internal",
+ srcs = glob([
+ "org.jacoco.core/src/org/jacoco/core/**/*.java",
+ ]),
+ resources = glob([
+ "org.jacoco.core/src/org/jacoco/core/internal/flow/java_no_throw_methods_list.dat",
+ ]),
+ javacopts = [
+ "-Xep:EqualsHashCode:OFF",
+ ],
+ deps = [
+ "@jazzer_ow2_asm//:asm",
+ "@jazzer_ow2_asm//:asm_commons",
+ "@jazzer_ow2_asm//:asm_tree",
+ ],
+ visibility = ["//visibility:public"],
+)
diff --git a/third_party/libFuzzer.BUILD b/third_party/libFuzzer.BUILD
new file mode 100644
index 00000000..e8559936
--- /dev/null
+++ b/third_party/libFuzzer.BUILD
@@ -0,0 +1,27 @@
+# Based on https://github.com/llvm/llvm-project/blob/llvmorg-11.1.0/compiler-rt/lib/fuzzer/build.sh
+cc_library(
+ name = "libFuzzer",
+ srcs = glob([
+ "*.cpp",
+ ]),
+ hdrs = glob([
+ "*.h",
+ "*.def",
+ ]),
+ copts = select({
+ "@platforms//os:windows": [
+ "/Ox", # Optimize for speed.
+ "/Oy-", # Do not omit frame pointer.
+ "/std:c++17",
+ ],
+ "//conditions:default": [
+ "-g",
+ "-O2",
+ "-fno-omit-frame-pointer",
+ "-std=c++11",
+ ],
+ }),
+ alwayslink = True,
+ linkstatic = True,
+ visibility = ["//visibility:public"],
+)
diff --git a/third_party/libjpeg_turbo.BUILD b/third_party/libjpeg_turbo.BUILD
new file mode 100644
index 00000000..4621f862
--- /dev/null
+++ b/third_party/libjpeg_turbo.BUILD
@@ -0,0 +1,69 @@
+load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
+load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
+load("@bazel_skylib//rules:select_file.bzl", "select_file")
+
+filegroup(
+ name = "all_files",
+ srcs = glob(["**"]),
+)
+
+filegroup(
+ name = "java_files",
+ srcs = glob(["java/org/libjpegturbo/turbojpeg/*.java"]),
+)
+
+cc_import(
+ name = "libawt",
+ hdrs = [
+ "@local_jdk//:include/jawt.h",
+ ],
+ shared_library = "@local_jdk//:lib/libawt.so",
+)
+
+cmake(
+ name = "libjpeg_turbo",
+ cache_entries = {
+ "CMAKE_BUILD_TYPE": "Release",
+ "CMAKE_C_COMPILER": "clang",
+ "CMAKE_C_FLAGS": "-fsanitize=address,fuzzer-no-link",
+ "CMAKE_SHARED_LINKER_FLAGS": "-fsanitize=address,fuzzer-no-link",
+ "WITH_JAVA": "1",
+ },
+ lib_source = ":all_files",
+ out_shared_libs = [
+ "libjpeg.so",
+ "libturbojpeg.so",
+ ],
+ deps = [
+ ":libawt",
+ "@fmeum_rules_jni//jni",
+ ],
+)
+
+select_file(
+ name = "libturbojpeg_so",
+ srcs = ":libjpeg_turbo",
+ subpath = "lib/libturbojpeg.so",
+)
+
+copy_file(
+ name = "turbojpeg_native",
+ src = ":libturbojpeg_so",
+ out = "libturbojpeg.so",
+ visibility = ["//visibility:public"],
+)
+
+genrule(
+ name = "generate_jni_loader",
+ outs = ["TJLoader.java"],
+ cmd = "echo 'package org.libjpegturbo.turbojpeg; final class TJLoader { static void load() { System.loadLibrary(\"turbojpeg\"); }}' > $@",
+)
+
+java_library(
+ name = "turbojpeg_java",
+ srcs = [
+ ":generate_jni_loader",
+ ":java_files",
+ ],
+ visibility = ["//visibility:public"],
+)
diff --git a/third_party/typetools.BUILD b/third_party/typetools.BUILD
new file mode 100644
index 00000000..f94fb0dc
--- /dev/null
+++ b/third_party/typetools.BUILD
@@ -0,0 +1,7 @@
+java_library(
+ name = "typetools",
+ srcs = glob([
+ "src/main/java/net/jodah/typetools/*.java",
+ ]),
+ visibility = ["//visibility:public"],
+)