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 Worker# 18*795d594fSAndroid Build Coastguard Worker# Export some environment variables used by ART's Android.mk/Android.bp 19*795d594fSAndroid Build Coastguard Worker# build systems to configure ART [to use a different implementation]. 20*795d594fSAndroid Build Coastguard Worker# 21*795d594fSAndroid Build Coastguard Worker# Currently only varies on ART_USE_READ_BARRIER for a concurrent/non-concurrent 22*795d594fSAndroid Build Coastguard Worker# flavor of the ART garbage collector. 23*795d594fSAndroid Build Coastguard Worker# 24*795d594fSAndroid Build Coastguard Worker# Only meant for golem use since when building ART directly, one can/should set 25*795d594fSAndroid Build Coastguard Worker# these environment flags themselves. 26*795d594fSAndroid Build Coastguard Worker# 27*795d594fSAndroid Build Coastguard Worker# These environment flags are not really meant here to be for "correctness", 28*795d594fSAndroid Build Coastguard Worker# but rather telling the ART C++ to use alternative algorithms. 29*795d594fSAndroid Build Coastguard Worker# In other words, the same exact binary build with a different "target" 30*795d594fSAndroid Build Coastguard Worker# should run in the same context (e.g. it does not change arch or the OS it's built for). 31*795d594fSAndroid Build Coastguard Worker# 32*795d594fSAndroid Build Coastguard Worker 33*795d594fSAndroid Build Coastguard Workersetenv() { 34*795d594fSAndroid Build Coastguard Worker local name="$1" 35*795d594fSAndroid Build Coastguard Worker local value="$2" 36*795d594fSAndroid Build Coastguard Worker 37*795d594fSAndroid Build Coastguard Worker export $name="$value" 38*795d594fSAndroid Build Coastguard Worker echo export $name="$value" 39*795d594fSAndroid Build Coastguard Worker} 40*795d594fSAndroid Build Coastguard Worker 41*795d594fSAndroid Build Coastguard Worker# Enforce specified target-name is one of these. 42*795d594fSAndroid Build Coastguard Worker# Perhaps we should be less strict? 43*795d594fSAndroid Build Coastguard WorkerALL_TARGETS=(art-interpreter art-opt art-jit art-jit-cc art-opt-cc art-opt-debuggable art-vdex) 44*795d594fSAndroid Build Coastguard Worker 45*795d594fSAndroid Build Coastguard Workerusage() { 46*795d594fSAndroid Build Coastguard Worker echo >&2 "Usage: $(basename $0) (--list-targets | <target-name>)" 47*795d594fSAndroid Build Coastguard Worker echo >&2 48*795d594fSAndroid Build Coastguard Worker echo >&2 "Exports the necessary ART environment variables" 49*795d594fSAndroid Build Coastguard Worker echo >&2 "to pass to the Golem build to correctly configure ART." 50*795d594fSAndroid Build Coastguard Worker echo >&2 "--------------------------------------------------------" 51*795d594fSAndroid Build Coastguard Worker echo >&2 "Required Arguments:" 52*795d594fSAndroid Build Coastguard Worker echo >&2 " <target-name> Specify the golem target to get environment variables for." 53*795d594fSAndroid Build Coastguard Worker echo >&2 54*795d594fSAndroid Build Coastguard Worker echo >&2 "Optional Flags": 55*795d594fSAndroid Build Coastguard Worker echo >&2 " --list-targets Display all the targets. Do not require the main target-name." 56*795d594fSAndroid Build Coastguard Worker echo >&2 " --help Print this help listing." 57*795d594fSAndroid Build Coastguard Worker echo >&2 58*795d594fSAndroid Build Coastguard Worker echo >&2 "Available Targets:" 59*795d594fSAndroid Build Coastguard Worker 60*795d594fSAndroid Build Coastguard Worker list_targets 2 " " 61*795d594fSAndroid Build Coastguard Worker} 62*795d594fSAndroid Build Coastguard Worker 63*795d594fSAndroid Build Coastguard Workerlist_targets() { 64*795d594fSAndroid Build Coastguard Worker local out_fd="${1:-1}" # defaults to 1 if no param was set 65*795d594fSAndroid Build Coastguard Worker local prefix="$2" 66*795d594fSAndroid Build Coastguard Worker 67*795d594fSAndroid Build Coastguard Worker for target in "${ALL_TARGETS[@]}"; do 68*795d594fSAndroid Build Coastguard Worker echo >&$out_fd "${prefix}${target}" 69*795d594fSAndroid Build Coastguard Worker done 70*795d594fSAndroid Build Coastguard Worker} 71*795d594fSAndroid Build Coastguard Worker 72*795d594fSAndroid Build Coastguard Worker 73*795d594fSAndroid Build Coastguard Worker# Check if $1 element is in array $2 74*795d594fSAndroid Build Coastguard Workercontains_element() { 75*795d594fSAndroid Build Coastguard Worker local e 76*795d594fSAndroid Build Coastguard Worker for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done 77*795d594fSAndroid Build Coastguard Worker return 1 78*795d594fSAndroid Build Coastguard Worker} 79*795d594fSAndroid Build Coastguard Worker 80*795d594fSAndroid Build Coastguard Workermain() { 81*795d594fSAndroid Build Coastguard Worker if [[ $# -lt 1 ]]; then 82*795d594fSAndroid Build Coastguard Worker usage 83*795d594fSAndroid Build Coastguard Worker exit 1 84*795d594fSAndroid Build Coastguard Worker fi 85*795d594fSAndroid Build Coastguard Worker 86*795d594fSAndroid Build Coastguard Worker if [[ "$1" == "--help" ]]; then 87*795d594fSAndroid Build Coastguard Worker usage 88*795d594fSAndroid Build Coastguard Worker exit 1 89*795d594fSAndroid Build Coastguard Worker fi 90*795d594fSAndroid Build Coastguard Worker 91*795d594fSAndroid Build Coastguard Worker if [[ "$1" == "--list-targets" ]]; then 92*795d594fSAndroid Build Coastguard Worker list_targets 93*795d594fSAndroid Build Coastguard Worker exit 0 94*795d594fSAndroid Build Coastguard Worker fi 95*795d594fSAndroid Build Coastguard Worker 96*795d594fSAndroid Build Coastguard Worker local selected_target="$1" 97*795d594fSAndroid Build Coastguard Worker if ! contains_element "$selected_target" "${ALL_TARGETS[@]}"; then 98*795d594fSAndroid Build Coastguard Worker echo "ERROR: Invalid target value '$selected_target'" >&2 99*795d594fSAndroid Build Coastguard Worker exit 1 100*795d594fSAndroid Build Coastguard Worker fi 101*795d594fSAndroid Build Coastguard Worker 102*795d594fSAndroid Build Coastguard Worker case "$selected_target" in 103*795d594fSAndroid Build Coastguard Worker *-cc) 104*795d594fSAndroid Build Coastguard Worker setenv ART_USE_READ_BARRIER true 105*795d594fSAndroid Build Coastguard Worker ;; 106*795d594fSAndroid Build Coastguard Worker *) 107*795d594fSAndroid Build Coastguard Worker setenv ART_USE_READ_BARRIER false 108*795d594fSAndroid Build Coastguard Worker ;; 109*795d594fSAndroid Build Coastguard Worker esac 110*795d594fSAndroid Build Coastguard Worker 111*795d594fSAndroid Build Coastguard Worker # Make smaller .tar.gz files by excluding debug targets. 112*795d594fSAndroid Build Coastguard Worker setenv ART_BUILD_TARGET_DEBUG false 113*795d594fSAndroid Build Coastguard Worker setenv ART_BUILD_HOST_DEBUG false 114*795d594fSAndroid Build Coastguard Worker setenv USE_DEX2OAT_DEBUG false 115*795d594fSAndroid Build Coastguard Worker} 116*795d594fSAndroid Build Coastguard Worker 117*795d594fSAndroid Build Coastguard Workermain "$@" 118