130 lines
3.7 KiB
Bash
Executable File
130 lines
3.7 KiB
Bash
Executable File
#!/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
|