1 #!/bin/bash 2 # 3 # Copyright (C) 2017 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 # 18 # Calls javac with the -bootclasspath values passed in automatically. 19 # (This avoids having to manually set a boot class path). 20 # If $JAVAC is set, it will call that instead of 'javac'. 21 # 22 # 23 # Script-specific args: 24 # --mode=[host|target|jvm]: 25 # Select between host,target,jvm bootclasspath (default target). 26 # --core-only: Use only "core" bootclasspath (e.g. do not include framework). 27 # Ignored with --mode=jvm. 28 # --show-commands: Print the javac command being executed. 29 # --help: Print above list of args. 30 # 31 # All other args are forwarded to javac 32 # 33 34 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 35 TOP=$DIR/../.. 36 37 if [[ -z $JAVAC ]]; then 38 JAVAC=javac 39 fi 40 41 bootjars_args= 42 mode=target 43 showcommands=n 44 while true; do 45 case $1 in 46 --help) 47 echo "Usage: $0 [--mode=host|target|jvm] [--core-only] [--show-commands] <javac args>" 48 exit 0 49 ;; 50 --mode=host) 51 bootjars_args="$bootjars_args --host" 52 mode=host 53 ;; 54 --mode=target) 55 bootjars_args="$bootjars_args --target" 56 mode=target 57 ;; 58 --mode=jvm) 59 mode=jvm 60 ;; 61 --mode=*) 62 echo "Unsupported $0 usage with --mode=$1" >&2 63 exit 1 64 ;; 65 --core-only) 66 bootjars_args="$bootjars_args --core" 67 ;; 68 --show-commands) 69 showcommands=y 70 ;; 71 *) 72 break 73 ;; 74 esac 75 shift 76 done 77 78 if [[ $mode == jvm ]]; then 79 # For --mode=jvm: 80 # Do not prepend a -bootclasspath, which will use the default bootclasspath instead. 81 javac_args=() 82 else 83 # For --mode=host or --mode=target, look up the correct -bootclasspath for libcore. 84 javac_bootclasspath=() 85 boot_class_path_list=$($TOP/art/tools/bootjars.sh $bootjars_args --path) 86 87 for path in $boot_class_path_list; do 88 javac_bootclasspath+=("$path") 89 done 90 91 if [[ ${#javac_bootclasspath[@]} -eq 0 ]]; then 92 echo "FATAL: Missing bootjars.sh file path list" >&2 93 exit 1 94 fi 95 96 function join_by { local IFS="$1"; shift; echo "$*"; } 97 bcp_arg="$(join_by ":" "${javac_bootclasspath[@]}")" 98 javac_args=(-bootclasspath "$bcp_arg") 99 fi 100 101 if [[ $showcommands == y ]]; then 102 echo ${JAVAC} "${javac_args[@]}" "$@" 103 fi 104 105 ${JAVAC} "${javac_args[@]}" "$@" 106