diff options
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/BUILD.bazel | 14 | ||||
-rw-r--r-- | third_party/asm.BUILD | 32 | ||||
-rw-r--r-- | third_party/bazel-toolchain-export-dynamic-macos-asan.patch | 12 | ||||
-rw-r--r-- | third_party/classgraph.BUILD | 8 | ||||
-rw-r--r-- | third_party/gflags-use-double-dash-args.patch | 11 | ||||
-rw-r--r-- | third_party/jacoco-make-probe-adapter-subclassable.patch | 69 | ||||
-rw-r--r-- | third_party/jacoco-make-probe-inserter-subclassable.patch | 109 | ||||
-rw-r--r-- | third_party/jacoco_internal.BUILD | 18 | ||||
-rw-r--r-- | third_party/libFuzzer.BUILD | 27 | ||||
-rw-r--r-- | third_party/libjpeg_turbo.BUILD | 69 | ||||
-rw-r--r-- | third_party/typetools.BUILD | 7 |
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"], +) |