#!/bin/bash -e

# This script builds the APEX modules, SDKs and module exports that the ART
# Module provides.

if [ ! -e build/make/core/Makefile ]; then
  echo "$0 must be run from the top of the tree"
  exit 1
fi

skip_apex=
skip_module_sdk=
build_args=()
for arg; do
  case "$arg" in
    --skip-apex) skip_apex=true ;;
    --skip-module-sdk) skip_module_sdk=true ;;
    *) build_args+=("$arg") ;;
  esac
  shift
done

MAINLINE_MODULES=()
if [ -z "$skip_apex" ]; then
  # Take the list of modules from MAINLINE_MODULES.
  if [ -n "${MAINLINE_MODULES}" ]; then
    read -r -a MAINLINE_MODULES <<< "${MAINLINE_MODULES}"
  else
    MAINLINE_MODULES=(
      com.android.art
      com.android.art.debug
    )
  fi
fi

# Take the list of products to build the modules for from
# MAINLINE_MODULE_PRODUCTS.
if [ -n "${MAINLINE_MODULE_PRODUCTS}" ]; then
  read -r -a MAINLINE_MODULE_PRODUCTS <<< "${MAINLINE_MODULE_PRODUCTS}"
else
  # The default products are the same as in
  # build/soong/scripts/build-mainline-modules.sh.
  MAINLINE_MODULE_PRODUCTS=(
    art_module_arm
    art_module_arm64
    art_module_x86
    art_module_x86_64
  )
fi

MODULE_SDKS_AND_EXPORTS=()
if [ -z "$skip_module_sdk" ]; then
  MODULE_SDKS_AND_EXPORTS=(
    art-module-sdk
    art-module-host-exports
    art-module-test-exports
  )
fi

echo_and_run() {
  echo "$*"
  "$@"
}

export OUT_DIR=${OUT_DIR:-out}
export DIST_DIR=${DIST_DIR:-${OUT_DIR}/dist}

# Use same build settings as build_unbundled_mainline_module.sh, for build
# consistency.
# TODO(mast): Call out to a common script for building APEXes.
export UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true
export TARGET_BUILD_VARIANT=${TARGET_BUILD_VARIANT:-"user"}
export TARGET_BUILD_DENSITY=alldpi
export TARGET_BUILD_TYPE=release

if [ ! -d frameworks/base ]; then
  # Configure the build system for the reduced manifest branch.
  export SOONG_ALLOW_MISSING_DEPENDENCIES=true
fi

if [ ${#MAINLINE_MODULES[*]} -gt 0 ]; then
  (
    export TARGET_BUILD_APPS="${MAINLINE_MODULES[*]}"

    # We require .apex files here, so ensure we get them regardless of product
    # settings.
    export OVERRIDE_TARGET_FLATTEN_APEX=false

    for product in ${MAINLINE_MODULE_PRODUCTS[*]}; do
      echo_and_run build/soong/soong_ui.bash --make-mode \
        TARGET_PRODUCT=${product} "${build_args[@]}" ${MAINLINE_MODULES[*]}

      vars="$(TARGET_PRODUCT=${product} build/soong/soong_ui.bash \
              --dumpvars-mode --vars="PRODUCT_OUT TARGET_ARCH")"
      # Assign to a variable and eval that, since bash ignores any error status
      # from the command substitution if it's directly on the eval line.
      eval $vars

      mkdir -p ${DIST_DIR}/${TARGET_ARCH}
      for module in ${MAINLINE_MODULES[*]}; do
        echo_and_run cp ${PRODUCT_OUT}/system/apex/${module}.apex \
          ${DIST_DIR}/${TARGET_ARCH}/
      done
    done
  )
fi

if [ ${#MODULE_SDKS_AND_EXPORTS[*]} -gt 0 ]; then
  # Create multi-arch SDKs in a different out directory. The multi-arch script
  # uses Soong in --skip-make mode which cannot use the same directory as normal
  # mode with make.
  export OUT_DIR=${OUT_DIR}/aml

  # Put the build system in apps building mode so we don't trip on platform
  # dependencies, but there are no actual apps to build here.
  export TARGET_BUILD_APPS=none

  # We use force building LLVM components flag (even though we actually don't
  # compile them) because we don't have bionic host prebuilts
  # for them.
  export FORCE_BUILD_LLVM_COMPONENTS=true

  echo_and_run build/soong/scripts/build-aml-prebuilts.sh \
    TARGET_PRODUCT=mainline_sdk "${build_args[@]}" ${MODULE_SDKS_AND_EXPORTS[*]}

  rm -rf ${DIST_DIR}/mainline-sdks
  mkdir -p ${DIST_DIR}
  echo_and_run cp -r ${OUT_DIR}/soong/mainline-sdks ${DIST_DIR}/
fi
