Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 691503ea authored by Martin Stjernholm's avatar Martin Stjernholm
Browse files

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.

Test: build/soong/scripts/build-mainline-modules.sh
Change-Id: Id21ef80c2334462836e217032fc5bf63b7cd04e1
parent e051d0d3
Loading
Loading
Loading
Loading
+31 −9
Original line number Diff line number Diff line
#!/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 "$@"
+27 −24
Original line number Diff line number Diff line
#!/bin/bash -ex
#!/bin/bash -e

# Non exhaustive list of modules where we want prebuilts. More can be added as
# needed.
@@ -34,11 +34,16 @@ if [ ! -e "build/make/core/Makefile" ]; then
  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 $@ \
  echo_and_run build/soong/soong_ui.bash --make-mode $@ \
    TARGET_PRODUCT=${product} \
    ${MAINLINE_MODULES[@]}

@@ -47,18 +52,16 @@ for product in "${PRODUCTS[@]}"; do
  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}/
    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}