#!/usr/bin/env bash
# Copyright 2023 The Dawn & Tint Authors
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
#    list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

set -e # Fail on any error.

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
ROOT_DIR="$( cd "$SCRIPT_DIR/.." >/dev/null 2>&1 && pwd )"

mkdir out/coverage || true
cmake -S . \
      -B out/coverage \
      -GNinja \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo  \
      -DLLVM_SOURCE_DIR=${LLVM_SOURCE_DIR}  \
      -DDAWN_BUILD_NODE_BINDINGS=1  \
      -DDAWN_EMIT_COVERAGE=1  \
      -DLLVM_HOST_TRIPLE=x86_64-pc-win32 \
      -DTINT_BUILD_GLSL_WRITER=1 \
      -DTINT_BUILD_HLSL_WRITER=1 \
      -DTINT_BUILD_MSL_WRITER=1 \
      -DTINT_BUILD_SPV_WRITER=1 \
      -DTINT_BUILD_WGSL_WRITER=1

pushd out/coverage
ninja
popd

./tools/run run-cts --export-coverage ./out/coverage/win_api_operation.dat --bin ./out/coverage 'webgpu:api,operation,*'
./tools/run run-cts --export-coverage ./out/coverage/win_api_validation.dat --bin ./out/coverage 'webgpu:api,validation,*'
./tools/run run-cts --export-coverage ./out/coverage/win_shader_execution.dat --bin ./out/coverage 'webgpu:shader,execution,*'
./tools/run run-cts --export-coverage ./out/coverage/win_shader_validation.dat --bin ./out/coverage 'webgpu:shader,validation,*'
./tools/run run-cts --export-coverage ./out/coverage/win.dat --bin ./out/coverage 'webgpu:*'
