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

Commit 81b90d98 authored by Martin Stjernholm's avatar Martin Stjernholm Committed by Gerrit Code Review
Browse files

Merge "Remove use of fake soong.variables."

parents 5831f70d 040e0443
Loading
Loading
Loading
Loading
+29 −109
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 similar to "m" but builds in --soong-only mode, and handles
# special cases to make that mode work. All arguments are passed on to
# build/soong/soong_ui.bash.
#
# 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).
# --soong-only bypasses the kati step and hence the make logic that e.g. doesn't
# handle more than two device architectures. It is particularly intended for use
# with TARGET_PRODUCT=mainline_sdk to build 'sdk' and 'module_export' Soong
# modules in TARGET_ARCH_SUITE=mainline_sdk mode so that they get all four
# device architectures (artifacts get installed in $OUT_DIR/soong/mainline-sdks
# - cf PathForMainlineSdksInstall in android/paths.go).
#
# TODO(b/174315599): Replace this script completely with a 'soong_ui.bash
# --soong-only' invocation. For now it is still necessary to set up
# build_number.txt.

if [ ! -e build/soong/soong_ui.bash ]; then
  echo "$0 must be run from the top of the tree"
  exit 1
fi

export OUT_DIR=${OUT_DIR:-out}

@@ -23,109 +33,19 @@ if [ -e ${OUT_DIR}/soong/.soong.kati_enabled ]; then
  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() {
  # get_build_var will run Soong in normal in-make mode where it creates
  # .soong.kati_enabled. That would clobber our real out directory, so we need
  # to run it in a different one.
  OUT_DIR=${OUT_DIR}/get_build_var get_build_var "$@"
}
mkdir -p ${OUT_DIR}/soong

readonly SOONG_OUT=${OUT_DIR}/soong
mkdir -p ${SOONG_OUT}
# The --dumpvars-mode invocation will run Soong in normal make mode where it
# creates .soong.kati_enabled. That would clobber our real out directory, so we
# need to use a different OUT_DIR.
vars="$(OUT_DIR=${OUT_DIR}/dumpvars_mode build/soong/soong_ui.bash \
        --dumpvars-mode --vars=BUILD_NUMBER)"
# 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

# Some Soong build rules may require this, and the failure mode if it's missing
# is confusing (b/172548608).
readonly BUILD_NUMBER="$(my_get_build_var BUILD_NUMBER)"
echo -n ${BUILD_NUMBER} > ${SOONG_OUT}/build_number.txt

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}\"]"

# Get the list of missing <uses-library> modules and convert it to a JSON array
# (quote module names, add comma separator and wrap in brackets).
MISSING_USES_LIBRARIES="$(my_get_build_var INTERNAL_PLATFORM_MISSING_USES_LIBRARIES)"
MISSING_USES_LIBRARIES="[$(echo $MISSING_USES_LIBRARIES | sed -e 's/\([^ ]\+\)/\"\1\"/g' -e 's/[ ]\+/, /g')]"

# Logic from build/make/core/goma.mk
if [ "${USE_GOMA}" = true ]; then
  if [ -n "${GOMA_DIR}" ]; then
    goma_dir="${GOMA_DIR}"
  else
    goma_dir="${HOME}/goma"
  fi
  GOMA_CC="${goma_dir}/gomacc"
  export CC_WRAPPER="${CC_WRAPPER}${CC_WRAPPER:+ }${GOMA_CC}"
  export CXX_WRAPPER="${CXX_WRAPPER}${CXX_WRAPPER:+ }${GOMA_CC}"
  export JAVAC_WRAPPER="${JAVAC_WRAPPER}${JAVAC_WRAPPER:+ }${GOMA_CC}"
else
  USE_GOMA=false
fi

readonly SOONG_VARS=${SOONG_OUT}/soong.variables

# 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.
# VendorVars.art_mdoule.source_build
#   -  TODO(b/172480615): Change default to false when platform uses ART Module
#      prebuilts by default.
cat > ${SOONG_VARS}.new << EOF
{
    "BuildNumberFile": "build_number.txt",

    "Platform_version_name": "${PLATFORM_VERSION}",
    "Platform_sdk_version": ${PLATFORM_SDK_VERSION},
    "Platform_sdk_codename": "${PLATFORM_VERSION}",
    "Platform_version_active_codenames": ${PLATFORM_VERSION_ALL_CODENAMES},

    "DeviceName": "generic_arm64",
    "HostArch": "x86_64",
    "HostSecondaryArch": "x86",
    "CrossHost": "linux_bionic",
    "CrossHostArch": "x86_64",
    "Aml_abis": true,

    "Allow_missing_dependencies": ${SOONG_ALLOW_MISSING_DEPENDENCIES:-false},
    "Unbundled_build": ${TARGET_BUILD_UNBUNDLED:-false},
    "UseGoma": ${USE_GOMA},

    "VendorVars": {
        "art_module": {
            "source_build": "${ENABLE_ART_SOURCE_BUILD:-true}"
        }
    },

    "MissingUsesLibraries": ${MISSING_USES_LIBRARIES}
}
EOF

if [ -f ${SOONG_VARS} ] && cmp -s ${SOONG_VARS} ${SOONG_VARS}.new; then
  # Don't touch soong.variables if we don't have to, to avoid Soong rebuilding
  # the ninja file when it isn't necessary.
  rm ${SOONG_VARS}.new
else
  mv ${SOONG_VARS}.new ${SOONG_VARS}
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.
export FORCE_BUILD_LLVM_COMPONENTS=true
echo -n ${BUILD_NUMBER} > ${OUT_DIR}/soong/build_number.txt

m --skip-make "$@"
build/soong/soong_ui.bash --make-mode --soong-only "$@"
+7 −1
Original line number Diff line number Diff line
@@ -93,11 +93,17 @@ for product in "${PRODUCTS[@]}"; do
  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 ${MODULES_SDK_AND_EXPORTS[@]}
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}