diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 9d72ed97d6..d003b816f2 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -76,17 +76,17 @@ "label": "gn gen", "type": "shell", "linux": { - "command": "sh", + "command": "./tools/setup-build", "args": [ - "-c", - "gn gen 'out/${input:buildType}' --args=is_debug=$(if [ '${input:buildType}' = 'Debug' ]; then echo 'true'; else echo 'false'; fi) && (rm -fr out/active || true) && ln -s ${input:buildType} out/active", + "gn", + "${input:buildType}", ], }, "osx": { - "command": "sh", + "command": "./tools/setup-build", "args": [ - "-c", - "gn gen 'out/${input:buildType}' --args=is_debug=$(if [ '${input:buildType}' = 'Debug' ]; then echo 'true'; else echo 'false'; fi) && (rm -fr out/active || true) && ln -s ${input:buildType} out/active", + "gn", + "${input:buildType}", ], }, "windows": { @@ -105,6 +105,39 @@ }, "problemMatcher": [], }, + { + "label": "cmake gen", + "type": "shell", + "linux": { + "command": "./tools/setup-build", + "args": [ + "cmake", + "${input:buildType}", + ], + }, + "osx": { + "command": "./tools/setup-build", + "args": [ + "cmake", + "${input:buildType}", + ], + }, + "windows": { + "command": "/C", + "args": [ + "echo TODO", + ], + "options": { + "shell": { + "executable": "cmd" + }, + } + }, + "options": { + "cwd": "${workspaceRoot}" + }, + "problemMatcher": [], + }, // Rebases the current branch on to origin/main and then calls // `gclient sync`. { @@ -168,4 +201,4 @@ "description": "The type of build", }, ] -} \ No newline at end of file +} diff --git a/tools/setup-build b/tools/setup-build new file mode 100755 index 0000000000..69087f7684 --- /dev/null +++ b/tools/setup-build @@ -0,0 +1,77 @@ +#!/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 /out using either GN or CMake, then" + echo "updates the '/out/active' symlink to point to the build directory" + exit 1 +} + +function generate() { + CMD=$1 + pushd "$ROOT_DIR" > /dev/null + ${CMD} + rm -fr "out/active" || true + ln -s "$BUILD_DIR" "out/active" + popd > /dev/null +} + +case $BUILD_SYSTEM in + "gn") + case $BUILD_TYPE in + "debug") + generate "gn gen out/${BUILD_DIR} --args=is_debug=true" + ;; + "release") + generate "gn gen out/${BUILD_DIR}" + ;; + *) + echo "invalid build type '${BUILD_TYPE}'" + show_usage + ;; + esac + ;; + "cmake") + case $BUILD_TYPE in + "debug") + generate "cmake -S . -B out/$BUILD_DIR -GNinja -DCMAKE_BUILD_TYPE=Debug" + ;; + "release") + generate "cmake -S . -B out/$BUILD_DIR -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo" + ;; + *) + echo "invalid build type '${BUILD_TYPE}'" + show_usage + ;; + esac + ;; + "--help" | "-help" | "-h") + show_usage + ;; + *) + echo "invalid build system '${BUILD_SYSTEM}'" + show_usage + ;; +esac