blob: 817b363240b2b513228f472c47785bef53649bb1 [file] [log] [blame]
Ben Claytonfeb42e52022-04-07 19:22:21 +00001#!/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
16set -e # Fail on any error.
17
18SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
Ben Clayton138ddcc2022-10-13 12:55:42 +000019ROOT_DIR="$( cd "$SCRIPT_DIR/.." >/dev/null 2>&1 && pwd )"
20
21POSSIBLE_BUILD_SYSTEMS="[gn|cmake]"
22POSSIBLE_BUILD_TYPES="[debug|release]"
23POSSIBLE_BUILD_ARCHS="[native|x86]"
24
25BUILD_SYSTEM=""
26BUILD_TYPE=""
27BUILD_ARCH=""
Ben Claytonfeb42e52022-04-07 19:22:21 +000028
29function show_usage() {
Ben Clayton138ddcc2022-10-13 12:55:42 +000030 echo "setup-build $POSSIBLE_BUILD_SYSTEMS $POSSIBLE_BUILD_TYPES $POSSIBLE_BUILD_ARCHS"
Ben Claytonfeb42e52022-04-07 19:22:21 +000031 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 Clayton138ddcc2022-10-13 12:55:42 +000034 if [[ ! -z "$1" ]]; then
35 echo
36 echo "$1"
37 fi
Ben Claytonfeb42e52022-04-07 19:22:21 +000038 exit 1
39}
40
Ben Clayton138ddcc2022-10-13 12:55:42 +000041function 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
49function 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
57function 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
65for 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
92done
93
94if [[ -z "$BUILD_SYSTEM" ]]; then
95 show_usage "build system $POSSIBLE_BUILD_SYSTEMS is required"
96fi
97
98if [[ -z "$BUILD_TYPE" ]]; then
99 show_usage "build type $POSSIBLE_BUILD_TYPES required"
100fi
101
102BUILD_DIR="$BUILD_SYSTEM-$BUILD_TYPE"
103if [[ ! -z "$BUILD_ARCH" ]]; then
104 BUILD_DIR+="-$BUILD_ARCH"
105fi
106
Ben Claytonfeb42e52022-04-07 19:22:21 +0000107function generate() {
Ben Claytonfeb42e52022-04-07 19:22:21 +0000108 pushd "$ROOT_DIR" > /dev/null
Ben Clayton446166c2022-04-29 20:18:45 +0000109 mkdir -p "out/$BUILD_DIR"
110 rm -fr "out/active" || true
111 ln -s "$BUILD_DIR" "out/active"
Ben Clayton138ddcc2022-10-13 12:55:42 +0000112 "$@"
Ben Claytonfeb42e52022-04-07 19:22:21 +0000113 popd > /dev/null
114}
115
116case $BUILD_SYSTEM in
117 "gn")
Ben Clayton138ddcc2022-10-13 12:55:42 +0000118 GN_ARGS=""
Ben Claytonfeb42e52022-04-07 19:22:21 +0000119 case $BUILD_TYPE in
120 "debug")
Ben Clayton138ddcc2022-10-13 12:55:42 +0000121 GN_ARGS+="is_debug=true"
Ben Claytonfeb42e52022-04-07 19:22:21 +0000122 ;;
123 "release")
Ben Clayton138ddcc2022-10-13 12:55:42 +0000124 GN_ARGS+="is_debug=false"
Ben Claytonfeb42e52022-04-07 19:22:21 +0000125 ;;
126 *)
Ben Clayton138ddcc2022-10-13 12:55:42 +0000127 show_usage "invalid build type '$BUILD_TYPE'"
Ben Claytonfeb42e52022-04-07 19:22:21 +0000128 ;;
129 esac
Ben Clayton138ddcc2022-10-13 12:55:42 +0000130 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 Claytonfeb42e52022-04-07 19:22:21 +0000141 ;;
142 "cmake")
Ben Clayton138ddcc2022-10-13 12:55:42 +0000143 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 Clayton446166c2022-04-29 20:18:45 +0000149 if [[ -x $(command -v ccache) ]]; then
Ben Clayton138ddcc2022-10-13 12:55:42 +0000150 CMAKE_FLAGS+=("-DCMAKE_CXX_COMPILER_LAUNCHER=ccache")
Ben Clayton446166c2022-04-29 20:18:45 +0000151 fi
Ben Claytonfeb42e52022-04-07 19:22:21 +0000152 case $BUILD_TYPE in
153 "debug")
Ben Clayton138ddcc2022-10-13 12:55:42 +0000154 CMAKE_FLAGS+=("-DCMAKE_BUILD_TYPE=Debug")
Ben Claytonfeb42e52022-04-07 19:22:21 +0000155 ;;
156 "release")
Ben Clayton138ddcc2022-10-13 12:55:42 +0000157 CMAKE_FLAGS+=("-DCMAKE_BUILD_TYPE=RelWithDebInfo")
Ben Claytonfeb42e52022-04-07 19:22:21 +0000158 ;;
159 *)
Ben Clayton138ddcc2022-10-13 12:55:42 +0000160 show_usage "invalid build type '$BUILD_TYPE'"
Ben Claytonfeb42e52022-04-07 19:22:21 +0000161 ;;
162 esac
Ben Clayton138ddcc2022-10-13 12:55:42 +0000163 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 Claytonfeb42e52022-04-07 19:22:21 +0000179 ;;
180 *)
Ben Clayton138ddcc2022-10-13 12:55:42 +0000181 echo "invalid build system '$BUILD_SYSTEM'"
Ben Claytonfeb42e52022-04-07 19:22:21 +0000182 show_usage
183 ;;
184esac