12553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin#!/bin/bash 22553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# 32553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Copyright (C) 2017 The Android Open Source Project 42553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# 52553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Licensed under the Apache License, Version 2.0 (the "License"); 62553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# you may not use this file except in compliance with the License. 72553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# You may obtain a copy of the License at 82553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# 92553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# http://www.apache.org/licenses/LICENSE-2.0 102553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# 112553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Unless required by applicable law or agreed to in writing, software 122553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# distributed under the License is distributed on an "AS IS" BASIS, 132553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# See the License for the specific language governing permissions and 152553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# limitations under the License. 162553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 172553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinif [[ ! -d art ]]; then 182553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo "Script needs to be run at the root of the android tree" 192553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin exit 1 202553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinfi 212553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 222553887b8dd264497a8589ddddad9d5f8260b0a2Igor MurashkinALL_CONFIGS=(linux-ia32 linux-x64 linux-armv8 linux-armv7 android-armv8 android-armv7) 232553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 242553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinusage() { 252553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local config 262553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local golem_target 272553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 282553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin (cat << EOF 292553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin Usage: $(basename "${BASH_SOURCE[0]}") [--golem=<target>] --machine-type=MACHINE_TYPE 302553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin [--tarball[=<target>.tar.gz]] 312553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 322553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin Build minimal art binaries required to run golem benchmarks either 332553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin locally or on the golem servers. 342553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 352553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin Creates the \$MACHINE_TYPE binaries in your \$OUT_DIR, and if --tarball was specified, 362553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin it also tars the results of the build together into your <target.tar.gz> file. 372553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin -------------------------------------------------------- 382553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin Required Flags: 392553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --machine-type=MT Specify the machine type that will be built. 402553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 412553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin Optional Flags": 422553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --golem=<target> Builds with identical commands that Golem servers use. 432553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --tarball[=o.tgz] Tar/gz the results. File name defaults to <machine_type>.tar.gz 442553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin -j<num> Specify how many jobs to use for parallelism. 452553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --help Print this help listing. 462553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --showcommands Show commands as they are being executed. 472553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --simulate Print commands only, don't execute commands. 482553887b8dd264497a8589ddddad9d5f8260b0a2Igor MurashkinEOF 492553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ) | sed -e 's/^[[:space:]][[:space:]]//g' >&2 # Strip leading whitespace from heredoc. 502553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 512553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 "Available machine types:" 522553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin for config in "${ALL_CONFIGS[@]}"; do 532553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 " $config" 542553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin done 552553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 562553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 572553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 "Available Golem targets:" 582553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin while IFS='' read -r golem_target; do 592553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 " $golem_target" 602553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin done < <("$(thisdir)/env" --list-targets) 612553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 622553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 632553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Check if $1 element is in array $2 642553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkincontains_element() { 652553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local e 662553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done 672553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin return 1 682553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 692553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 702553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Display a command, but don't execute it, if --showcommands was set. 712553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinshow_command() { 722553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ $showcommands == "showcommands" ]]; then 732553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo "$@" 742553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 752553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 762553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 772553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Execute a command, displaying it if --showcommands was set. 782553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# If --simulate is used, command is not executed. 792553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinexecute() { 802553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin show_command "$@" 812553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin execute_noshow "$@" 822553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 832553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 842553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Execute a command unless --simulate was used. 852553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinexecute_noshow() { 862553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ $simulate == "simulate" ]]; then 872553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin return 0 882553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 892553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 902553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local prog="$1" 912553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 922553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin "$prog" "$@" 932553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 942553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 952553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Export environment variable, echoing it to screen. 962553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinsetenv() { 972553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local name="$1" 982553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local value="$2" 992553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1002553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin export $name="$value" 1012553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo export $name="$value" 1022553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 1032553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1042553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Export environment variable, echoing $3 to screen ($3 is meant to be unevaluated). 1052553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinsetenv_escape() { 1062553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local name="$1" 1072553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local value="$2" 1082553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local escaped_value="$3" 1092553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1102553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin export $name="$value" 1112553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo export $name="$escaped_value" 1122553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 1132553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1142553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinlog_usage_error() { 1152553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 "ERROR: " "$@" 1162553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 " See --help for the correct usage information." 1172553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin exit 1 1182553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 1192553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1202553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinlog_fatal() { 1212553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo >&2 "FATAL: " "$@" 1222553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin exit 2 1232553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 1242553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1252553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Get the directory of this script. 1262553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinthisdir() { 1272553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin (\cd "$(dirname "${BASH_SOURCE[0]}")" && pwd ) 1282553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 1292553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1302553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Get the path to the top of the Android source tree. 1312553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkingettop() { 1322553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ "x$ANDROID_BUILD_TOP" != "x" ]]; then 1332553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo "$ANDROID_BUILD_TOP"; 1342553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin else 1352553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin echo "$(thisdir)/../../.." 1362553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 1372553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 1382553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1392553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Get a build variable from the Android build system. 1402553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinget_build_var() { 1412553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local varname="$1" 1422553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1432553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # include the desired target product/build-variant 1442553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # which won't be set in our env if neither we nor the user first executed 1452553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # source build/envsetup.sh (e.g. if simulating from a fresh shell). 1462553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin local extras 1472553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin [[ -n $target_product ]] && extras+=" TARGET_PRODUCT=$target_product" 1482553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin [[ -n $target_build_variant ]] && extras+=" TARGET_BUILD_VARIANT=$target_build_variant" 1492553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1507b44ac0dc47a67f646c0683ca5f16d98265df855Dan Willemsen # call dumpvar from the build system. 1517b44ac0dc47a67f646c0683ca5f16d98265df855Dan Willemsen (\cd "$(gettop)"; env $extras build/soong/soong_ui.bash --dumpvar-mode $varname) 1522553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin} 1532553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1542553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Defaults from command-line. 1552553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1562553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinmode="" # blank or 'golem' if --golem was specified. 1572553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkingolem_target="" # --golem=$golem_target 1582553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinconfig="" # --machine-type=$config 1597b44ac0dc47a67f646c0683ca5f16d98265df855Dan Willemsenj_arg="" 1602553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinshowcommands="" 1612553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinsimulate="" 1622553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinmake_tarball="" 1632553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkintarball="" 1642553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1652553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Parse command line arguments 1662553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1672553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinwhile [[ "$1" != "" ]]; do 1682553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin case "$1" in 1692553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --help) 1702553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin usage 1712553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin exit 1 1722553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 1732553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --golem=*) 1742553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin mode="golem" 1752553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin golem_target="${1##--golem=}" 1762553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1772553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ "x$golem_target" == x ]]; then 1782553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin log_usage_error "Missing --golem target type." 1792553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 1802553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 1812553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 1822553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 1832553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --machine-type=*) 1842553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin config="${1##--machine-type=}" 1852553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if ! contains_element "$config" "${ALL_CONFIGS[@]}"; then 1862553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin log_usage_error "Invalid --machine-type value '$config'" 1872553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 1882553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 1892553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 1902553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --tarball) 1912553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin tarball="" # reuse the machine type name. 1922553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin make_tarball="make_tarball" 1932553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 1942553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 1952553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --tarball=*) 1962553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin tarball="${1##--tarball=}" 1972553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin make_tarball="make_tarball" 1982553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 1992553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2002553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin -j*) 2012553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin j_arg="$1" 2022553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 2032553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2042553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --showcommands) 2052553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin showcommands="showcommands" 2062553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 2072553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2082553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin --simulate) 2092553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin simulate="simulate" 2102553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin shift 2112553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2122553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin *) 2132553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin log_usage_error "Unknown options $1" 2142553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2152553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin esac 2162553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkindone 2172553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2182553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin################################### 2192553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin################################### 2202553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin################################### 2212553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2222553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinif [[ -z $config ]]; then 2232553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin log_usage_error "--machine-type option is required." 2242553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinfi 2252553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2262553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# --tarball defaults to the --machine-type value with .tar.gz. 2272553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkintarball="${tarball:-$config.tar.gz}" 2282553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2292553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkintarget_product="$TARGET_PRODUCT" 2302553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkintarget_build_variant="$TARGET_BUILD_VARIANT" 2312553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2322553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# If not using --golem, use whatever the user had lunch'd prior to this script. 2332553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinif [[ $mode == "golem" ]]; then 2342553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # This section is intended solely to be executed by a golem build server. 2352553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2362553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin target_build_variant=eng 2372553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin case "$config" in 2382553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin *-armv7) 2392553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin target_product="arm_krait" 2402553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2412553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin *-armv8) 2422553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin target_product="armv8" 2432553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2442553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin *) 2452553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin target_product="sdk" 2462553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 2472553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin esac 2482553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2492553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ $target_product = arm* ]]; then 2502553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # If using the regular manifest, e.g. 'master' 2512553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # The lunch command for arm will assuredly fail because we don't have device/generic/art. 2522553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # 2532553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Print a human-readable error message instead of trying to lunch and failing there. 2542553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if ! [[ -d "$(gettop)/device/generic/art" ]]; then 2552553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin log_fatal "Missing device/generic/art directory. Perhaps try master-art repo manifest?\n" \ 2562553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin " Cannot build ARM targets (arm_krait, armv8) for Golem." >&2 2572553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 2582553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # We could try to keep on simulating but it seems brittle because we won't have the proper 2592553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # build variables to output the right strings. 2602553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 2612553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2622553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Get this particular target's environment variables (e.g. ART read barrier on/off). 2632553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin source "$(thisdir)"/env "$golem_target" || exit 1 2642553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2652553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin lunch_target="$target_product-$target_build_variant" 2662553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2672553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin execute 'source' build/envsetup.sh 2682553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Build generic targets (as opposed to something specific like aosp_angler-eng). 2692553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin execute lunch "$lunch_target" 2702553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin setenv JACK_SERVER false 2712553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin setenv_escape JACK_REPOSITORY "$PWD/prebuilts/sdk/tools/jacks" '$PWD/prebuilts/sdk/tools/jacks' 2722553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Golem uses master-art repository which is missing a lot of other libraries. 2732553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin setenv SOONG_ALLOW_MISSING_DEPENDENCIES true 2742553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Golem may be missing tools such as javac from its path. 2752553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin setenv_escape PATH "/usr/lib/jvm/java-8-openjdk-amd64/bin/:$PATH" '/usr/lib/jvm/java-8-openjdk-amd64/bin/:$PATH' 2762553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinelse 2772553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Look up the default variables from the build system if they weren't set already. 2782553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin [[ -z $target_product ]] && target_product="$(get_build_var TARGET_PRODUCT)" 2792553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin [[ -z $target_build_variant ]] && target_build_variant="$(get_build_var TARGET_BUILD_VARIANT)" 2802553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinfi 2812553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2822553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Defaults for all machine types. 2832553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinmake_target="build-art-target-golem" 2842553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinout_dir="out/x86_64" 2852553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinroot_dir_var="PRODUCT_OUT" 2862553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinstrip_symbols=false 2872553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinbit64_suffix="" 2882553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkintar_directories=(system data/art-test) 2892553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2902553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Per-machine type overrides 2912553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinif [[ $config == linux-arm* ]]; then 2922553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin setenv ART_TARGET_LINUX true 2932553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinfi 2942553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 2952553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkincase "$config" in 2962553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin linux-ia32|linux-x64) 2972553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin root_dir_var="HOST_OUT" 2982553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Android strips target builds automatically, but not host builds. 2992553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin strip_symbols=true 3002553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin make_target="build-art-host-golem" 3012553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3022553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ $config == linux-ia32 ]]; then 3032553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin out_dir="out/x86" 3042553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin setenv HOST_PREFER_32_BIT true 3052553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin else 3062553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin bit64_suffix="64" 3072553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 3082553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3092553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin tar_directories=(bin framework usr lib${bit64_suffix}) 3102553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 3112553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin *-armv8) 3122553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin bit64_suffix="64" 3132553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 3142553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin *-armv7) 3152553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin ;; 3162553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin *) 3172553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin log_fatal "Unsupported machine-type '$config'" 3182553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinesac 3192553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3202553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Golem benchmark run commands expect a certain $OUT_DIR to be set, 3212553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# so specify it here. 3222553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# 3232553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Note: It is questionable if we want to customize this since users 3242553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# could alternatively probably use their own build directly (and forgo this script). 3252553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinsetenv OUT_DIR "$out_dir" 3262553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinroot_dir="$(get_build_var "$root_dir_var")" 3272553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3282553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinif [[ $mode == "golem" ]]; then 3292553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # For golem-style running only. 3302553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Sets the DT_INTERP to this path in every .so we can run the 3312553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # non-system version of dalvikvm with our own copies of the dependencies (e.g. our own libc++). 3322553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ $config == android-* ]]; then 3332553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # TODO: the linker can be relative to the binaries 3342553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # (which is what we do for linux-armv8 and linux-armv7) 3352553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin golem_run_path="/data/local/tmp/runner/" 3362553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin else 3372553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin golem_run_path="" 3382553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 3392553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3402553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Only do this for target builds. Host doesn't need this. 3412553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ $config == *-arm* ]]; then 3422553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin setenv CUSTOM_TARGET_LINKER "${golem_run_path}${root_dir}/system/bin/linker${bit64_suffix}" 3432553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 3442553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinfi 3452553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3462553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# 3472553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# Main command execution below here. 3482553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# (everything prior to this just sets up environment variables, 3492553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# and maybe calls lunch). 3502553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin# 3512553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3527b44ac0dc47a67f646c0683ca5f16d98265df855Dan Willemsenexecute build/soong/soong_ui.bash --make-mode "${j_arg}" "${make_target}" 3532553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3542553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinif $strip_symbols; then 3552553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Further reduce size by stripping symbols. 3562553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin execute_noshow strip $root_dir/bin/* || true 3572553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin show_command strip $root_dir/bin/'*' '|| true' 3582553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin execute_noshow strip $root_dir/lib${bit64_suffix}/'*' 3592553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin show_command strip $root_dir/lib${bit64_suffix}/'*' 3602553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinfi 3612553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3622553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinif [[ "$make_tarball" == "make_tarball" ]]; then 3632553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # Create a tarball which is required for the golem build resource. 3642553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # (In particular, each golem benchmark's run commands depend on a list of resource files 3652553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # in order to have all the files it needs to actually execute, 3662553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin # and this tarball would satisfy that particular target+machine-type's requirements). 3672553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin dirs_rooted=() 3682553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin for tar_dir in "${tar_directories[@]}"; do 3692553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin dirs_rooted+=("$root_dir/$tar_dir") 3702553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin done 3712553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3722553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin execute tar -czf "${tarball}" "${dirs_rooted[@]}" --exclude .git --exclude .gitignore 3732553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin tar_result=$? 3742553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin if [[ $tar_result -ne 0 ]]; then 3752553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin [[ -f $tarball ]] && rm $tarball 3762553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin fi 3772553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 3782553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin show_command '[[ $? -ne 0 ]] && rm' "$tarball" 3792553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkinfi 3802553887b8dd264497a8589ddddad9d5f8260b0a2Igor Murashkin 381