1*795d594fSAndroid Build Coastguard Worker#!/bin/bash 2*795d594fSAndroid Build Coastguard Worker# 3*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project 4*795d594fSAndroid Build Coastguard Worker# 5*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*795d594fSAndroid Build Coastguard Worker# 9*795d594fSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*795d594fSAndroid Build Coastguard Worker# 11*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*795d594fSAndroid Build Coastguard Worker# limitations under the License. 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Workerif [[ ! -d art ]]; then 18*795d594fSAndroid Build Coastguard Worker echo "Script needs to be run at the root of the android tree" 19*795d594fSAndroid Build Coastguard Worker exit 1 20*795d594fSAndroid Build Coastguard Workerfi 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard WorkerALL_CONFIGS=(linux-ia32 linux-x64 linux-armv8 linux-armv7 android-armv8 android-armv7) 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Workerusage() { 25*795d594fSAndroid Build Coastguard Worker local config 26*795d594fSAndroid Build Coastguard Worker local golem_target 27*795d594fSAndroid Build Coastguard Worker 28*795d594fSAndroid Build Coastguard Worker (cat << EOF 29*795d594fSAndroid Build Coastguard Worker Usage: $(basename "${BASH_SOURCE[0]}") [--golem=<target>] --machine-type=MACHINE_TYPE 30*795d594fSAndroid Build Coastguard Worker [--tarball[=<target>.tar.gz]] 31*795d594fSAndroid Build Coastguard Worker 32*795d594fSAndroid Build Coastguard Worker Build minimal art binaries required to run golem benchmarks either 33*795d594fSAndroid Build Coastguard Worker locally or on the golem servers. 34*795d594fSAndroid Build Coastguard Worker 35*795d594fSAndroid Build Coastguard Worker Creates the \$MACHINE_TYPE binaries in your \$OUT_DIR, and if --tarball was specified, 36*795d594fSAndroid Build Coastguard Worker it also tars the results of the build together into your <target.tar.gz> file. 37*795d594fSAndroid Build Coastguard Worker -------------------------------------------------------- 38*795d594fSAndroid Build Coastguard Worker Required Flags: 39*795d594fSAndroid Build Coastguard Worker --machine-type=MT Specify the machine type that will be built. 40*795d594fSAndroid Build Coastguard Worker 41*795d594fSAndroid Build Coastguard Worker Optional Flags": 42*795d594fSAndroid Build Coastguard Worker --golem=<target> Builds with identical commands that Golem servers use. 43*795d594fSAndroid Build Coastguard Worker --tarball[=o.tgz] Tar/gz the results. File name defaults to <machine_type>.tar.gz 44*795d594fSAndroid Build Coastguard Worker -j<num> Specify how many jobs to use for parallelism. 45*795d594fSAndroid Build Coastguard Worker --help Print this help listing. 46*795d594fSAndroid Build Coastguard Worker --showcommands Show commands as they are being executed. 47*795d594fSAndroid Build Coastguard Worker --simulate Print commands only, don't execute commands. 48*795d594fSAndroid Build Coastguard WorkerEOF 49*795d594fSAndroid Build Coastguard Worker ) | sed -e 's/^[[:space:]][[:space:]]//g' >&2 # Strip leading whitespace from heredoc. 50*795d594fSAndroid Build Coastguard Worker 51*795d594fSAndroid Build Coastguard Worker echo >&2 "Available machine types:" 52*795d594fSAndroid Build Coastguard Worker for config in "${ALL_CONFIGS[@]}"; do 53*795d594fSAndroid Build Coastguard Worker echo >&2 " $config" 54*795d594fSAndroid Build Coastguard Worker done 55*795d594fSAndroid Build Coastguard Worker 56*795d594fSAndroid Build Coastguard Worker echo >&2 57*795d594fSAndroid Build Coastguard Worker echo >&2 "Available Golem targets:" 58*795d594fSAndroid Build Coastguard Worker while IFS='' read -r golem_target; do 59*795d594fSAndroid Build Coastguard Worker echo >&2 " $golem_target" 60*795d594fSAndroid Build Coastguard Worker done < <("$(thisdir)/env" --list-targets) 61*795d594fSAndroid Build Coastguard Worker} 62*795d594fSAndroid Build Coastguard Worker 63*795d594fSAndroid Build Coastguard Worker# Check if $1 element is in array $2 64*795d594fSAndroid Build Coastguard Workercontains_element() { 65*795d594fSAndroid Build Coastguard Worker local e 66*795d594fSAndroid Build Coastguard Worker for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done 67*795d594fSAndroid Build Coastguard Worker return 1 68*795d594fSAndroid Build Coastguard Worker} 69*795d594fSAndroid Build Coastguard Worker 70*795d594fSAndroid Build Coastguard Worker# Display a command, but don't execute it, if --showcommands was set. 71*795d594fSAndroid Build Coastguard Workershow_command() { 72*795d594fSAndroid Build Coastguard Worker if [[ $showcommands == "showcommands" ]]; then 73*795d594fSAndroid Build Coastguard Worker echo "$@" 74*795d594fSAndroid Build Coastguard Worker fi 75*795d594fSAndroid Build Coastguard Worker} 76*795d594fSAndroid Build Coastguard Worker 77*795d594fSAndroid Build Coastguard Worker# Execute a command, displaying it if --showcommands was set. 78*795d594fSAndroid Build Coastguard Worker# If --simulate is used, command is not executed. 79*795d594fSAndroid Build Coastguard Workerexecute() { 80*795d594fSAndroid Build Coastguard Worker show_command "$@" 81*795d594fSAndroid Build Coastguard Worker execute_noshow "$@" 82*795d594fSAndroid Build Coastguard Worker} 83*795d594fSAndroid Build Coastguard Worker 84*795d594fSAndroid Build Coastguard Worker# Execute a command unless --simulate was used. 85*795d594fSAndroid Build Coastguard Workerexecute_noshow() { 86*795d594fSAndroid Build Coastguard Worker if [[ $simulate == "simulate" ]]; then 87*795d594fSAndroid Build Coastguard Worker return 0 88*795d594fSAndroid Build Coastguard Worker fi 89*795d594fSAndroid Build Coastguard Worker 90*795d594fSAndroid Build Coastguard Worker local prog="$1" 91*795d594fSAndroid Build Coastguard Worker shift 92*795d594fSAndroid Build Coastguard Worker "$prog" "$@" 93*795d594fSAndroid Build Coastguard Worker} 94*795d594fSAndroid Build Coastguard Worker 95*795d594fSAndroid Build Coastguard Worker# Export environment variable, echoing it to screen. 96*795d594fSAndroid Build Coastguard Workersetenv() { 97*795d594fSAndroid Build Coastguard Worker local name="$1" 98*795d594fSAndroid Build Coastguard Worker local value="$2" 99*795d594fSAndroid Build Coastguard Worker 100*795d594fSAndroid Build Coastguard Worker export $name="$value" 101*795d594fSAndroid Build Coastguard Worker echo export $name="$value" 102*795d594fSAndroid Build Coastguard Worker} 103*795d594fSAndroid Build Coastguard Worker 104*795d594fSAndroid Build Coastguard Worker# Export environment variable, echoing $3 to screen ($3 is meant to be unevaluated). 105*795d594fSAndroid Build Coastguard Workersetenv_escape() { 106*795d594fSAndroid Build Coastguard Worker local name="$1" 107*795d594fSAndroid Build Coastguard Worker local value="$2" 108*795d594fSAndroid Build Coastguard Worker local escaped_value="$3" 109*795d594fSAndroid Build Coastguard Worker 110*795d594fSAndroid Build Coastguard Worker export $name="$value" 111*795d594fSAndroid Build Coastguard Worker echo export $name="$escaped_value" 112*795d594fSAndroid Build Coastguard Worker} 113*795d594fSAndroid Build Coastguard Worker 114*795d594fSAndroid Build Coastguard Workerlog_usage_error() { 115*795d594fSAndroid Build Coastguard Worker echo >&2 "ERROR: " "$@" 116*795d594fSAndroid Build Coastguard Worker echo >&2 " See --help for the correct usage information." 117*795d594fSAndroid Build Coastguard Worker exit 1 118*795d594fSAndroid Build Coastguard Worker} 119*795d594fSAndroid Build Coastguard Worker 120*795d594fSAndroid Build Coastguard Workerlog_fatal() { 121*795d594fSAndroid Build Coastguard Worker echo >&2 "FATAL: " "$@" 122*795d594fSAndroid Build Coastguard Worker exit 2 123*795d594fSAndroid Build Coastguard Worker} 124*795d594fSAndroid Build Coastguard Worker 125*795d594fSAndroid Build Coastguard Worker# Get the directory of this script. 126*795d594fSAndroid Build Coastguard Workerthisdir() { 127*795d594fSAndroid Build Coastguard Worker (\cd "$(dirname "${BASH_SOURCE[0]}")" && pwd ) 128*795d594fSAndroid Build Coastguard Worker} 129*795d594fSAndroid Build Coastguard Worker 130*795d594fSAndroid Build Coastguard Worker# Get the path to the top of the Android source tree. 131*795d594fSAndroid Build Coastguard Workergettop() { 132*795d594fSAndroid Build Coastguard Worker if [[ "x$ANDROID_BUILD_TOP" != "x" ]]; then 133*795d594fSAndroid Build Coastguard Worker echo "$ANDROID_BUILD_TOP"; 134*795d594fSAndroid Build Coastguard Worker else 135*795d594fSAndroid Build Coastguard Worker echo "$(thisdir)/../../.." 136*795d594fSAndroid Build Coastguard Worker fi 137*795d594fSAndroid Build Coastguard Worker} 138*795d594fSAndroid Build Coastguard Worker 139*795d594fSAndroid Build Coastguard Worker# Get a build variable from the Android build system. 140*795d594fSAndroid Build Coastguard Workerget_build_var() { 141*795d594fSAndroid Build Coastguard Worker local varname="$1" 142*795d594fSAndroid Build Coastguard Worker 143*795d594fSAndroid Build Coastguard Worker # include the desired target product/build-variant 144*795d594fSAndroid Build Coastguard Worker # which won't be set in our env if neither we nor the user first executed 145*795d594fSAndroid Build Coastguard Worker # source build/envsetup.sh (e.g. if simulating from a fresh shell). 146*795d594fSAndroid Build Coastguard Worker local extras 147*795d594fSAndroid Build Coastguard Worker [[ -n $target_product ]] && extras+=" TARGET_PRODUCT=$target_product" 148*795d594fSAndroid Build Coastguard Worker [[ -n $target_build_variant ]] && extras+=" TARGET_BUILD_VARIANT=$target_build_variant" 149*795d594fSAndroid Build Coastguard Worker 150*795d594fSAndroid Build Coastguard Worker # call dumpvar from the build system. 151*795d594fSAndroid Build Coastguard Worker (\cd "$(gettop)"; env $extras build/soong/soong_ui.bash --dumpvar-mode $varname) 152*795d594fSAndroid Build Coastguard Worker} 153*795d594fSAndroid Build Coastguard Worker 154*795d594fSAndroid Build Coastguard Worker# Defaults from command-line. 155*795d594fSAndroid Build Coastguard Worker 156*795d594fSAndroid Build Coastguard Workermode="" # blank or 'golem' if --golem was specified. 157*795d594fSAndroid Build Coastguard Workergolem_target="" # --golem=$golem_target 158*795d594fSAndroid Build Coastguard Workerconfig="" # --machine-type=$config 159*795d594fSAndroid Build Coastguard Workerj_arg="" 160*795d594fSAndroid Build Coastguard Workershowcommands="" 161*795d594fSAndroid Build Coastguard Workersimulate="" 162*795d594fSAndroid Build Coastguard Workermake_tarball="" 163*795d594fSAndroid Build Coastguard Workertarball="" 164*795d594fSAndroid Build Coastguard Worker 165*795d594fSAndroid Build Coastguard Worker# Parse command line arguments 166*795d594fSAndroid Build Coastguard Worker 167*795d594fSAndroid Build Coastguard Workerwhile [[ "$1" != "" ]]; do 168*795d594fSAndroid Build Coastguard Worker case "$1" in 169*795d594fSAndroid Build Coastguard Worker --help) 170*795d594fSAndroid Build Coastguard Worker usage 171*795d594fSAndroid Build Coastguard Worker exit 1 172*795d594fSAndroid Build Coastguard Worker ;; 173*795d594fSAndroid Build Coastguard Worker --golem=*) 174*795d594fSAndroid Build Coastguard Worker mode="golem" 175*795d594fSAndroid Build Coastguard Worker golem_target="${1##--golem=}" 176*795d594fSAndroid Build Coastguard Worker 177*795d594fSAndroid Build Coastguard Worker if [[ "x$golem_target" == x ]]; then 178*795d594fSAndroid Build Coastguard Worker log_usage_error "Missing --golem target type." 179*795d594fSAndroid Build Coastguard Worker fi 180*795d594fSAndroid Build Coastguard Worker 181*795d594fSAndroid Build Coastguard Worker shift 182*795d594fSAndroid Build Coastguard Worker ;; 183*795d594fSAndroid Build Coastguard Worker --machine-type=*) 184*795d594fSAndroid Build Coastguard Worker config="${1##--machine-type=}" 185*795d594fSAndroid Build Coastguard Worker if ! contains_element "$config" "${ALL_CONFIGS[@]}"; then 186*795d594fSAndroid Build Coastguard Worker log_usage_error "Invalid --machine-type value '$config'" 187*795d594fSAndroid Build Coastguard Worker fi 188*795d594fSAndroid Build Coastguard Worker shift 189*795d594fSAndroid Build Coastguard Worker ;; 190*795d594fSAndroid Build Coastguard Worker --tarball) 191*795d594fSAndroid Build Coastguard Worker tarball="" # reuse the machine type name. 192*795d594fSAndroid Build Coastguard Worker make_tarball="make_tarball" 193*795d594fSAndroid Build Coastguard Worker shift 194*795d594fSAndroid Build Coastguard Worker ;; 195*795d594fSAndroid Build Coastguard Worker --tarball=*) 196*795d594fSAndroid Build Coastguard Worker tarball="${1##--tarball=}" 197*795d594fSAndroid Build Coastguard Worker make_tarball="make_tarball" 198*795d594fSAndroid Build Coastguard Worker shift 199*795d594fSAndroid Build Coastguard Worker ;; 200*795d594fSAndroid Build Coastguard Worker -j*) 201*795d594fSAndroid Build Coastguard Worker j_arg="$1" 202*795d594fSAndroid Build Coastguard Worker shift 203*795d594fSAndroid Build Coastguard Worker ;; 204*795d594fSAndroid Build Coastguard Worker --showcommands) 205*795d594fSAndroid Build Coastguard Worker showcommands="showcommands" 206*795d594fSAndroid Build Coastguard Worker shift 207*795d594fSAndroid Build Coastguard Worker ;; 208*795d594fSAndroid Build Coastguard Worker --simulate) 209*795d594fSAndroid Build Coastguard Worker simulate="simulate" 210*795d594fSAndroid Build Coastguard Worker shift 211*795d594fSAndroid Build Coastguard Worker ;; 212*795d594fSAndroid Build Coastguard Worker *) 213*795d594fSAndroid Build Coastguard Worker log_usage_error "Unknown options $1" 214*795d594fSAndroid Build Coastguard Worker ;; 215*795d594fSAndroid Build Coastguard Worker esac 216*795d594fSAndroid Build Coastguard Workerdone 217*795d594fSAndroid Build Coastguard Worker 218*795d594fSAndroid Build Coastguard Worker################################### 219*795d594fSAndroid Build Coastguard Worker################################### 220*795d594fSAndroid Build Coastguard Worker################################### 221*795d594fSAndroid Build Coastguard Worker 222*795d594fSAndroid Build Coastguard Workerif [[ -z $config ]]; then 223*795d594fSAndroid Build Coastguard Worker log_usage_error "--machine-type option is required." 224*795d594fSAndroid Build Coastguard Workerfi 225*795d594fSAndroid Build Coastguard Worker 226*795d594fSAndroid Build Coastguard Worker# --tarball defaults to the --machine-type value with .tar.gz. 227*795d594fSAndroid Build Coastguard Workertarball="${tarball:-$config.tar.gz}" 228*795d594fSAndroid Build Coastguard Worker 229*795d594fSAndroid Build Coastguard Workertarget_product="$TARGET_PRODUCT" 230*795d594fSAndroid Build Coastguard Workertarget_build_variant="$TARGET_BUILD_VARIANT" 231*795d594fSAndroid Build Coastguard Worker 232*795d594fSAndroid Build Coastguard Worker# If not using --golem, use whatever the user had lunch'd prior to this script. 233*795d594fSAndroid Build Coastguard Workerif [[ $mode == "golem" ]]; then 234*795d594fSAndroid Build Coastguard Worker # This section is intended solely to be executed by a golem build server. 235*795d594fSAndroid Build Coastguard Worker 236*795d594fSAndroid Build Coastguard Worker target_build_variant=eng 237*795d594fSAndroid Build Coastguard Worker case "$config" in 238*795d594fSAndroid Build Coastguard Worker *-armv7) 239*795d594fSAndroid Build Coastguard Worker target_product="arm_krait" 240*795d594fSAndroid Build Coastguard Worker ;; 241*795d594fSAndroid Build Coastguard Worker *-armv8) 242*795d594fSAndroid Build Coastguard Worker target_product="armv8" 243*795d594fSAndroid Build Coastguard Worker ;; 244*795d594fSAndroid Build Coastguard Worker *) 245*795d594fSAndroid Build Coastguard Worker target_product="sdk" 246*795d594fSAndroid Build Coastguard Worker ;; 247*795d594fSAndroid Build Coastguard Worker esac 248*795d594fSAndroid Build Coastguard Worker 249*795d594fSAndroid Build Coastguard Worker if [[ $target_product = arm* ]]; then 250*795d594fSAndroid Build Coastguard Worker # If using the regular manifest, e.g. 'master' 251*795d594fSAndroid Build Coastguard Worker # The lunch command for arm will assuredly fail because we don't have device/generic/art. 252*795d594fSAndroid Build Coastguard Worker # 253*795d594fSAndroid Build Coastguard Worker # Print a human-readable error message instead of trying to lunch and failing there. 254*795d594fSAndroid Build Coastguard Worker if ! [[ -d "$(gettop)/device/generic/art" ]]; then 255*795d594fSAndroid Build Coastguard Worker log_fatal "Missing device/generic/art directory. Perhaps try master-art repo manifest?\n" \ 256*795d594fSAndroid Build Coastguard Worker " Cannot build ARM targets (arm_krait, armv8) for Golem." >&2 257*795d594fSAndroid Build Coastguard Worker fi 258*795d594fSAndroid Build Coastguard Worker # We could try to keep on simulating but it seems brittle because we won't have the proper 259*795d594fSAndroid Build Coastguard Worker # build variables to output the right strings. 260*795d594fSAndroid Build Coastguard Worker fi 261*795d594fSAndroid Build Coastguard Worker 262*795d594fSAndroid Build Coastguard Worker # Get this particular target's environment variables (e.g. ART read barrier on/off). 263*795d594fSAndroid Build Coastguard Worker source "$(thisdir)"/env "$golem_target" || exit 1 264*795d594fSAndroid Build Coastguard Worker 265*795d594fSAndroid Build Coastguard Worker lunch_target="$target_product-$target_build_variant" 266*795d594fSAndroid Build Coastguard Worker 267*795d594fSAndroid Build Coastguard Worker execute 'source' build/envsetup.sh 268*795d594fSAndroid Build Coastguard Worker # Build generic targets (as opposed to something specific like aosp_angler-eng). 269*795d594fSAndroid Build Coastguard Worker execute lunch "$lunch_target" 270*795d594fSAndroid Build Coastguard Worker # Golem uses master-art repository which is missing a lot of other libraries. 271*795d594fSAndroid Build Coastguard Worker setenv SOONG_ALLOW_MISSING_DEPENDENCIES true 272*795d594fSAndroid Build Coastguard Worker # Let the build system know we're not aiming to do a full platform build. 273*795d594fSAndroid Build Coastguard Worker if [ ! -d frameworks/base ]; then 274*795d594fSAndroid Build Coastguard Worker setenv TARGET_BUILD_UNBUNDLED true 275*795d594fSAndroid Build Coastguard Worker fi 276*795d594fSAndroid Build Coastguard Worker # Skip the boot image profile, to make the compiled boot image more consistent. 277*795d594fSAndroid Build Coastguard Worker setenv WITH_DEX_PREOPT_GENERATE_PROFILE false 278*795d594fSAndroid Build Coastguard Worker # Golem may be missing tools such as javac from its path. 279*795d594fSAndroid Build Coastguard Worker setenv_escape PATH "/usr/lib/jvm/java-8-openjdk-amd64/bin/:$PATH" '/usr/lib/jvm/java-8-openjdk-amd64/bin/:$PATH' 280*795d594fSAndroid Build Coastguard Workerelse 281*795d594fSAndroid Build Coastguard Worker # Look up the default variables from the build system if they weren't set already. 282*795d594fSAndroid Build Coastguard Worker [[ -z $target_product ]] && target_product="$(get_build_var TARGET_PRODUCT)" 283*795d594fSAndroid Build Coastguard Worker [[ -z $target_build_variant ]] && target_build_variant="$(get_build_var TARGET_BUILD_VARIANT)" 284*795d594fSAndroid Build Coastguard Workerfi 285*795d594fSAndroid Build Coastguard Worker 286*795d594fSAndroid Build Coastguard Worker# Defaults for all machine types. 287*795d594fSAndroid Build Coastguard Workermake_target="build-art-target-golem" 288*795d594fSAndroid Build Coastguard Workerout_dir="out/x86_64" 289*795d594fSAndroid Build Coastguard Workerroot_dir_var="PRODUCT_OUT" 290*795d594fSAndroid Build Coastguard Workerstrip_symbols=false 291*795d594fSAndroid Build Coastguard Workerbit64_suffix="" 292*795d594fSAndroid Build Coastguard Workertar_directories=(system data/art-test) 293*795d594fSAndroid Build Coastguard Worker 294*795d594fSAndroid Build Coastguard Worker# Per-machine type overrides 295*795d594fSAndroid Build Coastguard Workerif [[ $config == linux-arm* ]]; then 296*795d594fSAndroid Build Coastguard Worker setenv ART_TARGET_LINUX true 297*795d594fSAndroid Build Coastguard Workerfi 298*795d594fSAndroid Build Coastguard Worker 299*795d594fSAndroid Build Coastguard Workercase "$config" in 300*795d594fSAndroid Build Coastguard Worker linux-ia32|linux-x64) 301*795d594fSAndroid Build Coastguard Worker root_dir_var="HOST_OUT" 302*795d594fSAndroid Build Coastguard Worker # Android strips target builds automatically, but not host builds. 303*795d594fSAndroid Build Coastguard Worker strip_symbols=true 304*795d594fSAndroid Build Coastguard Worker make_target="build-art-host-golem" 305*795d594fSAndroid Build Coastguard Worker 306*795d594fSAndroid Build Coastguard Worker if [[ $config == linux-ia32 ]]; then 307*795d594fSAndroid Build Coastguard Worker out_dir="out/x86" 308*795d594fSAndroid Build Coastguard Worker setenv HOST_PREFER_32_BIT true 309*795d594fSAndroid Build Coastguard Worker else 310*795d594fSAndroid Build Coastguard Worker bit64_suffix="64" 311*795d594fSAndroid Build Coastguard Worker fi 312*795d594fSAndroid Build Coastguard Worker 313*795d594fSAndroid Build Coastguard Worker tar_directories=(bin framework usr lib${bit64_suffix}) 314*795d594fSAndroid Build Coastguard Worker ;; 315*795d594fSAndroid Build Coastguard Worker *-armv8) 316*795d594fSAndroid Build Coastguard Worker bit64_suffix="64" 317*795d594fSAndroid Build Coastguard Worker ;; 318*795d594fSAndroid Build Coastguard Worker *-armv7) 319*795d594fSAndroid Build Coastguard Worker ;; 320*795d594fSAndroid Build Coastguard Worker *) 321*795d594fSAndroid Build Coastguard Worker log_fatal "Unsupported machine-type '$config'" 322*795d594fSAndroid Build Coastguard Workeresac 323*795d594fSAndroid Build Coastguard Worker 324*795d594fSAndroid Build Coastguard Worker# Golem benchmark run commands expect a certain $OUT_DIR to be set, 325*795d594fSAndroid Build Coastguard Worker# so specify it here. 326*795d594fSAndroid Build Coastguard Worker# 327*795d594fSAndroid Build Coastguard Worker# Note: It is questionable if we want to customize this since users 328*795d594fSAndroid Build Coastguard Worker# could alternatively probably use their own build directly (and forgo this script). 329*795d594fSAndroid Build Coastguard Workersetenv OUT_DIR "$out_dir" 330*795d594fSAndroid Build Coastguard Workerroot_dir="$(get_build_var "$root_dir_var")" 331*795d594fSAndroid Build Coastguard Worker 332*795d594fSAndroid Build Coastguard Workerif [[ $mode == "golem" ]]; then 333*795d594fSAndroid Build Coastguard Worker # For golem-style running only. 334*795d594fSAndroid Build Coastguard Worker # Sets the DT_INTERP to this path in every .so we can run the 335*795d594fSAndroid Build Coastguard Worker # non-system version of dalvikvm with our own copies of the dependencies (e.g. our own libc++). 336*795d594fSAndroid Build Coastguard Worker if [[ $config == android-* ]]; then 337*795d594fSAndroid Build Coastguard Worker # TODO: the linker can be relative to the binaries 338*795d594fSAndroid Build Coastguard Worker # (which is what we do for linux-armv8 and linux-armv7) 339*795d594fSAndroid Build Coastguard Worker golem_run_path="/data/local/tmp/runner/" 340*795d594fSAndroid Build Coastguard Worker else 341*795d594fSAndroid Build Coastguard Worker golem_run_path="" 342*795d594fSAndroid Build Coastguard Worker fi 343*795d594fSAndroid Build Coastguard Worker 344*795d594fSAndroid Build Coastguard Worker # Only do this for target builds. Host doesn't need this. 345*795d594fSAndroid Build Coastguard Worker if [[ $config == *-arm* ]]; then 346*795d594fSAndroid Build Coastguard Worker setenv CUSTOM_TARGET_LINKER "${golem_run_path}${root_dir}/system/bin/linker${bit64_suffix}" 347*795d594fSAndroid Build Coastguard Worker fi 348*795d594fSAndroid Build Coastguard Workerfi 349*795d594fSAndroid Build Coastguard Worker 350*795d594fSAndroid Build Coastguard Worker# 351*795d594fSAndroid Build Coastguard Worker# Main command execution below here. 352*795d594fSAndroid Build Coastguard Worker# (everything prior to this just sets up environment variables, 353*795d594fSAndroid Build Coastguard Worker# and maybe calls lunch). 354*795d594fSAndroid Build Coastguard Worker# 355*795d594fSAndroid Build Coastguard Worker 356*795d594fSAndroid Build Coastguard Workerexecute build/soong/soong_ui.bash --make-mode "${j_arg}" "${make_target}" 357*795d594fSAndroid Build Coastguard Worker 358*795d594fSAndroid Build Coastguard Workerif $strip_symbols; then 359*795d594fSAndroid Build Coastguard Worker # Further reduce size by stripping symbols. 360*795d594fSAndroid Build Coastguard Worker execute_noshow strip $root_dir/bin/* || true 361*795d594fSAndroid Build Coastguard Worker show_command strip $root_dir/bin/'*' '|| true' 362*795d594fSAndroid Build Coastguard Worker execute_noshow strip $root_dir/lib${bit64_suffix}/'*' 363*795d594fSAndroid Build Coastguard Worker show_command strip $root_dir/lib${bit64_suffix}/'*' 364*795d594fSAndroid Build Coastguard Workerfi 365*795d594fSAndroid Build Coastguard Worker 366*795d594fSAndroid Build Coastguard Workerif [[ "$make_tarball" == "make_tarball" ]]; then 367*795d594fSAndroid Build Coastguard Worker # Create a tarball which is required for the golem build resource. 368*795d594fSAndroid Build Coastguard Worker # (In particular, each golem benchmark's run commands depend on a list of resource files 369*795d594fSAndroid Build Coastguard Worker # in order to have all the files it needs to actually execute, 370*795d594fSAndroid Build Coastguard Worker # and this tarball would satisfy that particular target+machine-type's requirements). 371*795d594fSAndroid Build Coastguard Worker dirs_rooted=() 372*795d594fSAndroid Build Coastguard Worker for tar_dir in "${tar_directories[@]}"; do 373*795d594fSAndroid Build Coastguard Worker dirs_rooted+=("$root_dir/$tar_dir") 374*795d594fSAndroid Build Coastguard Worker done 375*795d594fSAndroid Build Coastguard Worker 376*795d594fSAndroid Build Coastguard Worker execute tar -czf "${tarball}" --exclude ".git" --exclude ".gitignore" "${dirs_rooted[@]}" 377*795d594fSAndroid Build Coastguard Worker tar_result=$? 378*795d594fSAndroid Build Coastguard Worker if [[ $tar_result -ne 0 ]]; then 379*795d594fSAndroid Build Coastguard Worker [[ -f $tarball ]] && rm $tarball 380*795d594fSAndroid Build Coastguard Worker fi 381*795d594fSAndroid Build Coastguard Worker 382*795d594fSAndroid Build Coastguard Worker show_command '[[ $? -ne 0 ]] && rm' "$tarball" 383*795d594fSAndroid Build Coastguard Workerfi 384*795d594fSAndroid Build Coastguard Worker 385