#!/usr/bin/env bash # Copyright 2022 The Tint Authors # # 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. 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 )" BUILD_SYSTEM=$(echo "$1" | tr '[:upper:]' '[:lower:]') # lowercase BUILD_TYPE=$(echo "$2" | tr '[:upper:]' '[:lower:]') # lowercase BUILD_DIR="${BUILD_SYSTEM}-${BUILD_TYPE}" function show_usage() { echo "setup-build [gn|cmake] [debug|release]" echo echo "creates a build directory in <dawn>/out using either GN or CMake, then" echo "updates the '<dawn>/out/active' symlink to point to the build directory" exit 1 } function generate() { CMD=$1 pushd "$ROOT_DIR" > /dev/null mkdir -p "out/$BUILD_DIR" rm -fr "out/active" || true ln -s "$BUILD_DIR" "out/active" ${CMD} popd > /dev/null } case $BUILD_SYSTEM in "gn") case $BUILD_TYPE in "debug") generate "gn gen out/active --args=is_debug=true" ;; "release") generate "gn gen out/active --args=is_debug=false" ;; *) echo "invalid build type '${BUILD_TYPE}'" show_usage ;; esac ;; "cmake") CMAKE_FLAGS="" if [[ -x $(command -v ccache) ]]; then CMAKE_FLAGS+="-DCMAKE_CXX_COMPILER_LAUNCHER=ccache" fi case $BUILD_TYPE in "debug") generate "cmake -S . -B out/active -GNinja -DCMAKE_BUILD_TYPE=Debug ${CMAKE_FLAGS}" ;; "release") generate "cmake -S . -B out/active -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo ${CMAKE_FLAGS}" ;; *) echo "invalid build type '${BUILD_TYPE}'" show_usage ;; esac ;; "--help" | "-help" | "-h") show_usage ;; *) echo "invalid build system '${BUILD_SYSTEM}'" show_usage ;; esac