118 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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 "$@"
 |