Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 1 | #!/usr/bin/env bash |
| 2 | # Copyright 2022 The Tint Authors |
| 3 | # |
| 4 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | # you may not use this file except in compliance with the License. |
| 6 | # You may obtain a copy of the License at |
| 7 | # |
| 8 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | # |
| 10 | # Unless required by applicable law or agreed to in writing, software |
| 11 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | # See the License for the specific language governing permissions and |
| 14 | # limitations under the License. |
| 15 | |
| 16 | set -e # Fail on any error. |
| 17 | |
| 18 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )" |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 19 | ROOT_DIR="$( cd "$SCRIPT_DIR/.." >/dev/null 2>&1 && pwd )" |
| 20 | |
| 21 | POSSIBLE_BUILD_SYSTEMS="[gn|cmake]" |
| 22 | POSSIBLE_BUILD_TYPES="[debug|release]" |
| 23 | POSSIBLE_BUILD_ARCHS="[native|x86]" |
| 24 | |
| 25 | BUILD_SYSTEM="" |
| 26 | BUILD_TYPE="" |
| 27 | BUILD_ARCH="" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 28 | |
| 29 | function show_usage() { |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 30 | echo "setup-build $POSSIBLE_BUILD_SYSTEMS $POSSIBLE_BUILD_TYPES $POSSIBLE_BUILD_ARCHS" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 31 | echo |
| 32 | echo "creates a build directory in <dawn>/out using either GN or CMake, then" |
| 33 | echo "updates the '<dawn>/out/active' symlink to point to the build directory" |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 34 | if [[ ! -z "$1" ]]; then |
| 35 | echo |
| 36 | echo "$1" |
| 37 | fi |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 38 | exit 1 |
| 39 | } |
| 40 | |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 41 | function set_build_system() { |
| 42 | if [[ ! -z "$BUILD_SYSTEM" ]]; then |
| 43 | echo "conflicting build systems $BUILD_SYSTEM and $1" |
| 44 | exit 1 |
| 45 | fi |
| 46 | BUILD_SYSTEM=$1 |
| 47 | } |
| 48 | |
| 49 | function set_build_type() { |
| 50 | if [[ ! -z "$BUILD_TYPE" ]]; then |
| 51 | echo "conflicting build types $BUILD_TYPE and $1" |
| 52 | exit 1 |
| 53 | fi |
| 54 | BUILD_TYPE=$1 |
| 55 | } |
| 56 | |
| 57 | function set_build_arch() { |
| 58 | if [[ ! -z "$BUILD_ARCH" ]]; then |
| 59 | echo "conflicting build architectures $BUILD_ARCH and $1" |
| 60 | exit 1 |
| 61 | fi |
| 62 | BUILD_ARCH=$1 |
| 63 | } |
| 64 | |
| 65 | for arg in "$@"; do |
| 66 | lowered_arg=$(echo "$arg" | tr '[:upper:]' '[:lower:]') # lowercase |
| 67 | case $lowered_arg in |
| 68 | "gn") |
| 69 | set_build_system $lowered_arg |
| 70 | ;; |
| 71 | "cmake") |
| 72 | set_build_system $lowered_arg |
| 73 | ;; |
| 74 | "debug") |
| 75 | set_build_type $lowered_arg |
| 76 | ;; |
| 77 | "release") |
| 78 | set_build_type $lowered_arg |
| 79 | ;; |
| 80 | "x86") |
| 81 | set_build_arch $lowered_arg |
| 82 | ;; |
| 83 | "native") |
| 84 | ;; |
| 85 | "--help" | "-help" | "-h") |
| 86 | show_usage |
| 87 | ;; |
| 88 | *) |
| 89 | show_usage "unknown argument '$arg'" |
| 90 | ;; |
| 91 | esac |
| 92 | done |
| 93 | |
| 94 | if [[ -z "$BUILD_SYSTEM" ]]; then |
| 95 | show_usage "build system $POSSIBLE_BUILD_SYSTEMS is required" |
| 96 | fi |
| 97 | |
| 98 | if [[ -z "$BUILD_TYPE" ]]; then |
| 99 | show_usage "build type $POSSIBLE_BUILD_TYPES required" |
| 100 | fi |
| 101 | |
| 102 | BUILD_DIR="$BUILD_SYSTEM-$BUILD_TYPE" |
| 103 | if [[ ! -z "$BUILD_ARCH" ]]; then |
| 104 | BUILD_DIR+="-$BUILD_ARCH" |
| 105 | fi |
| 106 | |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 107 | function generate() { |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 108 | pushd "$ROOT_DIR" > /dev/null |
Ben Clayton | 446166c | 2022-04-29 20:18:45 +0000 | [diff] [blame] | 109 | mkdir -p "out/$BUILD_DIR" |
| 110 | rm -fr "out/active" || true |
| 111 | ln -s "$BUILD_DIR" "out/active" |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 112 | "$@" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 113 | popd > /dev/null |
| 114 | } |
| 115 | |
| 116 | case $BUILD_SYSTEM in |
| 117 | "gn") |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 118 | GN_ARGS="" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 119 | case $BUILD_TYPE in |
| 120 | "debug") |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 121 | GN_ARGS+="is_debug=true" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 122 | ;; |
| 123 | "release") |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 124 | GN_ARGS+="is_debug=false" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 125 | ;; |
| 126 | *) |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 127 | show_usage "invalid build type '$BUILD_TYPE'" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 128 | ;; |
| 129 | esac |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 130 | case $BUILD_ARCH in |
| 131 | "") |
| 132 | ;; |
| 133 | "x86") |
| 134 | GN_ARGS+=" target_cpu=\"x86\"" |
| 135 | ;; |
| 136 | *) |
| 137 | show_usage "invalid build architecture '$BUILD_ARCH'" |
| 138 | ;; |
| 139 | esac |
| 140 | generate "gn" "gen" "out/active" "--args=$GN_ARGS" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 141 | ;; |
| 142 | "cmake") |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 143 | CMAKE_FLAGS=() |
| 144 | CMAKE_FLAGS+=("-DTINT_BUILD_GLSL_WRITER=1") |
| 145 | CMAKE_FLAGS+=("-DTINT_BUILD_HLSL_WRITER=1") |
| 146 | CMAKE_FLAGS+=("-DTINT_BUILD_MSL_WRITER=1") |
| 147 | CMAKE_FLAGS+=("-DTINT_BUILD_SPV_WRITER=1") |
| 148 | CMAKE_FLAGS+=("-DTINT_BUILD_WGSL_WRITER=1") |
Ben Clayton | 446166c | 2022-04-29 20:18:45 +0000 | [diff] [blame] | 149 | if [[ -x $(command -v ccache) ]]; then |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 150 | CMAKE_FLAGS+=("-DCMAKE_CXX_COMPILER_LAUNCHER=ccache") |
Ben Clayton | 446166c | 2022-04-29 20:18:45 +0000 | [diff] [blame] | 151 | fi |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 152 | case $BUILD_TYPE in |
| 153 | "debug") |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 154 | CMAKE_FLAGS+=("-DCMAKE_BUILD_TYPE=Debug") |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 155 | ;; |
| 156 | "release") |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 157 | CMAKE_FLAGS+=("-DCMAKE_BUILD_TYPE=RelWithDebInfo") |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 158 | ;; |
| 159 | *) |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 160 | show_usage "invalid build type '$BUILD_TYPE'" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 161 | ;; |
| 162 | esac |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 163 | case $BUILD_ARCH in |
| 164 | "") |
| 165 | ;; |
| 166 | "x86") |
| 167 | CMAKE_FLAGS+=("-DCMAKE_CXX_FLAGS=-m32") |
| 168 | CMAKE_FLAGS+=("-DCMAKE_C_FLAGS=-m32") |
| 169 | ;; |
| 170 | *) |
| 171 | show_usage "invalid build architecture '$BUILD_ARCH'" |
| 172 | ;; |
| 173 | esac |
| 174 | generate "cmake" \ |
| 175 | "-S" "." \ |
| 176 | "-B" "out/active" \ |
| 177 | "-GNinja" \ |
| 178 | "${CMAKE_FLAGS[@]}" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 179 | ;; |
| 180 | *) |
Ben Clayton | 138ddcc | 2022-10-13 12:55:42 +0000 | [diff] [blame] | 181 | echo "invalid build system '$BUILD_SYSTEM'" |
Ben Clayton | feb42e5 | 2022-04-07 19:22:21 +0000 | [diff] [blame] | 182 | show_usage |
| 183 | ;; |
| 184 | esac |