| #!/bin/bash |
| # Copyright 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This a simple script to make building/testing Mojo components easier (on |
| # Linux). |
| |
| # TODO(vtl): Maybe make the test runner smart and not run unchanged test |
| # binaries. |
| # TODO(vtl) Maybe also provide a way to pass command-line arguments to the test |
| # binaries. |
| |
| do_help() { |
| cat << EOF |
| Usage: $(basename "$0") [command|option ...] |
| |
| command should be one of: |
| build - Build. |
| test - Run unit tests (does not build). |
| perftest - Run Release and Debug perf tests (does not build). |
| gyp - Run gyp for mojo (does not sync), with clang. |
| sync - Sync using gclient (does not run gyp). |
| show-bash-alias - Outputs an appropriate bash alias for mojob. In bash do: |
| \$ eval \`mojo/tools/mojob.sh show-bash-alias\` |
| |
| option (which will only apply to following commands) should be one of: |
| Build/test options (specified before build/test/perftest): |
| --debug - Build/test in Debug mode. |
| --release - Build/test in Release mode. |
| --debug-and-release - Build/test in both Debug and Release modes (default). |
| Compiler options (specified before gyp): |
| --clang - Use clang (default). |
| --gcc - Use gcc. |
| Component options: |
| --shared Build components as shared libraries (default). |
| --static Build components as static libraries. |
| |
| Note: It will abort on the first failure (if any). |
| EOF |
| } |
| |
| do_build() { |
| echo "Building in out/$1 ..." |
| ninja -C "out/$1" mojo || exit 1 |
| } |
| |
| do_unittests() { |
| echo "Running unit tests in out/$1 ..." |
| "out/$1/mojo_system_unittests" || exit 1 |
| "out/$1/mojo_public_unittests" || exit 1 |
| "out/$1/mojo_bindings_unittests" || exit 1 |
| "out/$1/mojo_js_unittests" || exit 1 |
| "out/$1/mojo_common_unittests" || exit 1 |
| "out/$1/mojo_shell_unittests" || exit 1 |
| } |
| |
| do_perftests() { |
| echo "Running perf tests in out/$1 ..." |
| "out/$1/mojo_public_perftests" || exit 1 |
| } |
| |
| do_gyp() { |
| local gyp_defines="$(make_gyp_defines)" |
| echo "Running gyp with GYP_DEFINES=$gyp_defines ..." |
| GYP_DEFINES="$gyp_defines" build/gyp_chromium mojo/mojo.gyp |
| } |
| |
| # Valid values: Debug, Release, or Debug_and_Release. |
| BUILD_TEST_TYPE=Debug_and_Release |
| should_do_Debug() { |
| test "$BUILD_TEST_TYPE" = Debug -o "$BUILD_TEST_TYPE" = Debug_and_Release |
| } |
| should_do_Release() { |
| test "$BUILD_TEST_TYPE" = Release -o "$BUILD_TEST_TYPE" = Debug_and_Release |
| } |
| |
| # Valid values: clang or gcc. |
| COMPILER=clang |
| # Valid values: shared or static. |
| COMPONENT=shared |
| make_gyp_defines() { |
| local options=() |
| # Always include these options. |
| options+=("use_aura=1") |
| case "$COMPILER" in |
| clang) |
| options+=("clang=1") |
| ;; |
| gcc) |
| options+=("clang=0") |
| ;; |
| esac |
| case "$COMPONENT" in |
| shared) |
| options+=("component=shared_library") |
| ;; |
| static) |
| options+=("component=static_library") |
| ;; |
| esac |
| echo ${options[*]} |
| } |
| |
| # We're in src/mojo/tools. We want to get to src. |
| cd "$(realpath "$(dirname "$0")")/../.." |
| |
| if [ $# -eq 0 ]; then |
| do_help |
| exit 0 |
| fi |
| |
| for arg in "$@"; do |
| case "$arg" in |
| # Commands ----------------------------------------------------------------- |
| help|--help) |
| do_help |
| exit 0 |
| ;; |
| build) |
| should_do_Debug && do_build Debug |
| should_do_Release && do_build Release |
| ;; |
| test) |
| should_do_Debug && do_unittests Debug |
| should_do_Release && do_unittests Release |
| ;; |
| perftest) |
| should_do_Debug && do_perftests Debug |
| should_do_Release && do_perftests Release |
| ;; |
| gyp) |
| do_gyp |
| ;; |
| sync) |
| # Note: sync only (with hooks, but no gyp-ing). |
| GYP_CHROMIUM_NO_ACTION=1 gclient sync |
| ;; |
| show-bash-alias) |
| # You want to type something like: |
| # alias mojob=\ |
| # '"$(pwd | sed '"'"'s/\(.*\/src\).*/\1/'"'"')/mojo/tools/mojob.sh"' |
| # This is quoting hell, so we simply escape every non-alphanumeric |
| # character. |
| echo alias\ mojob\=\'\"\$\(pwd\ \|\ sed\ \'\"\'\"\'s\/\\\(\.\*\\\/src\\\)\ |
| \.\*\/\\1\/\'\"\'\"\'\)\/mojo\/tools\/mojob\.sh\"\' |
| ;; |
| # Options ------------------------------------------------------------------ |
| --debug) |
| BUILD_TEST_TYPE=Debug |
| ;; |
| --release) |
| BUILD_TEST_TYPE=Release |
| ;; |
| --debug-and-release) |
| BUILD_TEST_TYPE=Debug_and_Release |
| ;; |
| --clang) |
| COMPILER=clang |
| ;; |
| --gcc) |
| COMPILER=gcc |
| ;; |
| --shared) |
| COMPONENT=shared |
| ;; |
| --static) |
| COMPONENT=static |
| ;; |
| *) |
| echo "Unknown command \"${arg}\". Try \"$(basename "$0") help\"." |
| exit 1 |
| ;; |
| esac |
| done |