From 37abbfca2a83cd4fa050f4aeeab092f9f08222f2 Mon Sep 17 00:00:00 2001 From: satayev Date: Fri, 9 Jul 2021 16:16:44 +0100 Subject: [PATCH] Introduce build script for mainline modules. The build_unbundled_mainline_module.sh builds for a given product a list of mainline modules. In AOSP it defaults to building all AOSP modules. Individual mainline_modules_.sh scripts are meant to build per product targets for individual invocation on build servers. For example, on AOSP presubmit we would want to build mainline_modules_x86_64. The build script is meant to be re-used from internal version of the scripts that would pass com.google variant of the modules. Note that the script excludes bundles and stubs, since those are not need to be built in AOSP. There will be a separate script internally for those. Bug: 191965323 Test: call the scripts, inspect out/dist/ directory. Change-Id: I13dc723dd26fd8a2a43f46c3186513bcf5519fb5 --- build/build_unbundled_mainline_module.sh | 147 +++++++++++++++++++++++ build/mainline_modules_arm.sh | 26 ++++ build/mainline_modules_arm64.sh | 26 ++++ build/mainline_modules_x86.sh | 26 ++++ build/mainline_modules_x86_64.sh | 26 ++++ 5 files changed, 251 insertions(+) create mode 100755 build/build_unbundled_mainline_module.sh create mode 100644 build/mainline_modules_arm.sh create mode 100644 build/mainline_modules_arm64.sh create mode 100755 build/mainline_modules_x86.sh create mode 100755 build/mainline_modules_x86_64.sh diff --git a/build/build_unbundled_mainline_module.sh b/build/build_unbundled_mainline_module.sh new file mode 100755 index 0000000..3c7d78b --- /dev/null +++ b/build/build_unbundled_mainline_module.sh @@ -0,0 +1,147 @@ +#!/bin/bash -ex +# +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +function usage() { + cat < a dist directory to store the outputs in. + --product a target product to use when building. + \$@ all other arguments are passed through to soong_ui.bash verbatim. +END_OF_USAGE +} + +# List of AOSP modules to build if TARGET_BUILD_APPS is not set. +readonly -a DEFAULT_MODULES=( + com.android.adbd + com.android.art + com.android.art.debug + com.android.art.testing + com.android.cellbroadcast + com.android.conscrypt + com.android.extservices + com.android.i18n + com.android.ipsec + com.android.media + com.android.mediaprovider + com.android.media.swcodec + com.android.neuralnetworks + # com.android.os.statsd + com.android.permission + com.android.resolv + com.android.runtime + com.android.sdkext + com.android.telephony + com.android.tethering + com.android.tzdata + com.android.wifi + test1_com.android.tzdata + test_com.android.conscrypt + test_com.android.media + test_com.android.media.swcodec + CaptivePortalLogin + DocumentsUI + ExtServices + NetworkPermissionConfig + NetworkStack + NetworkStackNext + PermissionController +) + +# Initializes and parses the command line arguments and environment variables. +# +# Do not rely on environment global variables for DIST_DIT and PRODUCT, since +# the script expects specific values for those, instead of anything that could +# have been lunch'ed in the terminal. +function init() { + declare -ga ARGV + while (($# > 0)); do + case $1 in + --dist_dir) + local -r dist_dir="$2" + shift 2 + ;; + --product) + local -r product="$2" + shift 2 + ;; + --help) + usage + exit + ;; + *) + ARGV+=("$1") + shift 1 + ;; + esac + done + readonly ARGV + + if [ -z "${dist_dir}" ]; then + echo "Expected --dist_dir arg is not provided." + exit 1 + fi + if [ -z "${product}" ]; then + echo "Expected --product arg is not provided." + exit 1 + fi + + declare -grx DIST_DIR="${dist_dir}" + declare -grx TARGET_BUILD_APPS="${TARGET_BUILD_APPS:-${DEFAULT_MODULES[*]}}" + declare -grx TARGET_BUILD_DENSITY="${TARGET_BUILD_DENSITY:-alldpi}" + declare -grx TARGET_BUILD_TYPE="${TARGET_BUILD_TYPE:-release}" + declare -grx TARGET_BUILD_VARIANT="${TARGET_BUILD_VARIANT:-user}" + declare -grx TARGET_PRODUCT="${product}" + + # This script cannot handle compressed apexes + declare -grx OVERRIDE_PRODUCT_COMPRESSED_APEX=false + # Unset to build using PreBuilt SDK. + declare -grx UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true +} + +function main() { + if [ ! -e "build/make/core/Makefile" ]; then + echo "$0 must be run from the top of the Android source tree." + exit 1 + fi + + # Run installclean to remove previous artifacts, so they don't accumulate on + # the buildbots. + build/soong/soong_ui.bash --make-mode installclean + + build/soong/soong_ui.bash --make-mode "$@" \ + ALWAYS_EMBED_NOTICES=true \ + MODULE_BUILD_FROM_SOURCE=true \ + "${RUN_ERROR_PRONE:+"RUN_ERROR_PRONE=true"}" \ + apps_only \ + dist \ + lint-check +} + +init "$@" +# The wacky ${foo[@]+"${foo[@]}"}, makes bash correctly pass nothing when an +# array is empty (necessary prior to bash 4.4). +main ${ARGV[@]+"${ARGV[@]}"} diff --git a/build/mainline_modules_arm.sh b/build/mainline_modules_arm.sh new file mode 100644 index 0000000..a7ba6eb --- /dev/null +++ b/build/mainline_modules_arm.sh @@ -0,0 +1,26 @@ +#!/bin/bash -ex +# +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# 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. +readonly vars="$(TARGET_PRODUCT='' build/soong/soong_ui.bash --dumpvars-mode \ + --vars="DIST_DIR")" +eval "${vars}" + +packages/modules/common/build/build_unbundled_mainline_module.sh \ + --product module_arm \ + --dist_dir "${DIST_DIR}/mainline_modules_arm" diff --git a/build/mainline_modules_arm64.sh b/build/mainline_modules_arm64.sh new file mode 100644 index 0000000..34115ab --- /dev/null +++ b/build/mainline_modules_arm64.sh @@ -0,0 +1,26 @@ +#!/bin/bash -ex +# +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# 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. +readonly vars="$(TARGET_PRODUCT='' build/soong/soong_ui.bash --dumpvars-mode \ + --vars="DIST_DIR")" +eval "${vars}" + +packages/modules/common/build/build_unbundled_mainline_module.sh \ + --product module_arm64 \ + --dist_dir "${DIST_DIR}/mainline_modules_arm64" diff --git a/build/mainline_modules_x86.sh b/build/mainline_modules_x86.sh new file mode 100755 index 0000000..5c7847d --- /dev/null +++ b/build/mainline_modules_x86.sh @@ -0,0 +1,26 @@ +#!/bin/bash -ex +# +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# 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. +readonly vars="$(TARGET_PRODUCT='' build/soong/soong_ui.bash --dumpvars-mode \ + --vars="DIST_DIR")" +eval "${vars}" + +packages/modules/common/build/build_unbundled_mainline_module.sh \ + --product module_x86 \ + --dist_dir "${DIST_DIR}/mainline_modules_x86" diff --git a/build/mainline_modules_x86_64.sh b/build/mainline_modules_x86_64.sh new file mode 100755 index 0000000..ade992b --- /dev/null +++ b/build/mainline_modules_x86_64.sh @@ -0,0 +1,26 @@ +#!/bin/bash -ex +# +# Copyright (C) 2021 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# 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. +readonly vars="$(TARGET_PRODUCT='' build/soong/soong_ui.bash --dumpvars-mode \ + --vars="DIST_DIR")" +eval "${vars}" + +packages/modules/common/build/build_unbundled_mainline_module.sh \ + --product module_x86_64 \ + --dist_dir "${DIST_DIR}/mainline_modules_x86_64"