build_av1_dec_fuzzer.sh (2590B)
1 #!/bin/bash 2 # 3 # Copyright (c) 2019, Alliance for Open Media. All rights reserved. 4 # 5 # This source code is subject to the terms of the BSD 2 Clause License and 6 # the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License 7 # was not distributed with this source code in the LICENSE file, you can 8 # obtain it at www.aomedia.org/license/software. If the Alliance for Open 9 # Media Patent License 1.0 was not distributed with this source code in the 10 # PATENTS file, you can obtain it at www.aomedia.org/license/patent. 11 # 12 ############################################################################### 13 # Fuzzer for libaom decoder. 14 # ========================== 15 # Requirements 16 # --------------------- 17 # Clang6.0 or above (must support -fsanitize=fuzzer -fsanitize=fuzzer-no-link) 18 # 19 # References: 20 # --------------------- 21 # http://llvm.org/docs/LibFuzzer.html 22 # https://github.com/google/oss-fuzz 23 # 24 # Steps to build / run 25 # --------------------- 26 27 set -eu 28 29 # Have a copy of AOM and a build directory ready. 30 if [[ $# -ne 2 ]]; then 31 echo "Pass in the AOM source tree as first argument, and a build directory " 32 echo "as the second argument. The AOM source tree can be obtained via: " 33 echo " git clone https://aomedia.googlesource.com/aom" 34 exit 2 35 fi 36 if [[ -z "${CC:-}" ]]; then 37 echo "Set the CC environment variable to point to your C compiler." 38 exit 2 39 fi 40 if [[ -z "${CXX:-}" ]]; then 41 echo "Set the CXX environment variable to point to your C++ compiler." 42 exit 2 43 fi 44 45 AOM_DIR=$1 46 BUILD_DIR=$2 47 # Run CMake with address sanitizer enabled and build the codec. 48 # Enable DO_RANGE_CHECK_CLAMP to suppress the noise of integer overflows 49 # in the transform functions. Also set memory limits. 50 EXTRA_C_FLAGS='-UNDEBUG -DDO_RANGE_CHECK_CLAMP=1 -DAOM_MAX_ALLOCABLE_MEMORY=1073741824' 51 cd "${BUILD_DIR}" 52 cmake "${AOM_DIR}" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCONFIG_PIC=1 \ 53 -DFORCE_HIGHBITDEPTH_DECODING=0 \ 54 -DCONFIG_AV1_ENCODER=0 -DENABLE_EXAMPLES=0 -DENABLE_DOCS=0 -DENABLE_TESTS=0 \ 55 -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=12288 -DDECODE_WIDTH_LIMIT=12288 \ 56 -DAOM_EXTRA_C_FLAGS="${EXTRA_C_FLAGS}" \ 57 -DAOM_EXTRA_CXX_FLAGS="${EXTRA_C_FLAGS}" -DSANITIZE=fuzzer-no-link,address 58 59 # Build the codec. 60 make -j$(nproc) 61 62 # Build the av1 fuzzer 63 $CXX -std=c++17 -I${AOM_DIR} -I${BUILD_DIR} \ 64 -g -fsanitize=fuzzer,address \ 65 ${AOM_DIR}/examples/av1_dec_fuzzer.cc -o ${BUILD_DIR}/av1_dec_fuzzer \ 66 ${BUILD_DIR}/libaom.a 67 68 echo "Fuzzer built at ${BUILD_DIR}/av1_dec_fuzzer." 69 echo "Create a corpus directory, copy IVF files in there, and run:" 70 echo " av1_dec_fuzzer CORPUS_DIR"