Reduce the number of Soong invocations, and various other minor script fixes.

-  We can pass all targets at once to build-aml-prebuilts.sh.
-  Less noise from build-mainline-modules.sh.
-  Default to the same out directory in both build scripts.
-  Addressed post-submit comments on https://r.android.com/1170907.
-  Various minor cleanups.

// Added for rvc-dev. Used this bug as it is the bug that needs all the build changes.
Bug: 155164730

Test: build/soong/scripts/build-mainline-modules.sh
Merged-In: Id21ef80c2334462836e217032fc5bf63b7cd04e1
Change-Id: Id21ef80c2334462836e217032fc5bf63b7cd04e1
(cherry picked from commit 691503ea0b)
This commit is contained in:
Martin Stjernholm 2020-05-06 22:03:26 +01:00 committed by Paul Duffin
parent 168ea3d4e1
commit f39ef8aa10
2 changed files with 58 additions and 33 deletions

View file

@ -1,5 +1,15 @@
#!/bin/bash -e
# This is a wrapper around "m" that builds the given modules in multi-arch mode
# for all architectures supported by Mainline modules. The make (kati) stage is
# skipped, so the build targets in the arguments can only be Soong modules or
# intermediate output files - make targets and normal installed paths are not
# supported.
#
# This script is typically used with "sdk" or "module_export" modules, which
# Soong will install in $OUT_DIR/soong/mainline-sdks (cf
# PathForMainlineSdksInstall in android/paths.go).
export OUT_DIR=${OUT_DIR:-out}
if [ -e ${OUT_DIR}/soong/.soong.in_make ]; then
@ -8,11 +18,16 @@ if [ -e ${OUT_DIR}/soong/.soong.in_make ]; then
# expected to be supplied by the .mk files, and that might cause errors in
# "m --skip-make" below. We therefore default to a different out dir
# location in that case.
AML_OUT_DIR=out-aml
AML_OUT_DIR=out/aml
echo "Avoiding in-make OUT_DIR '${OUT_DIR}' - building in '${AML_OUT_DIR}' instead"
OUT_DIR=${AML_OUT_DIR}
fi
if [ ! -e "build/envsetup.sh" ]; then
echo "$0 must be run from the top of the tree"
exit 1
fi
source build/envsetup.sh
my_get_build_var() {
@ -22,13 +37,13 @@ my_get_build_var() {
OUT_DIR=${OUT_DIR}/get_build_var get_build_var "$@"
}
PLATFORM_SDK_VERSION=$(my_get_build_var PLATFORM_SDK_VERSION)
PLATFORM_VERSION=$(my_get_build_var PLATFORM_VERSION)
PLATFORM_VERSION_ALL_CODENAMES=$(my_get_build_var PLATFORM_VERSION_ALL_CODENAMES)
readonly PLATFORM_SDK_VERSION="$(my_get_build_var PLATFORM_SDK_VERSION)"
readonly PLATFORM_VERSION="$(my_get_build_var PLATFORM_VERSION)"
PLATFORM_VERSION_ALL_CODENAMES="$(my_get_build_var PLATFORM_VERSION_ALL_CODENAMES)"
# PLATFORM_VERSION_ALL_CODENAMES is a comma separated list like O,P. We need to
# turn this into ["O","P"].
PLATFORM_VERSION_ALL_CODENAMES=${PLATFORM_VERSION_ALL_CODENAMES/,/'","'}
PLATFORM_VERSION_ALL_CODENAMES="${PLATFORM_VERSION_ALL_CODENAMES/,/'","'}"
PLATFORM_VERSION_ALL_CODENAMES="[\"${PLATFORM_VERSION_ALL_CODENAMES}\"]"
# Logic from build/make/core/goma.mk
@ -46,11 +61,16 @@ else
USE_GOMA=false
fi
SOONG_OUT=${OUT_DIR}/soong
readonly SOONG_OUT=${OUT_DIR}/soong
mkdir -p ${SOONG_OUT}
SOONG_VARS=${SOONG_OUT}/soong.variables
readonly SOONG_VARS=${SOONG_OUT}/soong.variables
# We enable bionic linux builds as ART also needs prebuilts for it.
# Aml_abis: true
# - This flag configures Soong to compile for all architectures required for
# Mainline modules.
# CrossHost: linux_bionic
# CrossHostArch: x86_64
# - Enable Bionic on host as ART needs prebuilts for it.
cat > ${SOONG_VARS}.new << EOF
{
"Platform_sdk_version": ${PLATFORM_SDK_VERSION},
@ -79,4 +99,6 @@ fi
# 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.
FORCE_BUILD_LLVM_COMPONENTS=true m --skip-make "$@"
export FORCE_BUILD_LLVM_COMPONENTS=true
m --skip-make "$@"

View file

@ -1,4 +1,4 @@
#!/bin/bash -ex
#!/bin/bash -e
# Non exhaustive list of modules where we want prebuilts. More can be added as
# needed.
@ -22,42 +22,45 @@ MODULES_SDK_AND_EXPORTS=(
# We want to create apex modules for all supported architectures.
PRODUCTS=(
aosp_arm
aosp_arm64
aosp_x86
aosp_x86_64
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
echo "$0 must be run from the top of the tree"
exit 1
fi
echo_and_run() {
echo "$*"
"$@"
}
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
build/soong/soong_ui.bash --make-mode $@ \
TARGET_PRODUCT=${product} \
${MAINLINE_MODULES[@]}
echo_and_run build/soong/soong_ui.bash --make-mode $@ \
TARGET_PRODUCT=${product} \
${MAINLINE_MODULES[@]}
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
cp ${PWD}/${PRODUCT_OUT}/system/apex/${module}.apex ${DIST_DIR}/${TARGET_ARCH}/
done
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
done
# Create multi-archs SDKs in a different out directory. The multi-arch script
# uses soong directly and therefore needs its own directory that doesn't clash
# with make.
export OUT_DIR=${OUT_DIR}/aml/
for sdk in "${MODULES_SDK_AND_EXPORTS[@]}"; do
build/soong/scripts/build-aml-prebuilts.sh ${sdk}
done
# 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 ${MODULES_SDK_AND_EXPORTS[@]}
rm -rf ${DIST_DIR}/mainline-sdks
cp -R ${OUT_DIR}/soong/mainline-sdks ${DIST_DIR}
echo_and_run cp -R ${OUT_DIR}/soong/mainline-sdks ${DIST_DIR}