151 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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 <<END_OF_USAGE
 | |
| This script builds mainline modules. It is used from other build scripts that
 | |
| are run on build servers, and is meant to build both AOSP and internal
 | |
| variants of the modules.
 | |
| 
 | |
| Basic usage:
 | |
|   \$ packages/modules/common/build/build_unbundled_mainline_module.sh \
 | |
|       --dist_dir out/dist/mainline_modules_arm64 \
 | |
|       --product module_arm64 \
 | |
|       -j8
 | |
| 
 | |
| Arguments:
 | |
|    --dist_dir <dir>    a dist directory to store the outputs in.
 | |
|    --product <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
 | |
|   # TODO(b/210694291): include ipsec module in the build
 | |
|   # 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.sepolicy
 | |
|   # TODO(b/210694291): include tethering module in the build
 | |
|   # 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
 | |
|   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
 | |
| 
 | |
|   # UNBUNDLED_BUILD_SDKS_FROM_SOURCE defaults to false, which is necessary to
 | |
|   # use prebuilt SDKs on thin branches that may not have the sources (e.g.
 | |
|   # frameworks/base).
 | |
| }
 | |
| 
 | |
| 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[@]}"}
 |