| #!/bin/bash |
| |
| # TODO: Refactor build/make/envsetup.sh to make gettop() available elsewhere |
| function gettop |
| { |
| local TOPFILE=build/bazel/bazel.sh |
| if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then |
| # The following circumlocution ensures we remove symlinks from TOP. |
| (cd "$TOP"; PWD= /bin/pwd) |
| else |
| if [ -f $TOPFILE ] ; then |
| # The following circumlocution (repeated below as well) ensures |
| # that we record the true directory name and not one that is |
| # faked up with symlink names. |
| PWD= /bin/pwd |
| else |
| local HERE=$PWD |
| local T= |
| while [ \( ! \( -f $TOPFILE \) \) -a \( "$PWD" != "/" \) ]; do |
| \cd .. |
| T=`PWD= /bin/pwd -P` |
| done |
| \cd "$HERE" |
| if [ -f "$T/$TOPFILE" ]; then |
| echo "$T" |
| fi |
| fi |
| fi |
| } |
| |
| # TODO: Refactor build/soong/scripts/microfactory.bash to make getoutdir() available elsewhere |
| function getoutdir |
| { |
| local out_dir="${OUT_DIR-}" |
| if [ -z "${out_dir}" ]; then |
| if [ "${OUT_DIR_COMMON_BASE-}" ]; then |
| out_dir="${OUT_DIR_COMMON_BASE}/$(basename ${TOP})" |
| else |
| out_dir="out" |
| fi |
| fi |
| if [[ "${out_dir}" != /* ]]; then |
| out_dir="${TOP}/${out_dir}" |
| fi |
| echo "${out_dir}" |
| } |
| |
| TOP="$(gettop)" |
| if [ ! "$TOP" ]; then |
| >&2 echo "Couldn't locate the top of the tree. Try setting TOP." |
| exit 1 |
| fi |
| |
| case $(uname -s) in |
| Darwin) |
| ANDROID_BAZEL_PATH="${TOP}/prebuilts/bazel/darwin-x86_64/bazel" |
| ANDROID_BAZELRC_NAME="darwin.bazelrc" |
| ANDROID_BAZEL_JDK_PATH="${TOP}/prebuilts/jdk/jdk11/darwin-x86" |
| ;; |
| Linux) |
| ANDROID_BAZEL_PATH="${TOP}/prebuilts/bazel/linux-x86_64/bazel" |
| ANDROID_BAZELRC_NAME="linux.bazelrc" |
| ANDROID_BAZEL_JDK_PATH="${TOP}/prebuilts/jdk/jdk11/linux-x86" |
| ;; |
| *) |
| ANDROID_BAZEL_PATH= |
| ANDROID_BAZELRC_NAME= |
| ANDROID_BAZEL_JDK_PATH= |
| ;; |
| esac |
| |
| case "x${ANDROID_BAZELRC_PATH}" in |
| x) |
| # Path not provided, use default. |
| ANDROID_BAZELRC_PATH="${TOP}/build/bazel" |
| ;; |
| x/*) |
| # Absolute path, take it as-is. |
| ANDROID_BAZELRC_PATH="${ANDROID_BAZELRC_PATH}" |
| ;; |
| x*) |
| # Relative path, consider it relative to TOP. |
| ANDROID_BAZELRC_PATH="${TOP}/${ANDROID_BAZELRC_PATH}" |
| ;; |
| esac |
| |
| if [ -d "${ANDROID_BAZELRC_PATH}" ]; then |
| # If we're given a directory, find the correct bazelrc file there. |
| ANDROID_BAZELRC_PATH="${ANDROID_BAZELRC_PATH}/${ANDROID_BAZELRC_NAME}" |
| fi |
| |
| |
| if [ -n "$ANDROID_BAZEL_PATH" -a -f "$ANDROID_BAZEL_PATH" ]; then |
| export ANDROID_BAZEL_PATH |
| else |
| >&2 echo "Couldn't locate Bazel binary" |
| exit 1 |
| fi |
| |
| if [ -n "$ANDROID_BAZELRC_PATH" -a -f "$ANDROID_BAZELRC_PATH" ]; then |
| export ANDROID_BAZELRC_PATH |
| else |
| >&2 echo "Couldn't locate bazelrc file for Bazel" |
| exit 1 |
| fi |
| |
| if [ -n "$ANDROID_BAZEL_JDK_PATH" -a -d "$ANDROID_BAZEL_JDK_PATH" ]; then |
| export ANDROID_BAZEL_JDK_PATH |
| else |
| >&2 echo "Couldn't locate JDK to use for Bazel" |
| exit 1 |
| fi |
| |
| >&2 echo "WARNING: Bazel support for the Android Platform is experimental and is undergoing development." |
| >&2 echo "WARNING: Currently, build stability is not guaranteed. Thank you." |
| >&2 echo |
| |
| ABSOLUTE_OUT_DIR="$(getoutdir)" \ |
| "${ANDROID_BAZEL_PATH}" \ |
| --server_javabase="${ANDROID_BAZEL_JDK_PATH}" \ |
| --output_user_root="$(getoutdir)/bazel/output_user_root" \ |
| --bazelrc="${ANDROID_BAZELRC_PATH}" \ |
| "$@" |