#!/bin/bash -eu
# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
################################################################################

git clone https://github.com/KhronosGroup/SPIRV-Headers external/spirv-headers --depth=1
git clone https://github.com/protocolbuffers/protobuf   external/protobuf      --branch v3.13.0.1
git clone https://dawn.googlesource.com/tint --depth=1

mkdir build
pushd build

CMAKE_ARGS="-DSPIRV_BUILD_LIBFUZZER_TARGETS=ON -DSPIRV_LIB_FUZZING_ENGINE_LINK_OPTIONS=$LIB_FUZZING_ENGINE"

# With ubsan, RTTI must be enabled due to certain checks (vptr) requiring it.
if [ $SANITIZER == "undefined" ];
then
  CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_RTTI=ON"
fi
cmake -G Ninja .. ${CMAKE_ARGS}
ninja

SPIRV_BINARY_FUZZERS="spvtools_binary_parser_fuzzer\
 spvtools_dis_fuzzer\
 spvtools_opt_legalization_fuzzer\
 spvtools_opt_performance_fuzzer\
 spvtools_opt_size_fuzzer\
 spvtools_val_fuzzer"

SPIRV_ASSEMBLY_FUZZERS="spvtools_as_fuzzer"

for fuzzer in $SPIRV_BINARY_FUZZERS $SPIRV_ASSEMBLY_FUZZERS
do
  cp test/fuzzers/$fuzzer $OUT
done

popd

# An un-instrumented build of spirv-as is used to generate a corpus of SPIR-V binaries.
mkdir standard-build
pushd standard-build

# Back-up instrumentation options
CFLAGS_SAVE="$CFLAGS"
CXXFLAGS_SAVE="$CXXFLAGS"
unset CFLAGS
unset CXXFLAGS
export AFL_NOOPT=1

cmake -G Ninja .. ${CMAKE_ARGS}
ninja spirv-as

# Restore instrumentation options
export CFLAGS="${CFLAGS_SAVE}"
export CXXFLAGS="${CXXFLAGS_SAVE}"
unset AFL_NOOPT

popd


# Generate a corpus of SPIR-V binaries from the SPIR-V assembly files in the
# SPIRV-Tools and tint repositories.
mkdir $WORK/tint-binary-corpus
python3 tint/fuzzers/generate_spirv_corpus.py tint/test $WORK/tint-binary-corpus standard-build/tools/spirv-as
mkdir $WORK/spirv-binary-corpus-hashed-names
tint_test_cases=`ls $WORK/tint-binary-corpus/*.spv`
spirv_tools_test_cases=`find test/fuzzers/corpora -name "*.spv"`
for f in $tint_test_cases $spirv_tools_test_cases
do
  hashed_name=$(sha1sum "$f" | awk '{print $1}')
  cp $f $WORK/spirv-binary-corpus-hashed-names/$hashed_name
done
zip -j "$WORK/spirv_binary_seed_corpus.zip" "$WORK/spirv-binary-corpus-hashed-names"/*

# Supply each of the binary fuzzers with this seed corpus.
for fuzzer in $SPIRV_BINARY_FUZZERS
do
  cp "$WORK/spirv_binary_seed_corpus.zip" "$OUT/${fuzzer}_seed_corpus.zip"
done

# Generate a corpus of SPIR-V assembly files from the tint repository.
mkdir $WORK/spirv-assembly-corpus-hashed-names
for f in `find tint/test -name "*.spvasm"`
do
  hashed_name=$(sha1sum "$f" | awk '{print $1}')
  cp $f $WORK/spirv-assembly-corpus-hashed-names/$hashed_name
done

zip -j "$WORK/spirv_assembly_seed_corpus.zip" "$WORK/spirv-assembly-corpus-hashed-names"/*

# Supply each of the assembly fuzzers with this seed corpus.
for fuzzer in $SPIRV_ASSEMBLY_FUZZERS
do
  cp "$WORK/spirv_assembly_seed_corpus.zip" "$OUT/${fuzzer}_seed_corpus.zip"
done
