|  | #!/bin/bash -e | 
|  |  | 
|  | # Non exhaustive list of modules where we want prebuilts. More can be added as | 
|  | # needed. | 
|  | MAINLINE_MODULES=( | 
|  | com.android.art | 
|  | com.android.art.debug | 
|  | com.android.art.testing | 
|  | com.android.conscrypt | 
|  | com.android.i18n | 
|  | com.android.os.statsd | 
|  | com.android.runtime | 
|  | com.android.tzdata | 
|  | ) | 
|  |  | 
|  | # List of SDKs and module exports we know of. | 
|  | MODULES_SDK_AND_EXPORTS=( | 
|  | art-module-sdk | 
|  | art-module-test-exports | 
|  | conscrypt-module-host-exports | 
|  | conscrypt-module-sdk | 
|  | conscrypt-module-test-exports | 
|  | i18n-module-host-exports | 
|  | i18n-module-sdk | 
|  | i18n-module-test-exports | 
|  | platform-mainline-sdk | 
|  | platform-mainline-test-exports | 
|  | runtime-module-host-exports | 
|  | runtime-module-sdk | 
|  | statsd-module-sdk | 
|  | statsd-module-sdk-for-art | 
|  | tzdata-module-test-exports | 
|  | ) | 
|  |  | 
|  | # List of libraries installed on the platform that are needed for ART chroot | 
|  | # testing. | 
|  | PLATFORM_LIBRARIES=( | 
|  | heapprofd_client_api | 
|  | libartpalette-system | 
|  | liblog | 
|  | ) | 
|  |  | 
|  | # We want to create apex modules for all supported architectures. | 
|  | PRODUCTS=( | 
|  | aosp_arm | 
|  | aosp_arm64 | 
|  | aosp_x86 | 
|  | aosp_x86_64 | 
|  | ) | 
|  |  | 
|  | if [ ! -e "build/make/core/Makefile" ]; then | 
|  | echo "$0 must be run from the top of the tree" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | echo_and_run() { | 
|  | echo "$*" | 
|  | "$@" | 
|  | } | 
|  |  | 
|  | lib_dir() { | 
|  | case $1 in | 
|  | (aosp_arm|aosp_x86) echo "lib";; | 
|  | (aosp_arm64|aosp_x86_64) echo "lib64";; | 
|  | esac | 
|  | } | 
|  |  | 
|  | # Make sure this build builds from source, regardless of the default. | 
|  | export SOONG_CONFIG_art_module_source_build=true | 
|  |  | 
|  | # This script does not intend to handle compressed APEX | 
|  | export OVERRIDE_PRODUCT_COMPRESSED_APEX=false | 
|  |  | 
|  | OUT_DIR=$(source build/envsetup.sh > /dev/null; TARGET_PRODUCT= get_build_var OUT_DIR) | 
|  | DIST_DIR=$(source build/envsetup.sh > /dev/null; TARGET_PRODUCT= get_build_var DIST_DIR) | 
|  |  | 
|  | for product in "${PRODUCTS[@]}"; do | 
|  | echo_and_run build/soong/soong_ui.bash --make-mode $@ \ | 
|  | TARGET_PRODUCT=${product} \ | 
|  | ${MAINLINE_MODULES[@]} \ | 
|  | ${PLATFORM_LIBRARIES[@]} | 
|  |  | 
|  | PRODUCT_OUT=$(source build/envsetup.sh > /dev/null; TARGET_PRODUCT=${product} get_build_var PRODUCT_OUT) | 
|  | TARGET_ARCH=$(source build/envsetup.sh > /dev/null; TARGET_PRODUCT=${product} get_build_var TARGET_ARCH) | 
|  | rm -rf ${DIST_DIR}/${TARGET_ARCH}/ | 
|  | mkdir -p ${DIST_DIR}/${TARGET_ARCH}/ | 
|  | for module in "${MAINLINE_MODULES[@]}"; do | 
|  | echo_and_run cp ${PWD}/${PRODUCT_OUT}/system/apex/${module}.apex ${DIST_DIR}/${TARGET_ARCH}/ | 
|  | done | 
|  | for library in "${PLATFORM_LIBRARIES[@]}"; do | 
|  | libdir=$(lib_dir $product) | 
|  | echo_and_run cp ${PWD}/${PRODUCT_OUT}/system/${libdir}/${library}.so ${DIST_DIR}/${TARGET_ARCH}/ | 
|  | done | 
|  | done | 
|  |  | 
|  | # 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 | 
|  |  | 
|  | # Create multi-archs 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 | 
|  | echo_and_run build/soong/scripts/build-aml-prebuilts.sh \ | 
|  | TARGET_PRODUCT=mainline_sdk ${MODULES_SDK_AND_EXPORTS[@]} | 
|  |  | 
|  | rm -rf ${DIST_DIR}/mainline-sdks | 
|  | echo_and_run cp -R ${OUT_DIR}/soong/mainline-sdks ${DIST_DIR} |