2020-06-23 17:17:15 +00:00
|
|
|
#!/usr/bin/env bash
|
2020-08-26 09:37:40 +00:00
|
|
|
set -ex
|
2020-06-23 17:17:15 +00:00
|
|
|
|
2020-08-26 09:37:40 +00:00
|
|
|
ROOTDIR="/root/project"
|
2020-06-23 17:17:15 +00:00
|
|
|
BUILDDIR="${ROOTDIR}/build"
|
2020-08-26 09:37:40 +00:00
|
|
|
mkdir -p "${BUILDDIR}" && mkdir -p "$BUILDDIR/deps"
|
2020-06-23 17:17:15 +00:00
|
|
|
|
2020-08-26 09:37:40 +00:00
|
|
|
ANTLRJAR="${ROOTDIR}/build/deps/antlr4.8.jar"
|
|
|
|
ANTLRJAR_URI="https://www.antlr.org/download/antlr-4.8-complete.jar"
|
2020-06-23 17:17:15 +00:00
|
|
|
|
2020-08-26 09:37:40 +00:00
|
|
|
download_antlr4()
|
|
|
|
{
|
|
|
|
if [[ ! -e "${ANTLRJAR}" ]]
|
|
|
|
then
|
|
|
|
wget -O "${ANTLRJAR}" "${ANTLRJAR_URI}"
|
|
|
|
fi
|
|
|
|
}
|
2020-06-23 17:17:15 +00:00
|
|
|
|
2020-08-26 09:37:40 +00:00
|
|
|
generate_protobuf_bindings()
|
|
|
|
{
|
|
|
|
cd "${ROOTDIR}"/test/tools/ossfuzz
|
|
|
|
# Generate protobuf C++ bindings
|
|
|
|
for protoName in yul abiV2 sol;
|
|
|
|
do
|
|
|
|
protoc "${protoName}"Proto.proto --cpp_out .
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
generate_antlr4_bindings()
|
|
|
|
{
|
|
|
|
cd "${ROOTDIR}"
|
|
|
|
# Replace boolean with bool to suit c++ syntax
|
|
|
|
sed -i 's/boolean /bool /g' docs/grammar/Solidity.g4
|
|
|
|
# Generate antlr4 visitor/parser/lexer c++ bindings
|
|
|
|
java -jar "${ANTLRJAR}" -Dlanguage=Cpp \
|
|
|
|
-Xexact-output-dir -package solidity::test::fuzzer -o test/tools/ossfuzz \
|
|
|
|
-no-listener -visitor docs/grammar/SolidityLexer.g4 docs/grammar/Solidity.g4
|
|
|
|
# Delete unnecessary autogen files
|
|
|
|
rm -f "${ROOTDIR}"/test/tools/ossfuzz/Solidity*Visitor.cpp \
|
|
|
|
"${ROOTDIR}"/test/tools/ossfuzz/Solidity*.interp \
|
|
|
|
"${ROOTDIR}"/test/tools/ossfuzz/Solidity*.tokens
|
|
|
|
}
|
|
|
|
|
|
|
|
build_fuzzers()
|
|
|
|
{
|
|
|
|
cd "${BUILDDIR}"
|
|
|
|
cmake .. -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-Release}" \
|
|
|
|
-DCMAKE_TOOLCHAIN_FILE="${ROOTDIR}"/cmake/toolchains/libfuzzer.cmake
|
|
|
|
make ossfuzz ossfuzz_proto ossfuzz_abiv2 -j 4
|
|
|
|
}
|
|
|
|
|
|
|
|
download_antlr4
|
|
|
|
generate_protobuf_bindings
|
|
|
|
generate_antlr4_bindings
|
|
|
|
build_fuzzers
|