Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: mojo/tools/mojob.sh

Issue 668603003: Mojo: mojob.sh: Add support for gn, and remove support for gyp and shared library (component) build… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # This a simple script to make building/testing Mojo components easier (on 6 # This a simple script to make building/testing Mojo components easier (on
7 # Linux). 7 # Linux).
8 8
9 # TODO(vtl): Maybe make the test runner smart and not run unchanged test 9 # TODO(vtl): Maybe make the test runner smart and not run unchanged test
10 # binaries. 10 # binaries.
11 # TODO(vtl) Maybe also provide a way to pass command-line arguments to the test 11 # TODO(vtl) Maybe also provide a way to pass command-line arguments to the test
12 # binaries. 12 # binaries.
13 13
14 do_help() { 14 do_help() {
15 cat << EOF 15 cat << EOF
16 Usage: $(basename "$0") [command|option ...] 16 Usage: $(basename "$0") [command|option ...]
17 17
18 command should be one of: 18 command should be one of:
19 build - Build. 19 build - Build.
20 test - Run unit tests (does not build). 20 test - Run unit tests (does not build).
21 perftest - Run perf tests (does not build). 21 perftest - Run perf tests (does not build).
22 pytest - Run Python unit tests (does not build). 22 pytest - Run Python unit tests (does not build).
23 gyp - Run gyp for mojo (does not sync). 23 gn - Run gn for mojo (does not sync).
24 gypall - Run gyp for all of chromium (does not sync). 24 sync - Sync using gclient (does not run gn).
25 sync - Sync using gclient (does not run gyp).
26 show-bash-alias - Outputs an appropriate bash alias for mojob. In bash do: 25 show-bash-alias - Outputs an appropriate bash alias for mojob. In bash do:
27 \$ eval \`mojo/tools/mojob.sh show-bash-alias\` 26 \$ eval \`mojo/tools/mojob.sh show-bash-alias\`
28 27
29 option (which will only apply to following commands) should be one of: 28 option (which will only apply to commands which follow) should be one of:
30 Build/test options (specified before build/test/perftest): 29 General options (specify before everything):
31 --debug - Build/test in Debug mode. 30 --debug / --release / --debug-and-release - Debug (default) build /
32 --release - Build/test in Release mode. 31 Release build / Debug and Release builds.
33 --debug-and-release - Build/test in both Debug and Release modes (default). 32 gn options (specify before gn):
34 Compiler options (specified before gyp): 33 --clang / --gcc - Use clang (default) / gcc.
35 --clang - Use clang (default). 34 --use-goma / --no-use-goma - Use goma (if \$GOMA_DIR is set or \$HOME/goma
36 --gcc - Use gcc. 35 exists; default) / don't use goma.
37 Component options:
38 --shared Build components as shared libraries (default).
39 --static Build components as static libraries.
40 Use goma:
41 --use-goma - Use goma if \$GOMA_DIR is set or \$HOME/goma exists (default).
42 --no-use-goma - Do not use goma.
43 36
44 Note: It will abort on the first failure (if any). 37 Note: It will abort on the first failure (if any).
45 EOF 38 EOF
46 } 39 }
47 40
41 get_gn_arg_value() {
42 grep -m 1 "^[[:space:]]*\<$2\>" "$1/args.gn" | \
43 sed -n 's/.* = "\?\([^"]*\)"\?$/\1/p'
44 }
45
48 do_build() { 46 do_build() {
49 echo "Building in out/$1 ..." 47 echo "Building in out/$1 ..."
50 if [ "$GOMA" = "auto" -a -v GOMA_DIR ]; then 48 if [ "$(get_gn_arg_value "out/$1" use_goma)" = "true" ]; then
49 # Use the configured goma directory.
50 local goma_dir="$(get_gn_arg_value "out/$1" goma_dir)"
51 echo "Ensuring goma (in ${goma_dir}) started ..."
52 "${goma_dir}/goma_ctl.py" ensure_start
53
51 ninja -j 1000 -l 100 -C "out/$1" mojo || exit 1 54 ninja -j 1000 -l 100 -C "out/$1" mojo || exit 1
52 else 55 else
53 ninja -C "out/$1" mojo || exit 1 56 ninja -C "out/$1" mojo || exit 1
54 fi 57 fi
55 } 58 }
56 59
57 do_unittests() { 60 do_unittests() {
58 echo "Running unit tests in out/$1 ..." 61 echo "Running unit tests in out/$1 ..."
59 mojo/tools/test_runner.py mojo/tools/data/unittests "out/$1" \ 62 mojo/tools/test_runner.py mojo/tools/data/unittests "out/$1" \
60 mojob_test_successes || exit 1 63 mojob_test_successes || exit 1
61 } 64 }
62 65
63 do_perftests() { 66 do_perftests() {
64 echo "Running perf tests in out/$1 ..." 67 echo "Running perf tests in out/$1 ..."
65 "out/$1/mojo_public_system_perftests" || exit 1 68 "out/$1/mojo_public_system_perftests" || exit 1
66 } 69 }
67 70
68 do_pytests() { 71 do_pytests() {
69 echo "Running python tests in out/$1 ..." 72 echo "Running python tests in out/$1 ..."
70 python mojo/tools/run_mojo_python_tests.py || exit 1 73 python mojo/tools/run_mojo_python_tests.py || exit 1
71 # TODO(qsr) Remove this test when the component build is not supported 74 python mojo/tools/run_mojo_python_bindings_tests.py "--build-dir=out/$1" || \
72 # anymore. 75 exit 1
73 if [ -f "out/$1/python/mojo/system.so" ]; then
74 python mojo/tools/run_mojo_python_bindings_tests.py \
75 "--build-dir=out/$1" || exit 1
76 fi
77 } 76 }
78 77
79 do_gyp() { 78 do_gn() {
80 local gyp_defines="$(make_gyp_defines)" 79 local gn_args="$(make_gn_args $1)"
81 echo "Running gyp for mojo with GYP_DEFINES=$gyp_defines ..." 80 echo "Running gn with --args=\"${gn_args}\" ..."
82 GYP_DEFINES="$gyp_defines" build/gyp_chromium mojo/mojo.gyp || exit 1 81 gn gen --args="${gn_args}" "out/$1"
83 }
84
85 do_gypall() {
86 local gyp_defines="$(make_gyp_defines)"
87 echo "Running gyp for everything with GYP_DEFINES=$gyp_defines ..."
88 GYP_DEFINES="$gyp_defines" build/gyp_chromium || exit 1
89 } 82 }
90 83
91 do_sync() { 84 do_sync() {
92 # Note: sync only (with hooks, but no gyp-ing). 85 # Note: sync only (with hooks, but no gyp-ing).
93 GYP_CHROMIUM_NO_ACTION=1 gclient sync || exit 1 86 GYP_CHROMIUM_NO_ACTION=1 gclient sync || exit 1
94 } 87 }
95 88
96 # Valid values: Debug, Release, or Debug_and_Release. 89 # Valid values: Debug, Release, or Debug_and_Release.
97 BUILD_TEST_TYPE=Debug_and_Release 90 BUILD_TYPE=Debug_and_Release
98 should_do_Debug() { 91 should_do_Debug() {
99 test "$BUILD_TEST_TYPE" = Debug -o "$BUILD_TEST_TYPE" = Debug_and_Release 92 test "$BUILD_TYPE" = Debug -o "$BUILD_TYPE" = Debug_and_Release
100 } 93 }
101 should_do_Release() { 94 should_do_Release() {
102 test "$BUILD_TEST_TYPE" = Release -o "$BUILD_TEST_TYPE" = Debug_and_Release 95 test "$BUILD_TYPE" = Release -o "$BUILD_TYPE" = Debug_and_Release
103 } 96 }
104 97
105 # Valid values: clang or gcc. 98 # Valid values: clang or gcc.
106 COMPILER=clang 99 COMPILER=clang
107 # Valid values: shared or static.
108 COMPONENT=shared
109 # Valid values: auto or disabled. 100 # Valid values: auto or disabled.
110 GOMA=auto 101 GOMA=auto
111 make_gyp_defines() { 102 make_gn_args() {
112 local options=() 103 local args=()
113 # Always include these options.
114 options+=("use_aura=1")
115 case "$COMPILER" in 104 case "$COMPILER" in
116 clang) 105 clang)
117 options+=("clang=1") 106 args+=("is_clang=true")
118 ;; 107 ;;
119 gcc) 108 gcc)
120 options+=("clang=0") 109 args+=("is_clang=false")
121 ;;
122 esac
123 case "$COMPONENT" in
124 shared)
125 options+=("component=shared_library")
126 ;;
127 static)
128 options+=("component=static_library")
129 ;; 110 ;;
130 esac 111 esac
131 case "$GOMA" in 112 case "$GOMA" in
132 auto) 113 auto)
133 if [ -v GOMA_DIR ]; then 114 if [ -v GOMA_DIR ]; then
134 options+=("use_goma=1" "gomadir=\"${GOMA_DIR}\"") 115 args+=("use_goma=true" "goma_dir=\"${GOMA_DIR}\"")
116 elif [ -d "${HOME}/goma" ]; then
117 args+=("use_goma=true" "goma_dir=\"${HOME}/goma\"")
135 else 118 else
136 options+=("use_goma=0") 119 args+=("use_goma=false")
137 fi 120 fi
138 ;; 121 ;;
139 disabled) 122 disabled)
140 options+=("use_goma=0") 123 args+=("use_goma=false")
141 ;; 124 ;;
142 esac 125 esac
143 echo "${options[*]}" 126 echo "${args[*]}"
144 }
145
146 set_goma_dir_if_necessary() {
147 if [ "$GOMA" = "auto" -a ! -v GOMA_DIR ]; then
148 if [ -d "${HOME}/goma" ]; then
149 GOMA_DIR="${HOME}/goma"
150 fi
151 fi
152 }
153
154 start_goma_if_necessary() {
155 if [ "$GOMA" = "auto" -a -v GOMA_DIR ]; then
156 "${GOMA_DIR}/goma_ctl.py" ensure_start
157 fi
158 } 127 }
159 128
160 # We're in src/mojo/tools. We want to get to src. 129 # We're in src/mojo/tools. We want to get to src.
161 cd "$(realpath "$(dirname "$0")")/../.." 130 cd "$(realpath "$(dirname "$0")")/../.."
162 131
163 if [ $# -eq 0 ]; then 132 if [ $# -eq 0 ]; then
164 do_help 133 do_help
165 exit 0 134 exit 0
166 fi 135 fi
167 136
168 for arg in "$@"; do 137 for arg in "$@"; do
169 case "$arg" in 138 case "$arg" in
170 # Commands ----------------------------------------------------------------- 139 # Commands -----------------------------------------------------------------
171 help|--help) 140 help|--help)
172 do_help 141 do_help
173 exit 0 142 exit 0
174 ;; 143 ;;
175 build) 144 build)
176 set_goma_dir_if_necessary
177 start_goma_if_necessary
178 should_do_Debug && do_build Debug 145 should_do_Debug && do_build Debug
179 should_do_Release && do_build Release 146 should_do_Release && do_build Release
180 ;; 147 ;;
181 test) 148 test)
182 should_do_Debug && do_unittests Debug 149 should_do_Debug && do_unittests Debug
183 should_do_Release && do_unittests Release 150 should_do_Release && do_unittests Release
184 ;; 151 ;;
185 perftest) 152 perftest)
186 should_do_Debug && do_perftests Debug 153 should_do_Debug && do_perftests Debug
187 should_do_Release && do_perftests Release 154 should_do_Release && do_perftests Release
188 ;; 155 ;;
189 pytest) 156 pytest)
190 should_do_Debug && do_pytests Debug 157 should_do_Debug && do_pytests Debug
191 should_do_Release && do_pytests Release 158 should_do_Release && do_pytests Release
192 ;; 159 ;;
193 gyp) 160 gn)
194 set_goma_dir_if_necessary 161 should_do_Debug && do_gn Debug
195 do_gyp 162 should_do_Release && do_gn Release
196 ;;
197 gypall)
198 set_goma_dir_if_necessary
199 do_gypall
200 ;; 163 ;;
201 sync) 164 sync)
202 do_sync 165 do_sync
203 ;; 166 ;;
204 show-bash-alias) 167 show-bash-alias)
205 # You want to type something like: 168 # You want to type something like:
206 # alias mojob=\ 169 # alias mojob=\
207 # '"$(pwd | sed '"'"'s/\(.*\/src\).*/\1/'"'"')/mojo/tools/mojob.sh"' 170 # '"$(pwd | sed '"'"'s/\(.*\/src\).*/\1/'"'"')/mojo/tools/mojob.sh"'
208 # This is quoting hell, so we simply escape every non-alphanumeric 171 # This is quoting hell, so we simply escape every non-alphanumeric
209 # character. 172 # character.
210 echo alias\ mojob\=\'\"\$\(pwd\ \|\ sed\ \'\"\'\"\'s\/\\\(\.\*\\\/src\\\)\ 173 echo alias\ mojob\=\'\"\$\(pwd\ \|\ sed\ \'\"\'\"\'s\/\\\(\.\*\\\/src\\\)\
211 \.\*\/\\1\/\'\"\'\"\'\)\/mojo\/tools\/mojob\.sh\"\' 174 \.\*\/\\1\/\'\"\'\"\'\)\/mojo\/tools\/mojob\.sh\"\'
212 ;; 175 ;;
213 # Options ------------------------------------------------------------------ 176 # Options ------------------------------------------------------------------
214 --debug) 177 --debug)
215 BUILD_TEST_TYPE=Debug 178 BUILD_TYPE=Debug
216 ;; 179 ;;
217 --release) 180 --release)
218 BUILD_TEST_TYPE=Release 181 BUILD_TYPE=Release
219 ;; 182 ;;
220 --debug-and-release) 183 --debug-and-release)
221 BUILD_TEST_TYPE=Debug_and_Release 184 BUILD_TYPE=Debug_and_Release
222 ;; 185 ;;
223 --clang) 186 --clang)
224 COMPILER=clang 187 COMPILER=clang
225 ;; 188 ;;
226 --gcc) 189 --gcc)
227 COMPILER=gcc 190 COMPILER=gcc
228 ;; 191 ;;
229 --shared)
230 COMPONENT=shared
231 ;;
232 --static)
233 COMPONENT=static
234 ;;
235 --use-goma) 192 --use-goma)
236 GOMA=auto 193 GOMA=auto
237 ;; 194 ;;
238 --no-use-goma) 195 --no-use-goma)
239 GOMA=disabled 196 GOMA=disabled
240 ;; 197 ;;
241 *) 198 *)
242 echo "Unknown command \"${arg}\". Try \"$(basename "$0") help\"." 199 echo "Unknown command \"${arg}\". Try \"$(basename "$0") help\"."
243 exit 1 200 exit 1
244 ;; 201 ;;
245 esac 202 esac
246 done 203 done
247 204
248 exit 0 205 exit 0
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698