xref: /aosp_15_r20/art/tools/golem/env (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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