internal/fuzz: add oss-fuzz build script

Move the build script from OSS-Fuzz's repo into ours, allowing us to
make changes without sending them a PR.

Change-Id: I557c3be2b6d9fd221ac7e6b1331bf3d53fd3ca51
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/217768
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/fuzz/oss-fuzz-build.sh b/internal/fuzz/oss-fuzz-build.sh
new file mode 100644
index 0000000..ad3ffd7
--- /dev/null
+++ b/internal/fuzz/oss-fuzz-build.sh
@@ -0,0 +1,25 @@
+# Copyright 2020 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+# This script is executed by OSS-Fuzz's build to create fuzzer binaries.
+
+function compile_fuzzer {
+  path=$1
+  function=$2
+  fuzzer=$3
+
+   # Instrument all Go files relevant to this fuzzer
+  go-fuzz-build -tags=protolegacy -libfuzzer -func $function -o $fuzzer.a $path
+
+   # Instrumented, compiled Go ($fuzzer.a) + fuzzing engine = fuzzer binary
+  $CXX $CXXFLAGS $LIB_FUZZING_ENGINE $fuzzer.a -lpthread -o $OUT/$fuzzer
+}
+
+for x in internal/fuzz/*; do
+  if [ -d $x/corpus ]; then
+    name=$(basename $x)
+    compile_fuzzer ./$x Fuzz $name
+    zip -jr $OUT/${name}_seed_corpus.zip $x/corpus
+  fi
+done