You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.2 KiB
118 lines
3.2 KiB
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2017 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
#
|
|
# Export some environment variables used by ART's Android.mk/Android.bp
|
|
# build systems to configure ART [to use a different implementation].
|
|
#
|
|
# Currently only varies on ART_USE_READ_BARRIER for a concurrent/non-concurrent
|
|
# flavor of the ART garbage collector.
|
|
#
|
|
# Only meant for golem use since when building ART directly, one can/should set
|
|
# these environment flags themselves.
|
|
#
|
|
# These environment flags are not really meant here to be for "correctness",
|
|
# but rather telling the ART C++ to use alternative algorithms.
|
|
# In other words, the same exact binary build with a different "target"
|
|
# should run in the same context (e.g. it does not change arch or the OS it's built for).
|
|
#
|
|
|
|
setenv() {
|
|
local name="$1"
|
|
local value="$2"
|
|
|
|
export $name="$value"
|
|
echo export $name="$value"
|
|
}
|
|
|
|
# Enforce specified target-name is one of these.
|
|
# Perhaps we should be less strict?
|
|
ALL_TARGETS=(art-interpreter art-opt art-jit art-jit-cc art-opt-cc art-opt-debuggable art-vdex)
|
|
|
|
usage() {
|
|
echo >&2 "Usage: $(basename $0) (--list-targets | <target-name>)"
|
|
echo >&2
|
|
echo >&2 "Exports the necessary ART environment variables"
|
|
echo >&2 "to pass to the Golem build to correctly configure ART."
|
|
echo >&2 "--------------------------------------------------------"
|
|
echo >&2 "Required Arguments:"
|
|
echo >&2 " <target-name> Specify the golem target to get environment variables for."
|
|
echo >&2
|
|
echo >&2 "Optional Flags":
|
|
echo >&2 " --list-targets Display all the targets. Do not require the main target-name."
|
|
echo >&2 " --help Print this help listing."
|
|
echo >&2
|
|
echo >&2 "Available Targets:"
|
|
|
|
list_targets 2 " "
|
|
}
|
|
|
|
list_targets() {
|
|
local out_fd="${1:-1}" # defaults to 1 if no param was set
|
|
local prefix="$2"
|
|
|
|
for target in "${ALL_TARGETS[@]}"; do
|
|
echo >&$out_fd "${prefix}${target}"
|
|
done
|
|
}
|
|
|
|
|
|
# Check if $1 element is in array $2
|
|
contains_element() {
|
|
local e
|
|
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
|
|
return 1
|
|
}
|
|
|
|
main() {
|
|
if [[ $# -lt 1 ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$1" == "--help" ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$1" == "--list-targets" ]]; then
|
|
list_targets
|
|
exit 0
|
|
fi
|
|
|
|
local selected_target="$1"
|
|
if ! contains_element "$selected_target" "${ALL_TARGETS[@]}"; then
|
|
echo "ERROR: Invalid target value '$selected_target'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
case "$selected_target" in
|
|
*-cc)
|
|
setenv ART_USE_READ_BARRIER true
|
|
;;
|
|
*)
|
|
setenv ART_USE_READ_BARRIER false
|
|
;;
|
|
esac
|
|
|
|
# Make smaller .tar.gz files by excluding debug targets.
|
|
setenv ART_BUILD_TARGET_DEBUG false
|
|
setenv ART_BUILD_HOST_DEBUG false
|
|
setenv USE_DEX2OAT_DEBUG false
|
|
}
|
|
|
|
main "$@"
|