From 62c65ca8788e7259fb7f4c433be548458a1b1cab Mon Sep 17 00:00:00 2001 From: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com> Date: Fri, 6 Sep 2019 13:49:09 -0700 Subject: [PATCH] Add SPIRV projects for blackbox fuzzing with GraphicsFuzz (#2812) --- infra/travis/travis_build.py | 3 +- projects/graphicsfuzz-spirv/Dockerfile | 34 +++++++++++++++++++ projects/graphicsfuzz-spirv/build.sh | 42 ++++++++++++++++++++++++ projects/graphicsfuzz-spirv/project.yaml | 17 ++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 projects/graphicsfuzz-spirv/Dockerfile create mode 100755 projects/graphicsfuzz-spirv/build.sh create mode 100644 projects/graphicsfuzz-spirv/project.yaml diff --git a/infra/travis/travis_build.py b/infra/travis/travis_build.py index 706042f06..c8b8de80d 100755 --- a/infra/travis/travis_build.py +++ b/infra/travis/travis_build.py @@ -124,7 +124,8 @@ def build_project(project): print('Building project', project) build_fuzzers(project, engine, sanitizer, architecture) - check_build(project, engine, sanitizer, architecture) + if engine != 'none': + check_build(project, engine, sanitizer, architecture) def main(): diff --git a/projects/graphicsfuzz-spirv/Dockerfile b/projects/graphicsfuzz-spirv/Dockerfile new file mode 100644 index 000000000..68407fe40 --- /dev/null +++ b/projects/graphicsfuzz-spirv/Dockerfile @@ -0,0 +1,34 @@ +# Copyright 2019 Google Inc. +# +# 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. +# +################################################################################ + +FROM gcr.io/oss-fuzz-base/base-builder +RUN apt-get update && apt-get install -y cmake ninja-build + +RUN mkdir -p graphicsfuzz-spirv + +RUN git clone --depth=1 https://github.com/KhronosGroup/glslang.git graphicsfuzz-spirv/glslang +RUN git clone --depth=1 https://github.com/KhronosGroup/SPIRV-Cross.git graphicsfuzz-spirv/SPIRV-Cross + +RUN git clone --depth=1 https://github.com/KhronosGroup/SPIRV-Tools.git graphicsfuzz-spirv/SPIRV-Tools +RUN git clone --depth=1 https://github.com/KhronosGroup/SPIRV-Headers graphicsfuzz-spirv/SPIRV-Tools/external/spirv-headers +RUN git clone --depth=1 https://github.com/google/effcee graphicsfuzz-spirv/SPIRV-Tools/external/effcee +RUN git clone --depth=1 https://github.com/google/re2 graphicsfuzz-spirv/SPIRV-Tools/external/re2 + +# TODO(metzman): Build GraphicsFuzz and bundle it so that the blackbox fuzzer is always using the latest version. + +COPY build.sh $SRC/ + +WORKDIR graphicsfuzz-spirv \ No newline at end of file diff --git a/projects/graphicsfuzz-spirv/build.sh b/projects/graphicsfuzz-spirv/build.sh new file mode 100755 index 000000000..dec6e4501 --- /dev/null +++ b/projects/graphicsfuzz-spirv/build.sh @@ -0,0 +1,42 @@ +#!/bin/bash -eu +# Copyright 2019 Google Inc. +# +# 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. +# +################################################################################ + +# TODO(metzman): Use some kind of bash loop here. +mkdir glslang/build +pushd glslang/build + +cmake -G "Ninja" -DCMAKE_CXX_COMPILER=$CXX -DCMAKE_C_COMPILER=$CC -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS" .. +ninja +cp StandAlone/glslangValidator $OUT +popd + +mkdir SPIRV-Tools/build +pushd SPIRV-Tools/build + +# TODO: If cmake respects LDFLAGS, do we need to specify the compilers and their flags? +# Link failure without LDFLAGS="-lpthread" +LDFLAGS="-lpthread" cmake -G "Ninja" -DSPIRV_SKIP_TESTS=ON -DCMAKE_CXX_COMPILER=$CXX -DCMAKE_C_COMPILER=$CC -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS" .. +ninja +cp tools/spirv-as tools/spirv-dis tools/spirv-val tools/spirv-opt $OUT/ +popd + +mkdir SPIRV-Cross/build +pushd SPIRV-Cross/build +cmake -G "Ninja" -DCMAKE_CXX_COMPILER=$CXX -DCMAKE_C_COMPILER=$CC -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS" .. +ninja +cp spirv-cross $OUT/ + diff --git a/projects/graphicsfuzz-spirv/project.yaml b/projects/graphicsfuzz-spirv/project.yaml new file mode 100644 index 000000000..add495c3a --- /dev/null +++ b/projects/graphicsfuzz-spirv/project.yaml @@ -0,0 +1,17 @@ +homepage: "https://www.graphicsfuzz.com" +primary_contact: "afdx@google.com" +auto_ccs: + - "paulthomson@google.com" + - "metzman@google.com" + +fuzzing_engines: + - none + +sanitizers: + - address + - memory + - undefined + +architectures: + - x86_64 + - i386