2009-03-04 04:28:42 +01:00
# Put some miscellaneous rules here
2014-03-02 00:32:04 +01:00
# HACK: clear LOCAL_PATH from including last build target before calling
# intermedites-dir-for
LOCAL_PATH := $( BUILD_SYSTEM)
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# Define rules to copy PRODUCT_COPY_FILES defined by the product.
2012-09-21 01:35:36 +02:00
# PRODUCT_COPY_FILES contains words like <source file>:<dest file>[:<owner>].
2009-03-04 04:28:42 +01:00
# <dest file> is relative to $(PRODUCT_OUT), so it should look like,
# e.g., "system/etc/file.xml".
2010-03-02 01:18:59 +01:00
# The filter part means "only eval the copy-one-file rule if this
2010-11-03 05:31:47 +01:00
# src:dest pair is the first one to match the same dest"
2011-09-29 22:23:25 +02:00
#$(1): the src:dest pair
2018-05-01 01:01:33 +02:00
#$(2): the dest
2011-09-29 22:23:25 +02:00
d e f i n e c h e c k - p r o d u c t - c o p y - f i l e s
2018-05-01 01:01:33 +02:00
$( if $ ( filter -out $ ( TARGET_COPY_OUT_SYSTEM_OTHER ) /%,$ ( 2) ) , \
$( if $( filter %.apk, $( 2) ) ,$( error \
2020-01-10 01:15:11 +01:00
Prebuilt apk found in PRODUCT_COPY_FILES: $( 1) , use BUILD_PREBUILT instead!) ) ) \
$( if $ ( filter true ,$ ( BUILD_BROKEN_VINTF_PRODUCT_COPY_FILES ) ) ,, \
$( if $( filter $( TARGET_COPY_OUT_SYSTEM) /etc/vintf/% \
$( TARGET_COPY_OUT_SYSTEM) /manifest.xml \
$( TARGET_COPY_OUT_SYSTEM) /compatibility_matrix.xml,$( 2) ) , \
$( error VINTF metadata found in PRODUCT_COPY_FILES: $( 1) , use vintf_fragments instead!) ) \
$( if $( filter $( TARGET_COPY_OUT_PRODUCT) /etc/vintf/%,$( 2) ) , \
$( error VINTF metadata found in PRODUCT_COPY_FILES: $( 1) , \
use PRODUCT_MANIFEST_FILES / DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE / vintf_compatibility_matrix / vintf_fragments instead!) ) \
$( if $( filter $( TARGET_COPY_OUT_SYSTEM_EXT) /etc/vintf/%,$( 2) ) , \
$( error VINTF metadata found in PRODUCT_COPY_FILES: $( 1) , \
use vintf_compatibility_matrix / vintf_fragments instead!) ) \
$( if $( filter $( TARGET_COPY_OUT_VENDOR) /etc/vintf/% \
$( TARGET_COPY_OUT_VENDOR) /manifest.xml \
$( TARGET_COPY_OUT_VENDOR) /compatibility_matrix.xml,$( 2) ) , \
$( error VINTF metadata found in PRODUCT_COPY_FILES: $( 1) , \
use DEVICE_MANIFEST_FILE / DEVICE_MATRIX_FILE / vintf_compatibility_matrix / vintf_fragments instead!) ) \
$( if $( filter $( TARGET_COPY_OUT_ODM) /etc/vintf/% \
$( TARGET_COPY_OUT_ODM) /etc/manifest%,$( 2) ) , \
$( error VINTF metadata found in PRODUCT_COPY_FILES: $( 1) , \
use ODM_MANIFEST_FILES / vintf_fragments instead!) ) \
)
2011-09-29 22:23:25 +02:00
e n d e f
2020-03-17 10:49:49 +01:00
check_elf_prebuilt_product_copy_files := true
2020-04-07 09:59:59 +02:00
i f n e q ( , $( filter true ,$ ( BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES ) ) )
check_elf_prebuilt_product_copy_files :=
2020-03-17 10:49:49 +01:00
e n d i f
check_elf_prebuilt_product_copy_files_hint := \
found ELF prebuilt in PRODUCT_COPY_FILES, use cc_prebuilt_binary / cc_prebuilt_library_shared instead.
2012-09-06 03:08:29 +02:00
# filter out the duplicate <source file>:<dest file> pairs.
unique_product_copy_files_pairs :=
2009-03-04 04:28:42 +01:00
$( foreach cf ,$ ( PRODUCT_COPY_FILES ) , \
2012-09-06 03:08:29 +02:00
$( if $( filter $( unique_product_copy_files_pairs) ,$( cf) ) ,,\
$( eval unique_product_copy_files_pairs += $( cf) ) ) )
unique_product_copy_files_destinations :=
2017-11-15 20:13:23 +01:00
product_copy_files_ignored :=
2012-09-06 03:08:29 +02:00
$( foreach cf ,$ ( unique_product_copy_files_pairs ) , \
2010-11-03 05:31:47 +01:00
$( eval _src := $( call word-colon,1,$( cf) ) ) \
$( eval _dest := $( call word-colon,2,$( cf) ) ) \
2018-05-01 01:01:33 +02:00
$( call check-product-copy-files,$( cf) ,$( _dest) ) \
2011-12-16 20:54:25 +01:00
$( if $( filter $( unique_product_copy_files_destinations) ,$( _dest) ) , \
2017-11-15 20:13:23 +01:00
$( eval product_copy_files_ignored += $( cf) ) , \
2010-11-03 05:31:47 +01:00
$( eval _fulldest := $( call append-path,$( PRODUCT_OUT) ,$( _dest) ) ) \
2012-05-14 23:39:00 +02:00
$( if $( filter %.xml,$( _dest) ) ,\
$( eval $( call copy-xml-file-checked,$( _src) ,$( _fulldest) ) ) ,\
2017-09-19 14:10:31 +02:00
$( if $( and $( filter %.jar,$( _dest) ) ,$( filter $( basename $( notdir $( _dest) ) ) ,$( PRODUCT_LOADED_BY_PRIVILEGED_MODULES) ) ) ,\
$( eval $( call copy-and-uncompress-dexs,$( _src) ,$( _fulldest) ) ) , \
2018-06-13 23:51:05 +02:00
$( if $( filter init%rc,$( notdir $( _dest) ) ) $( filter %/etc/init,$( dir $( _dest) ) ) ,\
$( eval $( call copy-init-script-file-checked,$( _src) ,$( _fulldest) ) ) ,\
2020-03-17 10:49:49 +01:00
$( if $( and $( filter true,$( check_elf_prebuilt_product_copy_files) ) , \
$( filter bin lib lib64,$( subst /,$( space) ,$( _dest) ) ) ) , \
$( eval $( call copy-non-elf-file-checked,$( _src) ,$( _fulldest) ,$( check_elf_prebuilt_product_copy_files_hint) ) ) , \
$( eval $( call copy-one-file,$( _src) ,$( _fulldest) ) ) ) ) ) ) \
2011-06-18 02:05:35 +02:00
$( eval unique_product_copy_files_destinations += $( _dest) ) ) )
2017-11-15 20:13:23 +01:00
# Dump a list of overriden (and ignored PRODUCT_COPY_FILES entries)
2018-10-17 08:15:08 +02:00
pcf_ignored_file := $( PRODUCT_OUT) /product_copy_files_ignored.txt
$(pcf_ignored_file) : PRIVATE_IGNORED := $( sort $ ( product_copy_files_ignored ) )
$(pcf_ignored_file) :
echo " $( PRIVATE_IGNORED) " | tr " " "\n" >$@
$(call dist-for-goals,droidcore,$(pcf_ignored_file) : logs /$( notdir $ ( pcf_ignored_file ) ) )
2017-11-15 20:13:23 +01:00
2018-10-17 08:15:08 +02:00
pcf_ignored_file :=
2017-11-15 20:13:23 +01:00
product_copy_files_ignored :=
2012-09-06 03:08:29 +02:00
unique_product_copy_files_pairs :=
2011-06-18 02:05:35 +02:00
unique_product_copy_files_destinations :=
2009-03-04 04:28:42 +01:00
2017-11-17 08:22:37 +01:00
# -----------------------------------------------------------------
# Returns the max allowed size for an image suitable for hash verification
# (e.g., boot.img, recovery.img, etc).
# The value 69632 derives from MAX_VBMETA_SIZE + MAX_FOOTER_SIZE in $(AVBTOOL).
# $(1): partition size to flash the image
d e f i n e g e t - h a s h - i m a g e - m a x - s i z e
$( if $ ( 1) , \
$( if $( filter true,$( BOARD_AVB_ENABLE) ) , \
$( eval _hash_meta_size := 69632) , \
$( eval _hash_meta_size := 0) ) \
$( 1) -$( _hash_meta_size) )
e n d e f
2016-02-23 22:40:07 +01:00
# -----------------------------------------------------------------
# Define rules to copy headers defined in copy_headers.mk
# If more than one makefile declared a header, print a warning,
# then copy the last one defined. This matches the previous make
# behavior.
2018-08-15 23:28:01 +02:00
has_dup_copy_headers :=
2016-02-23 22:40:07 +01:00
$( foreach dest ,$ ( ALL_COPIED_HEADERS ) , \
$( eval _srcs := $( ALL_COPIED_HEADERS.$( dest) .SRC) ) \
2019-02-08 02:34:57 +01:00
$( eval _src := $( lastword $( _srcs) ) ) \
2016-02-23 22:40:07 +01:00
$( if $( call streq,$( _src) ,$( _srcs) ) ,, \
$( warning Duplicate header copy: $( dest) ) \
2019-02-08 02:34:57 +01:00
$( warning _ Using $( _src) ) \
$( warning __ from $( lastword $( ALL_COPIED_HEADERS.$( dest) .MAKEFILE) ) ) \
$( eval _makefiles := $$ ( wordlist 1,$( call int_subtract,$( words $( ALL_COPIED_HEADERS.$( dest) .MAKEFILE) ) ,1) ,$$ ( ALL_COPIED_HEADERS.$$ ( dest) .MAKEFILE) ) ) \
$( foreach src,$( wordlist 1,$( call int_subtract,$( words $( _srcs) ) ,1) ,$( _srcs) ) , \
$( warning _ Ignoring $( src) ) \
$( warning __ from $( firstword $( _makefiles) ) ) \
$( eval _makefiles := $$ ( wordlist 2,9999,$$ ( _makefiles) ) ) ) \
$( eval has_dup_copy_headers := true ) ) \
2016-02-23 22:40:07 +01:00
$( eval $( call copy-one-header,$( _src) ,$( dest) ) ) )
all_copied_headers : $( ALL_COPIED_HEADERS )
2018-08-15 23:28:01 +02:00
i f d e f h a s _ d u p _ c o p y _ h e a d e r s
has_dup_copy_headers :=
2019-04-18 18:38:25 +02:00
$( error duplicate header copies are no longer allowed. For more information about headers, see: https://android.googlesource.com/platform/build/soong/+/master/docs/best_practices.md#headers)
2018-08-15 23:28:01 +02:00
e n d i f
2019-12-14 03:55:18 +01:00
$( file >$ ( PRODUCT_OUT ) /.copied_headers_list ,$ ( TARGET_OUT_HEADERS ) $ ( ALL_COPIED_HEADERS ) )
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# docs/index.html
2020-06-04 16:16:39 +02:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2009-03-04 04:28:42 +01:00
gen := $( OUT_DOCS) /index.html
ALL_DOCS += $( gen)
$(gen) : frameworks /base /docs /docs -redirect -index .html
@mkdir -p $( dir $@ )
@cp -f $< $@
2012-04-03 03:21:36 +02:00
e n d i f
2009-03-04 04:28:42 +01:00
2017-10-04 19:20:20 +02:00
ndk_doxygen_out := $( OUT_NDK_DOCS)
ndk_headers := $( SOONG_OUT_DIR) /ndk/sysroot/usr/include
ndk_docs_src_dir := frameworks/native/docs
ndk_doxyfile := $( ndk_docs_src_dir) /Doxyfile
i f n e q ( $( wildcard $ ( ndk_docs_src_dir ) ) , )
ndk_docs_srcs := $( addprefix $( ndk_docs_src_dir) /,\
$( call find-files-in-subdirs,$( ndk_docs_src_dir) ,"*" ,.) )
$(ndk_doxygen_out)/index.html : $( ndk_docs_srcs ) $( SOONG_OUT_DIR ) /ndk .timestamp
@mkdir -p $( ndk_doxygen_out)
@echo " Generating NDK docs to $( ndk_doxygen_out) "
@( cat $( ndk_doxyfile) ; \
echo " INPUT= $( ndk_headers) " ; \
echo " HTML_OUTPUT= $( ndk_doxygen_out) " \
) | doxygen -
# Note: Not a part of the docs target because we don't have doxygen available.
# You can run this target locally if you have doxygen installed.
ndk-docs : $( ndk_doxygen_out ) /index .html
.PHONY : ndk -docs
e n d i f
2019-04-18 23:46:48 +02:00
$( call dist -for -goals ,sdk ,$ ( API_FINGERPRINT ) )
2018-12-14 10:04:19 +01:00
2015-05-07 05:44:22 +02:00
INSTALLED_RECOVERYIMAGE_TARGET :=
2019-04-22 20:09:57 +02:00
i f d e f B U I L D I N G _ R E C O V E R Y _ I M A G E
i f n e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
INSTALLED_RECOVERYIMAGE_TARGET := $( PRODUCT_OUT) /recovery.img
e n d i f
2015-05-07 05:44:22 +02:00
e n d i f
2020-05-18 07:31:30 +02:00
i n c l u d e $( BUILD_SYSTEM ) / s y s p r o p . m k
2018-05-29 14:09:01 +02:00
# ----------------------------------------------------------------
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# sdk-build.prop
#
# There are certain things in build.prop that we don't want to
# ship with the sdk; remove them.
# This must be a list of entire property keys followed by
# "=" characters, without any internal spaces.
sdk_build_prop_remove := \
ro.build.user= \
ro.build.host= \
ro.product.brand= \
ro.product.manufacturer= \
ro.product.device=
# TODO: Remove this soon-to-be obsolete property
sdk_build_prop_remove += ro.build.product=
INSTALLED_SDK_BUILD_PROP_TARGET := $( PRODUCT_OUT) /sdk/sdk-build.prop
$(INSTALLED_SDK_BUILD_PROP_TARGET) : $( INSTALLED_BUILD_PROP_TARGET )
@echo SDK buildinfo: $@
@mkdir -p $( dir $@ )
$( hide) grep -v " $( subst $( space) ,\| ,$( strip \
2018-11-26 19:12:05 +01:00
$( sdk_build_prop_remove) ) ) " $< > $@ .tmp
2009-03-04 04:28:42 +01:00
$( hide) for x in $( sdk_build_prop_remove) ; do \
2018-11-26 19:12:05 +01:00
echo " $$ x " generic >> $@ .tmp; done
2009-03-04 04:28:42 +01:00
$( hide) mv $@ .tmp $@
2019-06-05 20:53:43 +02:00
# -----------------------------------------------------------------
# kernel modules
# Depmod requires a well-formed kernel version so 0.0 is used as a placeholder.
DEPMOD_STAGING_SUBDIR := $= lib/modules/0.0
2020-05-13 01:40:02 +02:00
d e f i n e c o p y - a n d - s t r i p - k e r n e l - m o d u l e
$(2) : $( 1)
$( $( LOCAL_2ND_ARCH_VAR_PREFIX) TARGET_STRIP) -o $( 2) --strip-debug $( 1)
e n d e f
2019-06-05 20:53:43 +02:00
# $(1): modules list
# $(2): output dir
# $(3): mount point
# $(4): staging dir
2019-06-19 21:56:48 +02:00
# $(5): module load list
# $(6): module load list filename
2019-11-13 22:29:02 +01:00
# $(7): module archive
2020-05-13 01:40:02 +02:00
# $(8): staging dir for stripped modules
2020-05-29 03:39:38 +02:00
# $(9): module directory name
2019-06-05 20:53:43 +02:00
# Returns the a list of src:dest pairs to install the modules using copy-many-files.
d e f i n e b u i l d - i m a g e - k e r n e l - m o d u l e s
2020-06-05 20:31:22 +02:00
$( if $( 9) , \
$( eval _dir := $( 9) /) , \
$( eval _dir := ) ) \
2020-05-13 01:40:02 +02:00
$( foreach module,$( 1) , \
$( eval _src := $( module) ) \
$( if $( 8) , \
$( eval _src := $( 8) /$( notdir $( module) ) ) \
$( eval $( call copy-and-strip-kernel-module,$( module) ,$( _src) ) ) ) \
2020-06-05 20:31:22 +02:00
$( _src) :$( 2) /lib/modules/$( _dir) $( notdir $( module) ) ) \
2020-05-29 03:39:38 +02:00
$( eval $( call build-image-kernel-modules-depmod,$( 1) ,$( 3) ,$( 4) ,$( 5) ,$( 6) ,$( 7) ,$( 2) ,$( 9) ) ) \
2020-06-05 20:31:22 +02:00
$( 4) /$( DEPMOD_STAGING_SUBDIR) /modules.dep:$( 2) /lib/modules/$( _dir) modules.dep \
$( 4) /$( DEPMOD_STAGING_SUBDIR) /modules.alias:$( 2) /lib/modules/$( _dir) modules.alias \
$( 4) /$( DEPMOD_STAGING_SUBDIR) /modules.softdep:$( 2) /lib/modules/$( _dir) modules.softdep \
$( 4) /$( DEPMOD_STAGING_SUBDIR) /$( 6) :$( 2) /lib/modules/$( _dir) $( 6)
2019-06-05 20:53:43 +02:00
e n d e f
# $(1): modules list
2019-06-19 21:56:48 +02:00
# $(2): mount point
# $(3): staging dir
# $(4): module load list
# $(5): module load list filename
2019-11-13 22:29:02 +01:00
# $(6): module archive
# $(7): output dir
2020-05-29 03:39:38 +02:00
# $(8): module directory name
2019-11-13 22:29:02 +01:00
# TODO(b/144844424): If a module archive is being used, this step (which
# generates obj/PACKAGING/.../modules.dep) also unzips the module archive into
# the output directory. This should be moved to a module with a
# LOCAL_POST_INSTALL_CMD so that if modules.dep is removed from the output dir,
# the archive modules are restored along with modules.dep.
2019-06-05 20:53:43 +02:00
d e f i n e b u i l d - i m a g e - k e r n e l - m o d u l e s - d e p m o d
2019-07-12 02:42:13 +02:00
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : .KATI_IMPLICIT_OUTPUTS := $( 3) /$( DEPMOD_STAGING_SUBDIR ) /modules .alias $( 3) /$( DEPMOD_STAGING_SUBDIR ) /modules .softdep $( 3) /$( DEPMOD_STAGING_SUBDIR ) /$( 5)
2019-06-19 21:56:48 +02:00
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : $( DEPMOD )
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_MODULES := $( 1)
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_MOUNT_POINT := $( 2)
2020-05-29 03:39:38 +02:00
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_MODULE_DIR := $( 3) /$( DEPMOD_STAGING_SUBDIR ) /$( 2) /lib /modules /$( 8)
2019-06-19 21:56:48 +02:00
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_STAGING_DIR := $( 3)
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_LOAD_MODULES := $( 4)
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_LOAD_FILE := $( 3) /$( DEPMOD_STAGING_SUBDIR ) /$( 5)
2019-11-13 22:29:02 +01:00
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_MODULE_ARCHIVE := $( 6)
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : PRIVATE_OUTPUT_DIR := $( 7)
$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep : $( 1) $( 6)
2019-06-05 20:53:43 +02:00
@echo depmod $$ ( PRIVATE_STAGING_DIR)
rm -rf $$ ( PRIVATE_STAGING_DIR)
2019-06-19 21:56:48 +02:00
mkdir -p $$ ( PRIVATE_MODULE_DIR)
2019-11-13 22:29:02 +01:00
$( if $( 6) ,\
unzip -qo -d $$ ( PRIVATE_MODULE_DIR) $$ ( PRIVATE_MODULE_ARCHIVE) ; \
mkdir -p $$ ( PRIVATE_OUTPUT_DIR) /lib; \
2020-05-29 03:39:38 +02:00
cp -r $( 3) /$( DEPMOD_STAGING_SUBDIR) /$( 2) /lib/modules $$ ( PRIVATE_OUTPUT_DIR) /lib/; \
2019-11-13 22:29:02 +01:00
find $$ ( PRIVATE_MODULE_DIR) -type f -name *.ko | xargs basename -a > $$ ( PRIVATE_LOAD_FILE) ; \
)
$( if $( 1) ,\
cp $$ ( PRIVATE_MODULES) $$ ( PRIVATE_MODULE_DIR) /; \
for MODULE in $$ ( PRIVATE_LOAD_MODULES) ; do \
basename $$ $$ MODULE >> $$ ( PRIVATE_LOAD_FILE) ; \
done ; \
)
2019-06-05 20:53:43 +02:00
$( DEPMOD) -b $$ ( PRIVATE_STAGING_DIR) 0.0
# Turn paths in modules.dep into absolute paths
2019-06-19 21:56:48 +02:00
sed -i.tmp -e 's|\([^: ]*lib/modules/[^: ]*\)|/\1|g' $$ ( PRIVATE_STAGING_DIR) /$$ ( DEPMOD_STAGING_SUBDIR) /modules.dep
touch $$ ( PRIVATE_LOAD_FILE)
e n d e f
# $(1): staging dir
2020-05-15 18:10:29 +02:00
# $(2): modules list
# $(3): module load list
# $(4): module load list filename
# $(5): output dir
2019-06-19 21:56:48 +02:00
d e f i n e m o d u l e - l o a d - l i s t - c o p y - p a t h s
2020-05-15 18:10:29 +02:00
$( eval $( call build-image-module-load-list,$( 1) ,$( 2) ,$( 3) ,$( 4) ) ) \
$( 1) /$( DEPMOD_STAGING_SUBDIR) /$( 4) :$( 5) /lib/modules/$( 4)
2019-06-05 20:53:43 +02:00
e n d e f
2019-06-19 21:56:48 +02:00
# $(1): staging dir
2020-05-15 18:10:29 +02:00
# $(2): modules list
# $(3): module load list
# $(4): module load list filename
2019-06-19 21:56:48 +02:00
d e f i n e b u i l d - i m a g e - m o d u l e - l o a d - l i s t
2020-05-15 18:10:29 +02:00
$(1)/$(DEPMOD_STAGING_SUBDIR)/$(4) : PRIVATE_LOAD_MODULES := $( 3)
$(1)/$(DEPMOD_STAGING_SUBDIR)/$(4) : $( 2)
@echo load-list $$ ( @)
@echo '$$(strip $$(notdir $$(PRIVATE_LOAD_MODULES)))' | tr ' ' '\n' > $$ ( @)
2019-06-19 21:56:48 +02:00
e n d e f
2020-05-29 03:39:38 +02:00
# $(1): image name
# $(2): build output directory (TARGET_OUT_VENDOR, TARGET_RECOVERY_ROOT_OUT, etc)
# $(3): mount point
# $(4): module load filename
# $(5): stripped staging directory
# $(6): kernel module directory name (top is an out of band value for no directory)
d e f i n e b u i l d - i m a g e - k e r n e l - m o d u l e s - d i r
$( if $ ( filter top ,$ ( 6) ) ,\
$( eval _kver := ) $( eval _sep := ) ,\
$( eval _kver := $( 6) ) $( eval _sep := _) ) \
$( if $ ( 5) ,\
$( eval _stripped_staging_dir := $( 5) $( _sep) $( _kver) ) ,\
$( eval _stripped_staging_dir := ) ) \
$( if $ ( strip $ ( BOARD_ $ ( 1) _KERNEL_MODULES $ ( _sep ) $ ( _kver ) ) $ ( BOARD_ $ ( 1) _KERNEL_MODULES_ARCHIVE $ ( _sep ) $ ( _kver ) ) ) ,\
$( if $( BOARD_$( 1) _KERNEL_MODULES_LOAD$( _sep) $( _kver) ) ,,\
$( eval BOARD_$( 1) _KERNEL_MODULES_LOAD$( _sep) $( _kver) := $( BOARD_$( 1) _KERNEL_MODULES$( _sep) $( _kver) ) ) ) \
$( call copy-many-files,$( call build-image-kernel-modules,$( BOARD_$( 1) _KERNEL_MODULES$( _sep) $( _kver) ) ,$( 2) ,$( 3) ,$( call intermediates-dir-for,PACKAGING,depmod_$( 1) $( _sep) $( _kver) ) ,$( BOARD_$( 1) _KERNEL_MODULES_LOAD$( _sep) $( _kver) ) ,$( 4) ,$( BOARD_$( 1) _KERNEL_MODULES_ARCHIVE$( _sep) $( _kver) ) ,$( _stripped_staging_dir) ,$( _kver) ) ) )
e n d e f
# $(1): kernel module directory name (top is an out of band value for no directory)
d e f i n e b u i l d - r e c o v e r y - a s - b o o t - l o a d
$( if $ ( filter top ,$ ( 1) ) ,\
$( eval _kver := ) $( eval _sep := ) ,\
$( eval _kver := $( 1) ) $( eval _sep := _) ) \
$( if $( BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD$( _sep) $( _kver) ) ,\
$( call copy-many-files,$( call module-load-list-copy-paths,$( call intermediates-dir-for,PACKAGING,ramdisk_module_list$( _sep) $( _kver) ) ,$( BOARD_GENERIC_RAMDISK_KERNEL_MODULES$( _sep) $( _kver) ) ,$( BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD$( _sep) $( _kver) ) ,modules.load,$( TARGET_RECOVERY_ROOT_OUT) ) ) )
e n d e f
# $(1): kernel module directory name (top is an out of band value for no directory)
d e f i n e b u i l d - v e n d o r - r a m d i s k - r e c o v e r y - l o a d
$( if $ ( filter top ,$ ( 1) ) ,\
$( eval _kver := ) $( eval _sep := ) ,\
$( eval _kver := $( 1) ) $( eval _sep := _) ) \
$( if $( BOARD_VENDOR_RAMDISK_RECOVERY_KERNEL_MODULES_LOAD$( _sep) $( _kver) ) ,\
$( call copy-many-files,$( call module-load-list-copy-paths,$( call intermediates-dir-for,PACKAGING,vendor_ramdisk_recovery_module_list$( _sep) $( _kver) ) ,$( BOARD_VENDOR_RAMDISK_KERNEL_MODULES$( _sep) $( _kver) ) ,$( BOARD_VENDOR_RAMDISK_RECOVERY_KERNEL_MODULES_LOAD$( _sep) $( _kver) ) ,modules.load.recovery,$( TARGET_VENDOR_RAMDISK_OUT) ) ) )
e n d e f
2019-07-10 19:49:37 +02:00
i f n e q ( $( BUILDING_VENDOR_BOOT_IMAGE ) , t r u e )
# If there is no vendor boot partition, store vendor ramdisk kernel modules in the
# boot ramdisk.
2019-07-11 21:23:38 +02:00
BOARD_GENERIC_RAMDISK_KERNEL_MODULES += $( BOARD_VENDOR_RAMDISK_KERNEL_MODULES)
BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD += $( BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD)
e n d i f
2019-06-19 21:56:48 +02:00
2019-07-11 21:23:38 +02:00
i f e q ( $( BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD ) , )
BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD := $( BOARD_GENERIC_RAMDISK_KERNEL_MODULES)
2019-06-19 21:56:48 +02:00
e n d i f
2019-07-10 19:49:37 +02:00
i f n e q ( $( strip $ ( BOARD_GENERIC_RAMDISK_KERNEL_MODULES ) ) , )
2019-06-19 21:56:48 +02:00
ifeq ( $( BOARD_USES_RECOVERY_AS_BOOT) , true )
2019-07-11 21:23:38 +02:00
BOARD_RECOVERY_KERNEL_MODULES += $( BOARD_GENERIC_RAMDISK_KERNEL_MODULES)
2019-06-19 21:56:48 +02:00
endif
e n d i f
2020-05-13 01:40:02 +02:00
i f n e q ( $( BOARD_DO_NOT_STRIP_VENDOR_MODULES ) , t r u e )
VENDOR_STRIPPED_MODULE_STAGING_DIR := $( call intermediates-dir-for,PACKAGING,depmod_vendor_stripped)
e l s e
VENDOR_STRIPPED_MODULE_STAGING_DIR :=
e n d i f
2019-06-05 20:53:43 +02:00
2020-06-02 22:13:32 +02:00
i f n e q ( $( BOARD_DO_NOT_STRIP_VENDOR_RAMDISK_MODULES ) , t r u e )
VENDOR_RAMDISK_STRIPPED_MODULE_STAGING_DIR := $( call intermediates-dir-for,PACKAGING,depmod_vendor_ramdisk_stripped)
e l s e
VENDOR_RAMDISK_STRIPPED_MODULE_STAGING_DIR :=
e n d i f
2020-05-29 03:39:38 +02:00
BOARD_KERNEL_MODULE_DIRS += top
$( foreach dir ,$ ( BOARD_KERNEL_MODULE_DIRS ) , \
$( eval ALL_DEFAULT_INSTALLED_MODULES += $( call build-image-kernel-modules-dir,RECOVERY,$( TARGET_RECOVERY_ROOT_OUT) ,,modules.load.recovery,,$( dir) ) ) \
2020-06-02 22:13:32 +02:00
$( eval ALL_DEFAULT_INSTALLED_MODULES += $( call build-image-kernel-modules-dir,VENDOR_RAMDISK,$( TARGET_VENDOR_RAMDISK_OUT) ,,modules.load,$( VENDOR_RAMDISK_STRIPPED_MODULE_STAGING_DIR) ,$( dir) ) ) \
2020-05-29 03:39:38 +02:00
$( eval ALL_DEFAULT_INSTALLED_MODULES += $( call build-vendor-ramdisk-recovery-load,$( dir) ) ) \
$( eval ALL_DEFAULT_INSTALLED_MODULES += $( call build-image-kernel-modules-dir,VENDOR,$( TARGET_OUT_VENDOR) ,vendor,modules.load,$( VENDOR_STRIPPED_MODULE_STAGING_DIR) ,$( dir) ) ) \
$( eval ALL_DEFAULT_INSTALLED_MODULES += $( call build-image-kernel-modules-dir,ODM,$( TARGET_OUT_ODM) ,odm,modules.load,,$( dir) ) ) \
$( if $( filter true,$( BOARD_USES_RECOVERY_AS_BOOT) ) ,\
$( eval ALL_DEFAULT_INSTALLED_MODULES += $( call build-recovery-as-boot-load,$( dir) ) ) ,\
$( eval ALL_DEFAULT_INSTALLED_MODULES += $( call build-image-kernel-modules-dir,GENERIC_RAMDISK,$( TARGET_RAMDISK_OUT) ,,modules.load,,$( dir) ) ) ) )
2019-06-05 20:53:43 +02:00
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# Cert-to-package mapping. Used by the post-build signing tools.
2012-10-26 18:21:28 +02:00
# Use a macro to add newline to each echo command
2020-05-01 03:29:09 +02:00
# $1 stem name of the package
2020-03-21 02:31:43 +01:00
# $2 certificate
# $3 private key
# $4 compressed
# $5 partition tag
# $6 output file
2017-08-14 11:53:50 +02:00
d e f i n e _ a p k c e r t s _ w r i t e _ l i n e
2020-03-21 02:31:43 +01:00
$( hide ) e c h o - n 'name="$(1).apk" certificate="$2" private_key="$3"' > > $ 6
$( if $ ( 4) , $ ( hide ) echo -n ' compressed ="$ 4"' >> $ 6)
$( if $ ( 5) , $ ( hide ) echo -n ' partition ="$ 5"' >> $ 6)
$( hide ) e c h o '' > > $ 6
2012-10-26 18:21:28 +02:00
e n d e f
2009-03-04 04:28:42 +01:00
name := $( TARGET_PRODUCT)
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
name := $( name) -apkcerts-$( FILE_NAME_TAG)
intermediates := \
$( call intermediates-dir-for,PACKAGING,apkcerts)
APKCERTS_FILE := $( intermediates) /$( name) .txt
2011-02-15 19:56:18 +01:00
# We don't need to really build all the modules.
# TODO: rebuild APKCERTS_FILE if any app change its cert.
2010-07-24 01:42:13 +02:00
$(APKCERTS_FILE) :
2009-03-04 04:28:42 +01:00
@echo APK certs list: $@
@mkdir -p $( dir $@ )
@rm -f $@
2019-05-02 21:42:09 +02:00
$( foreach p,$( sort $( PACKAGES) ) ,\
2012-10-26 18:21:28 +02:00
$( if $( PACKAGES.$( p) .EXTERNAL_KEY) ,\
2020-05-01 03:29:09 +02:00
$( call _apkcerts_write_line,$( PACKAGES.$( p) .STEM) ,"EXTERNAL" ,"" ,$( PACKAGES.$( p) .COMPRESSED) ,$( PACKAGES.$( p) .PARTITION) ,$@ ) ,\
$( call _apkcerts_write_line,$( PACKAGES.$( p) .STEM) ,$( PACKAGES.$( p) .CERTIFICATE) ,$( PACKAGES.$( p) .PRIVATE_KEY) ,$( PACKAGES.$( p) .COMPRESSED) ,$( PACKAGES.$( p) .PARTITION) ,$@ ) ) )
2012-10-26 18:21:28 +02:00
# In case value of PACKAGES is empty.
2011-09-26 21:05:06 +02:00
$( hide) touch $@
2009-03-04 04:28:42 +01:00
.PHONY : apkcerts -list
apkcerts-list : $( APKCERTS_FILE )
2011-02-15 19:56:18 +01:00
i f n e q ( , $( TARGET_BUILD_APPS ) )
$( call dist-for-goals, apps_only, $( APKCERTS_FILE) :apkcerts.txt)
2019-02-18 07:21:19 +01:00
$( call dist-for-goals, apps_only, $( SOONG_APEX_KEYS_FILE) :apexkeys.txt)
2011-02-15 19:56:18 +01:00
e n d i f
2010-07-24 01:42:13 +02:00
2019-02-18 07:21:19 +01:00
2009-06-15 23:30:14 +02:00
# -----------------------------------------------------------------
2016-07-26 01:03:53 +02:00
# build system stats
BUILD_SYSTEM_STATS := $( PRODUCT_OUT) /build_system_stats.txt
$(BUILD_SYSTEM_STATS) :
@rm -f $@
@$( foreach s,$( STATS.MODULE_TYPE) ,echo " modules_type_make, $( s) , $( words $( STATS.MODULE_TYPE.$( s) ) ) " >>$@ ; )
@$( foreach s,$( STATS.SOONG_MODULE_TYPE) ,echo " modules_type_soong, $( s) , $( STATS.SOONG_MODULE_TYPE.$( s) ) " >>$@ ; )
$( call dist -for -goals ,droidcore ,$ ( BUILD_SYSTEM_STATS ) )
2009-06-15 23:30:14 +02:00
2019-02-27 03:15:51 +01:00
# -----------------------------------------------------------------
# build /product/etc/security/avb/system_other.avbpubkey if needed
i f d e f B U I L D I N G _ S Y S T E M _ O T H E R _ I M A G E
2019-03-21 07:24:31 +01:00
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
2019-02-27 03:15:51 +01:00
INSTALLED_PRODUCT_SYSTEM_OTHER_AVBKEY_TARGET := $( TARGET_OUT_PRODUCT_ETC) /security/avb/system_other.avbpubkey
ALL_DEFAULT_INSTALLED_MODULES += $( INSTALLED_PRODUCT_SYSTEM_OTHER_AVBKEY_TARGET)
2019-03-21 07:24:31 +01:00
e n d i f # BOARD_AVB_ENABLE
2019-02-27 03:15:51 +01:00
e n d i f # BUILDING_SYSTEM_OTHER_IMAGE
2016-08-26 22:27:13 +02:00
# -----------------------------------------------------------------
# Modules ready to be converted to Soong, ordered by how many
# modules depend on them.
SOONG_CONV := $( sort $( SOONG_CONV) )
SOONG_CONV_DATA := $( call intermediates-dir-for,PACKAGING,soong_conversion) /soong_conv_data
$(SOONG_CONV_DATA) :
@rm -f $@
2017-12-06 23:37:06 +01:00
@$( foreach s,$( SOONG_CONV) ,echo " $( s) , $( SOONG_CONV.$( s) .TYPE) , $( sort $( SOONG_CONV.$( s) .PROBLEMS) ) , $( sort $( filter-out $( SOONG_ALREADY_CONV) ,$( SOONG_CONV.$( s) .DEPS) ) ) " >>$@ ; )
2016-08-26 22:27:13 +02:00
2017-12-06 23:38:40 +01:00
SOONG_TO_CONVERT_SCRIPT := build/make/tools/soong_to_convert.py
2016-08-26 22:27:13 +02:00
SOONG_TO_CONVERT := $( PRODUCT_OUT) /soong_to_convert.txt
$(SOONG_TO_CONVERT) : $( SOONG_CONV_DATA ) $( SOONG_TO_CONVERT_SCRIPT )
@rm -f $@
$( hide) $( SOONG_TO_CONVERT_SCRIPT) $< >$@
$( call dist -for -goals ,droidcore ,$ ( SOONG_TO_CONVERT ) )
2017-11-06 19:47:24 +01:00
# -----------------------------------------------------------------
# Modules use -Wno-error, or added default -Wall -Werror
WALL_WERROR := $( PRODUCT_OUT) /wall_werror.txt
$(WALL_WERROR) :
@rm -f $@
echo "# Modules using -Wno-error" >> $@
for m in $( sort $( SOONG_MODULES_USING_WNO_ERROR) $( MODULES_USING_WNO_ERROR) ) ; do echo $$ m >> $@ ; done
echo "# Modules added default -Wall" >> $@
for m in $( sort $( SOONG_MODULES_ADDED_WALL) $( MODULES_ADDED_WALL) ) ; do echo $$ m >> $@ ; done
$( call dist -for -goals ,droidcore ,$ ( WALL_WERROR ) )
2019-09-14 02:02:32 +02:00
# -----------------------------------------------------------------
# C/C++ flag information for modules
$( call dist -for -goals ,droidcore ,$ ( SOONG_MODULES_CFLAG_ARTIFACTS ) )
2018-01-29 18:22:24 +01:00
# -----------------------------------------------------------------
# Modules missing profile files
PGO_PROFILE_MISSING := $( PRODUCT_OUT) /pgo_profile_file_missing.txt
$(PGO_PROFILE_MISSING) :
@rm -f $@
echo "# Modules missing PGO profile files" >> $@
for m in $( SOONG_MODULES_MISSING_PGO_PROFILE_FILE) ; do echo $$ m >> $@ ; done
$( call dist -for -goals ,droidcore ,$ ( PGO_PROFILE_MISSING ) )
2009-06-15 23:30:14 +02:00
# -----------------------------------------------------------------
2011-10-04 19:50:08 +02:00
# The dev key is used to sign this package, and as the key required
2009-06-15 23:30:14 +02:00
# for future OTA packages installed by this system. Actual product
# deliverables will be re-signed by hand. We expect this file to
# exist with the suffixes ".x509.pem" and ".pk8".
2018-09-15 06:51:11 +02:00
DEFAULT_KEY_CERT_PAIR := $( strip $( DEFAULT_SYSTEM_DEV_CERTIFICATE) )
2009-06-15 23:30:14 +02:00
2011-07-12 07:11:46 +02:00
# Rules that need to be present for the all targets, even
2009-03-04 04:28:42 +01:00
# if they don't do anything.
.PHONY : systemimage
systemimage :
2010-02-17 01:01:43 +01:00
# -----------------------------------------------------------------
.PHONY : event -log -tags
2010-07-14 19:22:54 +02:00
# Produce an event logs tag file for everything we know about, in order
# to properly allocate numbers. Then produce a file that's filtered
# for what's going to be installed.
all_event_log_tags_file := $( TARGET_OUT_COMMON_INTERMEDIATES) /all-event-log-tags.txt
2012-04-12 22:25:54 +02:00
event_log_tags_file := $( TARGET_OUT) /etc/event-log-tags
2010-07-14 19:22:54 +02:00
# Include tags from all packages that we know about
all_event_log_tags_src := \
$( sort $( foreach m, $( ALL_MODULES) , $( ALL_MODULES.$( m) .EVENT_LOG_TAGS) ) )
2012-04-12 22:25:54 +02:00
# PDK builds will already have a full list of tags that needs to get merged
# in with the ones from source
pdk_fusion_log_tags_file := $( patsubst $( PRODUCT_OUT) /%,$( _pdk_fusion_intermediates) /%,$( filter $( event_log_tags_file) ,$( ALL_PDK_FUSION_FILES) ) )
$(all_event_log_tags_file) : PRIVATE_SRC_FILES := $( all_event_log_tags_src ) $( pdk_fusion_log_tags_file )
2017-12-06 23:38:40 +01:00
$(all_event_log_tags_file) : $( all_event_log_tags_src ) $( pdk_fusion_log_tags_file ) $( MERGETAGS ) build /make /tools /event_log_tags .py
2010-07-14 19:22:54 +02:00
$( hide) mkdir -p $( dir $@ )
2016-03-28 20:29:21 +02:00
$( hide) $( MERGETAGS) -o $@ $( PRIVATE_SRC_FILES)
2010-07-14 19:22:54 +02:00
2011-02-23 21:17:29 +01:00
# Include tags from all packages included in this product, plus all
# tags that are part of the system (ie, not in a vendor/ or device/
# directory).
2010-02-17 01:01:43 +01:00
event_log_tags_src := \
$( sort $( foreach m,\
2020-05-13 14:19:05 +02:00
$( call resolve-bitness-for-modules,TARGET,$( PRODUCT_PACKAGES) ) \
2010-02-17 01:01:43 +01:00
$( call module-names-for-tag-list,user) , \
2011-02-23 21:17:29 +01:00
$( ALL_MODULES.$( m) .EVENT_LOG_TAGS) ) \
$( filter-out vendor/% device/% out/%,$( all_event_log_tags_src) ) )
2010-02-17 01:01:43 +01:00
2012-04-12 22:25:54 +02:00
$(event_log_tags_file) : PRIVATE_SRC_FILES := $( event_log_tags_src ) $( pdk_fusion_log_tags_file )
2010-07-14 19:22:54 +02:00
$(event_log_tags_file) : PRIVATE_MERGED_FILE := $( all_event_log_tags_file )
2017-12-06 23:38:40 +01:00
$(event_log_tags_file) : $( event_log_tags_src ) $( all_event_log_tags_file ) $( pdk_fusion_log_tags_file ) $( MERGETAGS ) build /make /tools /event_log_tags .py
2010-02-17 01:01:43 +01:00
$( hide) mkdir -p $( dir $@ )
2016-03-28 20:29:21 +02:00
$( hide) $( MERGETAGS) -o $@ -m $( PRIVATE_MERGED_FILE) $( PRIVATE_SRC_FILES)
2010-02-17 01:01:43 +01:00
event-log-tags : $( event_log_tags_file )
ALL_DEFAULT_INSTALLED_MODULES += $( event_log_tags_file)
2010-07-14 19:22:54 +02:00
2009-03-04 04:28:42 +01:00
# #################################################################
# Targets for boot/OS images
# #################################################################
2014-01-14 01:14:20 +01:00
i f n e q ( $( strip $ ( TARGET_NO_BOOTLOADER ) ) , t r u e )
INSTALLED_BOOTLOADER_MODULE := $( PRODUCT_OUT) /bootloader
ifeq ( $( strip $( TARGET_BOOTLOADER_IS_2ND) ) ,true)
INSTALLED_2NDBOOTLOADER_TARGET := $( PRODUCT_OUT) /2ndbootloader
else
INSTALLED_2NDBOOTLOADER_TARGET :=
endif
e l s e
INSTALLED_BOOTLOADER_MODULE :=
INSTALLED_2NDBOOTLOADER_TARGET :=
e n d i f # TARGET_NO_BOOTLOADER
i f n e q ( $( strip $ ( TARGET_NO_KERNEL ) ) , t r u e )
2020-03-12 00:03:07 +01:00
ifneq ( $( strip $( BOARD_KERNEL_BINARIES) ) ,)
INSTALLED_KERNEL_TARGET := $( foreach k,$( BOARD_KERNEL_BINARIES) , \
$( PRODUCT_OUT) /$( k) )
else
INSTALLED_KERNEL_TARGET := $( PRODUCT_OUT) /kernel
endif
2014-01-14 01:14:20 +01:00
e l s e
INSTALLED_KERNEL_TARGET :=
e n d i f
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
2018-08-09 23:26:00 +02:00
# the root dir
INTERNAL_ROOT_FILES := $( filter $( TARGET_ROOT_OUT) /%, \
2009-03-04 04:28:42 +01:00
$( ALL_GENERATED_SOURCES) \
$( ALL_DEFAULT_INSTALLED_MODULES) )
2018-07-04 00:41:40 +02:00
INSTALLED_FILES_FILE_ROOT := $( PRODUCT_OUT) /installed-files-root.txt
INSTALLED_FILES_JSON_ROOT := $( INSTALLED_FILES_FILE_ROOT:.txt= .json)
$(INSTALLED_FILES_FILE_ROOT) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_ROOT )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_ROOT) : $( INTERNAL_ROOT_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2018-07-04 00:41:40 +02:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
$( hide) $( FILESLIST) $( TARGET_ROOT_OUT) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2018-07-04 00:41:40 +02:00
$( call dist -for -goals , sdk win_sdk sdk_addon , $ ( INSTALLED_FILES_FILE_ROOT ) )
2019-01-23 03:08:59 +01:00
#------------------------------------------------------------------
# dtb
2019-05-20 20:10:24 +02:00
i f d e f B O A R D _ I N C L U D E _ D T B _ I N _ B O O T I M G
2019-01-23 03:08:59 +01:00
INSTALLED_DTBIMAGE_TARGET := $( PRODUCT_OUT) /dtb.img
2019-05-20 20:10:24 +02:00
i f d e f B O A R D _ P R E B U I L T _ D T B I M A G E _ D I R
2019-02-07 20:38:18 +01:00
$(INSTALLED_DTBIMAGE_TARGET) : $( sort $ ( wildcard $ ( BOARD_PREBUILT_DTBIMAGE_DIR ) /*.dtb ) )
2019-01-23 03:08:59 +01:00
cat $^ > $@
e n d i f
2019-05-20 20:10:24 +02:00
e n d i f
2019-01-23 03:08:59 +01:00
2018-08-09 23:26:00 +02:00
# -----------------------------------------------------------------
# the ramdisk
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ R A M D I S K _ I M A G E
2018-08-09 23:26:00 +02:00
INTERNAL_RAMDISK_FILES := $( filter $( TARGET_RAMDISK_OUT) /%, \
$( ALL_GENERATED_SOURCES) \
$( ALL_DEFAULT_INSTALLED_MODULES) )
INSTALLED_FILES_FILE_RAMDISK := $( PRODUCT_OUT) /installed-files-ramdisk.txt
INSTALLED_FILES_JSON_RAMDISK := $( INSTALLED_FILES_FILE_RAMDISK:.txt= .json)
$(INSTALLED_FILES_FILE_RAMDISK) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_RAMDISK )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_RAMDISK) : $( INTERNAL_RAMDISK_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2018-08-09 23:26:00 +02:00
@echo Installed file list: $@
2019-03-28 04:46:48 +01:00
@mkdir -p $( TARGET_RAMDISK_OUT)
2018-08-09 23:26:00 +02:00
@mkdir -p $( dir $@ )
@rm -f $@
$( hide) $( FILESLIST) $( TARGET_RAMDISK_OUT) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2018-08-09 23:26:00 +02:00
$( call dist -for -goals , sdk win_sdk sdk_addon , $ ( INSTALLED_FILES_FILE_RAMDISK ) )
2009-04-10 04:31:12 +02:00
BUILT_RAMDISK_TARGET := $( PRODUCT_OUT) /ramdisk.img
2020-05-11 22:20:03 +02:00
i f e q ( $( BOARD_RAMDISK_USE_LZ 4) , t r u e )
# -l enables the legacy format used by the Linux kernel
COMPRESSION_COMMAND_DEPS := $( LZ4)
COMPRESSION_COMMAND := $( LZ4) -l -12 --favor-decSpeed
RAMDISK_EXT := .lz4
e l s e
COMPRESSION_COMMAND_DEPS := $( MINIGZIP)
COMPRESSION_COMMAND := $( MINIGZIP)
RAMDISK_EXT := .gz
e n d i f
2009-04-10 04:31:12 +02:00
# We just build this directly to the install location.
INSTALLED_RAMDISK_TARGET := $( BUILT_RAMDISK_TARGET)
2020-05-11 22:20:03 +02:00
$(INSTALLED_RAMDISK_TARGET) : $( MKBOOTFS ) $( INTERNAL_RAMDISK_FILES ) $( INSTALLED_FILES_FILE_RAMDISK ) | $( COMPRESSION_COMMAND_DEPS )
2009-03-04 04:28:42 +01:00
$( call pretty," Target ram disk: $@ " )
2020-05-11 22:20:03 +02:00
$( hide) $( MKBOOTFS) -d $( TARGET_OUT) $( TARGET_RAMDISK_OUT) | $( COMPRESSION_COMMAND) > $@
2009-03-04 04:28:42 +01:00
2013-08-09 01:34:29 +02:00
.PHONY : ramdisk -nodeps
2020-05-11 22:20:03 +02:00
ramdisk-nodeps : $( MKBOOTFS ) | $( COMPRESSION_COMMAND_DEPS )
2013-08-09 01:34:29 +02:00
@echo " make $@ : ignoring dependencies "
2020-05-11 22:20:03 +02:00
$( hide) $( MKBOOTFS) -d $( TARGET_OUT) $( TARGET_RAMDISK_OUT) | $( COMPRESSION_COMMAND) > $( INSTALLED_RAMDISK_TARGET)
2009-03-04 04:28:42 +01:00
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f # BUILDING_RAMDISK_IMAGE
2019-04-22 20:09:57 +02:00
# -----------------------------------------------------------------
# the boot image, which is a collection of other images.
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
2019-04-22 20:09:57 +02:00
# This is defined here since we may be building recovery as boot
# below and only want to define this once
2020-03-12 00:03:07 +01:00
i f n e q ( $( strip $ ( BOARD_KERNEL_BINARIES ) ) , )
BUILT_BOOTIMAGE_TARGET := $( foreach k,$( subst kernel,boot,$( BOARD_KERNEL_BINARIES) ) , $( PRODUCT_OUT) /$( k) .img)
e l s e
BUILT_BOOTIMAGE_TARGET := $( PRODUCT_OUT) /boot.img
e n d i f
2020-05-08 02:32:10 +02:00
i f d e f B O A R D _ B O O T I M A G E _ P A R T I T I O N _ S I Z E
BOARD_KERNEL_BOOTIMAGE_PARTITION_SIZE := $( BOARD_BOOTIMAGE_PARTITION_SIZE)
e n d i f
# $1: boot image file name
# $2: boot image variant (boot, boot-debug)
d e f i n e g e t - b o o t i m a g e - p a r t i t i o n - s i z e
$( BOARD_$( call to-upper,$( subst .img,,$( subst $( 2) ,kernel,$( notdir $( 1) ) ) ) ) _BOOTIMAGE_PARTITION_SIZE)
e n d e f
2017-07-18 19:05:13 +02:00
2009-03-04 04:28:42 +01:00
i f n e q ( $( strip $ ( TARGET_NO_KERNEL ) ) , t r u e )
INTERNAL_BOOTIMAGE_ARGS := \
$( addprefix --second ,$( INSTALLED_2NDBOOTLOADER_TARGET) ) \
2015-04-09 00:11:47 +02:00
--kernel $( INSTALLED_KERNEL_TARGET)
i f n e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
INTERNAL_BOOTIMAGE_ARGS += --ramdisk $( INSTALLED_RAMDISK_TARGET)
e n d i f
2019-07-10 19:49:37 +02:00
i f n d e f B U I L D I N G _ V E N D O R _ B O O T _ I M A G E
i f d e f B O A R D _ I N C L U D E _ D T B _ I N _ B O O T I M G
INTERNAL_BOOTIMAGE_ARGS += --dtb $( INSTALLED_DTBIMAGE_TARGET)
2009-05-08 04:43:08 +02:00
e n d i f
2010-08-23 21:56:25 +02:00
e n d i f
2019-07-10 19:49:37 +02:00
INTERNAL_BOOTIMAGE_FILES := $( filter-out --%,$( INTERNAL_BOOTIMAGE_ARGS) )
2019-03-28 16:45:40 +01:00
i f e q ( $( PRODUCT_SUPPORTS_VERITY ) , t r u e )
2016-05-27 18:49:49 +02:00
i f e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
2019-03-28 16:45:40 +01:00
VERITY_KEYID := veritykeyid = id:` openssl x509 -in $( PRODUCT_VERITY_SIGNING_KEY) .x509.pem -text \
2016-05-27 18:49:49 +02:00
| grep keyid | sed 's/://g' | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]' | sed 's/keyid//g' `
e n d i f
e n d i f
2019-02-26 18:36:30 +01:00
INTERNAL_KERNEL_CMDLINE := $( strip $( INTERNAL_KERNEL_CMDLINE) buildvariant = $( TARGET_BUILD_VARIANT) $( VERITY_KEYID) )
2019-07-10 19:49:37 +02:00
i f n d e f B U I L D I N G _ V E N D O R _ B O O T _ I M A G E
i f d e f B O A R D _ K E R N E L _ B A S E
INTERNAL_BOOTIMAGE_ARGS += --base $( BOARD_KERNEL_BASE)
e n d i f
i f d e f B O A R D _ K E R N E L _ P A G E S I Z E
INTERNAL_BOOTIMAGE_ARGS += --pagesize $( BOARD_KERNEL_PAGESIZE)
e n d i f
2016-10-06 01:57:27 +02:00
i f d e f I N T E R N A L _ K E R N E L _ C M D L I N E
2019-07-10 19:49:37 +02:00
INTERNAL_BOOTIMAGE_ARGS += --cmdline " $( INTERNAL_KERNEL_CMDLINE) "
e n d i f
e l s e
# building vendor boot image, dtb/base/pagesize go there
i f d e f G E N E R I C _ K E R N E L _ C M D L I N E
INTERNAL_BOOTIMAGE_ARGS += --cmdline " $( GENERIC_KERNEL_CMDLINE) "
e n d i f
2016-05-27 18:49:49 +02:00
e n d i f
2016-03-15 17:49:30 +01:00
INTERNAL_MKBOOTIMG_VERSION_ARGS := \
--os_version $( PLATFORM_VERSION) \
--os_patch_level $( PLATFORM_SECURITY_PATCH)
2019-04-22 20:09:57 +02:00
# Define these only if we are building boot
i f d e f B U I L D I N G _ B O O T _ I M A G E
INSTALLED_BOOTIMAGE_TARGET := $( BUILT_BOOTIMAGE_TARGET)
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
i f e q ( $( TARGET_BOOTIMAGE_USE_EXT 2) , t r u e )
$( error TARGET_BOOTIMAGE_USE_EXT 2 is not supported anymore )
e l s e i f e q ( t r u e , $( BOARD_AVB_ENABLE ) ) # TARGET_BOOTIMAGE_USE_EXT2 != true
2016-01-29 22:59:17 +01:00
2017-05-26 12:30:04 +02:00
$(INSTALLED_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( AVBTOOL ) $( INTERNAL_BOOTIMAGE_FILES ) $( BOARD_AVB_BOOT_KEY_PATH )
2016-01-29 22:59:17 +01:00
$( call pretty," Target boot image: $@ " )
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $@
2017-11-17 08:22:37 +01:00
$( hide) $( call assert-max-image-size,$@ ,$( call get-hash-image-max-size,$( BOARD_BOOTIMAGE_PARTITION_SIZE) ) )
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
$( hide) $( AVBTOOL) add_hash_footer \
--image $@ \
--partition_size $( BOARD_BOOTIMAGE_PARTITION_SIZE) \
2017-05-26 12:30:04 +02:00
--partition_name boot $( INTERNAL_AVB_BOOT_SIGNING_ARGS) \
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
$( BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
2016-01-29 22:59:17 +01:00
.PHONY : bootimage -nodeps
2017-05-26 12:30:04 +02:00
bootimage-nodeps : $( MKBOOTIMG ) $( AVBTOOL ) $( BOARD_AVB_BOOT_KEY_PATH )
2016-01-29 22:59:17 +01:00
@echo " make $@ : ignoring dependencies "
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $( INSTALLED_BOOTIMAGE_TARGET)
2017-11-17 08:22:37 +01:00
$( hide) $( call assert-max-image-size,$( INSTALLED_BOOTIMAGE_TARGET) ,$( call get-hash-image-max-size,$( BOARD_BOOTIMAGE_PARTITION_SIZE) ) )
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
$( hide) $( AVBTOOL) add_hash_footer \
2017-11-17 08:22:37 +01:00
--image $( INSTALLED_BOOTIMAGE_TARGET) \
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
--partition_size $( BOARD_BOOTIMAGE_PARTITION_SIZE) \
2017-05-26 12:30:04 +02:00
--partition_name boot $( INTERNAL_AVB_BOOT_SIGNING_ARGS) \
Update for new Android Verified Boot (AVB).
This updates the build system for the new Android Verified Boot
codebase. As this is based on Brillo Verified Boot, this change replaces
the existing BVB support.
Android Verified Boot is enabled by the BOARD_AVB_ENABLE variable
BOARD_AVB_ENABLE := true
This will make the build system create vbmeta.img which will contain a
hash descriptor for boot.img, a hashtree descriptor for system.img, a
kernel-cmdline descriptor for setting up dm-verity for system.img and
append a hash-tree to system.img.
Additionally, the descriptors are left in boot.img and system.img so a
third party can create their own vbmeta.img file linking - using the
option --chain_partition - to these images. If this is not needed
footers can be erased using the 'avbtool erase_footer' command. It's
also harmless to just leave them in the images.
By default, the algorithm SHA256_RSA4096 is used with a test key from
the AVB source directory. This can be overriden by the
BOARD_AVB_ALGORITHM and BOARD_AVB_KEY_PATH variables to use e.g. a
4096-bit RSA key and SHA-512:
BOARD_AVB_ALGORITHM := SHA512_RSA4096
BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem
To prevent rollback attacks, the rollback index should be increased on a
regular basis. The rollback index can be set with the
BOARD_AVB_ROLLBACK_INDEX variable:
BOARD_AVB_ROLLBACK_INDEX := 5
If this is not set, the rollback index defaults to 0.
The variable BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS can be used to specify
additional options passed to 'avbtool make_vbmeta_image'. Typical
options to be used here include '--prop', '--prop_from_file', and
'--chain_partition'.
The variable BOARD_AVBTOOL_BOOT_ADD_HASH_FOOTER_ARGS can be used to
specify additional options passed to 'avbtool add_hash_footer' for
boot.img. Typical options to be used here include '--hash_algorithm' and
'--salt'.
The variable BOARD_AVBTOOL_SYSTEM_ADD_HASHTREE_FOOTER_ARGS can be used
to specify additional options passed to 'avbtool add_hashtree_footer'
for systems.img. Typical options to be used here include
'--hash_algorithm', '--salt', and '--block_size'.
Bug: 31264226
Test: aosp_x86_64-eng 'm' and 'm dist' successful.
Change-Id: Ic9a61cfc65c148b12996e57f04da5432eef6b982
2016-09-28 23:55:27 +02:00
$( BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
2016-01-29 22:59:17 +01:00
2019-03-28 16:45:40 +01:00
e l s e i f e q ( t r u e , $( PRODUCT_SUPPORTS_BOOT_SIGNER ) ) # BOARD_AVB_ENABLE != true
2014-07-09 05:07:41 +02:00
$(INSTALLED_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( INTERNAL_BOOTIMAGE_FILES ) $( BOOT_SIGNER )
$( call pretty," Target boot image: $@ " )
2016-03-15 17:49:30 +01:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $@
2019-03-28 16:45:40 +01:00
$( BOOT_SIGNER) /boot $@ $( PRODUCT_VERITY_SIGNING_KEY) .pk8 $( PRODUCT_VERITY_SIGNING_KEY) .x509.pem $@
2014-07-09 05:07:41 +02:00
$( hide) $( call assert-max-image-size,$@ ,$( BOARD_BOOTIMAGE_PARTITION_SIZE) )
.PHONY : bootimage -nodeps
bootimage-nodeps : $( MKBOOTIMG ) $( BOOT_SIGNER )
@echo " make $@ : ignoring dependencies "
2016-03-15 17:49:30 +01:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $( INSTALLED_BOOTIMAGE_TARGET)
2019-03-28 16:45:40 +01:00
$( BOOT_SIGNER) /boot $( INSTALLED_BOOTIMAGE_TARGET) $( PRODUCT_VERITY_SIGNING_KEY) .pk8 $( PRODUCT_VERITY_SIGNING_KEY) .x509.pem $( INSTALLED_BOOTIMAGE_TARGET)
2014-07-09 05:07:41 +02:00
$( hide) $( call assert-max-image-size,$( INSTALLED_BOOTIMAGE_TARGET) ,$( BOARD_BOOTIMAGE_PARTITION_SIZE) )
2019-03-28 16:45:40 +01:00
e l s e i f e q ( t r u e , $( PRODUCT_SUPPORTS_VBOOT ) ) # PRODUCT_SUPPORTS_BOOT_SIGNER != true
2015-03-03 17:54:11 +01:00
2017-02-23 07:54:39 +01:00
$(INSTALLED_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( INTERNAL_BOOTIMAGE_FILES ) $( VBOOT_SIGNER ) $( FUTILITY )
2015-03-03 17:54:11 +01:00
$( call pretty," Target boot image: $@ " )
2016-03-15 17:49:30 +01:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $@ .unsigned
2019-03-28 16:45:40 +01:00
$( VBOOT_SIGNER) $( FUTILITY) $@ .unsigned $( PRODUCT_VBOOT_SIGNING_KEY) .vbpubk $( PRODUCT_VBOOT_SIGNING_KEY) .vbprivk $( PRODUCT_VBOOT_SIGNING_SUBKEY) .vbprivk $@ .keyblock $@
2015-03-03 17:54:11 +01:00
$( hide) $( call assert-max-image-size,$@ ,$( BOARD_BOOTIMAGE_PARTITION_SIZE) )
.PHONY : bootimage -nodeps
2017-02-23 07:54:39 +01:00
bootimage-nodeps : $( MKBOOTIMG ) $( VBOOT_SIGNER ) $( FUTILITY )
2015-03-03 17:54:11 +01:00
@echo " make $@ : ignoring dependencies "
2016-03-15 17:49:30 +01:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $( INSTALLED_BOOTIMAGE_TARGET) .unsigned
2019-03-28 16:45:40 +01:00
$( VBOOT_SIGNER) $( FUTILITY) $( INSTALLED_BOOTIMAGE_TARGET) .unsigned $( PRODUCT_VBOOT_SIGNING_KEY) .vbpubk $( PRODUCT_VBOOT_SIGNING_KEY) .vbprivk $( PRODUCT_VBOOT_SIGNING_SUBKEY) .vbprivk $( INSTALLED_BOOTIMAGE_TARGET) .keyblock $( INSTALLED_BOOTIMAGE_TARGET)
2015-03-03 17:54:11 +01:00
$( hide) $( call assert-max-image-size,$( INSTALLED_BOOTIMAGE_TARGET) ,$( BOARD_BOOTIMAGE_PARTITION_SIZE) )
e l s e # PRODUCT_SUPPORTS_VBOOT != true
2009-03-04 04:28:42 +01:00
$(INSTALLED_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( INTERNAL_BOOTIMAGE_FILES )
$( call pretty," Target boot image: $@ " )
2016-03-15 17:49:30 +01:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $@
2014-06-16 23:19:36 +02:00
$( hide) $( call assert-max-image-size,$@ ,$( BOARD_BOOTIMAGE_PARTITION_SIZE) )
2013-08-09 01:34:29 +02:00
.PHONY : bootimage -nodeps
bootimage-nodeps : $( MKBOOTIMG )
@echo " make $@ : ignoring dependencies "
2016-03-15 17:49:30 +01:00
$( hide) $( MKBOOTIMG) $( INTERNAL_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $( INSTALLED_BOOTIMAGE_TARGET)
2014-06-16 23:19:36 +02:00
$( hide) $( call assert-max-image-size,$( INSTALLED_BOOTIMAGE_TARGET) ,$( BOARD_BOOTIMAGE_PARTITION_SIZE) )
2013-08-09 01:34:29 +02:00
2009-03-04 04:28:42 +01:00
e n d i f # TARGET_BOOTIMAGE_USE_EXT2
2019-04-22 20:09:57 +02:00
e n d i f # BUILDING_BOOT_IMAGE
2009-03-04 04:28:42 +01:00
2018-08-15 01:17:12 +02:00
e l s e # TARGET_NO_KERNEL == "true"
2017-07-18 19:05:13 +02:00
i f d e f B O A R D _ P R E B U I L T _ B O O T I M A G E
i f n e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
# Remove when b/63676296 is resolved.
$( error Prebuilt bootimage is only supported for AB targets )
e n d i f
2019-06-20 07:27:45 +02:00
INSTALLED_BOOTIMAGE_TARGET := $( PRODUCT_OUT) /boot.img
2017-07-18 19:05:13 +02:00
$( eval $ ( call copy -one -file ,$ ( BOARD_PREBUILT_BOOTIMAGE ) ,$ ( INSTALLED_BOOTIMAGE_TARGET ) ) )
2018-08-15 01:17:12 +02:00
e l s e # BOARD_PREBUILT_BOOTIMAGE not defined
INSTALLED_BOOTIMAGE_TARGET :=
e n d i f # BOARD_PREBUILT_BOOTIMAGE
e n d i f # TARGET_NO_KERNEL
2009-03-04 04:28:42 +01:00
2019-07-10 19:49:37 +02:00
# -----------------------------------------------------------------
# vendor boot image
i f e q ( $( BUILDING_VENDOR_BOOT_IMAGE ) , t r u e )
i f e q ( $( PRODUCT_SUPPORTS_VERITY ) , t r u e )
$( error vboot 1.0 does not support vendor_boot partition)
e n d i f
INTERNAL_VENDOR_RAMDISK_FILES := $( filter $( TARGET_VENDOR_RAMDISK_OUT) /%, \
$( ALL_GENERATED_SOURCES) \
$( ALL_DEFAULT_INSTALLED_MODULES) )
INTERNAL_VENDOR_RAMDISK_TARGET := $( call intermediates-dir-for,PACKAGING,vendor-boot) /vendor-ramdisk.cpio.gz
2020-05-11 22:20:03 +02:00
$(INTERNAL_VENDOR_RAMDISK_TARGET) : $( MKBOOTFS ) $( INTERNAL_VENDOR_RAMDISK_FILES ) | $( COMPRESSION_COMMAND_DEPS )
$( MKBOOTFS) -d $( TARGET_OUT) $( TARGET_VENDOR_RAMDISK_OUT) | $( COMPRESSION_COMMAND) > $@
2019-07-10 19:49:37 +02:00
i f d e f B O A R D _ I N C L U D E _ D T B _ I N _ B O O T I M G
INTERNAL_VENDOR_BOOTIMAGE_ARGS += --dtb $( INSTALLED_DTBIMAGE_TARGET)
e n d i f
i f d e f B O A R D _ K E R N E L _ B A S E
INTERNAL_VENDOR_BOOTIMAGE_ARGS += --base $( BOARD_KERNEL_BASE)
e n d i f
i f d e f B O A R D _ K E R N E L _ P A G E S I Z E
INTERNAL_VENDOR_BOOTIMAGE_ARGS += --pagesize $( BOARD_KERNEL_PAGESIZE)
e n d i f
i f d e f I N T E R N A L _ K E R N E L _ C M D L I N E
INTERNAL_VENDOR_BOOTIMAGE_ARGS += --vendor_cmdline " $( INTERNAL_KERNEL_CMDLINE) "
e n d i f
INSTALLED_VENDOR_BOOTIMAGE_TARGET := $( PRODUCT_OUT) /vendor_boot.img
$(INSTALLED_VENDOR_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( INTERNAL_VENDOR_RAMDISK_TARGET ) $( INSTALLED_DTBIMAGE_TARGET )
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
$(INSTALLED_VENDOR_BOOTIMAGE_TARGET) : $( AVBTOOL ) $( BOARD_AVB_VENDOR_BOOTIMAGE_KEY_PATH )
$( call pretty," Target vendor_boot image: $@ " )
2020-05-11 09:00:35 +02:00
$( MKBOOTIMG) $( INTERNAL_VENDOR_BOOTIMAGE_ARGS) $( BOARD_MKBOOTIMG_ARGS) --vendor_ramdisk $( INTERNAL_VENDOR_RAMDISK_TARGET) --vendor_boot $@
2019-07-10 19:49:37 +02:00
$( call assert-max-image-size,$@ ,$( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE) )
$( AVBTOOL) add_hash_footer \
--image $@ \
--partition_size $( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE) \
--partition_name vendor_boot $( INTERNAL_AVB_VENDOR_BOOT_SIGNING_ARGS) \
$( BOARD_AVB_VENDOR_BOOT_ADD_HASH_FOOTER_ARGS)
e l s e
$(INSTALLED_VENDOR_BOOTIMAGE_TARGET) :
$( call pretty," Target vendor_boot image: $@ " )
2020-05-11 09:00:35 +02:00
$( MKBOOTIMG) $( INTERNAL_VENDOR_BOOTIMAGE_ARGS) $( BOARD_MKBOOTIMG_ARGS) --vendor_ramdisk $( INTERNAL_VENDOR_RAMDISK_TARGET) --vendor_boot $@
2019-07-10 19:49:37 +02:00
$( call assert-max-image-size,$@ ,$( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE) )
e n d i f
e n d i f # BUILDING_VENDOR_BOOT_IMAGE
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# NOTICE files
#
2012-03-01 12:34:41 +01:00
# We are required to publish the licenses for all code under BSD, GPL and
# Apache licenses (and possibly other more exotic ones as well). We err on the
# side of caution, so the licenses for other third-party code are included here
# too.
#
2009-03-04 04:28:42 +01:00
# This needs to be before the systemimage rules, because it adds to
# ALL_DEFAULT_INSTALLED_MODULES, which those use to pick which files
# go into the systemimage.
2012-02-29 20:18:08 +01:00
.PHONY : notice_files
2017-04-19 08:26:47 +02:00
# Create the rule to combine the files into text and html/xml forms
2019-06-13 18:43:26 +02:00
# $(1) - xml_excluded_system_product_odm|xml_excluded_vendor_product_odm
# xml_product|xml_odm|xml_system_ext|xml_system|html
2017-04-19 08:26:47 +02:00
# $(2) - Plain text output file
# $(3) - HTML/XML output file
# $(4) - File title
2019-06-17 06:48:42 +02:00
# $(5) - Directory to use. Notice files are all $(5)/src. Other
2009-03-04 04:28:42 +01:00
# directories in there will be used for scratch
2017-04-19 08:26:47 +02:00
# $(6) - Dependencies for the output files
2020-01-28 22:23:39 +01:00
# $(7) - Directories to exclude
2009-03-04 04:28:42 +01:00
#
# The algorithm here is that we go collect a hash for each of the notice
# files and write the names of the files that match that hash. Then
# to generate the real files, we go print out all of the files and their
# hashes.
#
# These rules are fairly complex, so they depend on this makefile so if
# it changes, they'll run again.
#
# TODO: We could clean this up so that we just record the locations of the
# original notice files instead of making rules to copy them somwehere.
# Then we could traverse that without quite as much bash drama.
d e f i n e c o m b i n e - n o t i c e - f i l e s
2020-04-29 00:57:32 +02:00
$(2) : PRIVATE_MESSAGE := $( 4)
$(2) : PRIVATE_DIR := $( 5)
$(2) : .KATI_IMPLICIT_OUTPUTS := $( 3)
$(2) : $( 6) $( BUILD_SYSTEM ) /Makefile build /make /tools /generate -notice -files .py
2020-01-28 22:23:39 +01:00
build/make/tools/generate-notice-files.py --text-output $( 2) $( foreach xdir, $( 7) , -e $( xdir) ) \
2019-06-13 18:43:26 +02:00
$( if $( filter $( 1) ,xml_excluded_vendor_product_odm) ,-e vendor -e product -e system_ext -e odm --xml-output, \
$( if $( filter $( 1) ,xml_excluded_system_product_odm) ,-e system -e product -e system_ext -e odm --xml-output, \
2018-11-26 19:12:05 +01:00
$( if $( filter $( 1) ,xml_product) ,-i product --xml-output, \
2019-06-25 08:58:13 +02:00
$( if $( filter $( 1) ,xml_system_ext) ,-i system_ext --xml-output, \
2019-06-13 18:43:26 +02:00
$( if $( filter $( 1) ,xml_system) ,-i system --xml-output, \
$( if $( filter $( 1) ,xml_odm) ,-i odm --xml-output, \
--html-output) ) ) ) ) ) $( 3) \
2018-11-26 19:12:05 +01:00
-t $$ ( PRIVATE_MESSAGE) -s $$ ( PRIVATE_DIR) /src
2017-04-19 08:26:47 +02:00
notice_files : $( 2) $( 3)
2009-03-04 04:28:42 +01:00
e n d e f
2018-11-13 00:29:13 +01:00
# Notice file logic isn't relevant for TARGET_BUILD_APPS
i f n d e f T A R G E T _ B U I L D _ A P P S
2009-03-04 04:28:42 +01:00
# TODO These intermediate NOTICE.txt/NOTICE.html files should go into
# TARGET_OUT_NOTICE_FILES now that the notice files are gathered from
# the src subdirectory.
2012-02-29 20:18:08 +01:00
target_notice_file_txt := $( TARGET_OUT_INTERMEDIATES) /NOTICE.txt
tools_notice_file_txt := $( HOST_OUT_INTERMEDIATES) /NOTICE.txt
2009-03-04 04:28:42 +01:00
tools_notice_file_html := $( HOST_OUT_INTERMEDIATES) /NOTICE.html
2018-11-13 00:29:13 +01:00
kernel_notice_file := $( TARGET_OUT_NOTICE_FILES) /src/kernel.txt
winpthreads_notice_file := $( TARGET_OUT_NOTICE_FILES) /src/winpthreads.txt
pdk_fusion_notice_files := $( filter $( TARGET_OUT_NOTICE_FILES) /%, $( ALL_PDK_FUSION_FILES) )
2009-03-04 04:28:42 +01:00
2020-01-28 22:23:39 +01:00
# Some targets get included under $(PRODUCT_OUT) for debug symbols or other
# reasons--not to be flashed onto any device. Targets under these directories
# need no associated notice file on the device UI.
exclude_target_dirs := apex
2017-12-15 23:49:55 +01:00
# TODO(b/69865032): Make PRODUCT_NOTICE_SPLIT the default behavior.
2018-11-13 00:29:13 +01:00
i f n e q ( $( PRODUCT_NOTICE_SPLIT ) , t r u e )
target_notice_file_html := $( TARGET_OUT_INTERMEDIATES) /NOTICE.html
target_notice_file_html_gz := $( TARGET_OUT_INTERMEDIATES) /NOTICE.html.gz
installed_notice_html_or_xml_gz := $( TARGET_OUT) /etc/NOTICE.html.gz
$( eval $ ( call combine -notice -files , html , \
2018-11-26 19:12:05 +01:00
$( target_notice_file_txt) , \
$( target_notice_file_html) , \
"Notices for files contained in the filesystem images in this directory:" , \
$( TARGET_OUT_NOTICE_FILES) , \
2020-01-28 22:23:39 +01:00
$( ALL_DEFAULT_INSTALLED_MODULES) $( kernel_notice_file) $( pdk_fusion_notice_files) , \
$( exclude_target_dirs) ) )
2018-11-13 00:29:13 +01:00
$(target_notice_file_html_gz) : $( target_notice_file_html ) | $( MINIGZIP )
$( hide) $( MINIGZIP) -9 < $< > $@
$(installed_notice_html_or_xml_gz) : $( target_notice_file_html_gz )
$( copy-file-to-target)
e l s e
target_notice_file_xml := $( TARGET_OUT_INTERMEDIATES) /NOTICE.xml
target_notice_file_xml_gz := $( TARGET_OUT_INTERMEDIATES) /NOTICE.xml.gz
2017-04-19 08:26:47 +02:00
installed_notice_html_or_xml_gz := $( TARGET_OUT) /etc/NOTICE.xml.gz
target_vendor_notice_file_txt := $( TARGET_OUT_INTERMEDIATES) /NOTICE_VENDOR.txt
target_vendor_notice_file_xml := $( TARGET_OUT_INTERMEDIATES) /NOTICE_VENDOR.xml
target_vendor_notice_file_xml_gz := $( TARGET_OUT_INTERMEDIATES) /NOTICE_VENDOR.xml.gz
installed_vendor_notice_xml_gz := $( TARGET_OUT_VENDOR) /etc/NOTICE.xml.gz
2018-07-09 19:38:38 +02:00
target_product_notice_file_txt := $( TARGET_OUT_INTERMEDIATES) /NOTICE_PRODUCT.txt
target_product_notice_file_xml := $( TARGET_OUT_INTERMEDIATES) /NOTICE_PRODUCT.xml
target_product_notice_file_xml_gz := $( TARGET_OUT_INTERMEDIATES) /NOTICE_PRODUCT.xml.gz
installed_product_notice_xml_gz := $( TARGET_OUT_PRODUCT) /etc/NOTICE.xml.gz
2018-08-28 19:04:03 +02:00
2019-06-25 08:58:13 +02:00
target_system_ext_notice_file_txt := $( TARGET_OUT_INTERMEDIATES) /NOTICE_SYSTEM_EXT.txt
target_system_ext_notice_file_xml := $( TARGET_OUT_INTERMEDIATES) /NOTICE_SYSTEM_EXT.xml
target_system_ext_notice_file_xml_gz := $( TARGET_OUT_INTERMEDIATES) /NOTICE_SYSTEM_EXT.xml.gz
installed_system_ext_notice_xml_gz := $( TARGET_OUT_SYSTEM_EXT) /etc/NOTICE.xml.gz
2017-04-19 08:26:47 +02:00
2019-07-16 23:38:43 +02:00
target_odm_notice_file_txt := $( TARGET_OUT_INTERMEDIATES) /NOTICE_ODM.txt
target_odm_notice_file_xml := $( TARGET_OUT_INTERMEDIATES) /NOTICE_ODM.xml
target_odm_notice_file_xml_gz := $( TARGET_OUT_INTERMEDIATES) /NOTICE_ODM.xml.gz
installed_odm_notice_xml_gz := $( TARGET_OUT_ODM) /etc/NOTICE.xml.gz
2018-11-13 00:33:47 +01:00
# Notice files are copied to TARGET_OUT_NOTICE_FILES as a side-effect of their module
# being built. A notice xml file must depend on all modules that could potentially
# install a license file relevant to it.
license_modules := $( ALL_DEFAULT_INSTALLED_MODULES) $( kernel_notice_file) $( pdk_fusion_notice_files)
2020-01-28 22:23:39 +01:00
# Only files copied to a system image need system image notices.
license_modules := $( filter $( PRODUCT_OUT) /%,$( license_modules) )
2018-11-13 00:33:47 +01:00
# Phonys/fakes don't have notice files (though their deps might)
license_modules := $( filter-out $( TARGET_OUT_FAKE) /%,$( license_modules) )
2019-05-29 11:28:22 +02:00
# testcases are not relevant to the system image.
license_modules := $( filter-out $( TARGET_OUT_TESTCASES) /%,$( license_modules) )
2020-01-28 22:23:39 +01:00
# filesystem images: system, vendor, product, system_ext, and odm
2019-06-13 18:43:26 +02:00
license_modules_system := $( filter $( TARGET_OUT) /%,$( license_modules) )
2018-11-13 00:33:47 +01:00
license_modules_vendor := $( filter $( TARGET_OUT_VENDOR) /%,$( license_modules) )
license_modules_product := $( filter $( TARGET_OUT_PRODUCT) /%,$( license_modules) )
2019-06-25 08:58:13 +02:00
license_modules_system_ext := $( filter $( TARGET_OUT_SYSTEM_EXT) /%,$( license_modules) )
2019-07-16 23:38:43 +02:00
license_modules_odm := $( filter $( TARGET_OUT_ODM) /%,$( license_modules) )
2019-06-13 18:43:26 +02:00
license_modules_agg := $( license_modules_system) \
$( license_modules_vendor) \
2019-07-16 23:38:43 +02:00
$( license_modules_product) \
$( license_modules_system_ext) \
$( license_modules_odm)
2020-01-28 22:23:39 +01:00
# targets used for debug symbols only and do not get copied to the device
license_modules_symbols_only := $( filter $( PRODUCT_OUT) /apex/%,$( license_modules) )
2019-07-31 00:46:35 +02:00
license_modules_rest := $( filter-out $( license_modules_agg) ,$( license_modules) )
2020-01-28 22:23:39 +01:00
license_modules_rest := $( filter-out $( license_modules_symbols_only) ,$( license_modules_rest) )
# Identify the other targets we expect to have notices for:
# targets copied to the device but are not readable by the UI (e.g. must boot
# into a different partition to read or don't have an associated /etc
# directory) must have their notices built somewhere readable.
license_modules_rehomed := $( filter-out $( PRODUCT_OUT) /%/%,$( license_modules_rest) ) # files in root have no /etc
license_modules_rehomed += $( filter $( PRODUCT_OUT) /recovery/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /root/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /data/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /ramdisk/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /debug_ramdisk/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /vendor-ramdisk/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /persist/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /persist.img,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /system_other/%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /kernel%,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /%.img,$( license_modules_rest) )
license_modules_rehomed += $( filter $( PRODUCT_OUT) /%.bin,$( license_modules_rest) )
# after removing targets in system images, targets reported in system images, and
# targets used for debug symbols that do not need notices, nothing must remain.
license_modules_rest := $( filter-out $( license_modules_rehomed) ,$( license_modules_rest) )
$( call maybe -print -list -and -error , $ ( license_modules_rest ) , \
" Targets added under $( PRODUCT_OUT) / unaccounted for notice handling. " )
2019-06-13 18:43:26 +02:00
# If we are building in a configuration that includes a prebuilt vendor.img, we can't
# update its notice file, so include those notices in the system partition instead
i f d e f B O A R D _ P R E B U I L T _ V E N D O R I M A G E
2020-01-28 22:23:39 +01:00
license_modules_system += $( license_modules_rehomed)
2019-06-13 18:43:26 +02:00
system_xml_directories := xml_excluded_vendor_product_odm
system_notice_file_message := "Notices for files contained in all filesystem images except vendor/system_ext/product/odm in this directory:"
2019-07-31 00:46:35 +02:00
e l s e
2020-01-28 22:23:39 +01:00
license_modules_vendor += $( license_modules_rehomed)
2019-07-31 00:46:35 +02:00
system_xml_directories := xml_system
system_notice_file_message := "Notices for files contained in the system filesystem image in this directory:"
2019-06-13 18:43:26 +02:00
e n d i f
2009-03-04 04:28:42 +01:00
2019-06-13 18:43:26 +02:00
$( eval $ ( call combine -notice -files , $ ( system_xml_directories ) , \
2018-11-26 19:12:05 +01:00
$( target_notice_file_txt) , \
$( target_notice_file_xml) , \
2019-06-13 18:43:26 +02:00
$( system_notice_file_message) , \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_NOTICE_FILES) , \
2020-01-28 22:23:39 +01:00
$( license_modules_system) , \
$( exclude_target_dirs) ) )
2019-06-13 18:43:26 +02:00
$( eval $ ( call combine -notice -files , xml_excluded_system_product_odm , \
2018-11-26 19:12:05 +01:00
$( target_vendor_notice_file_txt) , \
$( target_vendor_notice_file_xml) , \
2019-06-13 18:43:26 +02:00
"Notices for files contained in all filesystem images except system/system_ext/product/odm in this directory:" , \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_NOTICE_FILES) , \
2020-01-28 22:23:39 +01:00
$( license_modules_vendor) , \
$( exclude_target_dirs) ) )
2018-07-09 19:38:38 +02:00
$( eval $ ( call combine -notice -files , xml_product , \
2018-11-26 19:12:05 +01:00
$( target_product_notice_file_txt) , \
$( target_product_notice_file_xml) , \
"Notices for files contained in the product filesystem image in this directory:" , \
$( TARGET_OUT_NOTICE_FILES) , \
2020-01-28 22:23:39 +01:00
$( license_modules_product) , \
$( exclude_target_dirs) ) )
2019-06-25 08:58:13 +02:00
$( eval $ ( call combine -notice -files , xml_system_ext , \
$( target_system_ext_notice_file_txt) , \
$( target_system_ext_notice_file_xml) , \
"Notices for files contained in the system_ext filesystem image in this directory:" , \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_NOTICE_FILES) , \
2020-01-28 22:23:39 +01:00
$( license_modules_system_ext) , \
$( exclude_target_dirs) ) )
2019-07-16 23:38:43 +02:00
$( eval $ ( call combine -notice -files , xml_odm , \
$( target_odm_notice_file_txt) , \
$( target_odm_notice_file_xml) , \
"Notices for files contained in the odm filesystem image in this directory:" , \
$( TARGET_OUT_NOTICE_FILES) , \
2020-01-28 22:23:39 +01:00
$( license_modules_odm) , \
$( exclude_target_dirs) ) )
2009-03-04 04:28:42 +01:00
2018-11-13 00:29:13 +01:00
$(target_notice_file_xml_gz) : $( target_notice_file_xml ) | $( MINIGZIP )
2009-06-15 23:30:14 +02:00
$( hide) $( MINIGZIP) -9 < $< > $@
2017-04-19 08:26:47 +02:00
$(target_vendor_notice_file_xml_gz) : $( target_vendor_notice_file_xml ) | $( MINIGZIP )
$( hide) $( MINIGZIP) -9 < $< > $@
2018-07-09 19:38:38 +02:00
$(target_product_notice_file_xml_gz) : $( target_product_notice_file_xml ) | $( MINIGZIP )
$( hide) $( MINIGZIP) -9 < $< > $@
2019-06-25 08:58:13 +02:00
$(target_system_ext_notice_file_xml_gz) : $( target_system_ext_notice_file_xml ) | $( MINIGZIP )
2018-08-28 19:04:03 +02:00
$( hide) $( MINIGZIP) -9 < $< > $@
2019-07-16 23:38:43 +02:00
$(target_odm_notice_file_xml_gz) : $( target_odm_notice_file_xml ) | $( MINIGZIP )
$( hide) $( MINIGZIP) -9 < $< > $@
2018-11-13 00:29:13 +01:00
$(installed_notice_html_or_xml_gz) : $( target_notice_file_xml_gz )
$( copy-file-to-target)
$(installed_vendor_notice_xml_gz) : $( target_vendor_notice_file_xml_gz )
$( copy-file-to-target)
$(installed_product_notice_xml_gz) : $( target_product_notice_file_xml_gz )
$( copy-file-to-target)
2019-06-25 08:58:13 +02:00
$(installed_system_ext_notice_xml_gz) : $( target_system_ext_notice_file_xml_gz )
2018-08-28 19:04:03 +02:00
$( copy-file-to-target)
2019-07-16 23:38:43 +02:00
$(installed_odm_notice_xml_gz) : $( target_odm_notice_file_xml_gz )
$( copy-file-to-target)
2018-08-28 19:04:03 +02:00
2019-07-30 08:45:19 +02:00
ALL_DEFAULT_INSTALLED_MODULES += $( installed_notice_html_or_xml_gz)
ALL_DEFAULT_INSTALLED_MODULES += $( installed_vendor_notice_xml_gz)
ALL_DEFAULT_INSTALLED_MODULES += $( installed_product_notice_xml_gz)
ALL_DEFAULT_INSTALLED_MODULES += $( installed_system_ext_notice_xml_gz)
ALL_DEFAULT_INSTALLED_MODULES += $( installed_odm_notice_xml_gz)
2018-11-13 00:29:13 +01:00
e n d i f # PRODUCT_NOTICE_SPLIT
2019-07-30 08:45:19 +02:00
ALL_DEFAULT_INSTALLED_MODULES += $( installed_notice_html_or_xml_gz)
2018-11-13 00:29:13 +01:00
$( eval $ ( call combine -notice -files , html , \
2018-11-26 19:12:05 +01:00
$( tools_notice_file_txt) , \
$( tools_notice_file_html) , \
"Notices for files contained in the tools directory:" , \
$( HOST_OUT_NOTICE_FILES) , \
$( ALL_DEFAULT_INSTALLED_MODULES) \
2020-01-28 22:23:39 +01:00
$( winpthreads_notice_file) , \
$( exclude_target_dirs) ) )
2018-11-13 00:29:13 +01:00
2013-08-23 05:02:03 +02:00
e n d i f # TARGET_BUILD_APPS
2009-03-04 04:28:42 +01:00
# The kernel isn't really a module, so to get its module file in there, we
# make the target NOTICE files depend on this particular file too, which will
# then be in the right directory for the find in combine-notice-files to work.
2019-05-29 00:36:47 +02:00
$( eval $ ( call copy -one -file ,$ ( BUILD_SYSTEM ) /LINUX_KERNEL_COPYING ,$ ( kernel_notice_file ) ) )
2009-03-04 04:28:42 +01:00
2019-05-29 00:36:47 +02:00
$( eval $ ( call copy -one -file ,$ ( BUILD_SYSTEM ) /WINPTHREADS_COPYING ,$ ( winpthreads_notice_file ) ) )
2009-03-04 04:28:42 +01:00
2009-06-15 23:30:14 +02:00
2009-03-04 04:28:42 +01:00
# #################################################################
# Targets for user images
# #################################################################
2010-06-16 23:31:34 +02:00
INTERNAL_USERIMAGES_EXT_VARIANT :=
2009-03-04 04:28:42 +01:00
i f e q ( $( TARGET_USERIMAGES_USE_EXT 2) , t r u e )
2010-05-07 11:23:59 +02:00
INTERNAL_USERIMAGES_EXT_VARIANT := ext2
e l s e
i f e q ( $( TARGET_USERIMAGES_USE_EXT 3) , t r u e )
INTERNAL_USERIMAGES_EXT_VARIANT := ext3
e l s e
i f e q ( $( TARGET_USERIMAGES_USE_EXT 4) , t r u e )
INTERNAL_USERIMAGES_EXT_VARIANT := ext4
e n d i f
e n d i f
e n d i f
2014-10-23 05:01:22 +02:00
# These options tell the recovery updater/installer how to mount the partitions writebale.
# <fstype>=<fstype_opts>[|<fstype_opts>]...
# fstype_opts := <opt>[,<opt>]...
# opt := <name>[=<value>]
2014-10-24 01:27:03 +02:00
# The following worked on Nexus devices with Kernel 3.1, 3.4, 3.10
DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS := ext4 = max_batch_time = 0,commit= 1,data= ordered,barrier= 1,errors= panic,nodelalloc
2014-10-23 05:01:22 +02:00
2010-11-18 00:40:38 +01:00
i f n e q ( t r u e , $( TARGET_USERIMAGES_SPARSE_EXT_DISABLED ) )
INTERNAL_USERIMAGES_SPARSE_EXT_FLAG := -s
e n d i f
2019-06-24 19:39:54 +02:00
i f n e q ( t r u e , $( TARGET_USERIMAGES_SPARSE_SQUASHFS_DISABLED ) )
INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG := -s
2014-06-16 23:17:40 +02:00
e n d i f
2019-10-16 19:53:41 +02:00
i f n e q ( t r u e , $( TARGET_USERIMAGES_SPARSE_F 2FS_DISABLED ) )
INTERNAL_USERIMAGES_SPARSE_F2FS_FLAG := -S
e n d i f
2014-06-16 23:17:40 +02:00
2019-06-24 19:39:54 +02:00
INTERNAL_USERIMAGES_DEPS := \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
2019-06-24 19:39:54 +02:00
$( MKE2FS_CONF) \
2019-05-07 22:12:21 +02:00
$( MKEXTUSERIMG)
2017-06-21 22:51:46 +02:00
2019-06-24 19:39:54 +02:00
i f e q ( $( TARGET_USERIMAGES_USE_F 2FS ) , t r u e )
INTERNAL_USERIMAGES_DEPS += $( MKF2FSUSERIMG)
2015-12-16 03:00:14 +01:00
e n d i f
2019-06-24 19:39:54 +02:00
2019-06-25 08:58:13 +02:00
i f n e q ( $( filter $ ( BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE ) $ ( BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE ) $ ( BOARD_ODMIMAGE_FILE_SYSTEM_TYPE ) $ ( BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE ) $ ( BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE ) ,squashfs ) , )
2019-06-24 19:39:54 +02:00
INTERNAL_USERIMAGES_DEPS += $( MKSQUASHFSUSERIMG)
2015-03-03 21:30:37 +01:00
e n d i f
2019-03-28 16:45:40 +01:00
i f e q ( t r u e , $( PRODUCT_SUPPORTS_VERITY ) )
2018-03-16 07:21:28 +01:00
INTERNAL_USERIMAGES_DEPS += $( BUILD_VERITY_METADATA) $( BUILD_VERITY_TREE) $( APPEND2SIMG) $( VERITY_SIGNER)
2019-03-28 16:45:40 +01:00
i f e q ( t r u e , $( PRODUCT_SUPPORTS_VERITY_FEC ) )
2015-05-20 08:30:57 +02:00
INTERNAL_USERIMAGES_DEPS += $( FEC)
e n d i f
2013-06-17 02:26:08 +02:00
e n d i f
2019-06-24 19:39:54 +02:00
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
INTERNAL_USERIMAGES_DEPS += $( AVBTOOL)
e n d i f
2012-11-21 19:47:00 +01:00
2019-06-24 19:39:54 +02:00
# Get a colon-separated list of search paths.
INTERNAL_USERIMAGES_BINARY_PATHS := $( subst $( space) ,:,$( sort $( dir $( INTERNAL_USERIMAGES_DEPS) ) ) )
2016-03-03 06:07:23 +01:00
2019-06-24 19:39:54 +02:00
SELINUX_FC := $( call intermediates-dir-for,ETC,file_contexts.bin) /file_contexts.bin
INTERNAL_USERIMAGES_DEPS += $( SELINUX_FC)
2017-03-11 01:53:45 +01:00
2018-11-09 19:27:23 +01:00
i f e q ( t r u e , $( PRODUCT_USE_DYNAMIC_PARTITIONS ) )
2018-06-19 01:32:35 +02:00
2019-03-28 16:45:40 +01:00
i f e q ( $( PRODUCT_SUPPORTS_VERITY ) , t r u e )
2018-06-19 01:32:35 +02:00
$( error vboot 1.0 doesn' t support logical partition)
e n d i f
2018-11-09 19:27:23 +01:00
e n d i f # PRODUCT_USE_DYNAMIC_PARTITIONS
2018-06-19 01:32:35 +02:00
2011-10-29 02:02:30 +02:00
# $(1): the path of the output dictionary file
2019-06-25 08:58:13 +02:00
# $(2): a subset of "system vendor cache userdata product system_ext oem odm"
2018-05-30 20:16:46 +02:00
# $(3): additional "key=value" pairs to append to the dictionary file.
d e f i n e g e n e r a t e - i m a g e - p r o p - d i c t i o n a r y
$( if $ ( filter $ ( 2) ,system ) ,\
$( if $( BOARD_SYSTEMIMAGE_PARTITION_SIZE) ,$( hide) echo " system_size= $( BOARD_SYSTEMIMAGE_PARTITION_SIZE) " >> $( 1) )
2019-01-29 06:30:18 +01:00
$( if $( INTERNAL_SYSTEM_OTHER_PARTITION_SIZE) ,$( hide) echo " system_other_size= $( INTERNAL_SYSTEM_OTHER_PARTITION_SIZE) " >> $( 1) )
2018-05-30 20:16:46 +02:00
$( if $( BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE) ,$( hide) echo " system_fs_type= $( BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE) " >> $( 1) )
$( if $( BOARD_SYSTEMIMAGE_EXTFS_INODE_COUNT) ,$( hide) echo " system_extfs_inode_count= $( BOARD_SYSTEMIMAGE_EXTFS_INODE_COUNT) " >> $( 1) )
$( if $( BOARD_SYSTEMIMAGE_EXTFS_RSV_PCT) ,$( hide) echo " system_extfs_rsv_pct= $( BOARD_SYSTEMIMAGE_EXTFS_RSV_PCT) " >> $( 1) )
$( if $( BOARD_SYSTEMIMAGE_JOURNAL_SIZE) ,$( hide) echo " system_journal_size= $( BOARD_SYSTEMIMAGE_JOURNAL_SIZE) " >> $( 1) )
$( if $( BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR) ,$( hide) echo " system_squashfs_compressor= $( BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR) " >> $( 1) )
$( if $( BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT) ,$( hide) echo " system_squashfs_compressor_opt= $( BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT) " >> $( 1) )
$( if $( BOARD_SYSTEMIMAGE_SQUASHFS_BLOCK_SIZE) ,$( hide) echo " system_squashfs_block_size= $( BOARD_SYSTEMIMAGE_SQUASHFS_BLOCK_SIZE) " >> $( 1) )
$( if $( BOARD_SYSTEMIMAGE_SQUASHFS_DISABLE_4K_ALIGN) ,$( hide) echo " system_squashfs_disable_4k_align= $( BOARD_SYSTEMIMAGE_SQUASHFS_DISABLE_4K_ALIGN) " >> $( 1) )
2019-03-28 16:45:40 +01:00
$( if $( PRODUCT_SYSTEM_BASE_FS_PATH) ,$( hide) echo " system_base_fs_file= $( PRODUCT_SYSTEM_BASE_FS_PATH) " >> $( 1) )
$( if $( PRODUCT_SYSTEM_HEADROOM) ,$( hide) echo " system_headroom= $( PRODUCT_SYSTEM_HEADROOM) " >> $( 1) )
2018-06-19 01:32:35 +02:00
$( if $( BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE) ,$( hide) echo " system_reserved_size= $( BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE) " >> $( 1) )
2019-05-14 00:58:14 +02:00
$( hide) echo " system_selinux_fc= $( SELINUX_FC) " >> $( 1)
2018-05-30 20:16:46 +02:00
)
$( if $ ( filter $ ( 2) ,userdata ) ,\
$( if $( BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE) ,$( hide) echo " userdata_fs_type= $( BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE) " >> $( 1) )
$( if $( BOARD_USERDATAIMAGE_PARTITION_SIZE) ,$( hide) echo " userdata_size= $( BOARD_USERDATAIMAGE_PARTITION_SIZE) " >> $( 1) )
2019-12-18 02:36:31 +01:00
$( if $( PRODUCT_FS_CASEFOLD) ,$( hide) echo " needs_casefold= $( PRODUCT_FS_CASEFOLD) " >> $( 1) )
$( if $( PRODUCT_QUOTA_PROJID) ,$( hide) echo " needs_projid= $( PRODUCT_QUOTA_PROJID) " >> $( 1) )
2019-05-14 00:58:14 +02:00
$( hide) echo " userdata_selinux_fc= $( SELINUX_FC) " >> $( 1)
2018-05-30 20:16:46 +02:00
)
$( if $ ( filter $ ( 2) ,cache ) ,\
$( if $( BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE) ,$( hide) echo " cache_fs_type= $( BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE) " >> $( 1) )
$( if $( BOARD_CACHEIMAGE_PARTITION_SIZE) ,$( hide) echo " cache_size= $( BOARD_CACHEIMAGE_PARTITION_SIZE) " >> $( 1) )
2019-05-14 00:58:14 +02:00
$( hide) echo " cache_selinux_fc= $( SELINUX_FC) " >> $( 1)
2018-05-30 20:16:46 +02:00
)
$( if $ ( filter $ ( 2) ,vendor ) ,\
$( if $( BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE) ,$( hide) echo " vendor_fs_type= $( BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_EXTFS_INODE_COUNT) ,$( hide) echo " vendor_extfs_inode_count= $( BOARD_VENDORIMAGE_EXTFS_INODE_COUNT) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_EXTFS_RSV_PCT) ,$( hide) echo " vendor_extfs_rsv_pct= $( BOARD_VENDORIMAGE_EXTFS_RSV_PCT) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_PARTITION_SIZE) ,$( hide) echo " vendor_size= $( BOARD_VENDORIMAGE_PARTITION_SIZE) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_JOURNAL_SIZE) ,$( hide) echo " vendor_journal_size= $( BOARD_VENDORIMAGE_JOURNAL_SIZE) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR) ,$( hide) echo " vendor_squashfs_compressor= $( BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR_OPT) ,$( hide) echo " vendor_squashfs_compressor_opt= $( BOARD_VENDORIMAGE_SQUASHFS_COMPRESSOR_OPT) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_SQUASHFS_BLOCK_SIZE) ,$( hide) echo " vendor_squashfs_block_size= $( BOARD_VENDORIMAGE_SQUASHFS_BLOCK_SIZE) " >> $( 1) )
$( if $( BOARD_VENDORIMAGE_SQUASHFS_DISABLE_4K_ALIGN) ,$( hide) echo " vendor_squashfs_disable_4k_align= $( BOARD_VENDORIMAGE_SQUASHFS_DISABLE_4K_ALIGN) " >> $( 1) )
2019-03-28 16:45:40 +01:00
$( if $( PRODUCT_VENDOR_BASE_FS_PATH) ,$( hide) echo " vendor_base_fs_file= $( PRODUCT_VENDOR_BASE_FS_PATH) " >> $( 1) )
2018-06-20 01:23:16 +02:00
$( if $( BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE) ,$( hide) echo " vendor_reserved_size= $( BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE) " >> $( 1) )
2019-05-14 00:58:14 +02:00
$( hide) echo " vendor_selinux_fc= $( SELINUX_FC) " >> $( 1)
2018-05-30 20:16:46 +02:00
)
$( if $ ( filter $ ( 2) ,product ) ,\
$( if $( BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE) ,$( hide) echo " product_fs_type= $( BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_EXTFS_INODE_COUNT) ,$( hide) echo " product_extfs_inode_count= $( BOARD_PRODUCTIMAGE_EXTFS_INODE_COUNT) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_EXTFS_RSV_PCT) ,$( hide) echo " product_extfs_rsv_pct= $( BOARD_PRODUCTIMAGE_EXTFS_RSV_PCT) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_PARTITION_SIZE) ,$( hide) echo " product_size= $( BOARD_PRODUCTIMAGE_PARTITION_SIZE) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_JOURNAL_SIZE) ,$( hide) echo " product_journal_size= $( BOARD_PRODUCTIMAGE_JOURNAL_SIZE) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_SQUASHFS_COMPRESSOR) ,$( hide) echo " product_squashfs_compressor= $( BOARD_PRODUCTIMAGE_SQUASHFS_COMPRESSOR) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_SQUASHFS_COMPRESSOR_OPT) ,$( hide) echo " product_squashfs_compressor_opt= $( BOARD_PRODUCTIMAGE_SQUASHFS_COMPRESSOR_OPT) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_SQUASHFS_BLOCK_SIZE) ,$( hide) echo " product_squashfs_block_size= $( BOARD_PRODUCTIMAGE_SQUASHFS_BLOCK_SIZE) " >> $( 1) )
$( if $( BOARD_PRODUCTIMAGE_SQUASHFS_DISABLE_4K_ALIGN) ,$( hide) echo " product_squashfs_disable_4k_align= $( BOARD_PRODUCTIMAGE_SQUASHFS_DISABLE_4K_ALIGN) " >> $( 1) )
2019-03-28 16:45:40 +01:00
$( if $( PRODUCT_PRODUCT_BASE_FS_PATH) ,$( hide) echo " product_base_fs_file= $( PRODUCT_PRODUCT_BASE_FS_PATH) " >> $( 1) )
2018-07-21 00:19:34 +02:00
$( if $( BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE) ,$( hide) echo " product_reserved_size= $( BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE) " >> $( 1) )
2019-05-14 00:58:14 +02:00
$( hide) echo " product_selinux_fc= $( SELINUX_FC) " >> $( 1)
2018-05-30 20:16:46 +02:00
)
2019-06-25 08:58:13 +02:00
$( if $ ( filter $ ( 2) ,system_ext ) ,\
$( if $( BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE) ,$( hide) echo " system_ext_fs_type= $( BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_EXTFS_INODE_COUNT) ,$( hide) echo " system_ext_extfs_inode_count= $( BOARD_SYSTEM_EXTIMAGE_EXTFS_INODE_COUNT) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_EXTFS_RSV_PCT) ,$( hide) echo " system_ext_extfs_rsv_pct= $( BOARD_SYSTEM_EXTIMAGE_EXTFS_RSV_PCT) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE) ,$( hide) echo " system_ext_size= $( BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_JOURNAL_SIZE) ,$( hide) echo " system_ext_journal_size= $( BOARD_SYSTEM_EXTIMAGE_JOURNAL_SIZE) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_COMPRESSOR) ,$( hide) echo " system_ext_squashfs_compressor= $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_COMPRESSOR) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_COMPRESSOR_OPT) ,$( hide) echo " system_ext_squashfs_compressor_opt= $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_COMPRESSOR_OPT) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_BLOCK_SIZE) ,$( hide) echo " system_ext_squashfs_block_size= $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_BLOCK_SIZE) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_DISABLE_4K_ALIGN) ,$( hide) echo " system_ext_squashfs_disable_4k_align= $( BOARD_SYSTEM_EXTIMAGE_SQUASHFS_DISABLE_4K_ALIGN) " >> $( 1) )
$( if $( BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE) ,$( hide) echo " system_ext_reserved_size= $( BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE) " >> $( 1) )
$( hide) echo " system_ext_selinux_fc= $( SELINUX_FC) " >> $( 1)
2018-05-29 14:09:01 +02:00
)
2017-11-14 16:42:30 +01:00
$( if $ ( filter $ ( 2) ,odm ) ,\
$( if $( BOARD_ODMIMAGE_FILE_SYSTEM_TYPE) ,$( hide) echo " odm_fs_type= $( BOARD_ODMIMAGE_FILE_SYSTEM_TYPE) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_EXTFS_INODE_COUNT) ,$( hide) echo " odm_extfs_inode_count= $( BOARD_ODMIMAGE_EXTFS_INODE_COUNT) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_EXTFS_RSV_PCT) ,$( hide) echo " odm_extfs_rsv_pct= $( BOARD_ODMIMAGE_EXTFS_RSV_PCT) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_PARTITION_SIZE) ,$( hide) echo " odm_size= $( BOARD_ODMIMAGE_PARTITION_SIZE) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_JOURNAL_SIZE) ,$( hide) echo " odm_journal_size= $( BOARD_ODMIMAGE_JOURNAL_SIZE) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR) ,$( hide) echo " odm_squashfs_compressor= $( BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR_OPT) ,$( hide) echo " odm_squashfs_compressor_opt= $( BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR_OPT) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_SQUASHFS_BLOCK_SIZE) ,$( hide) echo " odm_squashfs_block_size= $( BOARD_ODMIMAGE_SQUASHFS_BLOCK_SIZE) " >> $( 1) )
$( if $( BOARD_ODMIMAGE_SQUASHFS_DISABLE_4K_ALIGN) ,$( hide) echo " odm_squashfs_disable_4k_align= $( BOARD_ODMIMAGE_SQUASHFS_DISABLE_4K_ALIGN) " >> $( 1) )
2019-03-28 16:45:40 +01:00
$( if $( PRODUCT_ODM_BASE_FS_PATH) ,$( hide) echo " odm_base_fs_file= $( PRODUCT_ODM_BASE_FS_PATH) " >> $( 1) )
2017-11-14 16:42:30 +01:00
$( if $( BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE) ,$( hide) echo " odm_reserved_size= $( BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE) " >> $( 1) )
2019-05-14 00:58:14 +02:00
$( hide) echo " odm_selinux_fc= $( SELINUX_FC) " >> $( 1)
2017-11-14 16:42:30 +01:00
)
2018-05-30 20:16:46 +02:00
$( if $ ( filter $ ( 2) ,oem ) ,\
$( if $( BOARD_OEMIMAGE_PARTITION_SIZE) ,$( hide) echo " oem_size= $( BOARD_OEMIMAGE_PARTITION_SIZE) " >> $( 1) )
$( if $( BOARD_OEMIMAGE_JOURNAL_SIZE) ,$( hide) echo " oem_journal_size= $( BOARD_OEMIMAGE_JOURNAL_SIZE) " >> $( 1) )
$( if $( BOARD_OEMIMAGE_EXTFS_INODE_COUNT) ,$( hide) echo " oem_extfs_inode_count= $( BOARD_OEMIMAGE_EXTFS_INODE_COUNT) " >> $( 1) )
$( if $( BOARD_OEMIMAGE_EXTFS_RSV_PCT) ,$( hide) echo " oem_extfs_rsv_pct= $( BOARD_OEMIMAGE_EXTFS_RSV_PCT) " >> $( 1) )
2019-05-14 00:58:14 +02:00
$( hide) echo " oem_selinux_fc= $( SELINUX_FC) " >> $( 1)
2018-05-30 20:16:46 +02:00
)
2018-07-10 19:53:55 +02:00
$( hide ) e c h o "ext_mkuserimg=$(notdir $(MKEXTUSERIMG))" > > $( 1)
2017-11-14 16:42:30 +01:00
2018-07-10 19:53:55 +02:00
$( if $ ( INTERNAL_USERIMAGES_EXT_VARIANT ) ,$ ( hide ) echo "fs_type =$ ( INTERNAL_USERIMAGES_EXT_VARIANT ) " >> $ ( 1) )
2011-10-29 02:02:30 +02:00
$( if $ ( INTERNAL_USERIMAGES_SPARSE_EXT_FLAG ) ,$ ( hide ) echo "extfs_sparse_flag =$ ( INTERNAL_USERIMAGES_SPARSE_EXT_FLAG ) " >> $ ( 1) )
2015-12-16 03:00:14 +01:00
$( if $ ( INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG ) ,$ ( hide ) echo "squashfs_sparse_flag =$ ( INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG ) " >> $ ( 1) )
2019-10-16 19:53:41 +02:00
$( if $ ( INTERNAL_USERIMAGES_SPARSE_F 2FS_FLAG ) ,$ ( hide ) echo "f 2fs_sparse_flag =$ ( INTERNAL_USERIMAGES_SPARSE_F 2FS_FLAG ) " >> $ ( 1) )
2018-07-10 19:53:55 +02:00
$( if $ ( BOARD_EXT 4_SHARE_DUP_BLOCKS ) ,$ ( hide ) echo "ext 4_share_dup_blocks =$ ( BOARD_EXT 4_SHARE_DUP_BLOCKS ) " >> $ ( 1) )
$( if $ ( BOARD_FLASH_LOGICAL_BLOCK_SIZE ) , $ ( hide ) echo "flash_logical_block_size =$ ( BOARD_FLASH_LOGICAL_BLOCK_SIZE ) " >> $ ( 1) )
$( if $ ( BOARD_FLASH_ERASE_BLOCK_SIZE ) , $ ( hide ) echo "flash_erase_block_size =$ ( BOARD_FLASH_ERASE_BLOCK_SIZE ) " >> $ ( 1) )
2019-03-28 16:45:40 +01:00
$( if $ ( PRODUCT_SUPPORTS_BOOT_SIGNER ) ,$ ( hide ) echo "boot_signer =$ ( PRODUCT_SUPPORTS_BOOT_SIGNER ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VERITY ) ,$ ( hide ) echo "verity =$ ( PRODUCT_SUPPORTS_VERITY ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VERITY ) ,$ ( hide ) echo "verity_key =$ ( PRODUCT_VERITY_SIGNING_KEY ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VERITY ) ,$ ( hide ) echo "verity_signer_cmd =$ ( notdir $ ( VERITY_SIGNER ) ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VERITY_FEC ) ,$ ( hide ) echo "verity_fec =$ ( PRODUCT_SUPPORTS_VERITY_FEC ) " >> $ ( 1) )
2017-10-11 10:21:48 +02:00
$( if $ ( filter eng , $ ( TARGET_BUILD_VARIANT ) ) ,$ ( hide ) echo "verity_disable =true " >> $ ( 1) )
2019-03-28 16:45:40 +01:00
$( if $ ( PRODUCT_SYSTEM_VERITY_PARTITION ) ,$ ( hide ) echo "system_verity_block_device =$ ( PRODUCT_SYSTEM_VERITY_PARTITION ) " >> $ ( 1) )
$( if $ ( PRODUCT_VENDOR_VERITY_PARTITION ) ,$ ( hide ) echo "vendor_verity_block_device =$ ( PRODUCT_VENDOR_VERITY_PARTITION ) " >> $ ( 1) )
$( if $ ( PRODUCT_PRODUCT_VERITY_PARTITION ) ,$ ( hide ) echo "product_verity_block_device =$ ( PRODUCT_PRODUCT_VERITY_PARTITION ) " >> $ ( 1) )
2019-06-25 08:58:13 +02:00
$( if $ ( PRODUCT_SYSTEM_EXT_VERITY_PARTITION ) ,$ ( hide ) echo "system_ext_verity_block_device =$ ( PRODUCT_SYSTEM_EXT_VERITY_PARTITION ) " >> $ ( 1) )
2019-03-28 16:45:40 +01:00
$( if $ ( PRODUCT_SUPPORTS_VBOOT ) ,$ ( hide ) echo "vboot =$ ( PRODUCT_SUPPORTS_VBOOT ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VBOOT ) ,$ ( hide ) echo "vboot_key =$ ( PRODUCT_VBOOT_SIGNING_KEY ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VBOOT ) ,$ ( hide ) echo "vboot_subkey =$ ( PRODUCT_VBOOT_SIGNING_SUBKEY ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VBOOT ) ,$ ( hide ) echo "futility =$ ( notdir $ ( FUTILITY ) ) " >> $ ( 1) )
$( if $ ( PRODUCT_SUPPORTS_VBOOT ) ,$ ( hide ) echo "vboot_signer_cmd =$ ( VBOOT_SIGNER ) " >> $ ( 1) )
2017-05-17 01:27:25 +02:00
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_avbtool =$ ( notdir $ ( AVBTOOL ) ) " >> $ ( 1) )
2017-05-26 12:30:04 +02:00
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_system_hashtree_enable =$ ( BOARD_AVB_ENABLE ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_system_add_hashtree_footer_args =$ ( BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,\
$( if $( BOARD_AVB_SYSTEM_KEY_PATH) ,\
$( hide) echo " avb_system_key_path= $( BOARD_AVB_SYSTEM_KEY_PATH) " >> $( 1)
$( hide) echo " avb_system_algorithm= $( BOARD_AVB_SYSTEM_ALGORITHM) " >> $( 1)
$( hide) echo " avb_system_rollback_index_location= $( BOARD_AVB_SYSTEM_ROLLBACK_INDEX_LOCATION) " >> $( 1) ) )
2019-01-23 15:19:19 +01:00
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_system_other_hashtree_enable =$ ( BOARD_AVB_ENABLE ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_system_other_add_hashtree_footer_args =$ ( BOARD_AVB_SYSTEM_OTHER_ADD_HASHTREE_FOOTER_ARGS ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,\
$( if $( BOARD_AVB_SYSTEM_OTHER_KEY_PATH) ,\
$( hide) echo " avb_system_other_key_path= $( BOARD_AVB_SYSTEM_OTHER_KEY_PATH) " >> $( 1)
2019-02-27 03:15:51 +01:00
$( hide) echo " avb_system_other_algorithm= $( BOARD_AVB_SYSTEM_OTHER_ALGORITHM) " >> $( 1) ) )
2017-05-26 12:30:04 +02:00
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_vendor_hashtree_enable =$ ( BOARD_AVB_ENABLE ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_vendor_add_hashtree_footer_args =$ ( BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,\
$( if $( BOARD_AVB_VENDOR_KEY_PATH) ,\
$( hide) echo " avb_vendor_key_path= $( BOARD_AVB_VENDOR_KEY_PATH) " >> $( 1)
$( hide) echo " avb_vendor_algorithm= $( BOARD_AVB_VENDOR_ALGORITHM) " >> $( 1)
$( hide) echo " avb_vendor_rollback_index_location= $( BOARD_AVB_VENDOR_ROLLBACK_INDEX_LOCATION) " >> $( 1) ) )
2017-11-27 09:04:47 +01:00
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_product_hashtree_enable =$ ( BOARD_AVB_ENABLE ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_product_add_hashtree_footer_args =$ ( BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,\
$( if $( BOARD_AVB_PRODUCT_KEY_PATH) ,\
$( hide) echo " avb_product_key_path= $( BOARD_AVB_PRODUCT_KEY_PATH) " >> $( 1)
$( hide) echo " avb_product_algorithm= $( BOARD_AVB_PRODUCT_ALGORITHM) " >> $( 1)
$( hide) echo " avb_product_rollback_index_location= $( BOARD_AVB_PRODUCT_ROLLBACK_INDEX_LOCATION) " >> $( 1) ) )
2019-06-25 08:58:13 +02:00
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_system_ext_hashtree_enable =$ ( BOARD_AVB_ENABLE ) " >> $ ( 1) )
2018-08-02 02:21:14 +02:00
$( if $ ( BOARD_AVB_ENABLE ) ,\
2019-06-25 08:58:13 +02:00
$( hide) echo " avb_system_ext_add_hashtree_footer_args= $( BOARD_AVB_SYSTEM_EXT_ADD_HASHTREE_FOOTER_ARGS) " >> $( 1) )
2018-05-29 14:09:01 +02:00
$( if $ ( BOARD_AVB_ENABLE ) ,\
2019-06-25 08:58:13 +02:00
$( if $( BOARD_AVB_SYSTEM_EXT_KEY_PATH) ,\
$( hide) echo " avb_system_ext_key_path= $( BOARD_AVB_SYSTEM_EXT_KEY_PATH) " >> $( 1)
$( hide) echo " avb_system_ext_algorithm= $( BOARD_AVB_SYSTEM_EXT_ALGORITHM) " >> $( 1)
$( hide) echo " avb_system_ext_rollback_index_location= $( BOARD_AVB_SYSTEM_EXT_ROLLBACK_INDEX_LOCATION) " >> $( 1) ) )
2017-11-14 16:42:30 +01:00
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_odm_hashtree_enable =$ ( BOARD_AVB_ENABLE ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,$ ( hide ) echo "avb_odm_add_hashtree_footer_args =$ ( BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS ) " >> $ ( 1) )
$( if $ ( BOARD_AVB_ENABLE ) ,\
$( if $( BOARD_AVB_ODM_KEY_PATH) ,\
$( hide) echo " avb_odm_key_path= $( BOARD_AVB_ODM_KEY_PATH) " >> $( 1)
$( hide) echo " avb_odm_algorithm= $( BOARD_AVB_ODM_ALGORITHM) " >> $( 1)
$( hide) echo " avb_odm_rollback_index_location= $( BOARD_AVB_ODM_ROLLBACK_INDEX_LOCATION) " >> $( 1) ) )
2015-11-11 04:21:34 +01:00
$( if $ ( filter true ,$ ( BOARD_USES_RECOVERY_AS_BOOT ) ) ,\
$( hide) echo "recovery_as_boot=true" >> $( 1) )
2015-03-25 03:07:40 +01:00
$( if $ ( filter true ,$ ( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) ) ,\
2018-08-09 23:26:00 +02:00
$( hide) echo "system_root_image=true" >> $( 1) )
$( hide ) e c h o "root_dir=$(TARGET_ROOT_OUT)" > > $( 1)
2020-02-03 15:40:15 +01:00
$( if $ ( filter true ,$ ( PRODUCT_USE_DYNAMIC_PARTITION_SIZE ) ) ,\
$( hide) echo "use_dynamic_partition_size=true" >> $( 1) )
2018-05-30 20:16:46 +02:00
$( if $ ( 3) ,$ ( hide ) $ ( foreach kv ,$ ( 3) ,echo "$ ( kv ) " >> $ ( 1) ;) )
e n d e f
# $(1): the path of the output dictionary file
# $(2): additional "key=value" pairs to append to the dictionary file.
2019-05-14 00:58:14 +02:00
PROP_DICTIONARY_IMAGES := oem
i f d e f B U I L D I N G _ C A C H E _ I M A G E
PROP_DICTIONARY_IMAGES += cache
e n d i f
i f d e f B U I L D I N G _ S Y S T E M _ I M A G E
PROP_DICTIONARY_IMAGES += system
e n d i f
i f d e f B U I L D I N G _ U S E R D A T A _ I M A G E
PROP_DICTIONARY_IMAGES += userdata
e n d i f
i f d e f B U I L D I N G _ V E N D O R _ I M A G E
PROP_DICTIONARY_IMAGES += vendor
e n d i f
i f d e f B U I L D I N G _ P R O D U C T _ I M A G E
PROP_DICTIONARY_IMAGES += product
e n d i f
2019-06-25 08:58:13 +02:00
i f d e f B U I L D I N G _ S Y S T E M _ E X T _ I M A G E
PROP_DICTIONARY_IMAGES += system_ext
2019-05-14 00:58:14 +02:00
e n d i f
i f d e f B U I L D I N G _ O D M _ I M A G E
PROP_DICTIONARY_IMAGES += odm
e n d i f
2018-05-30 20:16:46 +02:00
d e f i n e g e n e r a t e - u s e r i m a g e - p r o p - d i c t i o n a r y
2019-05-14 00:58:14 +02:00
$( call generate-image-prop-dictionary,$( 1) ,$( PROP_DICTIONARY_IMAGES) ,$( 2) )
2011-10-29 02:02:30 +02:00
e n d e f
2018-06-19 01:32:35 +02:00
# $(1): the path of the input dictionary file, where each line has the format key=value
# $(2): the key to look up
d e f i n e r e a d - i m a g e - p r o p - d i c t i o n a r y
$$ ( g r e p '$(2)=' $( 1) | c u t - f 2 - - d '=' )
e n d e f
2009-07-02 18:00:54 +02:00
# -----------------------------------------------------------------
# Recovery image
2009-07-08 02:14:25 +02:00
2015-11-11 04:21:34 +01:00
# Recovery image exists if we are building recovery, or building recovery as boot.
2019-04-22 20:09:57 +02:00
i f d e f B U I L D I N G _ R E C O V E R Y _ I M A G E
2009-07-02 18:00:54 +02:00
2015-03-10 20:02:57 +01:00
INTERNAL_RECOVERYIMAGE_FILES := $( filter $( TARGET_RECOVERY_OUT) /%, \
$( ALL_DEFAULT_INSTALLED_MODULES) )
2018-08-14 21:17:48 +02:00
INSTALLED_FILES_FILE_RECOVERY := $( PRODUCT_OUT) /installed-files-recovery.txt
INSTALLED_FILES_JSON_RECOVERY := $( INSTALLED_FILES_FILE_RECOVERY:.txt= .json)
# TODO(b/30414428): Can't depend on INTERNAL_RECOVERYIMAGE_FILES alone like other
# INSTALLED_FILES_FILE_* rules. Because currently there're cp/rsync/rm commands in
# build-recoveryimage-target, which would touch the files under TARGET_RECOVERY_OUT and race with
# the call to FILELIST.
i f e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
2019-04-22 20:09:57 +02:00
INSTALLED_BOOTIMAGE_TARGET := $( BUILT_BOOTIMAGE_TARGET)
2018-08-14 21:17:48 +02:00
$(INSTALLED_FILES_FILE_RECOVERY) : $( INSTALLED_BOOTIMAGE_TARGET )
e l s e
$(INSTALLED_FILES_FILE_RECOVERY) : $( INSTALLED_RECOVERYIMAGE_TARGET )
e n d i f
$(INSTALLED_FILES_FILE_RECOVERY) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_RECOVERY )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_RECOVERY) : $( INTERNAL_RECOVERYIMAGE_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2018-08-14 21:17:48 +02:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
$( hide) $( FILESLIST) $( TARGET_RECOVERY_ROOT_OUT) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2018-08-14 21:17:48 +02:00
2017-03-10 21:53:02 +01:00
recovery_sepolicy := \
$( TARGET_RECOVERY_ROOT_OUT) /sepolicy \
2017-06-13 17:30:46 +02:00
$( TARGET_RECOVERY_ROOT_OUT) /plat_file_contexts \
2017-03-10 21:53:02 +01:00
$( TARGET_RECOVERY_ROOT_OUT) /plat_property_contexts \
2019-09-28 03:04:51 +02:00
$( TARGET_RECOVERY_ROOT_OUT) /system_ext_file_contexts \
$( TARGET_RECOVERY_ROOT_OUT) /system_ext_property_contexts \
$( TARGET_RECOVERY_ROOT_OUT) /vendor_file_contexts \
2019-02-19 20:23:12 +01:00
$( TARGET_RECOVERY_ROOT_OUT) /vendor_property_contexts \
2017-11-30 15:15:17 +01:00
$( TARGET_RECOVERY_ROOT_OUT) /odm_file_contexts \
2019-02-19 20:23:12 +01:00
$( TARGET_RECOVERY_ROOT_OUT) /odm_property_contexts \
$( TARGET_RECOVERY_ROOT_OUT) /product_file_contexts \
$( TARGET_RECOVERY_ROOT_OUT) /product_property_contexts
2017-11-30 15:15:17 +01:00
2017-03-10 21:53:02 +01:00
# Passed into rsync from non-recovery root to recovery root, to avoid overwriting recovery-specific
# SELinux files
IGNORE_RECOVERY_SEPOLICY := $( patsubst $( TARGET_RECOVERY_OUT) /%,--exclude= /%,$( recovery_sepolicy) )
2009-07-02 18:00:54 +02:00
recovery_kernel := $( INSTALLED_KERNEL_TARGET) # same as a non-recovery system
recovery_ramdisk := $( PRODUCT_OUT) /ramdisk-recovery.img
Fix up recovery_text_res
First, make it safer for incremental builds. We used to just be
depending on the bootable/recovery/tools/recovery_l10n/res dir as a
dependency, but that would only trigger a rebuild if a direct child
file/directory was added or removed (so essentially, when a translation
was addded or removed). If a translation was updated, it wouldn't
re-trigger recovery_text_res.
So instead of depending on the directory, depend on the results from
running `find` to list all of the contents in that directory.
Next, move it out of PACKAGING. `m installclean`, which runs in between
incremental builds on our build servers, deletes the obj/PACKAGING
directory. So when recovery_text_res used that directory, we were having
to rebuild it on every incremental build, which isn't optimal when it
takes nearly 90s to build.
So with:
$ lunch aosp_coral-eng
$ m bootimage
$ m installclean
$ m bootimage
The second `m bootimage` went from executing 666 actions in 93s to
executing 658 actions in 6s.
Finally, remove the last uses of $(call include-path-for,recovery),
since they were all in this file (and they weren't using it for include
paths...). We'd like to remove all of these and switch them to header
libraries or other use cases, but in this case, it's just shorter to use
the real path.
Test: treehugger
Test: m bootimage;
touch bootable/recovery/tools/recovery_l10n/res/values/strings.xml
m bootimage
Test: m bootimage; m installclean; m bootimage
Change-Id: I005592e49443aab45ed039a2f0c63f7a69035565
2020-05-27 09:09:16 +02:00
recovery_resources_common := bootable/recovery/res
2013-03-07 00:04:31 +01:00
2019-01-18 15:06:34 +01:00
# Set recovery_density to a density bucket based on TARGET_SCREEN_DENSITY, PRODUCT_AAPT_PREF_CONFIG,
# or mdpi, in order of preference. We support both specific buckets (e.g. xdpi) and numbers,
# which get remapped to a bucket.
recovery_density := $( or $( TARGET_SCREEN_DENSITY) ,$( PRODUCT_AAPT_PREF_CONFIG) ,mdpi)
Map numeric dpi value to density bucket for recovery resources.
When choosing the density for recovery resources, the code used to
handle primary density values only, i.e. mdpi, hdpi, xhdpi, 400dpi,
xxhdpi, 560dpi and xxxhdpi. Unlisted values, such as 500dpi, will be
categorized as xhdpi, but with tiny font size selected for recovery.
This CL improves the handling of numeric dpi values. It allows targets
using numeric values in PRODUCT_AAPT_PREF_CONFIG, and maps that to a
proper density bucket. Targets can still specify the density bucket
directly, which will take priority.
Bug: 111559919
Test: `m -j bootimage` with marlin/sailfish/walleye/taimen respectively.
Check the chosen density bucket for recovery resources
(xxxhdpi/xxhdpi/xxhdpi/xxxhdpi).
Test: Set PRODUCT_AAPT_PREF_CONFIG to 279/280/281/500/559/560/640. Check
the computed bucket and the selected recovery font file.
Change-Id: Ia40fcdec5a2752c08172716bcc622a36a2a83cea
2018-08-30 05:36:00 +02:00
i f e q ( , $( filter xxxhdpi xxhdpi xhdpi hdpi mdpi ,$ ( recovery_density ) ) )
recovery_density_value := $( patsubst %dpi,%,$( recovery_density) )
2019-01-18 15:06:34 +01:00
# We roughly use the medium point between the primary densities to split buckets.
Map numeric dpi value to density bucket for recovery resources.
When choosing the density for recovery resources, the code used to
handle primary density values only, i.e. mdpi, hdpi, xhdpi, 400dpi,
xxhdpi, 560dpi and xxxhdpi. Unlisted values, such as 500dpi, will be
categorized as xhdpi, but with tiny font size selected for recovery.
This CL improves the handling of numeric dpi values. It allows targets
using numeric values in PRODUCT_AAPT_PREF_CONFIG, and maps that to a
proper density bucket. Targets can still specify the density bucket
directly, which will take priority.
Bug: 111559919
Test: `m -j bootimage` with marlin/sailfish/walleye/taimen respectively.
Check the chosen density bucket for recovery resources
(xxxhdpi/xxhdpi/xxhdpi/xxxhdpi).
Test: Set PRODUCT_AAPT_PREF_CONFIG to 279/280/281/500/559/560/640. Check
the computed bucket and the selected recovery font file.
Change-Id: Ia40fcdec5a2752c08172716bcc622a36a2a83cea
2018-08-30 05:36:00 +02:00
# ------160------240------320----------480------------640------
# mdpi hdpi xhdpi xxhdpi xxxhdpi
recovery_density := $( strip \
$( or $( if $( filter $( shell echo $$ ( ( $( recovery_density_value) >= 560) ) ) ,1) ,xxxhdpi) ,\
$( if $( filter $( shell echo $$ ( ( $( recovery_density_value) >= 400) ) ) ,1) ,xxhdpi) ,\
$( if $( filter $( shell echo $$ ( ( $( recovery_density_value) >= 280) ) ) ,1) ,xhdpi) ,\
$( if $( filter $( shell echo $$ ( ( $( recovery_density_value) >= 200) ) ) ,1) ,hdpi,mdpi) ) )
e n d i f
2014-05-13 00:32:20 +02:00
i f n e q ( , $( wildcard $ ( recovery_resources_common ) -$ ( recovery_density ) ) )
recovery_resources_common := $( recovery_resources_common) -$( recovery_density)
2014-04-04 22:51:15 +02:00
e l s e
recovery_resources_common := $( recovery_resources_common) -xhdpi
e n d i f
Map numeric dpi value to density bucket for recovery resources.
When choosing the density for recovery resources, the code used to
handle primary density values only, i.e. mdpi, hdpi, xhdpi, 400dpi,
xxhdpi, 560dpi and xxxhdpi. Unlisted values, such as 500dpi, will be
categorized as xhdpi, but with tiny font size selected for recovery.
This CL improves the handling of numeric dpi values. It allows targets
using numeric values in PRODUCT_AAPT_PREF_CONFIG, and maps that to a
proper density bucket. Targets can still specify the density bucket
directly, which will take priority.
Bug: 111559919
Test: `m -j bootimage` with marlin/sailfish/walleye/taimen respectively.
Check the chosen density bucket for recovery resources
(xxxhdpi/xxhdpi/xxhdpi/xxxhdpi).
Test: Set PRODUCT_AAPT_PREF_CONFIG to 279/280/281/500/559/560/640. Check
the computed bucket and the selected recovery font file.
Change-Id: Ia40fcdec5a2752c08172716bcc622a36a2a83cea
2018-08-30 05:36:00 +02:00
# Select the 18x32 font on high-density devices (xhdpi and up); and the 12x22 font on other devices.
# Note that the font selected here can be overridden for a particular device by putting a font.png
# in its private recovery resources.
i f n e q ( , $( filter xxxhdpi xxhdpi xhdpi ,$ ( recovery_density ) ) )
Fix up recovery_text_res
First, make it safer for incremental builds. We used to just be
depending on the bootable/recovery/tools/recovery_l10n/res dir as a
dependency, but that would only trigger a rebuild if a direct child
file/directory was added or removed (so essentially, when a translation
was addded or removed). If a translation was updated, it wouldn't
re-trigger recovery_text_res.
So instead of depending on the directory, depend on the results from
running `find` to list all of the contents in that directory.
Next, move it out of PACKAGING. `m installclean`, which runs in between
incremental builds on our build servers, deletes the obj/PACKAGING
directory. So when recovery_text_res used that directory, we were having
to rebuild it on every incremental build, which isn't optimal when it
takes nearly 90s to build.
So with:
$ lunch aosp_coral-eng
$ m bootimage
$ m installclean
$ m bootimage
The second `m bootimage` went from executing 666 actions in 93s to
executing 658 actions in 6s.
Finally, remove the last uses of $(call include-path-for,recovery),
since they were all in this file (and they weren't using it for include
paths...). We'd like to remove all of these and switch them to header
libraries or other use cases, but in this case, it's just shorter to use
the real path.
Test: treehugger
Test: m bootimage;
touch bootable/recovery/tools/recovery_l10n/res/values/strings.xml
m bootimage
Test: m bootimage; m installclean; m bootimage
Change-Id: I005592e49443aab45ed039a2f0c63f7a69035565
2020-05-27 09:09:16 +02:00
recovery_font := bootable/recovery/fonts/18x32.png
2013-03-07 00:04:31 +01:00
e l s e
Fix up recovery_text_res
First, make it safer for incremental builds. We used to just be
depending on the bootable/recovery/tools/recovery_l10n/res dir as a
dependency, but that would only trigger a rebuild if a direct child
file/directory was added or removed (so essentially, when a translation
was addded or removed). If a translation was updated, it wouldn't
re-trigger recovery_text_res.
So instead of depending on the directory, depend on the results from
running `find` to list all of the contents in that directory.
Next, move it out of PACKAGING. `m installclean`, which runs in between
incremental builds on our build servers, deletes the obj/PACKAGING
directory. So when recovery_text_res used that directory, we were having
to rebuild it on every incremental build, which isn't optimal when it
takes nearly 90s to build.
So with:
$ lunch aosp_coral-eng
$ m bootimage
$ m installclean
$ m bootimage
The second `m bootimage` went from executing 666 actions in 93s to
executing 658 actions in 6s.
Finally, remove the last uses of $(call include-path-for,recovery),
since they were all in this file (and they weren't using it for include
paths...). We'd like to remove all of these and switch them to header
libraries or other use cases, but in this case, it's just shorter to use
the real path.
Test: treehugger
Test: m bootimage;
touch bootable/recovery/tools/recovery_l10n/res/values/strings.xml
m bootimage
Test: m bootimage; m installclean; m bootimage
Change-Id: I005592e49443aab45ed039a2f0c63f7a69035565
2020-05-27 09:09:16 +02:00
recovery_font := bootable/recovery/fonts/12x22.png
2013-03-07 00:04:31 +01:00
e n d i f
2018-11-07 20:36:19 +01:00
# We will only generate the recovery background text images if the variable
# TARGET_RECOVERY_UI_SCREEN_WIDTH is defined. For devices with xxxhdpi and xxhdpi, we set the
# variable to the commonly used values here, if it hasn't been intialized elsewhere. While for
# devices with lower density, they must have TARGET_RECOVERY_UI_SCREEN_WIDTH defined in their
# BoardConfig in order to use this feature.
i f e q ( $( recovery_density ) , x x x h d p i )
TARGET_RECOVERY_UI_SCREEN_WIDTH ?= 1440
e l s e i f e q ( $( recovery_density ) , x x h d p i )
TARGET_RECOVERY_UI_SCREEN_WIDTH ?= 1080
e n d i f
i f n e q ( $( TARGET_RECOVERY_UI_SCREEN_WIDTH ) , )
# Subtracts the margin width and menu indent from the screen width; it's safe to be conservative.
i f e q ( $( TARGET_RECOVERY_UI_MARGIN_WIDTH ) , )
recovery_image_width := $$ ( ( $( TARGET_RECOVERY_UI_SCREEN_WIDTH) - 10) )
e l s e
recovery_image_width := $$ ( ( $( TARGET_RECOVERY_UI_SCREEN_WIDTH) - $( TARGET_RECOVERY_UI_MARGIN_WIDTH) - 10) )
e n d i f
Fix up recovery_text_res
First, make it safer for incremental builds. We used to just be
depending on the bootable/recovery/tools/recovery_l10n/res dir as a
dependency, but that would only trigger a rebuild if a direct child
file/directory was added or removed (so essentially, when a translation
was addded or removed). If a translation was updated, it wouldn't
re-trigger recovery_text_res.
So instead of depending on the directory, depend on the results from
running `find` to list all of the contents in that directory.
Next, move it out of PACKAGING. `m installclean`, which runs in between
incremental builds on our build servers, deletes the obj/PACKAGING
directory. So when recovery_text_res used that directory, we were having
to rebuild it on every incremental build, which isn't optimal when it
takes nearly 90s to build.
So with:
$ lunch aosp_coral-eng
$ m bootimage
$ m installclean
$ m bootimage
The second `m bootimage` went from executing 666 actions in 93s to
executing 658 actions in 6s.
Finally, remove the last uses of $(call include-path-for,recovery),
since they were all in this file (and they weren't using it for include
paths...). We'd like to remove all of these and switch them to header
libraries or other use cases, but in this case, it's just shorter to use
the real path.
Test: treehugger
Test: m bootimage;
touch bootable/recovery/tools/recovery_l10n/res/values/strings.xml
m bootimage
Test: m bootimage; m installclean; m bootimage
Change-Id: I005592e49443aab45ed039a2f0c63f7a69035565
2020-05-27 09:09:16 +02:00
RECOVERY_INSTALLING_TEXT_FILE := $( call intermediates-dir-for,ETC,recovery_text_res) /installing_text.png
2018-11-07 20:36:19 +01:00
RECOVERY_INSTALLING_SECURITY_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /installing_security_text.png
RECOVERY_ERASING_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /erasing_text.png
RECOVERY_ERROR_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /error_text.png
RECOVERY_NO_COMMAND_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /no_command_text.png
2018-12-07 21:12:17 +01:00
RECOVERY_CANCEL_WIPE_DATA_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /cancel_wipe_data_text.png
RECOVERY_FACTORY_DATA_RESET_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /factory_data_reset_text.png
RECOVERY_TRY_AGAIN_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /try_again_text.png
RECOVERY_WIPE_DATA_CONFIRMATION_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /wipe_data_confirmation_text.png
RECOVERY_WIPE_DATA_MENU_HEADER_TEXT_FILE := $( dir $( RECOVERY_INSTALLING_TEXT_FILE) ) /wipe_data_menu_header_text.png
generated_recovery_text_files := \
2018-11-07 20:36:19 +01:00
$( RECOVERY_INSTALLING_TEXT_FILE) \
$( RECOVERY_INSTALLING_SECURITY_TEXT_FILE) \
$( RECOVERY_ERASING_TEXT_FILE) \
$( RECOVERY_ERROR_TEXT_FILE) \
2018-12-07 21:12:17 +01:00
$( RECOVERY_NO_COMMAND_TEXT_FILE) \
$( RECOVERY_CANCEL_WIPE_DATA_TEXT_FILE) \
$( RECOVERY_FACTORY_DATA_RESET_TEXT_FILE) \
$( RECOVERY_TRY_AGAIN_TEXT_FILE) \
$( RECOVERY_WIPE_DATA_CONFIRMATION_TEXT_FILE) \
$( RECOVERY_WIPE_DATA_MENU_HEADER_TEXT_FILE)
2018-11-07 20:36:19 +01:00
Fix up recovery_text_res
First, make it safer for incremental builds. We used to just be
depending on the bootable/recovery/tools/recovery_l10n/res dir as a
dependency, but that would only trigger a rebuild if a direct child
file/directory was added or removed (so essentially, when a translation
was addded or removed). If a translation was updated, it wouldn't
re-trigger recovery_text_res.
So instead of depending on the directory, depend on the results from
running `find` to list all of the contents in that directory.
Next, move it out of PACKAGING. `m installclean`, which runs in between
incremental builds on our build servers, deletes the obj/PACKAGING
directory. So when recovery_text_res used that directory, we were having
to rebuild it on every incremental build, which isn't optimal when it
takes nearly 90s to build.
So with:
$ lunch aosp_coral-eng
$ m bootimage
$ m installclean
$ m bootimage
The second `m bootimage` went from executing 666 actions in 93s to
executing 658 actions in 6s.
Finally, remove the last uses of $(call include-path-for,recovery),
since they were all in this file (and they weren't using it for include
paths...). We'd like to remove all of these and switch them to header
libraries or other use cases, but in this case, it's just shorter to use
the real path.
Test: treehugger
Test: m bootimage;
touch bootable/recovery/tools/recovery_l10n/res/values/strings.xml
m bootimage
Test: m bootimage; m installclean; m bootimage
Change-Id: I005592e49443aab45ed039a2f0c63f7a69035565
2020-05-27 09:09:16 +02:00
resource_dir := bootable/recovery/tools/recovery_l10n/res/
resource_dir_deps := $( sort $( shell find $( resource_dir) -name *.xml -not -name .*) )
2018-11-07 20:36:19 +01:00
image_generator_jar := $( HOST_OUT_JAVA_LIBRARIES) /RecoveryImageGenerator.jar
2018-12-07 21:12:17 +01:00
zopflipng := $( HOST_OUT_EXECUTABLES) /zopflipng
2018-11-07 20:36:19 +01:00
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_SOURCE_FONTS := $( recovery_noto -fonts_dep ) $( recovery_roboto -fonts_dep )
Fix up recovery_text_res
First, make it safer for incremental builds. We used to just be
depending on the bootable/recovery/tools/recovery_l10n/res dir as a
dependency, but that would only trigger a rebuild if a direct child
file/directory was added or removed (so essentially, when a translation
was addded or removed). If a translation was updated, it wouldn't
re-trigger recovery_text_res.
So instead of depending on the directory, depend on the results from
running `find` to list all of the contents in that directory.
Next, move it out of PACKAGING. `m installclean`, which runs in between
incremental builds on our build servers, deletes the obj/PACKAGING
directory. So when recovery_text_res used that directory, we were having
to rebuild it on every incremental build, which isn't optimal when it
takes nearly 90s to build.
So with:
$ lunch aosp_coral-eng
$ m bootimage
$ m installclean
$ m bootimage
The second `m bootimage` went from executing 666 actions in 93s to
executing 658 actions in 6s.
Finally, remove the last uses of $(call include-path-for,recovery),
since they were all in this file (and they weren't using it for include
paths...). We'd like to remove all of these and switch them to header
libraries or other use cases, but in this case, it's just shorter to use
the real path.
Test: treehugger
Test: m bootimage;
touch bootable/recovery/tools/recovery_l10n/res/values/strings.xml
m bootimage
Test: m bootimage; m installclean; m bootimage
Change-Id: I005592e49443aab45ed039a2f0c63f7a69035565
2020-05-27 09:09:16 +02:00
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_RECOVERY_FONT_FILES_DIR := $( call intermediates -dir -for ,ETC ,recovery_font_files )
2018-11-07 20:36:19 +01:00
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_RESOURCE_DIR := $( resource_dir )
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_IMAGE_GENERATOR_JAR := $( image_generator_jar )
2018-12-07 21:12:17 +01:00
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_ZOPFLIPNG := $( zopflipng )
2018-11-07 20:36:19 +01:00
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_RECOVERY_IMAGE_WIDTH := $( recovery_image_width )
2018-12-20 02:15:14 +01:00
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_RECOVERY_BACKGROUND_TEXT_LIST := \
2018-12-07 21:12:17 +01:00
recovery_installing \
recovery_installing_security \
recovery_erasing \
recovery_error \
2018-12-20 02:15:14 +01:00
recovery_no_command
$(RECOVERY_INSTALLING_TEXT_FILE) : PRIVATE_RECOVERY_WIPE_DATA_TEXT_LIST := \
2018-12-07 21:12:17 +01:00
recovery_cancel_wipe_data \
recovery_factory_data_reset \
recovery_try_again \
recovery_wipe_data_menu_header \
recovery_wipe_data_confirmation
$(RECOVERY_INSTALLING_TEXT_FILE) : .KATI_IMPLICIT_OUTPUTS := $( filter -out $ ( RECOVERY_INSTALLING_TEXT_FILE ) ,$ ( generated_recovery_text_files ) )
Fix up recovery_text_res
First, make it safer for incremental builds. We used to just be
depending on the bootable/recovery/tools/recovery_l10n/res dir as a
dependency, but that would only trigger a rebuild if a direct child
file/directory was added or removed (so essentially, when a translation
was addded or removed). If a translation was updated, it wouldn't
re-trigger recovery_text_res.
So instead of depending on the directory, depend on the results from
running `find` to list all of the contents in that directory.
Next, move it out of PACKAGING. `m installclean`, which runs in between
incremental builds on our build servers, deletes the obj/PACKAGING
directory. So when recovery_text_res used that directory, we were having
to rebuild it on every incremental build, which isn't optimal when it
takes nearly 90s to build.
So with:
$ lunch aosp_coral-eng
$ m bootimage
$ m installclean
$ m bootimage
The second `m bootimage` went from executing 666 actions in 93s to
executing 658 actions in 6s.
Finally, remove the last uses of $(call include-path-for,recovery),
since they were all in this file (and they weren't using it for include
paths...). We'd like to remove all of these and switch them to header
libraries or other use cases, but in this case, it's just shorter to use
the real path.
Test: treehugger
Test: m bootimage;
touch bootable/recovery/tools/recovery_l10n/res/values/strings.xml
m bootimage
Test: m bootimage; m installclean; m bootimage
Change-Id: I005592e49443aab45ed039a2f0c63f7a69035565
2020-05-27 09:09:16 +02:00
$(RECOVERY_INSTALLING_TEXT_FILE) : $( image_generator_jar ) $( resource_dir_deps ) $( recovery_noto -fonts_dep ) $( recovery_roboto -fonts_dep ) $( zopflipng )
2018-11-07 20:36:19 +01:00
# Prepares the font directory.
@rm -rf $( PRIVATE_RECOVERY_FONT_FILES_DIR)
@mkdir -p $( PRIVATE_RECOVERY_FONT_FILES_DIR)
2018-12-07 21:12:17 +01:00
$( foreach filename,$( PRIVATE_SOURCE_FONTS) , cp $( filename) $( PRIVATE_RECOVERY_FONT_FILES_DIR) && ) true
2018-11-07 20:36:19 +01:00
@rm -rf $( dir $@ )
@mkdir -p $( dir $@ )
2018-12-20 02:15:14 +01:00
$( foreach text_name,$( PRIVATE_RECOVERY_BACKGROUND_TEXT_LIST) $( PRIVATE_RECOVERY_WIPE_DATA_TEXT_LIST) , \
2018-12-07 21:12:17 +01:00
$( eval output_file := $( dir $@ ) /$( patsubst recovery_%,%_text.png,$( text_name) ) ) \
2018-12-20 02:15:14 +01:00
$( eval center_alignment := $( if $( filter $( text_name) ,$( PRIVATE_RECOVERY_BACKGROUND_TEXT_LIST) ) , --center_alignment) ) \
2018-11-07 20:36:19 +01:00
java -jar $( PRIVATE_IMAGE_GENERATOR_JAR) \
--image_width $( PRIVATE_RECOVERY_IMAGE_WIDTH) \
--text_name $( text_name) \
--font_dir $( PRIVATE_RECOVERY_FONT_FILES_DIR) \
--resource_dir $( PRIVATE_RESOURCE_DIR) \
2018-12-20 02:15:14 +01:00
--output_file $( output_file) $( center_alignment) && \
2018-12-07 21:12:17 +01:00
$( PRIVATE_ZOPFLIPNG) -y --iterations= 1 --filters= 0 $( output_file) $( output_file) > /dev/null && ) true
2018-11-07 20:36:19 +01:00
e l s e
RECOVERY_INSTALLING_TEXT_FILE :=
RECOVERY_INSTALLING_SECURITY_TEXT_FILE :=
RECOVERY_ERASING_TEXT_FILE :=
RECOVERY_ERROR_TEXT_FILE :=
RECOVERY_NO_COMMAND_TEXT_FILE :=
2018-12-07 21:12:17 +01:00
RECOVERY_CANCEL_WIPE_DATA_TEXT_FILE :=
RECOVERY_FACTORY_DATA_RESET_TEXT_FILE :=
RECOVERY_TRY_AGAIN_TEXT_FILE :=
RECOVERY_WIPE_DATA_CONFIRMATION_TEXT_FILE :=
RECOVERY_WIPE_DATA_MENU_HEADER_TEXT_FILE :=
2018-11-07 20:36:19 +01:00
e n d i f # TARGET_RECOVERY_UI_SCREEN_WIDTH
2015-08-06 20:47:47 +02:00
i f n d e f T A R G E T _ P R I V A T E _ R E S _ D I R S
TARGET_PRIVATE_RES_DIRS := $( wildcard $( TARGET_DEVICE_DIR) /recovery/res)
e n d i f
2009-07-02 18:00:54 +02:00
recovery_resource_deps := $( shell find $( recovery_resources_common) \
2015-08-06 20:47:47 +02:00
$( TARGET_PRIVATE_RES_DIRS) -type f)
2018-12-07 21:12:17 +01:00
recovery_resource_deps += $( generated_recovery_text_files)
2018-11-07 20:36:19 +01:00
2012-09-28 18:33:45 +02:00
i f d e f T A R G E T _ R E C O V E R Y _ F S T A B
recovery_fstab := $( TARGET_RECOVERY_FSTAB)
e l s e
2010-09-21 03:04:41 +02:00
recovery_fstab := $( strip $( wildcard $( TARGET_DEVICE_DIR) /recovery.fstab) )
2012-09-28 18:33:45 +02:00
e n d i f
2016-06-10 19:11:54 +02:00
i f d e f T A R G E T _ R E C O V E R Y _ W I P E
recovery_wipe := $( TARGET_RECOVERY_WIPE)
2016-06-01 08:56:23 +02:00
e l s e
2016-06-10 19:11:54 +02:00
recovery_wipe :=
2016-06-01 08:56:23 +02:00
e n d i f
2015-07-22 21:33:18 +02:00
2018-03-10 02:04:42 +01:00
# Traditionally with non-A/B OTA we have:
2015-11-11 04:21:34 +01:00
# boot.img + recovery-from-boot.p + recovery-resource.dat = recovery.img.
2018-03-10 02:04:42 +01:00
# recovery-resource.dat is needed only if we carry an imgdiff patch of the boot and recovery images
# and invoke install-recovery.sh on the first boot post an OTA update.
2015-11-11 04:21:34 +01:00
#
# We no longer need that if one of the following conditions holds:
2018-03-10 02:04:42 +01:00
# a) We carry a full copy of the recovery image - no patching needed
2015-11-11 04:21:34 +01:00
# (BOARD_USES_FULL_RECOVERY_IMAGE = true);
2018-03-10 02:04:42 +01:00
# b) We build a single image that contains boot and recovery both - no recovery image to install
# (BOARD_USES_RECOVERY_AS_BOOT = true);
2018-09-20 20:04:37 +02:00
# c) We mount the system image as / and therefore do not have a ramdisk in boot.img
2018-03-10 02:04:42 +01:00
# (BOARD_BUILD_SYSTEM_ROOT_IMAGE = true).
2018-03-21 20:15:11 +01:00
# d) We include the recovery DTBO image within recovery - not needing the resource file as we
# do bsdiff because boot and recovery will contain different number of entries
# (BOARD_INCLUDE_RECOVERY_DTBO = true).
2018-09-23 16:10:47 +02:00
# e) We include the recovery ACPIO image within recovery - not needing the resource file as we
# do bsdiff because boot and recovery will contain different number of entries
# (BOARD_INCLUDE_RECOVERY_ACPIO = true).
2018-03-10 02:04:42 +01:00
2018-09-20 20:04:37 +02:00
i f e q ( , $( filter true , $ ( BOARD_USES_FULL_RECOVERY_IMAGE ) $ ( BOARD_USES_RECOVERY_AS_BOOT ) \
2018-09-23 16:10:47 +02:00
$( BOARD_BUILD_SYSTEM_ROOT_IMAGE) $( BOARD_INCLUDE_RECOVERY_DTBO) $( BOARD_INCLUDE_RECOVERY_ACPIO) ) )
2012-08-21 00:38:58 +02:00
# Named '.dat' so we don't attempt to use imgdiff for patching it.
Moving recovery resources from /system to /vendor
This change is part of a topic that moves the recovery resources from the
system partition to the vendor partition, if it exists, or the vendor directory
on the system partition otherwise. The recovery resources are moving from the
system image to the vendor partition so that a single system image may be used
with either an A/B or a non-A/B vendor image. The topic removes a delta in the
system image that prevented such reuse in the past.
The recovery resources that are moving are involved with updating the recovery
partition after an update. In a non-A/B configuration, the system boots from
the recovery partition, updates the other partitions (system, vendor, etc.)
Then, the next time the system boots normally, a script updates the recovery
partition (if necessary). This script, the executables it invokes, and the data
files that it uses were previously on the system partition. The resources that
are moving include the following.
* install-recovery.sh
* applypatch
* recovery-resource.dat (if present)
* recovery-from-boot.p (if present)
This change includes the platform build system and release tools changes to
move the recovery resources from system to vendor (or /system/vendor). The
release tools need to know where to generate the recovery patch, and they
discover this from misc_info.txt variable board_uses_vendorimage, which the
platform build system generates.
We remove applypatch from PRODUCT_PACKAGES, but it is added back as a required
module in target/product/base_vendor.mk.
Several release tools rely on the misc_info.txt board_uses_vendorimage variable
to know how to generate and detect the recovery patch.
This change partially removes the --rebuild_recovery flag from the
merge_target_files.py script. The flag will be fully removed in a follow-on
change.
Bug: 68319577
Test: Ensure that recovery partition is updated correctly.
Change-Id: Ia4045bd67ffb3d899efa8d20dab4c4299b87ee5f
2019-09-18 02:06:47 +02:00
RECOVERY_RESOURCE_ZIP := $( TARGET_OUT_VENDOR) /etc/recovery-resource.dat
ALL_DEFAULT_INSTALLED_MODULES += $( RECOVERY_RESOURCE_ZIP)
2015-07-22 21:33:18 +02:00
e l s e
RECOVERY_RESOURCE_ZIP :=
e n d i f
2009-07-02 18:00:54 +02:00
2018-07-31 22:26:54 +02:00
INSTALLED_RECOVERY_BUILD_PROP_TARGET := $( TARGET_RECOVERY_ROOT_OUT) /prop.default
$(INSTALLED_RECOVERY_BUILD_PROP_TARGET) : PRIVATE_RECOVERY_UI_PROPERTIES := \
TARGET_RECOVERY_UI_ANIMATION_FPS:animation_fps \
TARGET_RECOVERY_UI_MARGIN_HEIGHT:margin_height \
TARGET_RECOVERY_UI_MARGIN_WIDTH:margin_width \
TARGET_RECOVERY_UI_MENU_UNUSABLE_ROWS:menu_unusable_rows \
TARGET_RECOVERY_UI_PROGRESS_BAR_BASELINE:progress_bar_baseline \
TARGET_RECOVERY_UI_TOUCH_LOW_THRESHOLD:touch_low_threshold \
TARGET_RECOVERY_UI_TOUCH_HIGH_THRESHOLD:touch_high_threshold \
TARGET_RECOVERY_UI_VR_STEREO_OFFSET:vr_stereo_offset
# Parses the given list of build variables and writes their values as build properties if defined.
# For example, if a target defines `TARGET_RECOVERY_UI_MARGIN_HEIGHT := 100`,
# `ro.recovery.ui.margin_height=100` will be appended to the given output file.
# $(1): Map from the build variable names to property names
# $(2): Output file
d e f i n e a p p e n d - r e c o v e r y - u i - p r o p e r t i e s
e c h o "#" > > $( 2)
e c h o "# RECOVERY UI BUILD PROPERTIES" > > $( 2)
e c h o "#" > > $( 2)
$( foreach prop ,$ ( 1) , \
$( eval _varname := $( call word-colon,1,$( prop) ) ) \
$( eval _propname := $( call word-colon,2,$( prop) ) ) \
$( eval _value := $( $( _varname) ) ) \
$( if $( _value) , \
echo ro.recovery.ui.$( _propname) = $( _value) >> $( 2) && ) ) true
e n d e f
$(INSTALLED_RECOVERY_BUILD_PROP_TARGET) : \
2020-05-25 20:18:36 +02:00
$( INSTALLED_BUILD_PROP_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_VENDOR_BUILD_PROP_TARGET) \
$( INSTALLED_ODM_BUILD_PROP_TARGET) \
$( INSTALLED_PRODUCT_BUILD_PROP_TARGET) \
2019-06-25 08:58:13 +02:00
$( INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET)
2018-09-18 19:22:54 +02:00
@echo " Target recovery buildinfo: $@ "
2018-07-31 22:26:54 +02:00
$( hide) mkdir -p $( dir $@ )
$( hide) rm -f $@
2020-05-25 20:18:36 +02:00
$( hide) cat $( INSTALLED_BUILD_PROP_TARGET) >> $@
2018-07-31 22:26:54 +02:00
$( hide) cat $( INSTALLED_VENDOR_BUILD_PROP_TARGET) >> $@
2017-11-14 16:42:30 +01:00
$( hide) cat $( INSTALLED_ODM_BUILD_PROP_TARGET) >> $@
2018-07-31 22:26:54 +02:00
$( hide) cat $( INSTALLED_PRODUCT_BUILD_PROP_TARGET) >> $@
2019-06-25 08:58:13 +02:00
$( hide) cat $( INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET) >> $@
2018-07-31 22:26:54 +02:00
$( call append-recovery-ui-properties,$( PRIVATE_RECOVERY_UI_PROPERTIES) ,$@ )
2020-03-17 03:13:46 +01:00
i f e q ( t r u e t r u e , $( strip $ ( BUILDING_VENDOR_BOOT_IMAGE ) ) $( strip $ ( AB_OTA_UPDATER ) ) )
2020-04-08 01:39:10 +02:00
INTERNAL_RECOVERYIMAGE_ARGS := --ramdisk $( recovery_ramdisk)
2019-07-10 19:49:37 +02:00
i f d e f G E N E R I C _ K E R N E L _ C M D L I N E
INTERNAL_RECOVERYIMAGE_ARGS += --cmdline " $( GENERIC_KERNEL_CMDLINE) "
e n d i f
2020-03-17 03:13:46 +01:00
e l s e # not (BUILDING_VENDOR_BOOT_IMAGE and AB_OTA_UPDATER)
2019-07-10 19:49:37 +02:00
INTERNAL_RECOVERYIMAGE_ARGS := \
$( addprefix --second ,$( INSTALLED_2NDBOOTLOADER_TARGET) ) \
2020-03-12 00:03:07 +01:00
--ramdisk $( recovery_ramdisk)
2009-07-02 18:00:54 +02:00
# Assumes this has already been stripped
2016-10-06 01:57:27 +02:00
i f d e f I N T E R N A L _ K E R N E L _ C M D L I N E
INTERNAL_RECOVERYIMAGE_ARGS += --cmdline " $( INTERNAL_KERNEL_CMDLINE) "
2009-07-02 18:00:54 +02:00
e n d i f
i f d e f B O A R D _ K E R N E L _ B A S E
INTERNAL_RECOVERYIMAGE_ARGS += --base $( BOARD_KERNEL_BASE)
e n d i f
2010-08-25 23:29:34 +02:00
i f d e f B O A R D _ K E R N E L _ P A G E S I Z E
INTERNAL_RECOVERYIMAGE_ARGS += --pagesize $( BOARD_KERNEL_PAGESIZE)
e n d i f
2018-03-21 20:15:11 +01:00
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ D T B O
2019-02-04 19:35:25 +01:00
i f d e f B O A R D _ P R E B U I L T _ R E C O V E R Y _ D T B O I M A G E
INTERNAL_RECOVERYIMAGE_ARGS += --recovery_dtbo $( BOARD_PREBUILT_RECOVERY_DTBOIMAGE)
e l s e
2018-03-21 20:15:11 +01:00
INTERNAL_RECOVERYIMAGE_ARGS += --recovery_dtbo $( BOARD_PREBUILT_DTBOIMAGE)
e n d i f
2019-07-10 19:49:37 +02:00
e n d i f # BOARD_INCLUDE_RECOVERY_DTBO
2018-09-23 16:10:47 +02:00
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ A C P I O
INTERNAL_RECOVERYIMAGE_ARGS += --recovery_acpio $( BOARD_RECOVERY_ACPIO)
e n d i f
2019-01-23 03:08:59 +01:00
i f d e f B O A R D _ I N C L U D E _ D T B _ I N _ B O O T I M G
INTERNAL_RECOVERYIMAGE_ARGS += --dtb $( INSTALLED_DTBIMAGE_TARGET)
e n d i f
2019-07-10 19:49:37 +02:00
e n d i f # INSTALLED_VENDOR_BOOTIMAGE_TARGET not defined
2020-03-17 03:13:46 +01:00
i f n d e f B O A R D _ R E C O V E R Y _ M K B O O T I M G _ A R G S
BOARD_RECOVERY_MKBOOTIMG_ARGS := $( BOARD_MKBOOTIMG_ARGS)
e n d i f
2009-07-02 18:00:54 +02:00
2020-05-11 22:20:03 +02:00
$(recovery_ramdisk) : $( MKBOOTFS ) $( COMPRESSION_COMMAND_DEPS ) \
2020-03-12 00:03:07 +01:00
$( INTERNAL_ROOT_FILES) \
$( INSTALLED_RAMDISK_TARGET) \
$( INTERNAL_RECOVERYIMAGE_FILES) \
$( recovery_sepolicy) \
$( INSTALLED_2NDBOOTLOADER_TARGET) \
$( INSTALLED_RECOVERY_BUILD_PROP_TARGET) \
$( recovery_resource_deps) \
$( recovery_fstab)
# Making recovery image
mkdir -p $( TARGET_RECOVERY_OUT)
mkdir -p $( TARGET_RECOVERY_ROOT_OUT) /sdcard $( TARGET_RECOVERY_ROOT_OUT) /tmp
# Copying baseline ramdisk...
# Use rsync because "cp -Rf" fails to overwrite broken symlinks on Mac.
rsync -a --exclude= sdcard $( IGNORE_RECOVERY_SEPOLICY) $( IGNORE_CACHE_LINK) $( TARGET_ROOT_OUT) $( TARGET_RECOVERY_OUT)
# Modifying ramdisk contents...
$( if $( filter true,$( BOARD_BUILD_SYSTEM_ROOT_IMAGE) ) ,, \
ln -sf /system/bin/init $( TARGET_RECOVERY_ROOT_OUT) /init)
# Removes $(TARGET_RECOVERY_ROOT_OUT)/init*.rc EXCEPT init.recovery*.rc.
find $( TARGET_RECOVERY_ROOT_OUT) -maxdepth 1 -name 'init*.rc' -type f -not -name "init.recovery.*.rc" | xargs rm -f
cp $( TARGET_ROOT_OUT) /init.recovery.*.rc $( TARGET_RECOVERY_ROOT_OUT) / 2> /dev/null || true # Ignore error when the src file doesn't exist.
mkdir -p $( TARGET_RECOVERY_ROOT_OUT) /res
rm -rf $( TARGET_RECOVERY_ROOT_OUT) /res/*
cp -rf $( recovery_resources_common) /* $( TARGET_RECOVERY_ROOT_OUT) /res
$( foreach recovery_text_file,$( generated_recovery_text_files) , \
cp -rf $( recovery_text_file) $( TARGET_RECOVERY_ROOT_OUT) /res/images/ && ) true
cp -f $( recovery_font) $( TARGET_RECOVERY_ROOT_OUT) /res/images/font.png
$( foreach item,$( TARGET_PRIVATE_RES_DIRS) , \
cp -rf $( item) $( TARGET_RECOVERY_ROOT_OUT) /$( newline) )
$( foreach item,$( recovery_fstab) , \
cp -f $( item) $( TARGET_RECOVERY_ROOT_OUT) /system/etc/recovery.fstab)
$( if $( strip $( recovery_wipe) ) , \
cp -f $( recovery_wipe) $( TARGET_RECOVERY_ROOT_OUT) /system/etc/recovery.wipe)
ln -sf prop.default $( TARGET_RECOVERY_ROOT_OUT) /default.prop
$( BOARD_RECOVERY_IMAGE_PREPARE)
2020-05-11 22:20:03 +02:00
$( MKBOOTFS) -d $( TARGET_OUT) $( TARGET_RECOVERY_ROOT_OUT) | $( COMPRESSION_COMMAND) > $( recovery_ramdisk)
2020-03-12 00:03:07 +01:00
2015-01-30 23:05:22 +01:00
# $(1): output file
2020-03-12 00:03:07 +01:00
# $(2): kernel file
2015-01-30 23:05:22 +01:00
d e f i n e b u i l d - r e c o v e r y i m a g e - t a r g e t
2019-03-28 16:45:40 +01:00
$( if $( filter true,$( PRODUCT_SUPPORTS_VBOOT) ) , \
2020-04-08 01:39:10 +02:00
$( MKBOOTIMG) --kernel $( 2) $( INTERNAL_RECOVERYIMAGE_ARGS) \
2020-03-17 03:13:46 +01:00
$( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_RECOVERY_MKBOOTIMG_ARGS) \
2020-03-12 00:03:07 +01:00
--output $( 1) .unsigned, \
2020-04-08 01:39:10 +02:00
$( MKBOOTIMG) --kernel $( 2) $( INTERNAL_RECOVERYIMAGE_ARGS) \
2020-03-17 03:13:46 +01:00
$( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_RECOVERY_MKBOOTIMG_ARGS) \
2020-03-12 00:03:07 +01:00
--output $( 1) )
2019-03-28 16:45:40 +01:00
$( if $( filter true,$( PRODUCT_SUPPORTS_BOOT_SIGNER) ) ,\
2016-08-08 19:51:10 +02:00
$( if $( filter true,$( BOARD_USES_RECOVERY_AS_BOOT) ) ,\
2019-03-28 16:45:40 +01:00
$( BOOT_SIGNER) /boot $( 1) $( PRODUCT_VERITY_SIGNING_KEY) .pk8 $( PRODUCT_VERITY_SIGNING_KEY) .x509.pem $( 1) ,\
$( BOOT_SIGNER) /recovery $( 1) $( PRODUCT_VERITY_SIGNING_KEY) .pk8 $( PRODUCT_VERITY_SIGNING_KEY) .x509.pem $( 1) \
2016-08-08 19:51:10 +02:00
) \
)
2019-03-28 16:45:40 +01:00
$( if $( filter true,$( PRODUCT_SUPPORTS_VBOOT) ) , \
$( VBOOT_SIGNER) $( FUTILITY) $( 1) .unsigned $( PRODUCT_VBOOT_SIGNING_KEY) .vbpubk $( PRODUCT_VBOOT_SIGNING_KEY) .vbprivk $( PRODUCT_VBOOT_SIGNING_SUBKEY) .vbprivk $( 1) .keyblock $( 1) )
2017-11-17 08:22:37 +01:00
$( if $( filter true,$( BOARD_USES_RECOVERY_AS_BOOT) ) , \
2020-05-08 02:32:10 +02:00
$( call assert-max-image-size,$( 1) ,$( call get-hash-image-max-size,$( call get-bootimage-partition-size,$( 1) ,boot) ) ) , \
2020-03-12 00:03:07 +01:00
$( call assert-max-image-size,$( 1) ,$( call get-hash-image-max-size,$( BOARD_RECOVERYIMAGE_PARTITION_SIZE) ) ) )
2017-12-01 22:24:01 +01:00
$( if $( filter true,$( BOARD_AVB_ENABLE) ) , \
$( if $( filter true,$( BOARD_USES_RECOVERY_AS_BOOT) ) , \
2020-05-08 02:32:10 +02:00
$( AVBTOOL) add_hash_footer --image $( 1) --partition_size $( call get-bootimage-partition-size,$( 1) ,boot) --partition_name boot $( INTERNAL_AVB_BOOT_SIGNING_ARGS) $( BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS) ,\
2020-03-12 00:03:07 +01:00
$( AVBTOOL) add_hash_footer --image $( 1) --partition_size $( BOARD_RECOVERYIMAGE_PARTITION_SIZE) --partition_name recovery $( INTERNAL_AVB_RECOVERY_SIGNING_ARGS) $( BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS) ) )
2015-01-30 23:05:22 +01:00
e n d e f
2020-06-12 04:39:34 +02:00
recoveryimage-deps := $( MKBOOTIMG) $( recovery_ramdisk) $( recovery_kernel)
2019-03-28 16:45:40 +01:00
i f e q ( t r u e , $( PRODUCT_SUPPORTS_BOOT_SIGNER ) )
2020-06-12 04:39:34 +02:00
recoveryimage-deps += $( BOOT_SIGNER)
2016-03-10 21:57:33 +01:00
e n d i f
2019-03-28 16:45:40 +01:00
i f e q ( t r u e , $( PRODUCT_SUPPORTS_VBOOT ) )
2020-06-12 04:39:34 +02:00
recoveryimage-deps += $( VBOOT_SIGNER)
2016-03-10 21:57:33 +01:00
e n d i f
2017-05-04 22:58:04 +02:00
i f e q ( t r u e , $( BOARD_AVB_ENABLE ) )
2020-06-12 04:39:34 +02:00
recoveryimage-deps += $( AVBTOOL) $( BOARD_AVB_BOOT_KEY_PATH)
2017-05-04 22:58:04 +02:00
e n d i f
2018-08-22 23:35:09 +02:00
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ D T B O
2020-06-12 04:39:34 +02:00
ifdef BOARD_PREBUILT_RECOVERY_DTBOIMAGE
recoveryimage-deps += $( BOARD_PREBUILT_RECOVERY_DTBOIMAGE)
else
recoveryimage-deps += $( BOARD_PREBUILT_DTBOIMAGE)
endif
2019-02-04 19:35:25 +01:00
e n d i f
2018-09-23 16:10:47 +02:00
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ A C P I O
2020-06-12 04:39:34 +02:00
recoveryimage-deps += $( BOARD_RECOVERY_ACPIO)
2018-09-23 16:10:47 +02:00
e n d i f
2019-01-23 03:08:59 +01:00
i f d e f B O A R D _ I N C L U D E _ D T B _ I N _ B O O T I M G
2020-06-12 04:39:34 +02:00
recoveryimage-deps += $( INSTALLED_DTBIMAGE_TARGET)
2019-01-23 03:08:59 +01:00
e n d i f
2018-08-22 23:35:09 +02:00
2020-06-12 04:39:34 +02:00
i f e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
$(INSTALLED_BOOTIMAGE_TARGET) : $( recoveryimage -deps )
2018-08-22 23:35:09 +02:00
$( call pretty," Target boot image from recovery: $@ " )
2020-03-12 00:03:07 +01:00
$( call build-recoveryimage-target, $@ , $( PRODUCT_OUT) /$( subst .img,,$( subst boot,kernel,$( notdir $@ ) ) ) )
2018-08-22 23:35:09 +02:00
e n d i f # BOARD_USES_RECOVERY_AS_BOOT
2020-06-12 04:39:34 +02:00
$(INSTALLED_RECOVERYIMAGE_TARGET) : $( recoveryimage -deps )
2020-03-12 00:03:07 +01:00
$( call build-recoveryimage-target, $@ , $( recovery_kernel) )
2009-07-02 18:00:54 +02:00
2015-12-22 18:47:46 +01:00
i f d e f R E C O V E R Y _ R E S O U R C E _ Z I P
2015-10-30 00:33:05 +01:00
$(RECOVERY_RESOURCE_ZIP) : $( INSTALLED_RECOVERYIMAGE_TARGET ) | $( ZIPTIME )
2012-09-04 23:45:11 +02:00
$( hide) mkdir -p $( dir $@ )
2015-10-30 00:33:05 +01:00
$( hide) find $( TARGET_RECOVERY_ROOT_OUT) /res -type f | sort | zip -0qrjX $@ -@
$( remove-timestamps-from-package)
2015-07-22 21:33:18 +02:00
e n d i f
2012-08-21 00:38:58 +02:00
2015-01-30 23:05:22 +01:00
.PHONY : recoveryimage -nodeps
recoveryimage-nodeps :
@echo " make $@ : ignoring dependencies "
$( call build-recoveryimage-target, $( INSTALLED_RECOVERYIMAGE_TARGET) )
2019-04-22 20:09:57 +02:00
e l s e # BUILDING_RECOVERY_IMAGE
2012-08-21 00:38:58 +02:00
RECOVERY_RESOURCE_ZIP :=
2019-04-22 20:09:57 +02:00
e n d i f # BUILDING_RECOVERY_IMAGE
2009-07-02 18:00:54 +02:00
.PHONY : recoveryimage
2012-08-21 00:38:58 +02:00
recoveryimage : $( INSTALLED_RECOVERYIMAGE_TARGET ) $( RECOVERY_RESOURCE_ZIP )
2009-07-02 18:00:54 +02:00
2017-10-04 14:22:41 +02:00
i f n e q ( $( BOARD_NAND_PAGE_SIZE ) , )
$( error MTD device is no longer supported and thus BOARD_NAND_PAGE_SIZE is deprecated .)
2010-02-05 22:34:34 +01:00
e n d i f
2017-10-04 14:22:41 +02:00
i f n e q ( $( BOARD_NAND_SPARE_SIZE ) , )
$( error MTD device is no longer supported and thus BOARD_NAND_SPARE_SIZE is deprecated .)
2010-08-06 21:19:29 +02:00
e n d i f
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
i f n e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
# -----------------------------------------------------------------
# the debug ramdisk, which is the original ramdisk plus additional
# files: force_debuggable, adb_debug.prop and userdebug sepolicy.
# When /force_debuggable is present, /init will load userdebug sepolicy
# and property files to allow adb root, if the device is unlocked.
i f d e f B U I L D I N G _ R A M D I S K _ I M A G E
BUILT_DEBUG_RAMDISK_TARGET := $( PRODUCT_OUT) /ramdisk-debug.img
INSTALLED_DEBUG_RAMDISK_TARGET := $( BUILT_DEBUG_RAMDISK_TARGET)
INTERNAL_DEBUG_RAMDISK_FILES := $( filter $( TARGET_DEBUG_RAMDISK_OUT) /%, \
$( ALL_GENERATED_SOURCES) \
$( ALL_DEFAULT_INSTALLED_MODULES) )
# Note: TARGET_DEBUG_RAMDISK_OUT will be $(PRODUCT_OUT)/debug_ramdisk/first_stage_ramdisk,
# if BOARD_USES_RECOVERY_AS_BOOT is true. Otherwise, it will be $(PRODUCT_OUT)/debug_ramdisk.
# But the root dir of the ramdisk to build is always $(PRODUCT_OUT)/debug_ramdisk.
my_debug_ramdisk_root_dir := $( PRODUCT_OUT) /debug_ramdisk
INSTALLED_FILES_FILE_DEBUG_RAMDISK := $( PRODUCT_OUT) /installed-files-ramdisk-debug.txt
INSTALLED_FILES_JSON_DEBUG_RAMDISK := $( INSTALLED_FILES_FILE_DEBUG_RAMDISK:.txt= .json)
$(INSTALLED_FILES_FILE_DEBUG_RAMDISK) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_DEBUG_RAMDISK )
$(INSTALLED_FILES_FILE_DEBUG_RAMDISK) : DEBUG_RAMDISK_ROOT_DIR := $( my_debug_ramdisk_root_dir )
# Cannot just depend on INTERNAL_DEBUG_RAMDISK_FILES like other INSTALLED_FILES_FILE_* rules.
# Because ramdisk-debug.img will rsync from either ramdisk.img or ramdisk-recovery.img.
# Need to depend on the built ramdisk-debug.img, to get a complete list of the installed files.
$(INSTALLED_FILES_FILE_DEBUG_RAMDISK) : $( INSTALLED_DEBUG_RAMDISK_TARGET )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_DEBUG_RAMDISK) : $( INTERNAL_DEBUG_RAMDISK_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
echo Installed file list: $@
mkdir -p $( dir $@ )
rm -f $@
$( FILESLIST) $( DEBUG_RAMDISK_ROOT_DIR) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
# ramdisk-debug.img will rsync the content from either ramdisk.img or ramdisk-recovery.img,
# depending on whether BOARD_USES_RECOVERY_AS_BOOT is set or not.
i f e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
my_debug_ramdisk_sync_dir := $( TARGET_RECOVERY_ROOT_OUT)
e l s e
my_debug_ramdisk_sync_dir := $( TARGET_RAMDISK_OUT)
e n d i f # BOARD_USES_RECOVERY_AS_BOOT
$(INSTALLED_DEBUG_RAMDISK_TARGET) : DEBUG_RAMDISK_SYNC_DIR := $( my_debug_ramdisk_sync_dir )
$(INSTALLED_DEBUG_RAMDISK_TARGET) : DEBUG_RAMDISK_ROOT_DIR := $( my_debug_ramdisk_root_dir )
2019-04-24 06:35:50 +02:00
i f e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
# ramdisk-recovery.img isn't a make target, need to depend on boot.img if it's for recovery.
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
$(INSTALLED_DEBUG_RAMDISK_TARGET) : $( INSTALLED_BOOTIMAGE_TARGET )
2019-04-24 06:35:50 +02:00
e l s e
# Depends on ramdisk.img, note that some target has ramdisk.img but no boot.img, e.g., emulator.
$(INSTALLED_DEBUG_RAMDISK_TARGET) : $( INSTALLED_RAMDISK_TARGET )
e n d i f # BOARD_USES_RECOVERY_AS_BOOT
2020-05-11 22:20:03 +02:00
$(INSTALLED_DEBUG_RAMDISK_TARGET) : $( MKBOOTFS ) $( INTERNAL_DEBUG_RAMDISK_FILES ) | $( COMPRESSION_COMMAND_DEPS )
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
$( call pretty," Target debug ram disk: $@ " )
mkdir -p $( TARGET_DEBUG_RAMDISK_OUT)
touch $( TARGET_DEBUG_RAMDISK_OUT) /force_debuggable
2019-04-24 09:33:03 +02:00
rsync -a $( DEBUG_RAMDISK_SYNC_DIR) / $( DEBUG_RAMDISK_ROOT_DIR)
2020-05-11 22:20:03 +02:00
$( MKBOOTFS) -d $( TARGET_OUT) $( DEBUG_RAMDISK_ROOT_DIR) | $( COMPRESSION_COMMAND) > $@
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
.PHONY : ramdisk_debug -nodeps
ramdisk_debug-nodeps : DEBUG_RAMDISK_SYNC_DIR := $( my_debug_ramdisk_sync_dir )
ramdisk_debug-nodeps : DEBUG_RAMDISK_ROOT_DIR := $( my_debug_ramdisk_root_dir )
2020-05-11 22:20:03 +02:00
ramdisk_debug-nodeps : $( MKBOOTFS ) | $( COMPRESSION_COMMAND_DEPS )
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
echo " make $@ : ignoring dependencies "
mkdir -p $( TARGET_DEBUG_RAMDISK_OUT)
touch $( TARGET_DEBUG_RAMDISK_OUT) /force_debuggable
2019-04-24 09:33:03 +02:00
rsync -a $( DEBUG_RAMDISK_SYNC_DIR) / $( DEBUG_RAMDISK_ROOT_DIR)
2020-05-11 22:20:03 +02:00
$( MKBOOTFS) -d $( TARGET_OUT) $( DEBUG_RAMDISK_ROOT_DIR) | $( COMPRESSION_COMMAND) > $( INSTALLED_DEBUG_RAMDISK_TARGET)
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
my_debug_ramdisk_sync_dir :=
my_debug_ramdisk_root_dir :=
e n d i f # BUILDING_RAMDISK_IMAGE
# -----------------------------------------------------------------
# the boot-debug.img, which is the kernel plus ramdisk-debug.img
#
# Note: it's intentional to skip signing for boot-debug.img, because it
# can only be used if the device is unlocked with verification error.
i f n e q ( $( strip $ ( TARGET_NO_KERNEL ) ) , t r u e )
2020-03-12 00:03:07 +01:00
i f n e q ( $( strip $ ( BOARD_KERNEL_BINARIES ) ) , )
INSTALLED_DEBUG_BOOTIMAGE_TARGET := $( foreach k,$( subst kernel,boot-debug,$( BOARD_KERNEL_BINARIES) ) , \
$( PRODUCT_OUT) /$( k) .img)
e l s e
INSTALLED_DEBUG_BOOTIMAGE_TARGET := $( PRODUCT_OUT) /boot-debug.img
e n d i f
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
# Replace ramdisk.img in $(MKBOOTIMG) ARGS with ramdisk-debug.img to build boot-debug.img
i f e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
INTERNAL_DEBUG_BOOTIMAGE_ARGS := $( subst $( recovery_ramdisk) ,$( INSTALLED_DEBUG_RAMDISK_TARGET) , $( INTERNAL_RECOVERYIMAGE_ARGS) )
e l s e
INTERNAL_DEBUG_BOOTIMAGE_ARGS := $( subst $( INSTALLED_RAMDISK_TARGET) ,$( INSTALLED_DEBUG_RAMDISK_TARGET) , $( INTERNAL_BOOTIMAGE_ARGS) )
e n d i f
2019-05-03 10:38:34 +02:00
# If boot.img is chained but boot-debug.img is not signed, libavb in bootloader
# will fail to find valid AVB metadata from the end of /boot, thus stop booting.
# Using a test key to sign boot-debug.img to continue booting with the mismatched
# public key, if the device is unlocked.
i f n e q ( $( BOARD_AVB_BOOT_KEY_PATH ) , )
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
$(INSTALLED_DEBUG_BOOTIMAGE_TARGET) : $( AVBTOOL ) $( BOARD_AVB_BOOT_TEST_KEY_PATH )
e n d i f
BOARD_AVB_BOOT_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
INTERNAL_AVB_BOOT_TEST_SIGNING_ARGS := --algorithm SHA256_RSA2048 --key $( BOARD_AVB_BOOT_TEST_KEY_PATH)
# $(1): the bootimage to sign
d e f i n e t e s t - k e y - s i g n - b o o t i m a g e
2020-05-08 02:32:10 +02:00
$( call assert -max -image -size ,$ ( 1) ,$ ( call get -hash -image -max -size ,$ ( call get -bootimage -partition -size ,$ ( 1) ,boot -debug ) ) )
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
$( AVBTOOL ) a d d _ h a s h _ f o o t e r \
--image $( 1) \
2020-05-08 02:32:10 +02:00
--partition_size $( call get-bootimage-partition-size,$( 1) ,boot-debug) \
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
--partition_name boot $( INTERNAL_AVB_BOOT_TEST_SIGNING_ARGS) \
$( BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
2020-05-08 02:32:10 +02:00
$( call assert -max -image -size ,$ ( 1) ,$ ( call get -bootimage -partition -size ,$ ( 1) ,boot -debug ) )
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
e n d e f
2019-05-03 10:38:34 +02:00
2020-03-12 00:03:07 +01:00
# $(1): output file
d e f i n e b u i l d - d e b u g - b o o t i m a g e - t a r g e t
$( MKBOOTIMG) --kernel $( PRODUCT_OUT) /$( subst .img,,$( subst boot-debug,kernel,$( notdir $( 1) ) ) ) \
$( INTERNAL_DEBUG_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $1
$( if $( BOARD_AVB_BOOT_KEY_PATH) ,$( call test-key-sign-bootimage,$1 ) )
e n d e f
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
# Depends on original boot.img and ramdisk-debug.img, to build the new boot-debug.img
$(INSTALLED_DEBUG_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( INSTALLED_BOOTIMAGE_TARGET ) $( INSTALLED_DEBUG_RAMDISK_TARGET )
$( call pretty," Target boot debug image: $@ " )
2020-03-12 00:03:07 +01:00
$( call build-debug-bootimage-target, $@ )
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
.PHONY : bootimage_debug -nodeps
bootimage_debug-nodeps : $( MKBOOTIMG )
echo " make $@ : ignoring dependencies "
2020-03-12 00:03:07 +01:00
$( foreach b,$( INSTALLED_DEBUG_BOOTIMAGE_TARGET) ,$( call build-debug-bootimage-target,$b ) )
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
e n d i f # TARGET_NO_KERNEL
2020-02-14 12:00:15 +01:00
i f e q ( $( BUILDING_VENDOR_BOOT_IMAGE ) , t r u e )
i f e q ( $( BUILDING_RAMDISK_IMAGE ) , t r u e )
# -----------------------------------------------------------------
# vendor debug ramdisk
# Combines vendor ramdisk files and debug ramdisk files to build the vendor debug ramdisk.
2020-05-11 22:20:03 +02:00
INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET := $( PRODUCT_OUT) /vendor-ramdisk-debug.cpio$( RAMDISK_EXT)
2020-02-14 12:00:15 +01:00
$(INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET) : DEBUG_RAMDISK_FILES := $( INTERNAL_DEBUG_RAMDISK_FILES )
$(INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET) : VENDOR_RAMDISK_DIR := $( TARGET_VENDOR_RAMDISK_OUT )
INTERNAL_VENDOR_DEBUG_RAMDISK_FILES := $( filter $( TARGET_VENDOR_DEBUG_RAMDISK_OUT) /%, \
$( ALL_GENERATED_SOURCES) \
$( ALL_DEFAULT_INSTALLED_MODULES) )
# Note: TARGET_VENDOR_DEBUG_RAMDISK_OUT will be $(PRODUCT_OUT)/vendor_debug_ramdisk/first_stage_ramdisk,
# if BOARD_USES_RECOVERY_AS_BOOT is true. Otherwise, it will be $(PRODUCT_OUT)/vendor_debug_ramdisk.
# But the path of $(VENDOR_DEBUG_RAMDISK_DIR) to build the vendor debug ramdisk, is always
# $(PRODUCT_OUT)/vendor_debug_ramdisk.
$(INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET) : VENDOR_DEBUG_RAMDISK_DIR := $( PRODUCT_OUT ) /vendor_debug_ramdisk
$(INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET) : $( INTERNAL_VENDOR_RAMDISK_TARGET ) $( INSTALLED_DEBUG_RAMDISK_TARGET )
2020-05-11 22:20:03 +02:00
$(INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET) : $( MKBOOTFS ) $( INTERNAL_VENDOR_DEBUG_RAMDISK_FILES ) | $( COMPRESSION_COMMAND_DEPS )
2020-02-14 12:00:15 +01:00
$( call pretty," Target vendor debug ram disk: $@ " )
mkdir -p $( TARGET_VENDOR_DEBUG_RAMDISK_OUT)
touch $( TARGET_VENDOR_DEBUG_RAMDISK_OUT) /force_debuggable
$( foreach debug_file,$( DEBUG_RAMDISK_FILES) , \
cp -f $( debug_file) $( subst $( PRODUCT_OUT) /debug_ramdisk,$( PRODUCT_OUT) /vendor_debug_ramdisk,$( debug_file) ) && ) true
rsync -a $( VENDOR_RAMDISK_DIR) / $( VENDOR_DEBUG_RAMDISK_DIR)
2020-05-11 22:20:03 +02:00
$( MKBOOTFS) -d $( TARGET_OUT) $( VENDOR_DEBUG_RAMDISK_DIR) | $( COMPRESSION_COMMAND) > $@
2020-02-14 12:00:15 +01:00
INSTALLED_FILES_FILE_VENDOR_DEBUG_RAMDISK := $( PRODUCT_OUT) /installed-files-vendor-ramdisk-debug.txt
INSTALLED_FILES_JSON_VENDOR_DEBUG_RAMDISK := $( INSTALLED_FILES_FILE_VENDOR_DEBUG_RAMDISK:.txt= .json)
$(INSTALLED_FILES_FILE_VENDOR_DEBUG_RAMDISK) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_VENDOR_DEBUG_RAMDISK )
$(INSTALLED_FILES_FILE_VENDOR_DEBUG_RAMDISK) : VENDOR_DEBUG_RAMDISK_DIR := $( PRODUCT_OUT ) /vendor_debug_ramdisk
# The vendor debug ramdisk will rsync from $(TARGET_VENDOR_RAMDISK_OUT) and $(INTERNAL_DEBUG_RAMDISK_FILES),
# so we have to wait for the vendor debug ramdisk to be built before generating the installed file list.
$(INSTALLED_FILES_FILE_VENDOR_DEBUG_RAMDISK) : $( INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET )
$(INSTALLED_FILES_FILE_VENDOR_DEBUG_RAMDISK) : $( INTERNAL_VENDOR_DEBUG_RAMDISK_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
echo Installed file list: $@
mkdir -p $( dir $@ )
rm -f $@
$( FILESLIST) $( VENDOR_DEBUG_RAMDISK_DIR) > $( @:.txt= .json)
$( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
# -----------------------------------------------------------------
# vendor_boot-debug.img.
INSTALLED_VENDOR_DEBUG_BOOTIMAGE_TARGET := $( PRODUCT_OUT) /vendor_boot-debug.img
# The util to sign vendor_boot-debug.img with a test key.
BOARD_AVB_VENDOR_BOOT_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
INTERNAL_AVB_VENDOR_BOOT_TEST_SIGNING_ARGS := --algorithm SHA256_RSA2048 --key $( BOARD_AVB_VENDOR_BOOT_TEST_KEY_PATH)
# $(1): the vendor bootimage to sign
d e f i n e t e s t - k e y - s i g n - v e n d o r - b o o t i m a g e
$( call assert -max -image -size ,$ ( 1) ,$ ( call get -hash -image -max -size ,$ ( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE ) ) )
$( AVBTOOL ) a d d _ h a s h _ f o o t e r \
--image $( 1) \
--partition_size $( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE) \
--partition_name vendor_boot $( INTERNAL_AVB_VENDOR_BOOT_TEST_SIGNING_ARGS) \
$( BOARD_AVB_VENDOR_BOOT_ADD_HASH_FOOTER_ARGS)
$( call assert -max -image -size ,$ ( 1) ,$ ( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE ) )
e n d e f
i f n e q ( $( BOARD_AVB_VENDOR_BOOT_KEY_PATH ) , )
$(INSTALLED_VENDOR_DEBUG_BOOTIMAGE_TARGET) : $( AVBTOOL ) $( BOARD_AVB_VENDOR_BOOT_TEST_KEY_PATH )
e n d i f
# Depends on vendor_boot.img and vendor-ramdisk-debug.cpio.gz to build the new vendor_boot-debug.img
$(INSTALLED_VENDOR_DEBUG_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( INSTALLED_VENDOR_BOOTIMAGE_TARGET ) $( INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET )
$( call pretty," Target vendor_boot debug image: $@ " )
2020-05-11 09:00:35 +02:00
$( MKBOOTIMG) $( INTERNAL_VENDOR_BOOTIMAGE_ARGS) $( BOARD_MKBOOTIMG_ARGS) --vendor_ramdisk $( INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET) --vendor_boot $@
2020-02-14 12:00:15 +01:00
$( call assert-max-image-size,$@ ,$( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE) )
$( if $( BOARD_AVB_VENDOR_BOOT_KEY_PATH) ,$( call test-key-sign-vendor-bootimage,$@ ) )
e n d i f # BUILDING_RAMDISK_IMAGE
e n d i f # BUILDING_VENDOR_BOOT_IMAGE
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
# -----------------------------------------------------------------
# The test harness ramdisk, which is based off debug_ramdisk, plus a
# few additional test-harness-specific properties in adb_debug.prop.
i f d e f B U I L D I N G _ R A M D I S K _ I M A G E
BUILT_TEST_HARNESS_RAMDISK_TARGET := $( PRODUCT_OUT) /ramdisk-test-harness.img
INSTALLED_TEST_HARNESS_RAMDISK_TARGET := $( BUILT_TEST_HARNESS_RAMDISK_TARGET)
# rsync the content from ramdisk-debug.img to ramdisk-test-harness.img, then
# appends a few test harness specific properties into the adb_debug.prop.
TEST_HARNESS_RAMDISK_SYNC_DIR := $( PRODUCT_OUT) /debug_ramdisk
TEST_HARNESS_RAMDISK_ROOT_DIR := $( PRODUCT_OUT) /test_harness_ramdisk
# The following TARGET_TEST_HARNESS_RAMDISK_OUT will be $(PRODUCT_OUT)/test_harness_ramdisk/first_stage_ramdisk,
# if BOARD_USES_RECOVERY_AS_BOOT is true. Otherwise, it will be $(PRODUCT_OUT)/test_harness_ramdisk.
TEST_HARNESS_PROP_TARGET := $( TARGET_TEST_HARNESS_RAMDISK_OUT) /adb_debug.prop
ADDITIONAL_TEST_HARNESS_PROPERTIES := ro.audio.silent= 1
ADDITIONAL_TEST_HARNESS_PROPERTIES += ro.test_harness= 1
# $(1): a list of key=value pairs for additional property assignments
# $(2): the target .prop file to append the properties from $(1)
d e f i n e a p p e n d - t e s t - h a r n e s s - p r o p s
echo "#" >> $( 2) ; \
echo "# ADDITIONAL TEST HARNESS_PROPERTIES" >> $( 2) ; \
echo "#" >> $( 2) ;
$( foreach line,$( 1) , echo " $( line) " >> $( 2) ; )
e n d e f
$(INSTALLED_TEST_HARNESS_RAMDISK_TARGET) : $( INSTALLED_DEBUG_RAMDISK_TARGET )
2020-05-11 22:20:03 +02:00
$(INSTALLED_TEST_HARNESS_RAMDISK_TARGET) : $( MKBOOTFS ) $( INTERNAL_TEST_HARNESS_RAMDISK_FILES ) | $( COMPRESSION_COMMAND_DEPS )
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
$( call pretty," Target test harness ram disk: $@ " )
rsync -a $( TEST_HARNESS_RAMDISK_SYNC_DIR) / $( TEST_HARNESS_RAMDISK_ROOT_DIR)
$( call append-test-harness-props,$( ADDITIONAL_TEST_HARNESS_PROPERTIES) ,$( TEST_HARNESS_PROP_TARGET) )
2020-05-11 22:20:03 +02:00
$( MKBOOTFS) -d $( TARGET_OUT) $( TEST_HARNESS_RAMDISK_ROOT_DIR) | $( COMPRESSION_COMMAND) > $@
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
.PHONY : ramdisk_test_harness -nodeps
2020-05-11 22:20:03 +02:00
ramdisk_test_harness-nodeps : $( MKBOOTFS ) | $( COMPRESSION_COMMAND_DEPS )
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
echo " make $@ : ignoring dependencies "
rsync -a $( TEST_HARNESS_RAMDISK_SYNC_DIR) / $( TEST_HARNESS_RAMDISK_ROOT_DIR)
$( call append-test-harness-props,$( ADDITIONAL_TEST_HARNESS_PROPERTIES) ,$( TEST_HARNESS_PROP_TARGET) )
2020-05-11 22:20:03 +02:00
$( MKBOOTFS) -d $( TARGET_OUT) $( TEST_HARNESS_RAMDISK_ROOT_DIR) | $( COMPRESSION_COMMAND) > $( INSTALLED_TEST_HARNESS_RAMDISK_TARGET)
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
e n d i f # BUILDING_RAMDISK_IMAGE
# -----------------------------------------------------------------
# the boot-test-harness.img, which is the kernel plus ramdisk-test-harness.img
#
# Note: it's intentional to skip signing for boot-test-harness.img, because it
# can only be used if the device is unlocked with verification error.
i f n e q ( $( strip $ ( TARGET_NO_KERNEL ) ) , t r u e )
2020-04-02 20:31:08 +02:00
i f n e q ( $( strip $ ( BOARD_KERNEL_BINARIES ) ) , )
INSTALLED_TEST_HARNESS_BOOTIMAGE_TARGET := $( foreach k,$( subst kernel,boot-test-harness,$( BOARD_KERNEL_BINARIES) ) , \
$( PRODUCT_OUT) /$( k) .img)
e l s e
INSTALLED_TEST_HARNESS_BOOTIMAGE_TARGET := $( PRODUCT_OUT) /boot-test-harness.img
e n d i f
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
# Replace ramdisk-debug.img in $(MKBOOTIMG) ARGS with ramdisk-test-harness.img to build boot-test-harness.img
INTERNAL_TEST_HARNESS_BOOTIMAGE_ARGS := $( subst $( INSTALLED_DEBUG_RAMDISK_TARGET) ,$( INSTALLED_TEST_HARNESS_RAMDISK_TARGET) ,$( INTERNAL_DEBUG_BOOTIMAGE_ARGS) )
# If boot.img is chained but boot-test-harness.img is not signed, libavb in bootloader
# will fail to find valid AVB metadata from the end of /boot, thus stop booting.
# Using a test key to sign boot-test-harness.img to continue booting with the mismatched
# public key, if the device is unlocked.
i f n e q ( $( BOARD_AVB_BOOT_KEY_PATH ) , )
$(INSTALLED_TEST_HARNESS_BOOTIMAGE_TARGET) : $( AVBTOOL ) $( BOARD_AVB_BOOT_TEST_KEY_PATH )
e n d i f
2020-04-02 20:31:08 +02:00
# $(1): output file
d e f i n e b u i l d - b o o t - t e s t - h a r n e s s - t a r g e t
$( MKBOOTIMG) --kernel $( PRODUCT_OUT) /$( subst .img,,$( subst boot-test-harness,kernel,$( notdir $( 1) ) ) ) \
$( INTERNAL_TEST_HARNESS_BOOTIMAGE_ARGS) $( INTERNAL_MKBOOTIMG_VERSION_ARGS) $( BOARD_MKBOOTIMG_ARGS) --output $@
$( if $( BOARD_AVB_BOOT_KEY_PATH) ,$( call test-key-sign-bootimage,$@ ) )
e n d e f
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
# Build the new boot-test-harness.img, based on boot-debug.img and ramdisk-test-harness.img.
$(INSTALLED_TEST_HARNESS_BOOTIMAGE_TARGET) : $( MKBOOTIMG ) $( INSTALLED_DEBUG_BOOTIMAGE_TARGET ) $( INSTALLED_TEST_HARNESS_RAMDISK_TARGET )
$( call pretty," Target boot test harness image: $@ " )
2020-04-02 20:31:08 +02:00
$( call build-boot-test-harness-target,$@ )
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
.PHONY : bootimage_test_harness -nodeps
bootimage_test_harness-nodeps : $( MKBOOTIMG )
echo " make $@ : ignoring dependencies "
2020-04-02 20:31:08 +02:00
$( foreach b,$( INSTALLED_TEST_HARNESS_BOOTIMAGE_TARGET) ,$( call build-boot-test-harness-target,$b ) )
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
e n d i f # TARGET_NO_KERNEL
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 04:22:19 +02:00
e n d i f # BOARD_BUILD_SYSTEM_ROOT_IMAGE is not true
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 10:59:52 +01:00
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
2010-09-27 19:37:25 +02:00
# system image
2009-03-04 04:28:42 +01:00
#
2012-08-09 00:27:00 +02:00
# Remove overridden packages from $(ALL_PDK_FUSION_FILES)
PDK_FUSION_SYSIMG_FILES := \
$( filter-out $( foreach p,$( overridden_packages) ,$( p) %/$( p) .apk) , \
$( ALL_PDK_FUSION_FILES) )
2009-03-04 04:28:42 +01:00
2018-11-01 00:31:46 +01:00
INTERNAL_SYSTEMIMAGE_FILES := $( sort $( filter $( TARGET_OUT) /%, \
2012-03-14 02:58:27 +01:00
$( ALL_GENERATED_SOURCES) \
2012-08-21 00:38:58 +02:00
$( ALL_DEFAULT_INSTALLED_MODULES) \
Moving recovery resources from /system to /vendor
This change is part of a topic that moves the recovery resources from the
system partition to the vendor partition, if it exists, or the vendor directory
on the system partition otherwise. The recovery resources are moving from the
system image to the vendor partition so that a single system image may be used
with either an A/B or a non-A/B vendor image. The topic removes a delta in the
system image that prevented such reuse in the past.
The recovery resources that are moving are involved with updating the recovery
partition after an update. In a non-A/B configuration, the system boots from
the recovery partition, updates the other partitions (system, vendor, etc.)
Then, the next time the system boots normally, a script updates the recovery
partition (if necessary). This script, the executables it invokes, and the data
files that it uses were previously on the system partition. The resources that
are moving include the following.
* install-recovery.sh
* applypatch
* recovery-resource.dat (if present)
* recovery-from-boot.p (if present)
This change includes the platform build system and release tools changes to
move the recovery resources from system to vendor (or /system/vendor). The
release tools need to know where to generate the recovery patch, and they
discover this from misc_info.txt variable board_uses_vendorimage, which the
platform build system generates.
We remove applypatch from PRODUCT_PACKAGES, but it is added back as a required
module in target/product/base_vendor.mk.
Several release tools rely on the misc_info.txt board_uses_vendorimage variable
to know how to generate and detect the recovery patch.
This change partially removes the --rebuild_recovery flag from the
merge_target_files.py script. The flag will be fully removed in a follow-on
change.
Bug: 68319577
Test: Ensure that recovery partition is updated correctly.
Change-Id: Ia4045bd67ffb3d899efa8d20dab4c4299b87ee5f
2019-09-18 02:06:47 +02:00
$( PDK_FUSION_SYSIMG_FILES) ) \
2018-11-01 00:31:46 +01:00
$( PDK_FUSION_SYMLINK_STAMP) )
2012-03-14 02:58:27 +01:00
2012-08-14 00:03:00 +02:00
FULL_SYSTEMIMAGE_DEPS := $( INTERNAL_SYSTEMIMAGE_FILES) $( INTERNAL_USERIMAGES_DEPS)
2017-03-25 00:06:31 +01:00
# ASAN libraries in the system image - add dependency.
ASAN_IN_SYSTEM_INSTALLED := $( TARGET_OUT) /asan.tar.bz2
2018-07-27 20:54:32 +02:00
i f n e q ( , $( filter address , $ ( SANITIZE_TARGET ) ) )
2017-03-25 00:06:31 +01:00
ifeq ( true,$( SANITIZE_TARGET_SYSTEM) )
FULL_SYSTEMIMAGE_DEPS += $( ASAN_IN_SYSTEM_INSTALLED)
endif
e n d i f
2018-08-09 23:26:00 +02:00
FULL_SYSTEMIMAGE_DEPS += $( INTERNAL_ROOT_FILES) $( INSTALLED_FILES_FILE_ROOT)
2018-07-04 00:41:40 +02:00
2011-09-10 01:35:53 +02:00
# -----------------------------------------------------------------
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ S Y S T E M _ I M A G E
2011-09-10 01:35:53 +02:00
# installed file list
# Depending on anything that $(BUILT_SYSTEMIMAGE) depends on.
# We put installed-files.txt ahead of image itself in the dependency graph
# so that we can get the size stat even if the build fails due to too large
# system image.
INSTALLED_FILES_FILE := $( PRODUCT_OUT) /installed-files.txt
2018-06-13 23:04:22 +02:00
INSTALLED_FILES_JSON := $( INSTALLED_FILES_FILE:.txt= .json)
$(INSTALLED_FILES_FILE) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE) : $( FULL_SYSTEMIMAGE_DEPS ) $( FILESLIST ) $( FILESLIST_UTIL )
2011-09-10 01:35:53 +02:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
2017-03-16 17:41:19 +01:00
$( hide) $( FILESLIST) $( TARGET_OUT) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2011-09-10 01:35:53 +02:00
.PHONY : installed -file -list
installed-file-list : $( INSTALLED_FILES_FILE )
2013-03-02 01:45:35 +01:00
$( call dist -for -goals , sdk win_sdk sdk_addon , $ ( INSTALLED_FILES_FILE ) )
2011-09-10 01:35:53 +02:00
systemimage_intermediates := \
2011-11-04 19:37:01 +01:00
$( call intermediates-dir-for,PACKAGING,systemimage)
2011-09-10 01:35:53 +02:00
BUILT_SYSTEMIMAGE := $( systemimage_intermediates) /system.img
2014-06-19 05:26:24 +02:00
# Create symlink /system/vendor to /vendor if necessary.
2016-06-17 23:07:37 +02:00
i f d e f B O A R D _ U S E S _ V E N D O R I M A G E
2014-06-19 05:26:24 +02:00
d e f i n e c r e a t e - s y s t e m - v e n d o r - s y m l i n k
2014-07-17 21:56:49 +02:00
$( hide ) i f [ - d $( TARGET_OUT ) / v e n d o r ] & & [ ! - h $( TARGET_OUT ) / v e n d o r ] ; t h e n \
echo 'Non-symlink $(TARGET_OUT)/vendor detected!' 1>& 2; \
echo 'You cannot install files to $(TARGET_OUT)/vendor while building a separate vendor.img!' 1>& 2; \
exit 1; \
f i
2014-06-19 05:26:24 +02:00
$( hide ) l n - s f / v e n d o r $( TARGET_OUT ) / v e n d o r
e n d e f
e l s e
d e f i n e c r e a t e - s y s t e m - v e n d o r - s y m l i n k
e n d e f
e n d i f
2017-11-27 09:04:47 +01:00
# Create symlink /system/product to /product if necessary.
i f d e f B O A R D _ U S E S _ P R O D U C T I M A G E
d e f i n e c r e a t e - s y s t e m - p r o d u c t - s y m l i n k
$( hide ) i f [ - d $( TARGET_OUT ) / p r o d u c t ] & & [ ! - h $( TARGET_OUT ) / p r o d u c t ] ; t h e n \
echo 'Non-symlink $(TARGET_OUT)/product detected!' 1>& 2; \
echo 'You cannot install files to $(TARGET_OUT)/product while building a separate product.img!' 1>& 2; \
exit 1; \
f i
$( hide ) l n - s f / p r o d u c t $( TARGET_OUT ) / p r o d u c t
e n d e f
e l s e
d e f i n e c r e a t e - s y s t e m - p r o d u c t - s y m l i n k
e n d e f
e n d i f
2019-06-25 08:58:13 +02:00
# Create symlink /system/system_ext to /system_ext if necessary.
i f d e f B O A R D _ U S E S _ S Y S T E M _ E X T I M A G E
d e f i n e c r e a t e - s y s t e m - s y s t e m _ e x t - s y m l i n k
$( hide ) i f [ - d $( TARGET_OUT ) / s y s t e m _ e x t ] & & [ ! - h $( TARGET_OUT ) / s y s t e m _ e x t ] ; t h e n \
echo 'Non-symlink $(TARGET_OUT)/system_ext detected!' 1>& 2; \
echo 'You cannot install files to $(TARGET_OUT)/system_ext while building a separate system_ext.img!' 1>& 2; \
2018-05-29 14:09:01 +02:00
exit 1; \
f i
2019-06-25 08:58:13 +02:00
$( hide ) l n - s f / s y s t e m _ e x t $( TARGET_OUT ) / s y s t e m _ e x t
2018-05-29 14:09:01 +02:00
e n d e f
e l s e
2019-06-25 08:58:13 +02:00
d e f i n e c r e a t e - s y s t e m - s y s t e m _ e x t - s y m l i n k
2018-05-29 14:09:01 +02:00
e n d e f
e n d i f
2009-03-04 04:28:42 +01:00
# $(1): output file
d e f i n e b u i l d - s y s t e m i m a g e - t a r g e t
2011-10-29 02:02:30 +02:00
@echo " Target system fs image: $( 1) "
2014-06-19 05:26:24 +02:00
$( call create-system-vendor-symlink)
2017-11-27 09:04:47 +01:00
$( call create-system-product-symlink)
2019-06-25 08:58:13 +02:00
$( call create-system-system_ext-symlink)
2011-10-29 02:02:30 +02:00
@mkdir -p $( dir $( 1) ) $( systemimage_intermediates) && rm -rf $( systemimage_intermediates) /system_image_info.txt
2018-05-30 20:16:46 +02:00
$( call generate-image-prop-dictionary, $( systemimage_intermediates) /system_image_info.txt,system, \
2014-05-06 07:19:37 +02:00
skip_fsck = true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT) $( systemimage_intermediates) /system_image_info.txt $( 1) $( TARGET_OUT) \
|| ( mkdir -p $$ { DIST_DIR} ; \
cp $( INSTALLED_FILES_FILE) $$ { DIST_DIR} /installed-files-rescued.txt; \
exit 1 )
2009-03-04 04:28:42 +01:00
e n d e f
2019-06-12 23:33:38 +02:00
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
$(BUILT_SYSTEMIMAGE) : $( BOARD_AVB_SYSTEM_KEY_PATH )
e n d i f
2019-05-07 22:12:21 +02:00
$(BUILT_SYSTEMIMAGE) : $( FULL_SYSTEMIMAGE_DEPS ) $( INSTALLED_FILES_FILE )
2009-03-04 04:28:42 +01:00
$( call build-systemimage-target,$@ )
2018-08-21 06:09:07 +02:00
INSTALLED_SYSTEMIMAGE_TARGET := $( PRODUCT_OUT) /system.img
2010-09-27 19:37:25 +02:00
SYSTEMIMAGE_SOURCE_DIR := $( TARGET_OUT)
2009-03-04 04:28:42 +01:00
2018-08-21 06:09:07 +02:00
# INSTALLED_SYSTEMIMAGE_TARGET used to be named INSTALLED_SYSTEMIMAGE. Create an alias for backward
# compatibility, in case device-specific Makefiles still refer to the old name.
INSTALLED_SYSTEMIMAGE := $( INSTALLED_SYSTEMIMAGE_TARGET)
2009-07-24 00:12:53 +02:00
# The system partition needs room for the recovery image as well. We
# now store the recovery image as a binary patch using the boot image
# as the source (since they are very similar). Generate the patch so
# we can see how big it's going to be, and include that in the system
# image size check calculation.
2018-08-15 01:17:12 +02:00
i f n e q ( $( INSTALLED_BOOTIMAGE_TARGET ) , )
2009-07-24 22:52:32 +02:00
i f n e q ( $( INSTALLED_RECOVERYIMAGE_TARGET ) , )
2015-07-22 21:33:18 +02:00
i f n e q ( $( BOARD_USES_FULL_RECOVERY_IMAGE ) , t r u e )
2018-09-23 16:10:47 +02:00
i f n e q ( , $( filter true , $ ( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) $ ( BOARD_INCLUDE_RECOVERY_DTBO ) $ ( BOARD_INCLUDE_RECOVERY_ACPIO ) ) )
2018-03-10 02:04:42 +01:00
diff_tool := $( HOST_OUT_EXECUTABLES) /bsdiff
e l s e
diff_tool := $( HOST_OUT_EXECUTABLES) /imgdiff
e n d i f
2009-07-24 00:12:53 +02:00
intermediates := $( call intermediates-dir-for,PACKAGING,recovery_patch)
RECOVERY_FROM_BOOT_PATCH := $( intermediates) /recovery_from_boot.p
2018-03-10 02:04:42 +01:00
$(RECOVERY_FROM_BOOT_PATCH) : PRIVATE_DIFF_TOOL := $( diff_tool )
$(RECOVERY_FROM_BOOT_PATCH) : \
2018-11-26 19:12:05 +01:00
$( INSTALLED_RECOVERYIMAGE_TARGET) \
$( INSTALLED_BOOTIMAGE_TARGET) \
$( diff_tool)
2009-07-24 00:12:53 +02:00
@echo "Construct recovery from boot"
mkdir -p $( dir $@ )
2018-03-10 02:04:42 +01:00
$( PRIVATE_DIFF_TOOL) $( INSTALLED_BOOTIMAGE_TARGET) $( INSTALLED_RECOVERYIMAGE_TARGET) $@
2015-07-22 21:33:18 +02:00
e l s e # $(BOARD_USES_FULL_RECOVERY_IMAGE) == true
RECOVERY_FROM_BOOT_PATCH := $( INSTALLED_RECOVERYIMAGE_TARGET)
2018-08-15 01:17:12 +02:00
e n d i f # BOARD_USES_FULL_RECOVERY_IMAGE
e n d i f # INSTALLED_RECOVERYIMAGE_TARGET
e n d i f # INSTALLED_BOOTIMAGE_TARGET
2009-07-24 00:12:53 +02:00
2020-04-28 04:06:59 +02:00
$(INSTALLED_SYSTEMIMAGE_TARGET) : $( BUILT_SYSTEMIMAGE )
2009-03-04 04:28:42 +01:00
@echo " Install system fs image: $@ "
$( copy-file-to-target)
2020-04-28 04:06:59 +02:00
$( hide) $( call assert-max-image-size,$@ ,$( BOARD_SYSTEMIMAGE_PARTITION_SIZE) )
2009-03-04 04:28:42 +01:00
2018-08-21 06:09:07 +02:00
systemimage : $( INSTALLED_SYSTEMIMAGE_TARGET )
2009-03-04 04:28:42 +01:00
.PHONY : systemimage -nodeps snod
systemimage-nodeps snod : $( filter -out systemimage -nodeps snod ,$ ( MAKECMDGOALS ) ) \
2010-05-10 22:04:47 +02:00
| $( INTERNAL_USERIMAGES_DEPS)
2009-03-04 04:28:42 +01:00
@echo " make $@ : ignoring dependencies "
2018-08-21 06:09:07 +02:00
$( call build-systemimage-target,$( INSTALLED_SYSTEMIMAGE_TARGET) )
2019-04-09 19:03:57 +02:00
$( hide) $( call assert-max-image-size,$( INSTALLED_SYSTEMIMAGE_TARGET) ,$( BOARD_SYSTEMIMAGE_PARTITION_SIZE) )
2012-02-24 20:05:48 +01:00
i f e q ( t r u e , $( WITH_DEXPREOPT ) )
2020-03-05 00:50:53 +01:00
$( warning Warning: with dexpreopt enabled, you may need a full rebuild.)
2012-02-24 20:05:48 +01:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f # BUILDING_SYSTEM_IMAGE
2018-11-12 14:36:46 +01:00
.PHONY : sync syncsys
sync syncsys : $( INTERNAL_SYSTEMIMAGE_FILES )
2017-06-21 01:57:52 +02:00
2016-03-11 19:32:01 +01:00
# -----------------------------------------------------------------
2012-04-10 02:04:12 +02:00
## platform.zip: system, plus other files to be used in PDK fusion build,
## in a zip file
2013-07-22 23:54:58 +02:00
##
## PDK_PLATFORM_ZIP_PRODUCT_BINARIES is used to store specified files to platform.zip.
## The variable will be typically set from BoardConfig.mk.
## Files under out dir will be rejected to prevent possible conflicts with other rules.
2018-09-29 01:19:42 +02:00
i f n e q ( , $( BUILD_PLATFORM_ZIP ) )
2016-03-11 19:32:01 +01:00
pdk_odex_javalibs := $( strip $( foreach m,$( DEXPREOPT.MODULES.JAVA_LIBRARIES) ,\
2018-11-17 06:26:33 +01:00
$( if $( filter $( DEXPREOPT.$( m) .INSTALLED_STRIPPED) ,$( ALL_DEFAULT_INSTALLED_MODULES) ) ,$( m) ) ) )
2016-03-11 19:32:01 +01:00
pdk_odex_apps := $( strip $( foreach m,$( DEXPREOPT.MODULES.APPS) ,\
2018-11-17 06:26:33 +01:00
$( if $( filter $( DEXPREOPT.$( m) .INSTALLED_STRIPPED) ,$( ALL_DEFAULT_INSTALLED_MODULES) ) ,$( m) ) ) )
2016-03-11 19:32:01 +01:00
pdk_classes_dex := $( strip \
$( foreach m,$( pdk_odex_javalibs) ,$( call intermediates-dir-for,JAVA_LIBRARIES,$( m) ,,COMMON) /javalib.jar) \
2019-10-18 15:47:19 +02:00
$( foreach m,$( pdk_odex_apps) ,$( call intermediates-dir-for,APPS,$( m) ) /package.apk) )
2016-03-11 19:32:01 +01:00
pdk_odex_config_mk := $( PRODUCT_OUT) /pdk_dexpreopt_config.mk
$(pdk_odex_config_mk) : PRIVATE_JAVA_LIBRARIES := $( pdk_odex_javalibs )
$(pdk_odex_config_mk) : PRIVATE_APPS := $( pdk_odex_apps )
$(pdk_odex_config_mk) :
@echo " PDK odex config makefile: $@ "
$( hide) mkdir -p $( dir $@ )
$( hide) echo "# Auto-generated. Do not modify." > $@
$( hide) echo " PDK.DEXPREOPT.JAVA_LIBRARIES:= $( PRIVATE_JAVA_LIBRARIES) " >> $@
$( hide) echo " PDK.DEXPREOPT.APPS:= $( PRIVATE_APPS) " >> $@
$( foreach m,$( PRIVATE_JAVA_LIBRARIES) ,\
$( hide) echo " PDK.DEXPREOPT. $( m) .SRC:= $( patsubst $( OUT_DIR) /%,%,$( call intermediates-dir-for,JAVA_LIBRARIES,$( m) ,,COMMON) /javalib.jar) " >> $@ $( newline) \
$( hide) echo " PDK.DEXPREOPT. $( m) .DEX_PREOPT:= $( DEXPREOPT.$( m) .DEX_PREOPT) " >> $@ $( newline) \
$( hide) echo " PDK.DEXPREOPT. $( m) .MULTILIB:= $( DEXPREOPT.$( m) .MULTILIB) " >> $@ $( newline) \
$( hide) echo " PDK.DEXPREOPT. $( m) .DEX_PREOPT_FLAGS:= $( DEXPREOPT.$( m) .DEX_PREOPT_FLAGS) " >> $@ $( newline) \
)
$( foreach m,$( PRIVATE_APPS) ,\
2019-10-18 15:47:19 +02:00
$( hide) echo " PDK.DEXPREOPT. $( m) .SRC:= $( patsubst $( OUT_DIR) /%,%,$( call intermediates-dir-for,APPS,$( m) ) /package.apk) " >> $@ $( newline) \
2016-03-11 19:32:01 +01:00
$( hide) echo " PDK.DEXPREOPT. $( m) .DEX_PREOPT:= $( DEXPREOPT.$( m) .DEX_PREOPT) " >> $@ $( newline) \
$( hide) echo " PDK.DEXPREOPT. $( m) .MULTILIB:= $( DEXPREOPT.$( m) .MULTILIB) " >> $@ $( newline) \
$( hide) echo " PDK.DEXPREOPT. $( m) .DEX_PREOPT_FLAGS:= $( DEXPREOPT.$( m) .DEX_PREOPT_FLAGS) " >> $@ $( newline) \
$( hide) echo " PDK.DEXPREOPT. $( m) .PRIVILEGED_MODULE:= $( DEXPREOPT.$( m) .PRIVILEGED_MODULE) " >> $@ $( newline) \
2017-03-21 02:31:17 +01:00
$( hide) echo " PDK.DEXPREOPT. $( m) .VENDOR_MODULE:= $( DEXPREOPT.$( m) .VENDOR_MODULE) " >> $@ $( newline) \
2016-03-11 19:32:01 +01:00
$( hide) echo " PDK.DEXPREOPT. $( m) .TARGET_ARCH:= $( DEXPREOPT.$( m) .TARGET_ARCH) " >> $@ $( newline) \
$( hide) echo " PDK.DEXPREOPT. $( m) .STRIPPED_SRC:= $( patsubst $( PRODUCT_OUT) /%,%,$( DEXPREOPT.$( m) .INSTALLED_STRIPPED) ) " >> $@ $( newline) \
)
2013-07-22 23:54:58 +02:00
PDK_PLATFORM_ZIP_PRODUCT_BINARIES := $( filter-out $( OUT_DIR) /%,$( PDK_PLATFORM_ZIP_PRODUCT_BINARIES) )
2012-05-16 19:32:41 +02:00
INSTALLED_PLATFORM_ZIP := $( PRODUCT_OUT) /platform.zip
2016-03-11 19:32:01 +01:00
$(INSTALLED_PLATFORM_ZIP) : PRIVATE_DEX_FILES := $( pdk_classes_dex )
$(INSTALLED_PLATFORM_ZIP) : PRIVATE_ODEX_CONFIG := $( pdk_odex_config_mk )
2018-09-15 06:51:11 +02:00
$(INSTALLED_PLATFORM_ZIP) : $( SOONG_ZIP )
# dependencies for the other partitions are defined below after their file lists
# are known
2019-04-18 23:46:48 +02:00
$(INSTALLED_PLATFORM_ZIP) : $( INTERNAL_SYSTEMIMAGE_FILES ) $( pdk_classes_dex ) $( pdk_odex_config_mk ) $( API_FINGERPRINT )
2012-05-16 19:32:41 +02:00
$( call pretty," Platform zip package: $( INSTALLED_PLATFORM_ZIP) " )
2018-09-15 06:51:11 +02:00
rm -f $@ $@ .lst
echo " -C $( PRODUCT_OUT) " >> $@ .lst
echo " -D $( TARGET_OUT) " >> $@ .lst
echo " -D $( TARGET_OUT_NOTICE_FILES) " >> $@ .lst
echo " $( addprefix -f $( TARGET_OUT_UNSTRIPPED) /,$( PDK_SYMBOL_FILES_LIST) ) " >> $@ .lst
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ V E N D O R _ I M A G E
2018-09-15 06:51:11 +02:00
echo " -D $( TARGET_OUT_VENDOR) " >> $@ .lst
2014-07-17 02:46:35 +02:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ P R O D U C T _ I M A G E
2018-09-15 06:51:11 +02:00
echo " -D $( TARGET_OUT_PRODUCT) " >> $@ .lst
2017-11-27 09:04:47 +01:00
e n d i f
2019-06-25 08:58:13 +02:00
i f d e f B U I L D I N G _ S Y S T E M _ E X T _ I M A G E
echo " -D $( TARGET_OUT_SYSTEM_EXT) " >> $@ .lst
2018-05-29 14:09:01 +02:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ O D M _ I M A G E
2018-09-15 06:51:11 +02:00
echo " -D $( TARGET_OUT_ODM) " >> $@ .lst
2017-11-14 16:42:30 +01:00
e n d i f
2013-12-19 04:36:44 +01:00
i f n e q ( $( PDK_PLATFORM_JAVA_ZIP_CONTENTS ) , )
2018-09-15 06:51:11 +02:00
echo " -C $( OUT_DIR) " >> $@ .lst
for f in $( filter-out $( PRIVATE_DEX_FILES) ,$( addprefix -f $( OUT_DIR) /,$( PDK_PLATFORM_JAVA_ZIP_CONTENTS) ) ) ; do \
if [ -e $$ f ] ; then \
echo " -f $$ f " ; \
fi \
done >> $@ .lst
2012-05-16 19:32:41 +02:00
e n d i f
2013-07-22 23:54:58 +02:00
i f n e q ( $( PDK_PLATFORM_ZIP_PRODUCT_BINARIES ) , )
2018-09-15 06:51:11 +02:00
echo " -C . $( addprefix -f ,$( PDK_PLATFORM_ZIP_PRODUCT_BINARIES) ) " >> $@ .lst
2013-07-22 23:54:58 +02:00
e n d i f
2016-03-11 19:32:01 +01:00
@# Add dex-preopt files and config.
2018-09-15 06:51:11 +02:00
$( if $( PRIVATE_DEX_FILES) ,\
echo " -C $( OUT_DIR) $( addprefix -f ,$( PRIVATE_DEX_FILES) ) " ) >> $@ .lst
2019-04-18 23:46:48 +02:00
echo " -C $( dir $( API_FINGERPRINT) ) -f $( API_FINGERPRINT) " >> $@ .lst
2018-09-15 06:51:11 +02:00
touch $( PRODUCT_OUT) /pdk.mk
echo " -C $( PRODUCT_OUT) -f $( PRIVATE_ODEX_CONFIG) -f $( PRODUCT_OUT) /pdk.mk " >> $@ .lst
$( SOONG_ZIP) --ignore_missing_files -o $@ @$@ .lst
2012-03-30 22:52:54 +02:00
.PHONY : platform
2012-05-16 19:32:41 +02:00
platform : $( INSTALLED_PLATFORM_ZIP )
.PHONY : platform -java
platform-java : platform
2012-03-30 22:52:54 +02:00
# Dist the platform.zip
2012-05-30 02:55:46 +02:00
i f n e q ( , $( filter platform platform -java , $ ( MAKECMDGOALS ) ) )
$( call dist -for -goals , platform platform -java , $ ( INSTALLED_PLATFORM_ZIP ) )
2012-03-30 22:52:54 +02:00
e n d i f
2009-03-04 04:28:42 +01:00
2018-09-29 01:19:42 +02:00
e n d i f # BUILD_PLATFORM_ZIP
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# data partition image
INTERNAL_USERDATAIMAGE_FILES := \
2011-11-04 19:37:01 +01:00
$( filter $( TARGET_OUT_DATA) /%,$( ALL_DEFAULT_INSTALLED_MODULES) )
2009-03-04 04:28:42 +01:00
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ U S E R D A T A _ I M A G E
2011-10-29 02:02:30 +02:00
userdataimage_intermediates := \
2011-11-04 19:37:01 +01:00
$( call intermediates-dir-for,PACKAGING,userdata)
2011-10-29 02:02:30 +02:00
BUILT_USERDATAIMAGE_TARGET := $( PRODUCT_OUT) /userdata.img
2009-03-04 04:28:42 +01:00
d e f i n e b u i l d - u s e r d a t a i m a g e - t a r g e t
2011-10-29 02:02:30 +02:00
$( call pretty," Target userdata fs image: $( INSTALLED_USERDATAIMAGE_TARGET) " )
@mkdir -p $( TARGET_OUT_DATA)
@mkdir -p $( userdataimage_intermediates) && rm -rf $( userdataimage_intermediates) /userdata_image_info.txt
2018-05-30 20:16:46 +02:00
$( call generate-image-prop-dictionary, $( userdataimage_intermediates) /userdata_image_info.txt,userdata,skip_fsck= true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT_DATA) $( userdataimage_intermediates) /userdata_image_info.txt \
$( INSTALLED_USERDATAIMAGE_TARGET) $( TARGET_OUT)
$( call assert-max-image-size,$( INSTALLED_USERDATAIMAGE_TARGET) ,$( BOARD_USERDATAIMAGE_PARTITION_SIZE) )
2009-03-04 04:28:42 +01:00
e n d e f
2009-04-10 04:31:12 +02:00
# We just build this directly to the install location.
INSTALLED_USERDATAIMAGE_TARGET := $( BUILT_USERDATAIMAGE_TARGET)
2017-03-25 00:06:31 +01:00
INSTALLED_USERDATAIMAGE_TARGET_DEPS := \
$( INTERNAL_USERIMAGES_DEPS) \
2019-05-07 22:12:21 +02:00
$( INTERNAL_USERDATAIMAGE_FILES)
2017-03-25 00:06:31 +01:00
$(INSTALLED_USERDATAIMAGE_TARGET) : $( INSTALLED_USERDATAIMAGE_TARGET_DEPS )
2009-03-04 04:28:42 +01:00
$( build-userdataimage-target)
.PHONY : userdataimage -nodeps
2010-05-10 22:04:47 +02:00
userdataimage-nodeps : | $( INTERNAL_USERIMAGES_DEPS )
2009-03-04 04:28:42 +01:00
$( build-userdataimage-target)
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f # BUILDING_USERDATA_IMAGE
2012-10-15 23:36:22 +02:00
2017-03-25 00:06:31 +01:00
# ASAN libraries in the system image - build rule.
ASAN_OUT_DIRS_FOR_SYSTEM_INSTALL := $( sort $( patsubst $( PRODUCT_OUT) /%,%,\
$( TARGET_OUT_SHARED_LIBRARIES) \
$( 2ND_TARGET_OUT_SHARED_LIBRARIES) \
$( TARGET_OUT_VENDOR_SHARED_LIBRARIES) \
$( 2ND_TARGET_OUT_VENDOR_SHARED_LIBRARIES) ) )
2017-03-31 01:54:23 +02:00
# Extra options: Enforce the system user for the files to avoid having to change ownership.
ASAN_SYSTEM_INSTALL_OPTIONS := --owner= 1000 --group= 1000
2017-03-25 00:06:31 +01:00
# Note: experimentally, it seems not worth it to try to get "best" compression. We don't save
# enough space.
$(ASAN_IN_SYSTEM_INSTALLED) : $( INSTALLED_USERDATAIMAGE_TARGET_DEPS )
2017-03-31 01:54:23 +02:00
tar cfj $( ASAN_IN_SYSTEM_INSTALLED) $( ASAN_SYSTEM_INSTALL_OPTIONS) -C $( TARGET_OUT_DATA) /.. $( ASAN_OUT_DIRS_FOR_SYSTEM_INSTALL) >/dev/null
2017-03-25 00:06:31 +01:00
2016-04-08 21:08:03 +02:00
# -----------------------------------------------------------------
# partition table image
i f d e f B O A R D _ B P T _ I N P U T _ F I L E S
BUILT_BPTIMAGE_TARGET := $( PRODUCT_OUT) /partition-table.img
2016-08-19 19:59:57 +02:00
BUILT_BPTJSON_TARGET := $( PRODUCT_OUT) /partition-table.bpt
2016-04-08 21:08:03 +02:00
INTERNAL_BVBTOOL_MAKE_TABLE_ARGS := \
--output_gpt $( BUILT_BPTIMAGE_TARGET) \
2016-08-19 19:59:57 +02:00
--output_json $( BUILT_BPTJSON_TARGET) \
2016-04-08 21:08:03 +02:00
$( foreach file, $( BOARD_BPT_INPUT_FILES) , --input $( file) )
i f d e f B O A R D _ B P T _ D I S K _ S I Z E
INTERNAL_BVBTOOL_MAKE_TABLE_ARGS += --disk_size $( BOARD_BPT_DISK_SIZE)
e n d i f
d e f i n e b u i l d - b p t i m a g e - t a r g e t
$( call pretty," Target partition table image: $( INSTALLED_BPTIMAGE_TARGET) " )
$( hide) $( BPTTOOL) make_table $( INTERNAL_BVBTOOL_MAKE_TABLE_ARGS) $( BOARD_BPT_MAKE_TABLE_ARGS)
e n d e f
INSTALLED_BPTIMAGE_TARGET := $( BUILT_BPTIMAGE_TARGET)
2016-08-19 19:59:57 +02:00
$(BUILT_BPTJSON_TARGET) : $( INSTALLED_BPTIMAGE_TARGET )
$( hide) touch -c $( BUILT_BPTJSON_TARGET)
2016-04-08 21:08:03 +02:00
$(INSTALLED_BPTIMAGE_TARGET) : $( BPTTOOL ) $( BOARD_BPT_INPUT_FILES )
$( build-bptimage-target)
.PHONY : bptimage -nodeps
bptimage-nodeps :
$( build-bptimage-target)
e n d i f # BOARD_BPT_INPUT_FILES
2011-11-04 19:37:01 +01:00
# -----------------------------------------------------------------
# cache partition image
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ C A C H E _ I M A G E
2011-11-04 19:37:01 +01:00
INTERNAL_CACHEIMAGE_FILES := \
$( filter $( TARGET_OUT_CACHE) /%,$( ALL_DEFAULT_INSTALLED_MODULES) )
cacheimage_intermediates := \
$( call intermediates-dir-for,PACKAGING,cache)
BUILT_CACHEIMAGE_TARGET := $( PRODUCT_OUT) /cache.img
d e f i n e b u i l d - c a c h e i m a g e - t a r g e t
$( call pretty," Target cache fs image: $( INSTALLED_CACHEIMAGE_TARGET) " )
@mkdir -p $( TARGET_OUT_CACHE)
@mkdir -p $( cacheimage_intermediates) && rm -rf $( cacheimage_intermediates) /cache_image_info.txt
2018-05-30 20:16:46 +02:00
$( call generate-image-prop-dictionary, $( cacheimage_intermediates) /cache_image_info.txt,cache,skip_fsck= true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT_CACHE) $( cacheimage_intermediates) /cache_image_info.txt \
$( INSTALLED_CACHEIMAGE_TARGET) $( TARGET_OUT)
$( call assert-max-image-size,$( INSTALLED_CACHEIMAGE_TARGET) ,$( BOARD_CACHEIMAGE_PARTITION_SIZE) )
2011-11-04 19:37:01 +01:00
e n d e f
# We just build this directly to the install location.
INSTALLED_CACHEIMAGE_TARGET := $( BUILT_CACHEIMAGE_TARGET)
2019-05-07 22:12:21 +02:00
$(INSTALLED_CACHEIMAGE_TARGET) : $( INTERNAL_USERIMAGES_DEPS ) $( INTERNAL_CACHEIMAGE_FILES )
2011-11-04 19:37:01 +01:00
$( build-cacheimage-target)
.PHONY : cacheimage -nodeps
cacheimage-nodeps : | $( INTERNAL_USERIMAGES_DEPS )
$( build-cacheimage-target)
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e l s e # BUILDING_CACHE_IMAGE
2016-05-14 00:26:09 +02:00
# we need to ignore the broken cache link when doing the rsync
IGNORE_CACHE_LINK := --exclude= cache
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f # BUILDING_CACHE_IMAGE
2011-11-04 19:37:01 +01:00
2016-06-16 23:47:10 +02:00
# -----------------------------------------------------------------
# system_other partition image
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ S Y S T E M _ O T H E R _ I M A G E
2016-06-16 23:47:10 +02:00
i f e q ( $( BOARD_USES_SYSTEM_OTHER_ODEX ) , t r u e )
# Marker file to identify that odex files are installed
INSTALLED_SYSTEM_OTHER_ODEX_MARKER := $( TARGET_OUT_SYSTEM_OTHER) /system-other-odex-marker
ALL_DEFAULT_INSTALLED_MODULES += $( INSTALLED_SYSTEM_OTHER_ODEX_MARKER)
$(INSTALLED_SYSTEM_OTHER_ODEX_MARKER) :
$( hide) touch $@
e n d i f
INTERNAL_SYSTEMOTHERIMAGE_FILES := \
$( filter $( TARGET_OUT_SYSTEM_OTHER) /%,\
$( ALL_DEFAULT_INSTALLED_MODULES) \
2018-03-06 23:07:21 +01:00
$( ALL_PDK_FUSION_FILES) ) \
$( PDK_FUSION_SYMLINK_STAMP)
2016-06-16 23:47:10 +02:00
2018-11-17 06:26:33 +01:00
# system_other dex files are installed as a side-effect of installing system image files
INTERNAL_SYSTEMOTHERIMAGE_FILES += $( INTERNAL_SYSTEMIMAGE_FILES)
2016-06-16 23:47:10 +02:00
INSTALLED_FILES_FILE_SYSTEMOTHER := $( PRODUCT_OUT) /installed-files-system-other.txt
2018-06-13 23:04:22 +02:00
INSTALLED_FILES_JSON_SYSTEMOTHER := $( INSTALLED_FILES_FILE_SYSTEMOTHER:.txt= .json)
$(INSTALLED_FILES_FILE_SYSTEMOTHER) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_SYSTEMOTHER )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_SYSTEMOTHER) : $( INTERNAL_SYSTEMOTHERIMAGE_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2016-06-16 23:47:10 +02:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
2017-03-16 17:41:19 +01:00
$( hide) $( FILESLIST) $( TARGET_OUT_SYSTEM_OTHER) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2016-06-16 23:47:10 +02:00
2019-01-29 06:30:18 +01:00
# Determines partition size for system_other.img.
i f e q ( $( PRODUCT_RETROFIT_DYNAMIC_PARTITIONS ) , t r u e )
i f n e q ( $( filter system ,$ ( BOARD_SUPER_PARTITION_BLOCK_DEVICES ) ) , )
INTERNAL_SYSTEM_OTHER_PARTITION_SIZE := $( BOARD_SUPER_PARTITION_SYSTEM_DEVICE_SIZE)
e n d i f
e n d i f
i f n d e f I N T E R N A L _ S Y S T E M _ O T H E R _ P A R T I T I O N _ S I Z E
INTERNAL_SYSTEM_OTHER_PARTITION_SIZE := $( BOARD_SYSTEMIMAGE_PARTITION_SIZE)
e n d i f
2016-06-16 23:47:10 +02:00
systemotherimage_intermediates := \
$( call intermediates-dir-for,PACKAGING,system_other)
BUILT_SYSTEMOTHERIMAGE_TARGET := $( PRODUCT_OUT) /system_other.img
# Note that we assert the size is SYSTEMIMAGE_PARTITION_SIZE since this is the 'b' system image.
d e f i n e b u i l d - s y s t e m o t h e r i m a g e - t a r g e t
$( call pretty," Target system_other fs image: $( INSTALLED_SYSTEMOTHERIMAGE_TARGET) " )
@mkdir -p $( TARGET_OUT_SYSTEM_OTHER)
@mkdir -p $( systemotherimage_intermediates) && rm -rf $( systemotherimage_intermediates) /system_other_image_info.txt
2018-05-30 20:16:46 +02:00
$( call generate-image-prop-dictionary, $( systemotherimage_intermediates) /system_other_image_info.txt,system,skip_fsck= true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT_SYSTEM_OTHER) $( systemotherimage_intermediates) /system_other_image_info.txt \
$( INSTALLED_SYSTEMOTHERIMAGE_TARGET) $( TARGET_OUT)
$( call assert-max-image-size,$( INSTALLED_SYSTEMOTHERIMAGE_TARGET) ,$( BOARD_SYSTEMIMAGE_PARTITION_SIZE) )
2016-06-16 23:47:10 +02:00
e n d e f
# We just build this directly to the install location.
INSTALLED_SYSTEMOTHERIMAGE_TARGET := $( BUILT_SYSTEMOTHERIMAGE_TARGET)
2017-06-16 19:24:54 +02:00
i f n e q ( t r u e , $( SANITIZE_LITE ) )
# Only create system_other when not building the second stage of a SANITIZE_LITE build.
2016-06-16 23:47:10 +02:00
$(INSTALLED_SYSTEMOTHERIMAGE_TARGET) : $( INTERNAL_USERIMAGES_DEPS ) $( INTERNAL_SYSTEMOTHERIMAGE_FILES ) $( INSTALLED_FILES_FILE_SYSTEMOTHER )
$( build-systemotherimage-target)
2017-06-16 19:24:54 +02:00
e n d i f
2016-06-16 23:47:10 +02:00
.PHONY : systemotherimage -nodeps
systemotherimage-nodeps : | $( INTERNAL_USERIMAGES_DEPS )
$( build-systemotherimage-target)
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f # BUILDING_SYSTEM_OTHER_IMAGE
2016-06-16 23:47:10 +02:00
2013-03-20 19:02:05 +01:00
# -----------------------------------------------------------------
# vendor partition image
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ V E N D O R _ I M A G E
2013-03-20 19:02:05 +01:00
INTERNAL_VENDORIMAGE_FILES := \
2014-07-17 02:46:35 +02:00
$( filter $( TARGET_OUT_VENDOR) /%,\
$( ALL_DEFAULT_INSTALLED_MODULES) \
2018-03-06 23:07:21 +01:00
$( ALL_PDK_FUSION_FILES) ) \
$( PDK_FUSION_SYMLINK_STAMP)
2014-07-17 02:46:35 +02:00
# platform.zip depends on $(INTERNAL_VENDORIMAGE_FILES).
$(INSTALLED_PLATFORM_ZIP) : $( INTERNAL_VENDORIMAGE_FILES )
2013-03-20 19:02:05 +01:00
2015-09-15 23:22:12 +02:00
INSTALLED_FILES_FILE_VENDOR := $( PRODUCT_OUT) /installed-files-vendor.txt
2018-06-13 23:04:22 +02:00
INSTALLED_FILES_JSON_VENDOR := $( INSTALLED_FILES_FILE_VENDOR:.txt= .json)
$(INSTALLED_FILES_FILE_VENDOR) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_VENDOR )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_VENDOR) : $( INTERNAL_VENDORIMAGE_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2015-09-15 23:22:12 +02:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
2017-03-16 17:41:19 +01:00
$( hide) $( FILESLIST) $( TARGET_OUT_VENDOR) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2015-09-15 23:22:12 +02:00
2019-07-04 00:58:48 +02:00
# Create symlink /vendor/odm to /odm if necessary.
i f d e f B O A R D _ U S E S _ O D M I M A G E
d e f i n e c r e a t e - v e n d o r - o d m - s y m l i n k
$( hide ) i f [ - d $( TARGET_OUT_VENDOR ) / o d m ] & & [ ! - h $( TARGET_OUT_VENDOR ) / o d m ] ; t h e n \
echo 'Non-symlink $(TARGET_OUT_VENDOR)/odm detected!' 1>& 2; \
echo 'You cannot install files to $(TARGET_OUT_VENDOR)/odm while building a separate odm.img!' 1>& 2; \
exit 1; \
f i
$( hide ) l n - s f / o d m $( TARGET_OUT_VENDOR ) / o d m
e n d e f
e l s e
d e f i n e c r e a t e - v e n d o r - o d m - s y m l i n k
e n d e f
e n d i f
2013-03-20 19:02:05 +01:00
vendorimage_intermediates := \
$( call intermediates-dir-for,PACKAGING,vendor)
BUILT_VENDORIMAGE_TARGET := $( PRODUCT_OUT) /vendor.img
d e f i n e b u i l d - v e n d o r i m a g e - t a r g e t
$( call pretty," Target vendor fs image: $( INSTALLED_VENDORIMAGE_TARGET) " )
@mkdir -p $( TARGET_OUT_VENDOR)
2017-11-14 16:42:30 +01:00
$( call create-vendor-odm-symlink)
2013-03-20 19:02:05 +01:00
@mkdir -p $( vendorimage_intermediates) && rm -rf $( vendorimage_intermediates) /vendor_image_info.txt
2018-05-30 20:16:46 +02:00
$( call generate-image-prop-dictionary, $( vendorimage_intermediates) /vendor_image_info.txt,vendor,skip_fsck= true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT_VENDOR) $( vendorimage_intermediates) /vendor_image_info.txt \
$( INSTALLED_VENDORIMAGE_TARGET) $( TARGET_OUT)
2020-04-28 04:06:59 +02:00
$( call assert-max-image-size,$( INSTALLED_VENDORIMAGE_TARGET) $( RECOVERY_FROM_BOOT_PATCH) ,$( BOARD_VENDORIMAGE_PARTITION_SIZE) )
2013-03-20 19:02:05 +01:00
e n d e f
# We just build this directly to the install location.
INSTALLED_VENDORIMAGE_TARGET := $( BUILT_VENDORIMAGE_TARGET)
2019-05-07 22:12:21 +02:00
$(INSTALLED_VENDORIMAGE_TARGET) : \
$( INTERNAL_USERIMAGES_DEPS) \
$( INTERNAL_VENDORIMAGE_FILES) \
2020-04-28 04:06:59 +02:00
$( INSTALLED_FILES_FILE_VENDOR) \
$( RECOVERY_FROM_BOOT_PATCH)
2013-03-20 19:02:05 +01:00
$( build-vendorimage-target)
2017-03-07 21:10:09 +01:00
.PHONY : vendorimage -nodeps vnod
2019-06-05 20:53:43 +02:00
vendorimage-nodeps vnod : | $( INTERNAL_USERIMAGES_DEPS )
2013-03-20 19:02:05 +01:00
$( build-vendorimage-target)
2017-06-21 01:57:52 +02:00
sync : $( INTERNAL_VENDORIMAGE_FILES )
2016-06-17 23:07:37 +02:00
e l s e i f d e f B O A R D _ P R E B U I L T _ V E N D O R I M A G E
INSTALLED_VENDORIMAGE_TARGET := $( PRODUCT_OUT) /vendor.img
$( eval $ ( call copy -one -file ,$ ( BOARD_PREBUILT_VENDORIMAGE ) ,$ ( INSTALLED_VENDORIMAGE_TARGET ) ) )
e n d i f
2013-03-20 19:02:05 +01:00
2017-11-27 09:04:47 +01:00
# -----------------------------------------------------------------
# product partition image
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ P R O D U C T _ I M A G E
2017-11-27 09:04:47 +01:00
INTERNAL_PRODUCTIMAGE_FILES := \
$( filter $( TARGET_OUT_PRODUCT) /%,\
$( ALL_DEFAULT_INSTALLED_MODULES) \
2018-03-06 23:07:21 +01:00
$( ALL_PDK_FUSION_FILES) ) \
$( PDK_FUSION_SYMLINK_STAMP)
2017-11-27 09:04:47 +01:00
# platform.zip depends on $(INTERNAL_PRODUCTIMAGE_FILES).
$(INSTALLED_PLATFORM_ZIP) : $( INTERNAL_PRODUCTIMAGE_FILES )
INSTALLED_FILES_FILE_PRODUCT := $( PRODUCT_OUT) /installed-files-product.txt
2018-06-13 23:04:22 +02:00
INSTALLED_FILES_JSON_PRODUCT := $( INSTALLED_FILES_FILE_PRODUCT:.txt= .json)
$(INSTALLED_FILES_FILE_PRODUCT) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_PRODUCT )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_PRODUCT) : $( INTERNAL_PRODUCTIMAGE_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2017-11-27 09:04:47 +01:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
$( hide) $( FILESLIST) $( TARGET_OUT_PRODUCT) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2017-11-27 09:04:47 +01:00
productimage_intermediates := \
$( call intermediates-dir-for,PACKAGING,product)
BUILT_PRODUCTIMAGE_TARGET := $( PRODUCT_OUT) /product.img
d e f i n e b u i l d - p r o d u c t i m a g e - t a r g e t
$( call pretty," Target product fs image: $( INSTALLED_PRODUCTIMAGE_TARGET) " )
@mkdir -p $( TARGET_OUT_PRODUCT)
@mkdir -p $( productimage_intermediates) && rm -rf $( productimage_intermediates) /product_image_info.txt
2018-05-30 20:16:46 +02:00
$( call generate-image-prop-dictionary, $( productimage_intermediates) /product_image_info.txt,product,skip_fsck= true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT_PRODUCT) $( productimage_intermediates) /product_image_info.txt \
$( INSTALLED_PRODUCTIMAGE_TARGET) $( TARGET_OUT)
$( call assert-max-image-size,$( INSTALLED_PRODUCTIMAGE_TARGET) ,$( BOARD_PRODUCTIMAGE_PARTITION_SIZE) )
2017-11-27 09:04:47 +01:00
e n d e f
# We just build this directly to the install location.
INSTALLED_PRODUCTIMAGE_TARGET := $( BUILT_PRODUCTIMAGE_TARGET)
2019-05-07 22:12:21 +02:00
$(INSTALLED_PRODUCTIMAGE_TARGET) : \
$( INTERNAL_USERIMAGES_DEPS) \
$( INTERNAL_PRODUCTIMAGE_FILES) \
$( INSTALLED_FILES_FILE_PRODUCT)
2017-11-27 09:04:47 +01:00
$( build-productimage-target)
.PHONY : productimage -nodeps pnod
productimage-nodeps pnod : | $( INTERNAL_USERIMAGES_DEPS )
$( build-productimage-target)
sync : $( INTERNAL_PRODUCTIMAGE_FILES )
e l s e i f d e f B O A R D _ P R E B U I L T _ P R O D U C T I M A G E
INSTALLED_PRODUCTIMAGE_TARGET := $( PRODUCT_OUT) /product.img
$( eval $ ( call copy -one -file ,$ ( BOARD_PREBUILT_PRODUCTIMAGE ) ,$ ( INSTALLED_PRODUCTIMAGE_TARGET ) ) )
e n d i f
2018-05-29 14:09:01 +02:00
# -----------------------------------------------------------------
2019-06-25 08:58:13 +02:00
# system_ext partition image
i f d e f B U I L D I N G _ S Y S T E M _ E X T _ I M A G E
INTERNAL_SYSTEM_EXTIMAGE_FILES := \
$( filter $( TARGET_OUT_SYSTEM_EXT) /%,\
2018-05-29 14:09:01 +02:00
$( ALL_DEFAULT_INSTALLED_MODULES) \
$( ALL_PDK_FUSION_FILES) ) \
$( PDK_FUSION_SYMLINK_STAMP)
2019-06-25 08:58:13 +02:00
# platform.zip depends on $(INTERNAL_SYSTEM_EXTIMAGE_FILES).
$(INSTALLED_PLATFORM_ZIP) : $( INTERNAL_SYSTEM_EXTIMAGE_FILES )
2018-05-29 14:09:01 +02:00
2019-06-25 08:58:13 +02:00
INSTALLED_FILES_FILE_SYSTEM_EXT := $( PRODUCT_OUT) /installed-files-system_ext.txt
INSTALLED_FILES_JSON_SYSTEM_EXT := $( INSTALLED_FILES_FILE_SYSTEM_EXT:.txt= .json)
$(INSTALLED_FILES_FILE_SYSTEM_EXT) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_SYSTEM_EXT )
$(INSTALLED_FILES_FILE_SYSTEM_EXT) : $( INTERNAL_SYSTEM_EXTIMAGE_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2018-05-29 14:09:01 +02:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
2019-06-25 08:58:13 +02:00
$( hide) $( FILESLIST) $( TARGET_OUT_SYSTEM_EXT) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2018-05-29 14:09:01 +02:00
2019-06-25 08:58:13 +02:00
system_extimage_intermediates := \
$( call intermediates-dir-for,PACKAGING,system_ext)
BUILT_SYSTEM_EXTIMAGE_TARGET := $( PRODUCT_OUT) /system_ext.img
d e f i n e b u i l d - s y s t e m _ e x t i m a g e - t a r g e t
$( call pretty," Target system_ext fs image: $( INSTALLED_SYSTEM_EXTIMAGE_TARGET) " )
@mkdir -p $( TARGET_OUT_SYSTEM_EXT)
@mkdir -p $( system_extimage_intermediates) && rm -rf $( system_extimage_intermediates) /system_ext_image_info.txt
$( call generate-image-prop-dictionary, $( system_extimage_intermediates) /system_ext_image_info.txt,system_ext, skip_fsck = true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT_SYSTEM_EXT) \
$( system_extimage_intermediates) /system_ext_image_info.txt \
$( INSTALLED_SYSTEM_EXTIMAGE_TARGET) \
$( TARGET_OUT)
$( call assert-max-image-size,$( INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) ,$( BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE) )
2018-05-29 14:09:01 +02:00
e n d e f
# We just build this directly to the install location.
2019-06-25 08:58:13 +02:00
INSTALLED_SYSTEM_EXTIMAGE_TARGET := $( BUILT_SYSTEM_EXTIMAGE_TARGET)
2019-05-07 22:12:21 +02:00
$(INSTALLED_SYSTEM_EXTIMAGE_TARGET) : \
$( INTERNAL_USERIMAGES_DEPS) \
$( INTERNAL_SYSTEM_EXTIMAGE_FILES) \
$( INSTALLED_FILES_FILE_SYSTEM_EXT)
2019-06-25 08:58:13 +02:00
$( build-system_extimage-target)
2018-05-29 14:09:01 +02:00
2019-06-25 08:58:13 +02:00
.PHONY : systemextimage -nodeps senod
systemextimage-nodeps senod : | $( INTERNAL_USERIMAGES_DEPS )
$( build-system_extimage-target)
2018-05-29 14:09:01 +02:00
2019-06-25 08:58:13 +02:00
sync : $( INTERNAL_SYSTEM_EXTIMAGE_FILES )
2018-05-29 14:09:01 +02:00
2019-06-25 08:58:13 +02:00
e l s e i f d e f B O A R D _ P R E B U I L T _ S Y S T E M _ E X T I M A G E
INSTALLED_SYSTEM_EXTIMAGE_TARGET := $( PRODUCT_OUT) /system_ext.img
$( eval $ ( call copy -one -file ,$ ( BOARD_PREBUILT_SYSTEM_EXTIMAGE ) ,$ ( INSTALLED_SYSTEM_EXTIMAGE_TARGET ) ) )
2018-05-29 14:09:01 +02:00
e n d i f
2017-11-14 16:42:30 +01:00
# -----------------------------------------------------------------
# odm partition image
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ O D M _ I M A G E
2017-11-14 16:42:30 +01:00
INTERNAL_ODMIMAGE_FILES := \
$( filter $( TARGET_OUT_ODM) /%,\
$( ALL_DEFAULT_INSTALLED_MODULES) \
$( ALL_PDK_FUSION_FILES) ) \
$( PDK_FUSION_SYMLINK_STAMP)
# platform.zip depends on $(INTERNAL_ODMIMAGE_FILES).
$(INSTALLED_PLATFORM_ZIP) : $( INTERNAL_ODMIMAGE_FILES )
INSTALLED_FILES_FILE_ODM := $( PRODUCT_OUT) /installed-files-odm.txt
INSTALLED_FILES_JSON_ODM := $( INSTALLED_FILES_FILE_ODM:.txt= .json)
$(INSTALLED_FILES_FILE_ODM) : .KATI_IMPLICIT_OUTPUTS := $( INSTALLED_FILES_JSON_ODM )
2019-06-11 01:39:45 +02:00
$(INSTALLED_FILES_FILE_ODM) : $( INTERNAL_ODMIMAGE_FILES ) $( FILESLIST ) $( FILESLIST_UTIL )
2017-11-14 16:42:30 +01:00
@echo Installed file list: $@
@mkdir -p $( dir $@ )
@rm -f $@
$( hide) $( FILESLIST) $( TARGET_OUT_ODM) > $( @:.txt= .json)
2019-06-11 01:39:45 +02:00
$( hide) $( FILESLIST_UTIL) -c $( @:.txt= .json) > $@
2017-11-14 16:42:30 +01:00
odmimage_intermediates := \
$( call intermediates-dir-for,PACKAGING,odm)
BUILT_ODMIMAGE_TARGET := $( PRODUCT_OUT) /odm.img
d e f i n e b u i l d - o d m i m a g e - t a r g e t
$( call pretty," Target odm fs image: $( INSTALLED_ODMIMAGE_TARGET) " )
@mkdir -p $( TARGET_OUT_ODM)
@mkdir -p $( odmimage_intermediates) && rm -rf $( odmimage_intermediates) /odm_image_info.txt
$( call generate-userimage-prop-dictionary, $( odmimage_intermediates) /odm_image_info.txt, skip_fsck = true )
2019-06-24 21:39:10 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-05-07 22:12:21 +02:00
$( BUILD_IMAGE) \
$( TARGET_OUT_ODM) $( odmimage_intermediates) /odm_image_info.txt \
$( INSTALLED_ODMIMAGE_TARGET) $( TARGET_OUT)
$( call assert-max-image-size,$( INSTALLED_ODMIMAGE_TARGET) ,$( BOARD_ODMIMAGE_PARTITION_SIZE) )
2017-11-14 16:42:30 +01:00
e n d e f
# We just build this directly to the install location.
INSTALLED_ODMIMAGE_TARGET := $( BUILT_ODMIMAGE_TARGET)
2019-05-07 22:12:21 +02:00
$(INSTALLED_ODMIMAGE_TARGET) : \
$( INTERNAL_USERIMAGES_DEPS) \
$( INTERNAL_ODMIMAGE_FILES) \
$( INSTALLED_FILES_FILE_ODM)
2017-11-14 16:42:30 +01:00
$( build-odmimage-target)
.PHONY : odmimage -nodeps onod
2019-06-05 20:53:43 +02:00
odmimage-nodeps onod : | $( INTERNAL_USERIMAGES_DEPS )
2017-11-14 16:42:30 +01:00
$( build-odmimage-target)
sync : $( INTERNAL_ODMIMAGE_FILES )
e l s e i f d e f B O A R D _ P R E B U I L T _ O D M I M A G E
INSTALLED_ODMIMAGE_TARGET := $( PRODUCT_OUT) /odm.img
$( eval $ ( call copy -one -file ,$ ( BOARD_PREBUILT_ODMIMAGE ) ,$ ( INSTALLED_ODMIMAGE_TARGET ) ) )
e n d i f
2017-04-27 09:34:50 +02:00
# -----------------------------------------------------------------
# dtbo image
i f d e f B O A R D _ P R E B U I L T _ D T B O I M A G E
INSTALLED_DTBOIMAGE_TARGET := $( PRODUCT_OUT) /dtbo.img
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
2017-05-26 12:30:04 +02:00
$(INSTALLED_DTBOIMAGE_TARGET) : $( BOARD_PREBUILT_DTBOIMAGE ) $( AVBTOOL ) $( BOARD_AVB_DTBO_KEY_PATH )
2017-04-27 09:34:50 +02:00
cp $( BOARD_PREBUILT_DTBOIMAGE) $@
$( AVBTOOL) add_hash_footer \
2018-11-26 19:12:05 +01:00
--image $@ \
--partition_size $( BOARD_DTBOIMG_PARTITION_SIZE) \
--partition_name dtbo $( INTERNAL_AVB_DTBO_SIGNING_ARGS) \
$( BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)
2017-04-27 09:34:50 +02:00
e l s e
$(INSTALLED_DTBOIMAGE_TARGET) : $( BOARD_PREBUILT_DTBOIMAGE )
cp $( BOARD_PREBUILT_DTBOIMAGE) $@
e n d i f
2018-08-23 07:53:41 +02:00
e n d i f # BOARD_PREBUILT_DTBOIMAGE
# Returns a list of image targets corresponding to the given list of partitions. For example, it
# returns "$(INSTALLED_PRODUCTIMAGE_TARGET)" for "product", or "$(INSTALLED_SYSTEMIMAGE_TARGET)
# $(INSTALLED_VENDORIMAGE_TARGET)" for "system vendor".
2019-06-25 08:58:13 +02:00
# (1): list of partitions like "system", "vendor" or "system product system_ext".
2018-08-23 07:53:41 +02:00
d e f i n e i m a g e s - f o r - p a r t i t i o n s
$( strip $ ( foreach item ,$ ( 1) ,$ ( INSTALLED_ $ ( call to -upper ,$ ( item ) ) IMAGE_TARGET ) ) )
e n d e f
2017-04-27 09:34:50 +02:00
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
# -----------------------------------------------------------------
# custom images
INSTALLED_CUSTOMIMAGES_TARGET :=
i f n e q ( $( strip $ ( BOARD_CUSTOMIMAGES_PARTITION_LIST ) ) , )
INTERNAL_AVB_CUSTOMIMAGES_SIGNING_ARGS :=
# Sign custom image.
# $(1): the prebuilt custom image.
# $(2): the mount point of the prebuilt custom image.
# $(3): the signed custom image target.
d e f i n e s i g n _ c u s t o m _ i m a g e
$(3) : $( 1) $( INTERNAL_USERIMAGES_DEPS )
@echo Target custom image: $( 3)
mkdir -p $( dir $( 3) )
cp $( 1) $( 3)
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ $$ PATH \
$( AVBTOOL) add_hashtree_footer \
--image $( 3) \
--key $( BOARD_AVB_$( call to-upper,$( 2) ) _KEY_PATH) \
--algorithm $( BOARD_AVB_$( call to-upper,$( 2) ) _ALGORITHM) \
--partition_size $( BOARD_AVB_$( call to-upper,$( 2) ) _PARTITION_SIZE) \
--partition_name $( 2) \
$( INTERNAL_AVB_CUSTOMIMAGES_SIGNING_ARGS) \
$( BOARD_AVB_$( call to-upper,$( 2) ) _ADD_HASHTREE_FOOTER_ARGS)
e n d i f
INSTALLED_CUSTOMIMAGES_TARGET += $( 3)
e n d e f
$( foreach partition ,$ ( BOARD_CUSTOMIMAGES_PARTITION_LIST ) , \
$( foreach image,$( BOARD_AVB_$( call to-upper,$( partition) ) _IMAGE_LIST) , \
$( eval $( call sign_custom_image,$( image) ,$( partition) ,$( PRODUCT_OUT) /$( notdir $( image) ) ) ) ) )
e n d i f
2017-03-31 09:21:26 +02:00
# -----------------------------------------------------------------
# vbmeta image
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
BUILT_VBMETAIMAGE_TARGET := $( PRODUCT_OUT) /vbmeta.img
2017-05-26 12:30:04 +02:00
AVB_CHAIN_KEY_DIR := $( TARGET_OUT_INTERMEDIATES) /avb_chain_keys
2017-03-31 09:21:26 +02:00
2017-05-26 12:30:04 +02:00
i f d e f B O A R D _ A V B _ K E Y _ P A T H
$( if $ ( BOARD_AVB_ALGORITHM ) ,,$ ( error BOARD_AVB_ALGORITHM is not defined ) )
e l s e
# If key path isn't specified, use the 4096-bit test key.
BOARD_AVB_ALGORITHM := SHA256_RSA4096
BOARD_AVB_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
e n d i f
2019-01-23 15:19:19 +01:00
# AVB signing for system_other.img.
i f d e f B U I L D I N G _ S Y S T E M _ O T H E R _ I M A G E
i f d e f B O A R D _ A V B _ S Y S T E M _ O T H E R _ K E Y _ P A T H
$( if $ ( BOARD_AVB_SYSTEM_OTHER_ALGORITHM ) ,,$ ( error BOARD_AVB_SYSTEM_OTHER_ALGORITHM is not defined ) )
e l s e
# If key path isn't specified, use the same key as BOARD_AVB_KEY_PATH.
BOARD_AVB_SYSTEM_OTHER_KEY_PATH := $( BOARD_AVB_KEY_PATH)
BOARD_AVB_SYSTEM_OTHER_ALGORITHM := $( BOARD_AVB_ALGORITHM)
e n d i f
2019-02-27 03:15:51 +01:00
$(INSTALLED_PRODUCT_SYSTEM_OTHER_AVBKEY_TARGET) : $( AVBTOOL ) $( BOARD_AVB_SYSTEM_OTHER_KEY_PATH )
@echo Extracting system_other avb key: $@
@rm -f $@
@mkdir -p $( dir $@ )
$( AVBTOOL) extract_public_key --key $( BOARD_AVB_SYSTEM_OTHER_KEY_PATH) --output $@
2019-01-30 07:53:57 +01:00
2019-01-23 15:19:19 +01:00
i f n d e f B O A R D _ A V B _ S Y S T E M _ O T H E R _ R O L L B A C K _ I N D E X
BOARD_AVB_SYSTEM_OTHER_ROLLBACK_INDEX := $( PLATFORM_SECURITY_PATCH_TIMESTAMP)
e n d i f
BOARD_AVB_SYSTEM_OTHER_ADD_HASHTREE_FOOTER_ARGS += --rollback_index $( BOARD_AVB_SYSTEM_OTHER_ROLLBACK_INDEX)
e n d i f # end of AVB for BUILDING_SYSTEM_OTHER_IMAGE
2018-08-21 06:09:07 +02:00
INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES := \
2018-10-15 23:41:34 +02:00
$( BOARD_AVB_VBMETA_SYSTEM) \
2018-08-21 06:09:07 +02:00
$( BOARD_AVB_VBMETA_VENDOR)
# Not allowing the same partition to appear in multiple groups.
i f n e q ( $( words $ ( sort $ ( INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES ) ) ) , $( words $ ( INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES ) ) )
2018-10-15 23:41:34 +02:00
$( error BOARD_AVB_VBMETA_SYSTEM and BOARD_AVB_VBMETA_VENDOR cannot have duplicates)
2018-08-21 06:09:07 +02:00
e n d i f
2019-09-20 16:45:06 +02:00
# When building a standalone recovery image for non-A/B devices, recovery image must be self-signed
# to be verified independently, and cannot be chained into vbmeta.img. See the link below for
# details.
2020-04-17 19:08:10 +02:00
i f e q ( $( TARGET_OTA_ALLOW_NON_AB ) , t r u e )
2019-09-20 16:45:06 +02:00
i f n e q ( $( INSTALLED_RECOVERYIMAGE_TARGET ) , )
$( if $ ( BOARD_AVB_RECOVERY_KEY_PATH ) ,,\
2020-04-17 19:08:10 +02:00
$( error BOARD_AVB_RECOVERY_KEY_PATH must be defined for if non-A/B is supported. \
2019-09-20 16:45:06 +02:00
See https://android.googlesource.com/platform/external/avb/+/master/README.md#booting-into-recovery) )
e n d i f
e n d i f
2019-05-14 10:57:03 +02:00
# Appends os version and security patch level as a AVB property descriptor
2019-01-30 14:52:32 +01:00
BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS += \
2019-10-09 09:04:28 +02:00
--prop com.android.build.system.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE) \
2019-05-14 10:57:03 +02:00
--prop com.android.build.system.os_version:$( PLATFORM_VERSION) \
2019-01-30 14:52:32 +01:00
--prop com.android.build.system.security_patch:$( PLATFORM_SECURITY_PATCH)
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS += \
2019-10-09 09:04:28 +02:00
--prop com.android.build.product.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE) \
2019-05-14 10:57:03 +02:00
--prop com.android.build.product.os_version:$( PLATFORM_VERSION) \
2019-01-30 14:52:32 +01:00
--prop com.android.build.product.security_patch:$( PLATFORM_SECURITY_PATCH)
2019-06-25 08:58:13 +02:00
BOARD_AVB_SYSTEM_EXT_ADD_HASHTREE_FOOTER_ARGS += \
2019-10-09 09:04:28 +02:00
--prop com.android.build.system_ext.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE) \
2019-06-25 08:58:13 +02:00
--prop com.android.build.system_ext.os_version:$( PLATFORM_VERSION) \
--prop com.android.build.system_ext.security_patch:$( PLATFORM_SECURITY_PATCH)
2019-01-30 14:52:32 +01:00
2019-05-14 10:57:03 +02:00
BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS += \
2019-10-09 09:04:28 +02:00
--prop com.android.build.boot.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE) \
2019-05-14 10:57:03 +02:00
--prop com.android.build.boot.os_version:$( PLATFORM_VERSION)
2019-10-09 09:04:28 +02:00
BOARD_AVB_VENDOR_BOOT_ADD_HASH_FOOTER_ARGS += \
--prop com.android.build.vendor_boot.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE) \
BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS += \
--prop com.android.build.recovery.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE)
2019-05-14 10:57:03 +02:00
BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS += \
2019-10-09 09:04:28 +02:00
--prop com.android.build.vendor.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE) \
2019-05-14 10:57:03 +02:00
--prop com.android.build.vendor.os_version:$( PLATFORM_VERSION)
BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS += \
2019-10-09 09:04:28 +02:00
--prop com.android.build.odm.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE) \
2019-05-14 10:57:03 +02:00
--prop com.android.build.odm.os_version:$( PLATFORM_VERSION)
2019-10-09 09:04:28 +02:00
BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS += \
--prop com.android.build.dtbo.fingerprint:$( BUILD_FINGERPRINT_FROM_FILE)
2019-05-14 10:57:03 +02:00
# The following vendor- and odm-specific images needs explicit SPL set per board.
2019-01-30 14:52:32 +01:00
i f d e f B O O T _ S E C U R I T Y _ P A T C H
BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS += \
--prop com.android.build.boot.security_patch:$( BOOT_SECURITY_PATCH)
e n d i f
i f d e f V E N D O R _ S E C U R I T Y _ P A T C H
BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS += \
--prop com.android.build.vendor.security_patch:$( VENDOR_SECURITY_PATCH)
e n d i f
i f d e f O D M _ S E C U R I T Y _ P A T C H
BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS += \
--prop com.android.build.odm.security_patch:$( ODM_SECURITY_PATCH)
e n d i f
2017-05-26 12:30:04 +02:00
BOOT_FOOTER_ARGS := BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS
2019-07-10 19:49:37 +02:00
VENDOR_BOOT_FOOTER_ARGS := BOARD_AVB_VENDOR_BOOT_ADD_HASH_FOOTER_ARGS
2017-05-26 12:30:04 +02:00
DTBO_FOOTER_ARGS := BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS
SYSTEM_FOOTER_ARGS := BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS
VENDOR_FOOTER_ARGS := BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS
2017-12-01 22:24:01 +01:00
RECOVERY_FOOTER_ARGS := BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS
2017-11-27 09:04:47 +01:00
PRODUCT_FOOTER_ARGS := BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
2019-06-25 08:58:13 +02:00
SYSTEM_EXT_FOOTER_ARGS := BOARD_AVB_SYSTEM_EXT_ADD_HASHTREE_FOOTER_ARGS
2017-11-14 16:42:30 +01:00
ODM_FOOTER_ARGS := BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
2017-05-26 12:30:04 +02:00
2018-08-23 07:53:41 +02:00
# Helper function that checks and sets required build variables for an AVB chained partition.
2018-10-15 23:41:34 +02:00
# $(1): the partition to enable AVB chain, e.g., boot or system or vbmeta_system.
2018-08-23 07:53:41 +02:00
d e f i n e _ c h e c k - a n d - s e t - a v b - c h a i n - a r g s
$(eval part : = $( 1) )
$( eval PART =$ ( call to -upper ,$ ( part ) ) )
2017-05-26 12:30:04 +02:00
$(eval _key_path : = BOARD_AVB_ $( PART ) _KEY_PATH )
$(eval _signing_algorithm : = BOARD_AVB_ $( PART ) _ALGORITHM )
$(eval _rollback_index : = BOARD_AVB_ $( PART ) _ROLLBACK_INDEX )
$(eval _rollback_index_location : = BOARD_AVB_ $( PART ) _ROLLBACK_INDEX_LOCATION )
$( if $ ( $ ( _key_path ) ) ,,$ ( error $ ( _key_path ) is not defined ) )
$( if $ ( $ ( _signing_algorithm ) ) ,,$ ( error $ ( _signing_algorithm ) is not defined ) )
$( if $ ( $ ( _rollback_index ) ) ,,$ ( error $ ( _rollback_index ) is not defined ) )
$( if $ ( $ ( _rollback_index_location ) ) ,,$ ( error $ ( _rollback_index_location ) is not defined ) )
# Set INTERNAL_AVB_(PART)_SIGNING_ARGS
$(eval _signing_args : = INTERNAL_AVB_ $( PART ) _SIGNING_ARGS )
$(eval $(_signing_args) : = \
--algorithm $( $( _signing_algorithm) ) --key $( $( _key_path) ) )
2019-09-20 16:45:06 +02:00
# The recovery partition in non-A/B devices should be verified separately. Skip adding the chain
# partition descriptor for recovery partition into vbmeta.img.
2020-04-17 19:08:10 +02:00
$( if $ ( or $ ( filter -out true ,$ ( TARGET_OTA_ALLOW_NON_AB ) ) ,$ ( filter -out recovery ,$ ( part ) ) ) ,\
2019-09-20 16:45:06 +02:00
$( eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
--chain_partition $( part) :$( $( _rollback_index_location) ) :$( AVB_CHAIN_KEY_DIR) /$( part) .avbpubkey) )
2017-05-26 12:30:04 +02:00
2018-08-21 06:09:07 +02:00
# Set rollback_index via footer args for non-chained vbmeta image. Chained vbmeta image will pick up
2018-10-15 23:41:34 +02:00
# the index via a separate flag (e.g. BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX).
2018-08-21 06:09:07 +02:00
$(if $(filter $(part),$(part : vbmeta_ %=%)), \
$( eval _footer_args := $( PART) _FOOTER_ARGS) \
$( eval $( $( _footer_args) ) += --rollback_index $( $( _rollback_index) ) ) )
2017-05-26 12:30:04 +02:00
e n d e f
2018-08-23 07:53:41 +02:00
# Checks and sets the required build variables for an AVB partition. The partition will be
# configured as a chained partition, if BOARD_AVB_<partition>_KEY_PATH is defined. Otherwise the
2018-08-21 06:09:07 +02:00
# image descriptor will be included into vbmeta.img, unless it has been already added to any chained
# VBMeta image.
2020-06-09 04:54:13 +02:00
# Multiple boot images can be generated based on BOARD_KERNEL_BINARIES
# but vbmeta would capture the image descriptor of only the first boot
# image specified in BUILT_BOOTIMAGE_TARGET.
2018-08-23 07:53:41 +02:00
# $(1): Partition name, e.g. boot or system.
d e f i n e c h e c k - a n d - s e t - a v b - a r g s
2018-08-21 06:09:07 +02:00
$(eval _in_chained_vbmeta : = $( filter $ ( 1) ,$ ( INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES ) ) )
2018-08-23 07:53:41 +02:00
$( if $ ( BOARD_AVB_ $ ( call to -upper ,$ ( 1) ) _KEY_PATH ) ,\
2018-08-21 06:09:07 +02:00
$( if $( _in_chained_vbmeta) ,\
$( error Chaining partition " $( 1) " in chained VBMeta image is not supported) ) \
2018-08-23 07:53:41 +02:00
$( call _check-and-set-avb-chain-args,$( 1) ) ,\
2018-08-21 06:09:07 +02:00
$( if $( _in_chained_vbmeta) ,,\
2020-06-09 04:54:13 +02:00
$( if $( filter boot,$( 1) ) ,\
$( eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
--include_descriptors_from_image $( firstword $( call images-for-partitions,$( 1) ) ) ) ,\
$( eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
--include_descriptors_from_image $( call images-for-partitions,$( 1) ) ) ) ) )
2018-08-23 07:53:41 +02:00
e n d e f
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
# Checks and sets build variables for a custom chained partition to include it into vbmeta.img.
# $(1): the custom partition to enable AVB chain.
d e f i n e c h e c k - a n d - s e t - c u s t o m - a v b - c h a i n - a r g s
$(eval part : = $( 1) )
$( eval PART =$ ( call to -upper ,$ ( part ) ) )
$(eval _rollback_index_location : = BOARD_AVB_ $( PART ) _ROLLBACK_INDEX_LOCATION )
$( if $ ( $ ( _rollback_index_location ) ) ,,$ ( error $ ( _rollback_index_location ) is not defined ) )
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
--chain_partition $( part) :$( $( _rollback_index_location) ) :$( AVB_CHAIN_KEY_DIR) /$( part) .avbpubkey
e n d e f
2018-08-15 01:17:12 +02:00
i f d e f I N S T A L L E D _ B O O T I M A G E _ T A R G E T
2018-08-23 07:53:41 +02:00
$( eval $ ( call check -and -set -avb -args ,boot ) )
2018-08-15 01:17:12 +02:00
e n d i f
2017-05-26 12:30:04 +02:00
2019-07-10 19:49:37 +02:00
i f d e f I N S T A L L E D _ V E N D O R _ B O O T I M A G E _ T A R G E T
$( eval $ ( call check -and -set -avb -args ,vendor_boot ) )
e n d i f
2018-08-23 07:53:41 +02:00
$( eval $ ( call check -and -set -avb -args ,system ) )
2017-03-31 09:21:26 +02:00
i f d e f I N S T A L L E D _ V E N D O R I M A G E _ T A R G E T
2018-08-23 07:53:41 +02:00
$( eval $ ( call check -and -set -avb -args ,vendor ) )
2017-05-26 12:30:04 +02:00
e n d i f
2017-03-31 09:21:26 +02:00
2017-11-27 09:04:47 +01:00
i f d e f I N S T A L L E D _ P R O D U C T I M A G E _ T A R G E T
2018-08-23 07:53:41 +02:00
$( eval $ ( call check -and -set -avb -args ,product ) )
2017-11-27 09:04:47 +01:00
e n d i f
2019-06-25 08:58:13 +02:00
i f d e f I N S T A L L E D _ S Y S T E M _ E X T I M A G E _ T A R G E T
$( eval $ ( call check -and -set -avb -args ,system_ext ) )
2018-08-23 08:39:03 +02:00
e n d i f
2017-11-14 16:42:30 +01:00
i f d e f I N S T A L L E D _ O D M I M A G E _ T A R G E T
2018-08-23 07:53:41 +02:00
$( eval $ ( call check -and -set -avb -args ,odm ) )
2017-11-14 16:42:30 +01:00
e n d i f
2017-04-27 09:34:50 +02:00
i f d e f I N S T A L L E D _ D T B O I M A G E _ T A R G E T
2018-08-23 07:53:41 +02:00
$( eval $ ( call check -and -set -avb -args ,dtbo ) )
2017-05-26 12:30:04 +02:00
e n d i f
2017-04-27 09:34:50 +02:00
2017-12-01 22:24:01 +01:00
i f d e f I N S T A L L E D _ R E C O V E R Y I M A G E _ T A R G E T
2018-08-23 07:53:41 +02:00
$( eval $ ( call check -and -set -avb -args ,recovery ) )
2017-12-01 22:24:01 +01:00
e n d i f
2018-10-15 23:41:34 +02:00
# Not using INSTALLED_VBMETA_SYSTEMIMAGE_TARGET as it won't be set yet.
i f d e f B O A R D _ A V B _ V B M E T A _ S Y S T E M
$( eval $ ( call check -and -set -avb -args ,vbmeta_system ) )
2018-08-21 06:09:07 +02:00
e n d i f
i f d e f B O A R D _ A V B _ V B M E T A _ V E N D O R
$( eval $ ( call check -and -set -avb -args ,vbmeta_vendor ) )
e n d i f
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
i f n e q ( $( strip $ ( BOARD_CUSTOMIMAGES_PARTITION_LIST ) ) , )
$( foreach partition ,$ ( BOARD_CUSTOMIMAGES_PARTITION_LIST ) , \
$( eval $( call check-and-set-custom-avb-chain-args,$( partition) ) ) )
e n d i f
2017-05-26 12:30:04 +02:00
# Add kernel cmdline descriptor for kernel to mount system.img as root with
# dm-verity. This works when system.img is either chained or not-chained:
# - chained: The --setup_as_rootfs_from_kernel option will add dm-verity kernel
# cmdline descriptor to system.img
# - not-chained: The --include_descriptors_from_image option for make_vbmeta_image
# will include the kernel cmdline descriptor from system.img into vbmeta.img
2017-04-14 12:50:11 +02:00
i f e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
2018-09-19 00:46:59 +02:00
i f e q ( $( filter system , $ ( BOARD_SUPER_PARTITION_PARTITION_LIST ) ) , )
2017-05-26 12:30:04 +02:00
BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS += --setup_as_rootfs_from_kernel
2017-04-14 12:50:11 +02:00
e n d i f
2018-09-19 00:46:59 +02:00
e n d i f
2017-04-14 12:50:11 +02:00
2018-08-23 07:53:41 +02:00
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --padding_size 4096
2018-10-15 23:41:34 +02:00
BOARD_AVB_MAKE_VBMETA_SYSTEM_IMAGE_ARGS += --padding_size 4096
2018-08-21 06:09:07 +02:00
BOARD_AVB_MAKE_VBMETA_VENDOR_IMAGE_ARGS += --padding_size 4096
i f e q ( e n g , $( filter eng , $ ( TARGET_BUILD_VARIANT ) ) )
2018-10-22 22:02:53 +02:00
# We only need the flag in top-level vbmeta.img.
2018-08-21 06:09:07 +02:00
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --set_hashtree_disabled_flag
e n d i f
2018-08-23 07:53:41 +02:00
2017-03-31 09:21:26 +02:00
i f d e f B O A R D _ A V B _ R O L L B A C K _ I N D E X
2017-05-26 12:30:04 +02:00
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --rollback_index $( BOARD_AVB_ROLLBACK_INDEX)
2017-03-31 09:21:26 +02:00
e n d i f
2018-10-15 23:41:34 +02:00
i f d e f B O A R D _ A V B _ V B M E T A _ S Y S T E M _ R O L L B A C K _ I N D E X
BOARD_AVB_MAKE_VBMETA_SYSTEM_IMAGE_ARGS += \
--rollback_index $( BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX)
2018-08-21 06:09:07 +02:00
e n d i f
i f d e f B O A R D _ A V B _ V B M E T A _ V E N D O R _ R O L L B A C K _ I N D E X
BOARD_AVB_MAKE_VBMETA_VENDOR_IMAGE_ARGS += \
--rollback_index $( BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX)
2018-05-03 22:20:01 +02:00
e n d i f
2017-05-26 12:30:04 +02:00
# $(1): the directory to extract public keys to
d e f i n e e x t r a c t - a v b - c h a i n - p u b l i c - k e y s
$( if $( BOARD_AVB_BOOT_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_BOOT_KEY_PATH) \
--output $( 1) /boot.avbpubkey)
2019-07-10 19:49:37 +02:00
$( if $( BOARD_AVB_VENDOR_BOOT_KEY_PATH) ,\
$( AVBTOOL) extract_public_key --key $( BOARD_AVB_VENDOR_BOOT_KEY_PATH) \
--output $( 1) /vendor_boot.avbpubkey)
2017-05-26 12:30:04 +02:00
$( if $( BOARD_AVB_SYSTEM_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_SYSTEM_KEY_PATH) \
--output $( 1) /system.avbpubkey)
$( if $( BOARD_AVB_VENDOR_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_VENDOR_KEY_PATH) \
--output $( 1) /vendor.avbpubkey)
2017-11-27 09:04:47 +01:00
$( if $( BOARD_AVB_PRODUCT_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_PRODUCT_KEY_PATH) \
--output $( 1) /product.avbpubkey)
2019-06-25 08:58:13 +02:00
$( if $( BOARD_AVB_SYSTEM_EXT_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_SYSTEM_EXT_KEY_PATH) \
--output $( 1) /system_ext.avbpubkey)
2017-11-14 16:42:30 +01:00
$( if $( BOARD_AVB_ODM_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_ODM_KEY_PATH) \
--output $( 1) /odm.avbpubkey)
2017-05-26 12:30:04 +02:00
$( if $( BOARD_AVB_DTBO_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_DTBO_KEY_PATH) \
--output $( 1) /dtbo.avbpubkey)
2017-12-01 22:24:01 +01:00
$( if $( BOARD_AVB_RECOVERY_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_RECOVERY_KEY_PATH) \
--output $( 1) /recovery.avbpubkey)
2018-10-15 23:41:34 +02:00
$( if $( BOARD_AVB_VBMETA_SYSTEM_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_VBMETA_SYSTEM_KEY_PATH) \
--output $( 1) /vbmeta_system.avbpubkey)
2018-08-21 06:09:07 +02:00
$( if $( BOARD_AVB_VBMETA_VENDOR_KEY_PATH) ,\
$( hide) $( AVBTOOL) extract_public_key --key $( BOARD_AVB_VBMETA_VENDOR_KEY_PATH) \
--output $( 1) /vbmeta_vendor.avbpubkey)
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
$( if $( BOARD_CUSTOMIMAGES_PARTITION_LIST) ,\
$( hide) $( foreach partition,$( BOARD_CUSTOMIMAGES_PARTITION_LIST) , \
$( AVBTOOL) extract_public_key --key $( BOARD_AVB_$( call to-upper,$( partition) ) _KEY_PATH) \
--output $( 1) /$( partition) .avbpubkey; ) )
2018-08-21 06:09:07 +02:00
e n d e f
# Builds a chained VBMeta image. This VBMeta image will contain the descriptors for the partitions
# specified in BOARD_AVB_VBMETA_<NAME>. The built VBMeta image will be included into the top-level
2018-10-15 23:41:34 +02:00
# vbmeta image as a chained partition. For example, if a target defines `BOARD_AVB_VBMETA_SYSTEM
2019-06-25 08:58:13 +02:00
# := system system_ext`, `vbmeta_system.img` will be created that includes the descriptors for
# `system.img` and `system_ext.img`. `vbmeta_system.img` itself will be included into
2018-08-21 06:09:07 +02:00
# `vbmeta.img` as a chained partition.
2018-10-15 23:41:34 +02:00
# $(1): VBMeta image name, such as "vbmeta_system", "vbmeta_vendor" etc.
2018-08-21 06:09:07 +02:00
# $(2): Output filename.
d e f i n e b u i l d - c h a i n e d - v b m e t a - i m a g e
$( call pretty," Target chained vbmeta image: $@ " )
$( hide) $( AVBTOOL) make_vbmeta_image \
$( INTERNAL_AVB_$( call to-upper,$( 1) ) _SIGNING_ARGS) \
$( BOARD_AVB_MAKE_$( call to-upper,$( 1) ) _IMAGE_ARGS) \
$( foreach image,$( BOARD_AVB_$( call to-upper,$( 1) ) ) , \
--include_descriptors_from_image $( call images-for-partitions,$( image) ) ) \
--output $@
2017-05-26 12:30:04 +02:00
e n d e f
2019-04-16 19:06:13 +02:00
i f d e f B U I L D I N G _ S Y S T E M _ I M A G E
2018-10-15 23:41:34 +02:00
i f d e f B O A R D _ A V B _ V B M E T A _ S Y S T E M
INSTALLED_VBMETA_SYSTEMIMAGE_TARGET := $( PRODUCT_OUT) /vbmeta_system.img
$(INSTALLED_VBMETA_SYSTEMIMAGE_TARGET) : \
2018-11-26 19:12:05 +01:00
$( AVBTOOL) \
$( call images-for-partitions,$( BOARD_AVB_VBMETA_SYSTEM) ) \
$( BOARD_AVB_VBMETA_SYSTEM_KEY_PATH)
2018-10-15 23:41:34 +02:00
$( call build-chained-vbmeta-image,vbmeta_system)
2018-08-21 06:09:07 +02:00
e n d i f
2019-04-16 19:06:13 +02:00
e n d i f # BUILDING_SYSTEM_IMAGE
2018-08-21 06:09:07 +02:00
i f d e f B O A R D _ A V B _ V B M E T A _ V E N D O R
INSTALLED_VBMETA_VENDORIMAGE_TARGET := $( PRODUCT_OUT) /vbmeta_vendor.img
$(INSTALLED_VBMETA_VENDORIMAGE_TARGET) : \
2018-11-26 19:12:05 +01:00
$( AVBTOOL) \
$( call images-for-partitions,$( BOARD_AVB_VBMETA_VENDOR) ) \
$( BOARD_AVB_VBMETA_VENDOR_KEY_PATH)
2018-08-21 06:09:07 +02:00
$( call build-chained-vbmeta-image,vbmeta_vendor)
e n d i f
2017-03-31 09:21:26 +02:00
d e f i n e b u i l d - v b m e t a i m a g e - t a r g e t
$( call pretty," Target vbmeta image: $( INSTALLED_VBMETAIMAGE_TARGET) " )
2017-05-26 12:30:04 +02:00
$( hide) mkdir -p $( AVB_CHAIN_KEY_DIR)
$( call extract-avb-chain-public-keys, $( AVB_CHAIN_KEY_DIR) )
2017-03-31 09:21:26 +02:00
$( hide) $( AVBTOOL) make_vbmeta_image \
$( INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS) \
2018-08-23 07:53:41 +02:00
$( PRIVATE_AVB_VBMETA_SIGNING_ARGS) \
2017-03-31 09:21:26 +02:00
$( BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS) \
--output $@
2017-05-26 12:30:04 +02:00
$( hide) rm -rf $( AVB_CHAIN_KEY_DIR)
2017-03-31 09:21:26 +02:00
e n d e f
2019-08-13 09:30:57 +02:00
i f d e f B U I L D I N G _ V B M E T A _ I M A G E
2017-03-31 09:21:26 +02:00
INSTALLED_VBMETAIMAGE_TARGET := $( BUILT_VBMETAIMAGE_TARGET)
2018-08-23 07:53:41 +02:00
$(INSTALLED_VBMETAIMAGE_TARGET) : PRIVATE_AVB_VBMETA_SIGNING_ARGS := \
--algorithm $( BOARD_AVB_ALGORITHM) --key $( BOARD_AVB_KEY_PATH)
2017-12-01 22:24:01 +01:00
$(INSTALLED_VBMETAIMAGE_TARGET) : \
2018-11-26 19:12:05 +01:00
$( AVBTOOL) \
$( INSTALLED_BOOTIMAGE_TARGET) \
2019-07-10 19:49:37 +02:00
$( INSTALLED_VENDOR_BOOTIMAGE_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_SYSTEMIMAGE_TARGET) \
$( INSTALLED_VENDORIMAGE_TARGET) \
$( INSTALLED_PRODUCTIMAGE_TARGET) \
2019-06-25 08:58:13 +02:00
$( INSTALLED_SYSTEM_EXTIMAGE_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_ODMIMAGE_TARGET) \
$( INSTALLED_DTBOIMAGE_TARGET) \
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
$( INSTALLED_CUSTOMIMAGES_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_RECOVERYIMAGE_TARGET) \
$( INSTALLED_VBMETA_SYSTEMIMAGE_TARGET) \
$( INSTALLED_VBMETA_VENDORIMAGE_TARGET) \
$( BOARD_AVB_VBMETA_SYSTEM_KEY_PATH) \
$( BOARD_AVB_VBMETA_VENDOR_KEY_PATH) \
$( BOARD_AVB_KEY_PATH)
2017-03-31 09:21:26 +02:00
$( build-vbmetaimage-target)
.PHONY : vbmetaimage -nodeps
2019-12-09 08:48:09 +01:00
vbmetaimage-nodeps : PRIVATE_AVB_VBMETA_SIGNING_ARGS := \
--algorithm $( BOARD_AVB_ALGORITHM) --key $( BOARD_AVB_KEY_PATH)
2017-03-31 09:21:26 +02:00
vbmetaimage-nodeps :
$( build-vbmetaimage-target)
2019-08-13 09:30:57 +02:00
e n d i f # BUILDING_VBMETA_IMAGE
2017-03-31 09:21:26 +02:00
e n d i f # BOARD_AVB_ENABLE
2020-01-14 22:35:45 +01:00
# -----------------------------------------------------------------
# Check VINTF of build
2020-06-04 16:16:39 +02:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2020-01-14 22:35:45 +01:00
intermediates := $( call intermediates-dir-for,PACKAGING,check_vintf_all)
check_vintf_all_deps :=
2020-01-21 21:46:57 +01:00
# The build system only writes VINTF metadata to */etc/vintf paths. Legacy paths aren't needed here
# because they are only used for prebuilt images.
check_vintf_common_srcs_patterns := \
$( TARGET_OUT) /etc/vintf/% \
$( TARGET_OUT_VENDOR) /etc/vintf/% \
$( TARGET_OUT_ODM) /etc/vintf/% \
$( TARGET_OUT_PRODUCT) /etc/vintf/% \
$( TARGET_OUT_SYSTEM_EXT) /etc/vintf/% \
check_vintf_common_srcs := $( sort $( filter $( check_vintf_common_srcs_patterns) , \
$( INTERNAL_SYSTEMIMAGE_FILES) \
$( INTERNAL_VENDORIMAGE_FILES) \
$( INTERNAL_ODMIMAGE_FILES) \
$( INTERNAL_PRODUCTIMAGE_FILES) \
$( INTERNAL_SYSTEM_EXTIMAGE_FILES) \
) )
check_vintf_common_srcs_patterns :=
check_vintf_has_system :=
check_vintf_has_vendor :=
2020-03-13 21:11:10 +01:00
i f n e q ( , $( filter EMPTY_ODM_SKU_PLACEHOLDER ,$ ( ODM_MANIFEST_SKUS ) ) )
$( error EMPTY_ODM_SKU_PLACEHOLDER is an internal variable and cannot be used for ODM_MANIFEST_SKUS )
e n d i f
i f n e q ( , $( filter EMPTY_VENDOR_SKU_PLACEHOLDER ,$ ( DEVICE_MANIFEST_SKUS ) ) )
$( error EMPTY_VENDOR_SKU_PLACEHOLDER is an internal variable and cannot be used for DEIVCE_MANIFEST_SKUS )
e n d i f
2020-01-14 22:36:00 +01:00
# -- Check system manifest / matrix including fragments (excluding other framework manifests / matrices, e.g. product);
2020-01-21 21:46:57 +01:00
check_vintf_system_deps := $( filter $( TARGET_OUT) /etc/vintf/%, $( check_vintf_common_srcs) )
i f n e q ( $( check_vintf_system_deps ) , )
check_vintf_has_system := true
2020-01-14 22:36:00 +01:00
check_vintf_system_log := $( intermediates) /check_vintf_system_log
check_vintf_all_deps += $( check_vintf_system_log)
2020-01-21 21:46:57 +01:00
$(check_vintf_system_log) : $( HOST_OUT_EXECUTABLES ) /checkvintf $( check_vintf_system_deps )
2020-01-14 22:36:00 +01:00
@( $< --check-one --dirmap /system:$( TARGET_OUT) > $@ 2>& 1 ) || ( cat $@ && exit 1 )
check_vintf_system_log :=
2020-01-21 21:46:57 +01:00
e n d i f # check_vintf_system_deps
check_vintf_system_deps :=
2020-01-14 22:36:00 +01:00
# -- Check vendor manifest / matrix including fragments (excluding other device manifests / matrices)
2020-01-21 21:46:57 +01:00
check_vintf_vendor_deps := $( filter $( TARGET_OUT_VENDOR) /etc/vintf/%, $( check_vintf_common_srcs) )
i f n e q ( $( check_vintf_vendor_deps ) , )
check_vintf_has_vendor := true
2020-01-14 22:36:00 +01:00
check_vintf_vendor_log := $( intermediates) /check_vintf_vendor_log
check_vintf_all_deps += $( check_vintf_vendor_log)
2020-03-17 23:18:34 +01:00
# Check vendor SKU=(empty) case when:
# - DEVICE_MANIFEST_FILE is not empty; OR
# - DEVICE_MANIFEST_FILE is empty AND DEVICE_MANIFEST_SKUS is empty (only vendor manifest fragments are used)
2020-03-13 21:11:10 +01:00
$(check_vintf_vendor_log) : PRIVATE_VENDOR_SKUS := \
2020-03-17 23:18:34 +01:00
$( if $( DEVICE_MANIFEST_FILE) ,EMPTY_VENDOR_SKU_PLACEHOLDER,\
$( if $( DEVICE_MANIFEST_SKUS) ,,EMPTY_VENDOR_SKU_PLACEHOLDER) ) \
2020-03-13 21:11:10 +01:00
$( DEVICE_MANIFEST_SKUS)
2020-01-21 21:46:57 +01:00
$(check_vintf_vendor_log) : $( HOST_OUT_EXECUTABLES ) /checkvintf $( check_vintf_vendor_deps )
2020-03-13 21:11:10 +01:00
$( foreach vendor_sku,$( PRIVATE_VENDOR_SKUS) , \
( $< --check-one --dirmap /vendor:$( TARGET_OUT_VENDOR) \
--property ro.boot.product.vendor.sku= $( filter-out EMPTY_VENDOR_SKU_PLACEHOLDER,$( vendor_sku) ) \
> $@ 2>& 1 ) || ( cat $@ && exit 1 ) ; )
2020-01-14 22:36:00 +01:00
check_vintf_vendor_log :=
2020-01-21 21:46:57 +01:00
e n d i f # check_vintf_vendor_deps
check_vintf_vendor_deps :=
2020-01-14 22:36:00 +01:00
2020-01-14 22:35:45 +01:00
# -- Check VINTF compatibility of build.
# Skip partial builds; only check full builds. Only check if:
# - PRODUCT_ENFORCE_VINTF_MANIFEST is true
2020-01-21 21:46:57 +01:00
# - system / vendor VINTF metadata exists
2020-01-14 22:35:45 +01:00
# - Building product / system_ext / odm images if board has product / system_ext / odm images
i f e q ( $( PRODUCT_ENFORCE_VINTF_MANIFEST ) , t r u e )
2020-01-21 21:46:57 +01:00
i f e q ( $( check_vintf_has_system ) , t r u e )
i f e q ( $( check_vintf_has_vendor ) , t r u e )
2020-01-14 22:35:45 +01:00
i f e q ( $( filter true ,$ ( BUILDING_ODM_IMAGE ) ) , $( filter true ,$ ( BOARD_USES_ODMIMAGE ) ) )
i f e q ( $( filter true ,$ ( BUILDING_PRODUCT_IMAGE ) ) , $( filter true ,$ ( BOARD_USES_PRODUCTIMAGE ) ) )
i f e q ( $( filter true ,$ ( BUILDING_SYSTEM_EXT_IMAGE ) ) , $( filter true ,$ ( BOARD_USES_SYSTEM_EXTIMAGE ) ) )
check_vintf_compatible_log := $( intermediates) /check_vintf_compatible_log
check_vintf_all_deps += $( check_vintf_compatible_log)
check_vintf_compatible_args :=
2020-01-21 21:46:57 +01:00
check_vintf_compatible_deps := $( check_vintf_common_srcs)
2020-01-14 22:35:45 +01:00
# -- Kernel version and configurations.
i f e q ( $( PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS ) , t r u e )
2020-01-14 22:36:00 +01:00
BUILT_KERNEL_CONFIGS_FILE := $( intermediates) /kernel_configs.txt
BUILT_KERNEL_VERSION_FILE := $( intermediates) /kernel_version.txt
my_board_extracted_kernel :=
# BOARD_KERNEL_CONFIG_FILE and BOARD_KERNEL_VERSION can be used to override the values extracted
# from INSTALLED_KERNEL_TARGET.
i f d e f B O A R D _ K E R N E L _ C O N F I G _ F I L E
i f d e f B O A R D _ K E R N E L _ V E R S I O N
$(BUILT_KERNEL_CONFIGS_FILE) : $( BOARD_KERNEL_CONFIG_FILE )
cp $< $@
$(BUILT_KERNEL_VERSION_FILE) :
echo $( BOARD_KERNEL_VERSION) > $@
my_board_extracted_kernel := true
e n d i f # BOARD_KERNEL_VERSION
e n d i f # BOARD_KERNEL_CONFIG_FILE
i f n e q ( $( my_board_extracted_kernel ) , t r u e )
i f n d e f I N S T A L L E D _ K E R N E L _ T A R G E T
$( warning No INSTALLED_KERNEL_TARGET is defined when PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS \
is true. Information about the updated kernel cannot be built into OTA update package. \
You can fix this by: ( 1) setting TARGET_NO_KERNEL to false and installing the built kernel \
to $( PRODUCT_OUT) /kernel, so that kernel information will be extracted from the built kernel; \
or ( 2) extracting kernel configuration and defining BOARD_KERNEL_CONFIG_FILE and \
BOARD_KERNEL_VERSION manually; or ( 3) unsetting PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS \
manually.)
e l s e
# Tools for decompression that is not in PATH.
# Check $(EXTRACT_KERNEL) for decompression algorithms supported by the script.
# Algorithms that are in the script but not in this list will be found in PATH.
my_decompress_tools := \
lz4:$( HOST_OUT_EXECUTABLES) /lz4 \
$(BUILT_KERNEL_CONFIGS_FILE) : .KATI_IMPLICIT_OUTPUTS := $( BUILT_KERNEL_VERSION_FILE )
$(BUILT_KERNEL_CONFIGS_FILE) : PRIVATE_DECOMPRESS_TOOLS := $( my_decompress_tools )
$(BUILT_KERNEL_CONFIGS_FILE) : $( foreach pair ,$ ( my_decompress_tools ) ,$ ( call word -colon ,2,$ ( pair ) ) )
$(BUILT_KERNEL_CONFIGS_FILE) : $( EXTRACT_KERNEL ) $( INSTALLED_KERNEL_TARGET )
$< --tools $( PRIVATE_DECOMPRESS_TOOLS) --input $( INSTALLED_KERNEL_TARGET) \
--output-configs $@ \
--output-version $( BUILT_KERNEL_VERSION_FILE)
my_decompress_tools :=
e n d i f # my_board_extracted_kernel
my_board_extracted_kernel :=
e n d i f # INSTALLED_KERNEL_TARGET
2020-01-14 22:35:45 +01:00
check_vintf_compatible_args += --kernel $$ ( cat $( BUILT_KERNEL_VERSION_FILE) ) :$( BUILT_KERNEL_CONFIGS_FILE)
check_vintf_compatible_deps += $( BUILT_KERNEL_CONFIGS_FILE) $( BUILT_KERNEL_VERSION_FILE)
e n d i f # PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
check_vintf_compatible_args += \
--dirmap /system:$( TARGET_OUT) \
--dirmap /vendor:$( TARGET_OUT_VENDOR) \
--dirmap /odm:$( TARGET_OUT_ODM) \
--dirmap /product:$( TARGET_OUT_PRODUCT) \
--dirmap /system_ext:$( TARGET_OUT_SYSTEM_EXT) \
i f d e f P R O D U C T _ S H I P P I N G _ A P I _ L E V E L
check_vintf_compatible_args += --property ro.product.first_api_level= $( PRODUCT_SHIPPING_API_LEVEL)
e n d i f # PRODUCT_SHIPPING_API_LEVEL
$(check_vintf_compatible_log) : PRIVATE_CHECK_VINTF_ARGS := $( check_vintf_compatible_args )
$(check_vintf_compatible_log) : PRIVATE_CHECK_VINTF_DEPS := $( check_vintf_compatible_deps )
2020-03-17 23:18:34 +01:00
# Check ODM SKU=(empty) case when:
# - ODM_MANIFEST_FILES is not empty; OR
# - ODM_MANIFEST_FILES is empty AND ODM_MANIFEST_SKUS is empty (only ODM manifest fragments are used)
2020-03-13 21:11:10 +01:00
$(check_vintf_compatible_log) : PRIVATE_ODM_SKUS := \
2020-03-17 23:18:34 +01:00
$( if $( ODM_MANIFEST_FILES) ,EMPTY_ODM_SKU_PLACEHOLDER,\
$( if $( ODM_MANIFEST_SKUS) ,,EMPTY_ODM_SKU_PLACEHOLDER) ) \
2020-03-13 21:11:10 +01:00
$( ODM_MANIFEST_SKUS)
2020-03-17 23:18:34 +01:00
# Check vendor SKU=(empty) case when:
# - DEVICE_MANIFEST_FILE is not empty; OR
# - DEVICE_MANIFEST_FILE is empty AND DEVICE_MANIFEST_SKUS is empty (only vendor manifest fragments are used)
2020-03-13 21:11:10 +01:00
$(check_vintf_compatible_log) : PRIVATE_VENDOR_SKUS := \
2020-03-17 23:18:34 +01:00
$( if $( DEVICE_MANIFEST_FILE) ,EMPTY_VENDOR_SKU_PLACEHOLDER,\
$( if $( DEVICE_MANIFEST_SKUS) ,,EMPTY_VENDOR_SKU_PLACEHOLDER) ) \
2020-03-13 21:11:10 +01:00
$( DEVICE_MANIFEST_SKUS)
2020-01-14 22:35:45 +01:00
$(check_vintf_compatible_log) : $( HOST_OUT_EXECUTABLES ) /checkvintf $( check_vintf_compatible_deps )
@echo -n -e 'Deps: \n ' > $@
@sed 's/ /\n /g' <<< " $( PRIVATE_CHECK_VINTF_DEPS) " >> $@
@echo -n -e 'Args: \n ' >> $@
@cat <<< " $( PRIVATE_CHECK_VINTF_ARGS) " >> $@
2020-03-13 21:11:10 +01:00
$( foreach odm_sku,$( PRIVATE_ODM_SKUS) , $( foreach vendor_sku,$( PRIVATE_VENDOR_SKUS) , \
echo " For ODM SKU = $( odm_sku) , vendor SKU = $( vendor_sku) " >> $@ ; \
2020-01-14 22:35:45 +01:00
( $< --check-compat $( PRIVATE_CHECK_VINTF_ARGS) \
2020-03-13 21:11:10 +01:00
--property ro.boot.product.hardware.sku= $( filter-out EMPTY_ODM_SKU_PLACEHOLDER,$( odm_sku) ) \
--property ro.boot.product.vendor.sku= $( filter-out EMPTY_VENDOR_SKU_PLACEHOLDER,$( vendor_sku) ) \
>> $@ 2>& 1 ) || ( cat $@ && exit 1) ; ) )
2020-01-14 22:35:45 +01:00
check_vintf_compatible_log :=
check_vintf_compatible_args :=
check_vintf_compatible_deps :=
e n d i f # BUILDING_SYSTEM_EXT_IMAGE equals BOARD_USES_SYSTEM_EXTIMAGE
e n d i f # BUILDING_PRODUCT_IMAGE equals BOARD_USES_PRODUCTIMAGE
e n d i f # BUILDING_ODM_IMAGE equals BOARD_USES_ODMIMAGE
2020-01-21 21:46:57 +01:00
e n d i f # check_vintf_has_vendor
e n d i f # check_vintf_has_system
2020-01-14 22:35:45 +01:00
e n d i f # PRODUCT_ENFORCE_VINTF_MANIFEST
# Add all logs of VINTF checks to dist builds
droid_targets : $( check_vintf_all_deps )
$( call dist -for -goals , droid_targets , $ ( check_vintf_all_deps ) )
# Helper alias to check all VINTF of current build.
.PHONY : check -vintf -all
check-vintf-all : $( check_vintf_all_deps )
$( foreach file,$^,echo " $( file) " ; cat " $( file) " ; echo; )
2020-01-21 21:46:57 +01:00
check_vintf_has_vendor :=
check_vintf_has_system :=
check_vintf_common_srcs :=
2020-01-14 22:35:45 +01:00
check_vintf_all_deps :=
intermediates :=
2020-06-04 16:16:39 +02:00
e n d i f # !TARGET_BUILD_UNBUNDLED
2020-01-14 22:35:45 +01:00
2018-07-25 02:45:08 +02:00
# -----------------------------------------------------------------
2018-11-29 22:51:48 +01:00
# Check image sizes <= size of super partition
2020-06-04 16:16:39 +02:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2018-11-29 22:51:48 +01:00
i f e q ( t r u e , $( PRODUCT_BUILD_SUPER_PARTITION ) )
2018-07-25 02:45:08 +02:00
2019-11-01 19:23:19 +01:00
# $(1): misc_info.txt
2019-10-26 05:36:55 +02:00
# #(2): optional log file
2018-10-02 02:30:01 +02:00
d e f i n e c h e c k - a l l - p a r t i t i o n - s i z e s - t a r g e t
2019-11-01 19:23:19 +01:00
mkdir -p $( dir $( 1) )
rm -f $( 1)
$( call dump-super-image-info, $( 1) )
$( foreach partition,$( BOARD_SUPER_PARTITION_PARTITION_LIST) , \
echo " $( partition) _image= " $( call images-for-partitions,$( partition) ) >> $( 1) ; )
2019-10-26 05:36:55 +02:00
$( CHECK_PARTITION_SIZES) $( if $( 2) ,--logfile $( 2) ,-v) $( 1)
2018-10-02 02:30:01 +02:00
e n d e f
2019-10-26 05:36:55 +02:00
check_all_partition_sizes_log := $( call intermediates-dir-for,PACKAGING,check-all-partition-sizes) /check_all_partition_sizes_log
droid_targets : $( check_all_partition_sizes_log )
$( call dist -for -goals , droid_targets , $ ( check_all_partition_sizes_log ) )
$(check_all_partition_sizes_log) : \
$( CHECK_PARTITION_SIZES) \
$( call images-for-partitions,$( BOARD_SUPER_PARTITION_PARTITION_LIST) )
2019-11-01 19:23:19 +01:00
$( call check-all-partition-sizes-target, \
2019-10-26 05:36:55 +02:00
$( call intermediates-dir-for,PACKAGING,check-all-partition-sizes) /misc_info.txt, \
$@ )
.PHONY : check -all -partition -sizes
check-all-partition-sizes : $( check_all_partition_sizes_log )
2019-05-18 00:51:39 +02:00
2019-10-26 05:36:55 +02:00
.PHONY : check -all -partition -sizes -nodeps
2019-05-18 00:51:39 +02:00
check-all-partition-sizes-nodeps :
2019-11-01 19:23:19 +01:00
$( call check-all-partition-sizes-target, \
$( call intermediates-dir-for,PACKAGING,check-all-partition-sizes-nodeps) /misc_info.txt)
2018-10-02 02:30:01 +02:00
2018-07-31 21:47:27 +02:00
e n d i f # PRODUCT_BUILD_SUPER_PARTITION
2018-07-21 01:45:57 +02:00
2020-06-04 16:16:39 +02:00
e n d i f # !TARGET_BUILD_UNBUNDLED
2018-07-21 01:45:57 +02:00
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
2014-11-05 06:17:06 +01:00
# bring in the installer image generation defines if necessary
i f e q ( $( TARGET_USE_DISKINSTALLER ) , t r u e )
i n c l u d e b o o t a b l e / d i s k i n s t a l l e r / c o n f i g . m k
e n d i f
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
2012-04-19 22:54:39 +02:00
# host tools needed to build dist and OTA packages
2009-06-15 23:30:14 +02:00
2015-09-22 20:17:52 +02:00
i f e q ( $( BUILD_OS ) , d a r w i n )
2018-10-09 09:46:25 +02:00
build_ota_package := false
build_otatools_package := false
e l s e
2019-04-09 06:11:59 +02:00
# Set build_ota_package, and allow opt-out below.
2018-10-09 09:46:25 +02:00
build_ota_package := true
ifeq ( $( TARGET_SKIP_OTA_PACKAGE) ,true)
build_ota_package := false
endif
2018-11-14 23:12:10 +01:00
ifneq ( ,$( filter address, $( SANITIZE_TARGET) ) )
2018-10-09 09:46:25 +02:00
build_ota_package := false
endif
ifeq ( $( TARGET_PRODUCT) ,sdk)
build_ota_package := false
endif
ifeq ( $( TARGET_BUILD_PDK) ,true)
build_ota_package := false
endif
2019-04-09 06:11:59 +02:00
ifneq ( $( PRODUCT_BUILD_GENERIC_OTA_PACKAGE) ,true)
ifneq ( $( filter generic%,$( TARGET_DEVICE) ) ,)
build_ota_package := false
endif
ifeq ( $( TARGET_NO_KERNEL) ,true)
build_ota_package := false
endif
ifeq ( $( recovery_fstab) ,)
build_ota_package := false
endif
endif # PRODUCT_BUILD_GENERIC_OTA_PACKAGE
# Set build_otatools_package, and allow opt-out below.
2018-10-09 09:46:25 +02:00
build_otatools_package := true
ifeq ( $( TARGET_SKIP_OTATOOLS_PACKAGE) ,true)
build_otatools_package := false
endif
2016-02-05 00:09:23 +01:00
e n d i f
2015-09-22 20:17:52 +02:00
2018-10-09 09:46:25 +02:00
i f e q ( $( build_otatools_package ) , t r u e )
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_MODULES := \
2019-07-08 03:59:00 +02:00
aapt2 \
2019-06-25 20:42:12 +02:00
add_img_to_target_files \
2020-03-12 08:33:28 +01:00
aftltool \
2020-05-29 21:01:32 +02:00
apksigner \
2019-05-02 06:17:13 +02:00
append2simg \
avbtool \
blk_alloc_to_base_fs \
boot_signer \
brillo_update_payload \
brotli \
bsdiff \
2019-05-07 22:12:21 +02:00
build_image \
build_super_image \
2019-05-02 06:17:13 +02:00
build_verity_metadata \
build_verity_tree \
care_map_generator \
2019-06-25 20:42:12 +02:00
check_ota_package_signature \
check_target_files_signatures \
2019-08-21 22:29:30 +02:00
check_target_files_vintf \
2019-05-02 06:17:13 +02:00
checkvintf \
delta_generator \
e2fsck \
e2fsdroid \
fc_sort \
fec \
fs_config \
generate_verity_key \
img2simg \
2019-06-25 20:42:12 +02:00
img_from_target_files \
2019-05-02 06:17:13 +02:00
imgdiff \
libconscrypt_openjdk_jni \
lpmake \
2019-06-25 05:50:58 +02:00
lpunpack \
2019-05-02 06:17:13 +02:00
make_f2fs \
2019-06-25 20:42:12 +02:00
merge_target_files \
2019-05-02 06:17:13 +02:00
minigzip \
2019-07-05 11:30:41 +02:00
mk_combined_img \
2019-05-02 06:17:13 +02:00
mkbootfs \
mkbootimg \
mke2fs \
2020-01-30 02:42:59 +01:00
mke2fs.conf \
2019-05-02 06:17:13 +02:00
mkf2fsuserimg.sh \
mksquashfs \
mksquashfsimage.sh \
mkuserimg_mke2fs \
2019-08-05 21:05:45 +02:00
ota_from_target_files \
2019-05-02 06:17:13 +02:00
sefcontext_compile \
2019-07-05 11:30:41 +02:00
sgdisk \
2019-05-02 06:17:13 +02:00
shflags \
2019-06-25 20:42:12 +02:00
sign_apex \
sign_target_files_apks \
2019-05-02 06:17:13 +02:00
signapk \
simg2img \
sload_f2fs \
tune2fs \
2020-01-05 00:18:09 +01:00
unpack_bootimg \
2019-06-11 23:35:59 +02:00
update_host_simulator \
2019-06-25 20:42:12 +02:00
validate_target_files \
2019-05-02 06:17:13 +02:00
verity_signer \
verity_verifier \
zipalign \
2017-02-23 01:38:19 +01:00
2020-01-23 22:59:13 +01:00
# Additional tools to unpack and repack the apex file.
INTERNAL_OTATOOLS_MODULES += \
apexer \
deapexer \
debugfs_static \
merge_zips \
resize2fs \
soong_zip \
2019-03-28 16:45:40 +01:00
i f e q ( t r u e , $( PRODUCT_SUPPORTS_VBOOT ) )
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_MODULES += \
futility \
vboot_signer
e n d i f
2017-07-07 00:13:59 +02:00
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_FILES := \
$( filter $( HOST_OUT) /%,$( call module-installed-files,$( INTERNAL_OTATOOLS_MODULES) ) )
2009-03-04 04:28:42 +01:00
2010-06-18 02:52:18 +02:00
.PHONY : otatools
2019-05-02 06:17:13 +02:00
otatools : $( INTERNAL_OTATOOLS_FILES )
2010-06-18 02:52:18 +02:00
2019-05-02 06:17:13 +02:00
# For each module, recursively resolve its host shared library dependencies. Then we have a full
# list of modules whose installed files need to be packed.
INTERNAL_OTATOOLS_MODULES_WITH_DEPS := \
$( sort $( INTERNAL_OTATOOLS_MODULES) \
$( foreach m,$( INTERNAL_OTATOOLS_MODULES) ,$( call get-all-shared-libs-deps,$( m) ) ) )
2014-08-22 17:04:58 +02:00
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_PACKAGE_FILES := \
$( filter $( HOST_OUT) /%,$( call module-installed-files,$( INTERNAL_OTATOOLS_MODULES_WITH_DEPS) ) )
INTERNAL_OTATOOLS_PACKAGE_FILES += \
$( sort $( shell find build/make/target/product/security -type f -name "*.x509.pem" -o \
-name "*.pk8" -o -name verity_key) )
2018-10-12 20:03:04 +02:00
i f n e q ( , $( wildcard device ) )
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_PACKAGE_FILES += \
2018-05-02 04:07:27 +02:00
$( sort $( shell find device $( wildcard vendor) -type f -name "*.pk8" -o -name "verifiedboot*" -o \
2019-07-30 06:12:37 +02:00
-name "*.pem" -o -name "oem*.prop" -o -name "*.avbpubkey" ) )
2018-10-12 20:03:04 +02:00
e n d i f
i f n e q ( , $( wildcard external /avb ) )
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_PACKAGE_FILES += \
2018-10-12 20:03:04 +02:00
$( sort $( shell find external/avb/test/data -type f -name "testkey_*.pem" -o \
-name "atx_metadata.bin" ) )
e n d i f
2019-03-28 16:45:40 +01:00
i f e q ( t r u e , $( PRODUCT_SUPPORTS_VBOOT ) )
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_PACKAGE_FILES += \
2018-02-10 05:03:32 +01:00
$( sort $( shell find external/vboot_reference/tests/devkeys -type f) )
2017-05-17 20:41:50 +02:00
e n d i f
2019-05-02 06:17:13 +02:00
INTERNAL_OTATOOLS_RELEASETOOLS := \
$( sort $( shell find build/make/tools/releasetools -name "*.pyc" -prune -o \
\( -type f -o -type l \) -print) )
BUILT_OTATOOLS_PACKAGE := $( PRODUCT_OUT) /otatools.zip
$(BUILT_OTATOOLS_PACKAGE) : PRIVATE_ZIP_ROOT := $( call intermediates -dir -for ,PACKAGING ,otatools ) /otatools
$(BUILT_OTATOOLS_PACKAGE) : PRIVATE_OTATOOLS_PACKAGE_FILES := $( INTERNAL_OTATOOLS_PACKAGE_FILES )
$(BUILT_OTATOOLS_PACKAGE) : PRIVATE_OTATOOLS_RELEASETOOLS := $( INTERNAL_OTATOOLS_RELEASETOOLS )
$(BUILT_OTATOOLS_PACKAGE) : $( INTERNAL_OTATOOLS_PACKAGE_FILES ) $( INTERNAL_OTATOOLS_RELEASETOOLS )
2019-08-15 08:08:18 +02:00
$(BUILT_OTATOOLS_PACKAGE) : $( SOONG_ZIP ) $( ZIP 2ZIP )
2014-08-22 17:04:58 +02:00
@echo " Package OTA tools: $@ "
2019-05-02 06:17:13 +02:00
rm -rf $@ $( PRIVATE_ZIP_ROOT)
mkdir -p $( dir $@ )
$( call copy-files-with-structure,$( PRIVATE_OTATOOLS_PACKAGE_FILES) ,$( HOST_OUT) /,$( PRIVATE_ZIP_ROOT) )
$( call copy-files-with-structure,$( PRIVATE_OTATOOLS_RELEASETOOLS) ,build/make/tools/,$( PRIVATE_ZIP_ROOT) )
2020-01-29 04:17:35 +01:00
cp $( SOONG_ZIP) $( ZIP2ZIP) $( MERGE_ZIPS) $( PRIVATE_ZIP_ROOT) /bin/
2019-05-02 06:17:13 +02:00
$( SOONG_ZIP) -o $@ -C $( PRIVATE_ZIP_ROOT) -D $( PRIVATE_ZIP_ROOT)
2014-08-22 17:04:58 +02:00
.PHONY : otatools -package
otatools-package : $( BUILT_OTATOOLS_PACKAGE )
2018-10-09 09:46:25 +02:00
e n d i f # build_otatools_package
2014-08-22 17:04:58 +02:00
2019-06-27 22:55:23 +02:00
# -----------------------------------------------------------------
# misc_info.txt
INSTALLED_MISC_INFO_TARGET := $( PRODUCT_OUT) /misc_info.txt
i f e q ( $( TARGET_RELEASETOOLS_EXTENSIONS ) , )
# default to common dir for device vendor
tool_extensions := $( TARGET_DEVICE_DIR) /../common
e l s e
tool_extensions := $( TARGET_RELEASETOOLS_EXTENSIONS)
e n d i f
.KATI_READONLY := tool_extensions
2020-05-08 02:32:10 +02:00
# $1: boot image file name
d e f i n e m i s c _ b o o t _ s i z e
$( subst .img ,_size ,$ ( 1) ) = $( BOARD_KERNEL $ ( call to -upper ,$ ( subst boot ,,$ ( subst .img ,,$ ( 1) ) ) ) _BOOTIMAGE_PARTITION_SIZE )
e n d e f
2019-06-27 22:55:23 +02:00
$(INSTALLED_MISC_INFO_TARGET) :
rm -f $@
$( call pretty," Target misc_info.txt: $@ " )
$( hide) echo " recovery_api_version= $( RECOVERY_API_VERSION) " >> $@
$( hide) echo " fstab_version= $( RECOVERY_FSTAB_VERSION) " >> $@
i f d e f B O A R D _ F L A S H _ B L O C K _ S I Z E
$( hide) echo " blocksize= $( BOARD_FLASH_BLOCK_SIZE) " >> $@
e n d i f
2020-05-08 02:32:10 +02:00
i f n e q ( $( strip $ ( BOARD_BOOTIMAGE_PARTITION_SIZE ) ) $( strip $ ( BOARD_KERNEL_BINARIES ) ) , )
$( foreach b,$( INSTALLED_BOOTIMAGE_TARGET) ,\
echo " $( call misc_boot_size,$( notdir $( b) ) ) " >> $@ ; )
2019-06-27 22:55:23 +02:00
e n d i f
i f e q ( $( INSTALLED_BOOTIMAGE_TARGET ) , )
$( hide) echo "no_boot=true" >> $@
2020-04-09 03:27:00 +02:00
e l s e
echo " boot_images= $( foreach b,$( INSTALLED_BOOTIMAGE_TARGET) ,$( notdir $( b) ) ) " >> $@
2019-06-27 22:55:23 +02:00
e n d i f
2020-06-10 22:09:10 +02:00
i f e q ( $( BOARD_RAMDISK_USE_LZ 4) , t r u e )
echo "lz4_ramdisks=true" >> $@
e n d i f
2019-07-10 19:49:37 +02:00
i f n e q ( $( INSTALLED_VENDOR_BOOTIMAGE_TARGET ) , )
echo "vendor_boot=true" >> $@
echo " vendor_boot_size= $( BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE) " >> $@
e n d i f
2019-06-27 22:55:23 +02:00
i f e q ( $( INSTALLED_RECOVERYIMAGE_TARGET ) , )
$( hide) echo "no_recovery=true" >> $@
e n d i f
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ D T B O
$( hide) echo "include_recovery_dtbo=true" >> $@
e n d i f
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ A C P I O
$( hide) echo "include_recovery_acpio=true" >> $@
e n d i f
i f d e f B O A R D _ R E C O V E R Y I M A G E _ P A R T I T I O N _ S I Z E
$( hide) echo " recovery_size= $( BOARD_RECOVERYIMAGE_PARTITION_SIZE) " >> $@
e n d i f
i f d e f T A R G E T _ R E C O V E R Y _ F S T Y P E _ M O U N T _ O P T I O N S
@# TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS can be empty to indicate that nothing but defaults should be used.
$( hide) echo " recovery_mount_options= $( TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS) " >> $@
e l s e
$( hide) echo " recovery_mount_options= $( DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS) " >> $@
e n d i f
$( hide) echo " tool_extensions= $( tool_extensions) " >> $@
$( hide) echo " default_system_dev_certificate= $( DEFAULT_SYSTEM_DEV_CERTIFICATE) " >> $@
i f d e f P R O D U C T _ E X T R A _ R E C O V E R Y _ K E Y S
$( hide) echo " extra_recovery_keys= $( PRODUCT_EXTRA_RECOVERY_KEYS) " >> $@
e n d i f
$( hide) echo 'mkbootimg_args=$(BOARD_MKBOOTIMG_ARGS)' >> $@
2020-03-17 03:13:46 +01:00
$( hide) echo 'recovery_mkbootimg_args=$(BOARD_RECOVERY_MKBOOTIMG_ARGS)' >> $@
2019-06-27 22:55:23 +02:00
$( hide) echo 'mkbootimg_version_args=$(INTERNAL_MKBOOTIMG_VERSION_ARGS)' >> $@
$( hide) echo "multistage_support=1" >> $@
$( hide) echo "blockimgdiff_versions=3,4" >> $@
i f e q ( $( PRODUCT_BUILD_GENERIC_OTA_PACKAGE ) , t r u e )
$( hide) echo "build_generic_ota_package=true" >> $@
e n d i f
i f n e q ( $( OEM_THUMBPRINT_PROPERTIES ) , )
# OTA scripts are only interested in fingerprint related properties
$( hide) echo " oem_fingerprint_properties= $( OEM_THUMBPRINT_PROPERTIES) " >> $@
e n d i f
i f n e q ( , $( filter address , $ ( SANITIZE_TARGET ) ) )
# We need to create userdata.img with real data because the instrumented libraries are in userdata.img.
$( hide) echo "userdata_img_with_data=true" >> $@
e n d i f
i f e q ( $( BOARD_USES_FULL_RECOVERY_IMAGE ) , t r u e )
$( hide) echo "full_recovery_image=true" >> $@
e n d i f
Moving recovery resources from /system to /vendor
This change is part of a topic that moves the recovery resources from the
system partition to the vendor partition, if it exists, or the vendor directory
on the system partition otherwise. The recovery resources are moving from the
system image to the vendor partition so that a single system image may be used
with either an A/B or a non-A/B vendor image. The topic removes a delta in the
system image that prevented such reuse in the past.
The recovery resources that are moving are involved with updating the recovery
partition after an update. In a non-A/B configuration, the system boots from
the recovery partition, updates the other partitions (system, vendor, etc.)
Then, the next time the system boots normally, a script updates the recovery
partition (if necessary). This script, the executables it invokes, and the data
files that it uses were previously on the system partition. The resources that
are moving include the following.
* install-recovery.sh
* applypatch
* recovery-resource.dat (if present)
* recovery-from-boot.p (if present)
This change includes the platform build system and release tools changes to
move the recovery resources from system to vendor (or /system/vendor). The
release tools need to know where to generate the recovery patch, and they
discover this from misc_info.txt variable board_uses_vendorimage, which the
platform build system generates.
We remove applypatch from PRODUCT_PACKAGES, but it is added back as a required
module in target/product/base_vendor.mk.
Several release tools rely on the misc_info.txt board_uses_vendorimage variable
to know how to generate and detect the recovery patch.
This change partially removes the --rebuild_recovery flag from the
merge_target_files.py script. The flag will be fully removed in a follow-on
change.
Bug: 68319577
Test: Ensure that recovery partition is updated correctly.
Change-Id: Ia4045bd67ffb3d899efa8d20dab4c4299b87ee5f
2019-09-18 02:06:47 +02:00
i f d e f B O A R D _ U S E S _ V E N D O R I M A G E
$( hide) echo "board_uses_vendorimage=true" >> $@
e n d i f
2019-06-27 22:55:23 +02:00
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
$( hide) echo "avb_enable=true" >> $@
$( hide) echo " avb_vbmeta_key_path= $( BOARD_AVB_KEY_PATH) " >> $@
$( hide) echo " avb_vbmeta_algorithm= $( BOARD_AVB_ALGORITHM) " >> $@
$( hide) echo " avb_vbmeta_args= $( BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS) " >> $@
$( hide) echo " avb_boot_add_hash_footer_args= $( BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS) " >> $@
i f d e f B O A R D _ A V B _ B O O T _ K E Y _ P A T H
$( hide) echo " avb_boot_key_path= $( BOARD_AVB_BOOT_KEY_PATH) " >> $@
$( hide) echo " avb_boot_algorithm= $( BOARD_AVB_BOOT_ALGORITHM) " >> $@
$( hide) echo " avb_boot_rollback_index_location= $( BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION) " >> $@
e n d i f # BOARD_AVB_BOOT_KEY_PATH
2019-07-10 19:49:37 +02:00
echo " avb_vendor_boot_add_hash_footer_args= $( BOARD_AVB_VENDOR_BOOT_ADD_HASH_FOOTER_ARGS) " >> $@
i f d e f B O A R D _ A V B _ V E N D O R _ B O O T _ K E Y _ P A T H
echo " avb_vendor_boot_key_path= $( BOARD_AVB_VENDOR_BOOT_KEY_PATH) " >> $@
echo " avb_vendor_boot_algorithm= $( BOARD_AVB_VENDOR_BOOT_ALGORITHM) " >> $@
echo " avb_vendor_boot_rollback_index_location= $( BOARD_AVB_VENDOR_BOOT_ROLLBACK_INDEX_LOCATION) " >> $@
e n d i f # BOARD_AVB_VENDOR_BOOT_KEY_PATH
2019-06-27 22:55:23 +02:00
$( hide) echo " avb_recovery_add_hash_footer_args= $( BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS) " >> $@
i f d e f B O A R D _ A V B _ R E C O V E R Y _ K E Y _ P A T H
$( hide) echo " avb_recovery_key_path= $( BOARD_AVB_RECOVERY_KEY_PATH) " >> $@
$( hide) echo " avb_recovery_algorithm= $( BOARD_AVB_RECOVERY_ALGORITHM) " >> $@
$( hide) echo " avb_recovery_rollback_index_location= $( BOARD_AVB_RECOVERY_ROLLBACK_INDEX_LOCATION) " >> $@
e n d i f # BOARD_AVB_RECOVERY_KEY_PATH
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
i f n e q ( , $( strip $ ( BOARD_CUSTOMIMAGES_PARTITION_LIST ) ) )
$( hide) echo " avb_custom_images_partition_list= $( BOARD_CUSTOMIMAGES_PARTITION_LIST) " >> $@
$( hide) $( foreach partition,$( BOARD_CUSTOMIMAGES_PARTITION_LIST) , \
echo " avb_ $( partition) _key_path= $( BOARD_AVB_$( call to-upper,$( partition) ) _KEY_PATH) " >> $@ ; \
echo " avb_ $( partition) _algorithm= $( BOARD_AVB_$( call to-upper,$( partition) ) _ALGORITHM) " >> $@ ; \
echo " avb_ $( partition) _add_hashtree_footer_args= $( BOARD_AVB_$( call to-upper,$( partition) ) _ADD_HASHTREE_FOOTER_ARGS) " >> $@ ; \
echo " avb_ $( partition) _rollback_index_location= $( BOARD_AVB_$( call to-upper,$( partition) ) _ROLLBACK_INDEX_LOCATION) " >> $@ ; \
echo " avb_ $( partition) _partition_size= $( BOARD_AVB_$( call to-upper,$( partition) ) _PARTITION_SIZE) " >> $@ ; \
echo " avb_ $( partition) _image_list= $( foreach image,$( BOARD_AVB_$( call to-upper,$( partition) ) _IMAGE_LIST) ,$( notdir $( image) ) ) " >> $@ ; )
e n d i f # BOARD_CUSTOMIMAGES_PARTITION_LIST
2019-06-27 22:55:23 +02:00
i f n e q ( , $( strip $ ( BOARD_AVB_VBMETA_SYSTEM ) ) )
$( hide) echo " avb_vbmeta_system= $( BOARD_AVB_VBMETA_SYSTEM) " >> $@
$( hide) echo " avb_vbmeta_system_args= $( BOARD_AVB_MAKE_VBMETA_SYSTEM_IMAGE_ARGS) " >> $@
$( hide) echo " avb_vbmeta_system_key_path= $( BOARD_AVB_VBMETA_SYSTEM_KEY_PATH) " >> $@
$( hide) echo " avb_vbmeta_system_algorithm= $( BOARD_AVB_VBMETA_SYSTEM_ALGORITHM) " >> $@
$( hide) echo " avb_vbmeta_system_rollback_index_location= $( BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION) " >> $@
e n d i f # BOARD_AVB_VBMETA_SYSTEM
i f n e q ( , $( strip $ ( BOARD_AVB_VBMETA_VENDOR ) ) )
$( hide) echo " avb_vbmeta_vendor= $( BOARD_AVB_VBMETA_VENDOR) " >> $@
$( hide) echo " avb_vbmeta_vendor_args= $( BOARD_AVB_MAKE_VBMETA_SYSTEM_IMAGE_ARGS) " >> $@
$( hide) echo " avb_vbmeta_vendor_key_path= $( BOARD_AVB_VBMETA_VENDOR_KEY_PATH) " >> $@
$( hide) echo " avb_vbmeta_vendor_algorithm= $( BOARD_AVB_VBMETA_VENDOR_ALGORITHM) " >> $@
$( hide) echo " avb_vbmeta_vendor_rollback_index_location= $( BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION) " >> $@
e n d i f # BOARD_AVB_VBMETA_VENDOR_KEY_PATH
e n d i f # BOARD_AVB_ENABLE
i f d e f B O A R D _ B P T _ I N P U T _ F I L E S
$( hide) echo "board_bpt_enable=true" >> $@
$( hide) echo " board_bpt_make_table_args= $( BOARD_BPT_MAKE_TABLE_ARGS) " >> $@
$( hide) echo " board_bpt_input_files= $( BOARD_BPT_INPUT_FILES) " >> $@
e n d i f
i f d e f B O A R D _ B P T _ D I S K _ S I Z E
$( hide) echo " board_bpt_disk_size= $( BOARD_BPT_DISK_SIZE) " >> $@
e n d i f
$( call generate-userimage-prop-dictionary, $@ )
i f e q ( $( AB_OTA_UPDATER ) , t r u e )
@# Include the build type in META/misc_info.txt so the server can easily differentiate production builds.
$( hide) echo " build_type= $( TARGET_BUILD_VARIANT) " >> $@
$( hide) echo "ab_update=true" >> $@
e n d i f
2020-04-17 19:08:10 +02:00
i f e q ( $( TARGET_OTA_ALLOW_NON_AB ) , t r u e )
$( hide) echo "allow_non_ab=true" >> $@
e n d i f
2019-06-27 22:55:23 +02:00
i f d e f B O A R D _ P R E B U I L T _ D T B O I M A G E
$( hide) echo "has_dtbo=true" >> $@
i f e q ( $( BOARD_AVB_ENABLE ) , t r u e )
$( hide) echo " dtbo_size= $( BOARD_DTBOIMG_PARTITION_SIZE) " >> $@
$( hide) echo " avb_dtbo_add_hash_footer_args= $( BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS) " >> $@
i f d e f B O A R D _ A V B _ D T B O _ K E Y _ P A T H
$( hide) echo " avb_dtbo_key_path= $( BOARD_AVB_DTBO_KEY_PATH) " >> $@
$( hide) echo " avb_dtbo_algorithm= $( BOARD_AVB_DTBO_ALGORITHM) " >> $@
$( hide) echo " avb_dtbo_rollback_index_location= $( BOARD_AVB_DTBO_ROLLBACK_INDEX_LOCATION) " >> $@
e n d i f # BOARD_AVB_DTBO_KEY_PATH
e n d i f # BOARD_AVB_ENABLE
e n d i f # BOARD_PREBUILT_DTBOIMAGE
$( call dump-dynamic-partitions-info,$@ )
2019-08-21 22:29:30 +02:00
@# VINTF checks
i f e q ( $( PRODUCT_ENFORCE_VINTF_MANIFEST ) , t r u e )
$( hide) echo "vintf_enforce=true" >> $@
e n d i f
i f d e f O D M _ M A N I F E S T _ S K U S
$( hide) echo " vintf_odm_manifest_skus= $( ODM_MANIFEST_SKUS) " >> $@
e n d i f
2020-03-13 21:11:10 +01:00
i f d e f O D M _ M A N I F E S T _ F I L E S
$( hide) echo "vintf_include_empty_odm_sku=true" >> $@
e n d i f
i f d e f D E V I C E _ M A N I F E S T _ S K U S
$( hide) echo " vintf_vendor_manifest_skus= $( DEVICE_MANIFEST_SKUS) " >> $@
e n d i f
i f d e f D E V I C E _ M A N I F E S T _ F I L E
$( hide) echo "vintf_include_empty_vendor_sku=true" >> $@
e n d i f
2019-06-27 22:55:23 +02:00
.PHONY : misc_info
misc_info : $( INSTALLED_MISC_INFO_TARGET )
droidcore : $( INSTALLED_MISC_INFO_TARGET )
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# A zip of the directories that map to the target filesystem.
# This zip can be used to create an OTA package or filesystem image
# as a post-build step.
#
name := $( TARGET_PRODUCT)
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
name := $( name) -target_files-$( FILE_NAME_TAG)
intermediates := $( call intermediates-dir-for,PACKAGING,target_files)
BUILT_TARGET_FILES_PACKAGE := $( intermediates) /$( name) .zip
$(BUILT_TARGET_FILES_PACKAGE) : intermediates := $( intermediates )
$(BUILT_TARGET_FILES_PACKAGE) : \
2018-11-26 19:12:05 +01:00
zip_root := $( intermediates) /$( name)
2009-03-04 04:28:42 +01:00
# $(1): Directory to copy
# $(2): Location to copy it to
# The "ls -A" is to prevent "acp s/* d" from failing if s is empty.
d e f i n e p a c k a g e _ f i l e s - c o p y - r o o t
if [ -d " $( strip $( 1) ) " -a " $$ (ls -A $( 1) ) " ] ; then \
mkdir -p $( 2) && \
$( ACP) -rd $( strip $( 1) ) /* $( 2) ; \
fi
e n d e f
2015-11-30 21:22:24 +01:00
built_ota_tools :=
2015-06-23 03:35:35 +02:00
# We can't build static executables when SANITIZE_TARGET=address
2018-11-14 23:12:10 +01:00
i f e q ( , $( filter address , $ ( SANITIZE_TARGET ) ) )
2015-06-23 03:35:35 +02:00
built_ota_tools += \
2020-04-18 00:46:55 +02:00
$( call intermediates-dir-for,EXECUTABLES,updater) /updater
2015-06-23 03:35:35 +02:00
e n d i f
2009-03-04 04:28:42 +01:00
$(BUILT_TARGET_FILES_PACKAGE) : PRIVATE_OTA_TOOLS := $( built_ota_tools )
2017-03-21 23:47:37 +01:00
tool_extension := $( wildcard $( tool_extensions) /releasetools.py)
$(BUILT_TARGET_FILES_PACKAGE) : PRIVATE_TOOL_EXTENSION := $( tool_extension )
2009-09-30 18:20:32 +02:00
2016-03-08 01:51:01 +01:00
i f e q ( $( AB_OTA_UPDATER ) , t r u e )
2017-12-20 00:24:43 +01:00
updater_dep := system/update_engine/update_engine.conf
2020-04-17 19:08:10 +02:00
e n d i f
# Build OTA tools if non-A/B is allowed
i f e q ( $( TARGET_OTA_ALLOW_NON_AB ) , t r u e )
2016-05-10 09:40:38 +02:00
updater_dep := $( built_ota_tools)
2015-10-02 08:53:31 +02:00
e n d i f
2020-04-17 19:08:10 +02:00
2016-05-10 09:40:38 +02:00
$(BUILT_TARGET_FILES_PACKAGE) : $( updater_dep )
2015-10-02 08:53:31 +02:00
2015-11-11 04:21:34 +01:00
# If we are using recovery as boot, output recovery files to BOOT/.
i f e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
$(BUILT_TARGET_FILES_PACKAGE) : PRIVATE_RECOVERY_OUT := BOOT
e l s e
$(BUILT_TARGET_FILES_PACKAGE) : PRIVATE_RECOVERY_OUT := RECOVERY
e n d i f
2017-03-21 23:47:37 +01:00
i f e q ( $( AB_OTA_UPDATER ) , t r u e )
ifdef OSRELEASED_DIRECTORY
$( BUILT_TARGET_FILES_PACKAGE) : $( TARGET_OUT_OEM) /$( OSRELEASED_DIRECTORY) /product_id
$( BUILT_TARGET_FILES_PACKAGE) : $( TARGET_OUT_OEM) /$( OSRELEASED_DIRECTORY) /product_version
$( BUILT_TARGET_FILES_PACKAGE) : $( TARGET_OUT_ETC) /$( OSRELEASED_DIRECTORY) /system_version
endif
2019-07-19 00:55:30 +02:00
# Not checking in board_config.mk, since AB_OTA_PARTITIONS may be updated in Android.mk (e.g. to
# additionally include radio or bootloader partitions).
ifeq ( $( AB_OTA_PARTITIONS) ,)
$( error AB_OTA_PARTITIONS must be defined when using AB_OTA_UPDATER)
endif
e n d i f
i f n e q ( $( AB_OTA_PARTITIONS ) , )
ifneq ( $( AB_OTA_UPDATER) ,true)
$( error AB_OTA_UPDATER must be true when defining AB_OTA_PARTITIONS)
endif
2017-03-21 23:47:37 +01:00
e n d i f
2017-03-06 04:56:52 +01:00
# Run fs_config while creating the target files package
# $1: root directory
# $2: add prefix
d e f i n e f s _ c o n f i g
2018-02-07 18:49:52 +01:00
( c d $( 1) ; f i n d . - t y p e d | s e d 's,$$,/,' ; f i n d . \ ! - t y p e d ) | c u t - c 3 - | s o r t | s e d 's,^,$(2),' | $( HOST_OUT_EXECUTABLES ) / f s _ c o n f i g - C - D $( TARGET_OUT ) - S $( SELINUX_FC ) - R "$(2)"
2017-03-06 04:56:52 +01:00
e n d e f
2019-11-01 19:39:45 +01:00
# Filter out vendor from the list for AOSP targets.
# $(1): list
d e f i n e f i l t e r - o u t - m i s s i n g - v e n d o r
$( if $ ( INSTALLED_VENDORIMAGE_TARGET ) ,$ ( 1) ,$ ( filter -out vendor ,$ ( 1) ) )
e n d e f
# Information related to dynamic partitions and virtual A/B. This information
# is needed for building the super image (see dump-super-image-info) and
# building OTA packages.
2018-11-29 21:06:31 +01:00
# $(1): file
d e f i n e d u m p - d y n a m i c - p a r t i t i o n s - i n f o
$( if $( filter true,$( PRODUCT_USE_DYNAMIC_PARTITIONS) ) , \
echo "use_dynamic_partitions=true" >> $( 1) )
$( if $( filter true,$( PRODUCT_RETROFIT_DYNAMIC_PARTITIONS) ) , \
echo "dynamic_partition_retrofit=true" >> $( 1) )
2018-11-29 22:51:48 +01:00
echo " lpmake= $( notdir $( LPMAKE) ) " >> $( 1)
$( if $( filter true,$( PRODUCT_BUILD_SUPER_PARTITION) ) , $( if $( BOARD_SUPER_PARTITION_SIZE) , \
echo "build_super_partition=true" >> $( 1) ) )
2018-12-27 21:47:23 +01:00
$( if $( filter true,$( BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE) ) , \
echo "build_retrofit_dynamic_partitions_ota_package=true" >> $( 1) )
2018-11-29 21:06:31 +01:00
echo " super_metadata_device= $( BOARD_SUPER_PARTITION_METADATA_DEVICE) " >> $( 1)
$( if $( BOARD_SUPER_PARTITION_BLOCK_DEVICES) , \
echo " super_block_devices= $( BOARD_SUPER_PARTITION_BLOCK_DEVICES) " >> $( 1) )
$( foreach device,$( BOARD_SUPER_PARTITION_BLOCK_DEVICES) , \
echo " super_ $( device) _device_size= $( BOARD_SUPER_PARTITION_$( call to-upper,$( device) ) _DEVICE_SIZE) " >> $( 1) ; )
$( if $( BOARD_SUPER_PARTITION_PARTITION_LIST) , \
2019-11-01 19:39:45 +01:00
echo " dynamic_partition_list= $( call filter-out-missing-vendor, $( BOARD_SUPER_PARTITION_PARTITION_LIST) ) " >> $( 1) )
2018-11-29 21:06:31 +01:00
$( if $( BOARD_SUPER_PARTITION_GROUPS) ,
echo " super_partition_groups= $( BOARD_SUPER_PARTITION_GROUPS) " >> $( 1) )
$( foreach group,$( BOARD_SUPER_PARTITION_GROUPS) , \
echo " super_ $( group) _group_size= $( BOARD_$( call to-upper,$( group) ) _SIZE) " >> $( 1) ; \
$( if $( BOARD_$( call to-upper,$( group) ) _PARTITION_LIST) , \
2019-11-01 19:39:45 +01:00
echo " super_ $( group) _partition_list= $( call filter-out-missing-vendor, $( BOARD_$( call to-upper,$( group) ) _PARTITION_LIST) ) " >> $( 1) ; ) )
2019-04-03 01:29:59 +02:00
$( if $( filter true,$( TARGET_USERIMAGES_SPARSE_EXT_DISABLED) ) , \
echo "build_non_sparse_super_partition=true" >> $( 1) )
2019-10-16 19:53:41 +02:00
$( if $( filter true,$( TARGET_USERIMAGES_SPARSE_F2FS_DISABLED) ) , \
echo "build_non_sparse_super_partition=true" >> $( 1) )
2019-04-17 23:28:52 +02:00
$( if $( filter true,$( BOARD_SUPER_IMAGE_IN_UPDATE_PACKAGE) ) , \
echo "super_image_in_update_package=true" >> $( 1) )
2019-11-01 19:23:19 +01:00
$( if $( BOARD_SUPER_PARTITION_SIZE) , \
echo " super_partition_size= $( BOARD_SUPER_PARTITION_SIZE) " >> $( 1) )
$( if $( BOARD_SUPER_PARTITION_ALIGNMENT) , \
echo " super_partition_alignment= $( BOARD_SUPER_PARTITION_ALIGNMENT) " >> $( 1) )
$( if $( BOARD_SUPER_PARTITION_WARN_LIMIT) , \
echo " super_partition_warn_limit= $( BOARD_SUPER_PARTITION_WARN_LIMIT) " >> $( 1) )
$( if $( BOARD_SUPER_PARTITION_ERROR_LIMIT) , \
echo " super_partition_error_limit= $( BOARD_SUPER_PARTITION_ERROR_LIMIT) " >> $( 1) )
2019-11-02 01:03:57 +01:00
$( if $( filter true,$( PRODUCT_VIRTUAL_AB_OTA) ) , \
echo "virtual_ab=true" >> $( 1) )
$( if $( filter true,$( PRODUCT_VIRTUAL_AB_OTA_RETROFIT) ) , \
echo "virtual_ab_retrofit=true" >> $( 1) )
2018-11-29 21:06:31 +01:00
e n d e f
2019-04-16 19:06:13 +02:00
# By conditionally including the dependency of the target files package on the
# full system image deps, we speed up builds that do not build the system
# image.
i f d e f B U I L D I N G _ S Y S T E M _ I M A G E
$(BUILT_TARGET_FILES_PACKAGE) : $( FULL_SYSTEMIMAGE_DEPS )
e n d i f
2019-07-05 11:30:41 +02:00
i f e q ( $( BUILD_QEMU_IMAGES ) , t r u e )
MK_VBMETA_BOOT_KERNEL_CMDLINE_SH := device/generic/goldfish/tools/mk_vbmeta_boot_params.sh
$(BUILT_TARGET_FILES_PACKAGE) : $( MK_VBMETA_BOOT_KERNEL_CMDLINE_SH )
e n d i f
2009-03-04 04:28:42 +01:00
# Depending on the various images guarantees that the underlying
# directories are up-to-date.
$(BUILT_TARGET_FILES_PACKAGE) : \
2018-11-26 19:12:05 +01:00
$( INSTALLED_RAMDISK_TARGET) \
$( INSTALLED_BOOTIMAGE_TARGET) \
2019-07-10 19:49:37 +02:00
$( INSTALLED_VENDOR_BOOTIMAGE_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_RADIOIMAGE_TARGET) \
$( INSTALLED_RECOVERYIMAGE_TARGET) \
$( INSTALLED_USERDATAIMAGE_TARGET) \
$( INSTALLED_CACHEIMAGE_TARGET) \
$( INSTALLED_VENDORIMAGE_TARGET) \
$( INSTALLED_PRODUCTIMAGE_TARGET) \
2019-06-25 08:58:13 +02:00
$( INSTALLED_SYSTEM_EXTIMAGE_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_VBMETAIMAGE_TARGET) \
$( INSTALLED_ODMIMAGE_TARGET) \
$( INSTALLED_DTBOIMAGE_TARGET) \
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
$( INSTALLED_CUSTOMIMAGES_TARGET) \
2018-11-26 19:12:05 +01:00
$( INTERNAL_SYSTEMOTHERIMAGE_FILES) \
$( INSTALLED_ANDROID_INFO_TXT_TARGET) \
$( INSTALLED_KERNEL_TARGET) \
2019-05-20 20:10:24 +02:00
$( INSTALLED_DTBIMAGE_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_2NDBOOTLOADER_TARGET) \
$( BOARD_PREBUILT_DTBOIMAGE) \
2019-02-04 19:35:25 +01:00
$( BOARD_PREBUILT_RECOVERY_DTBOIMAGE) \
2018-09-23 16:10:47 +02:00
$( BOARD_RECOVERY_ACPIO) \
2019-03-28 16:45:40 +01:00
$( PRODUCT_SYSTEM_BASE_FS_PATH) \
$( PRODUCT_VENDOR_BASE_FS_PATH) \
$( PRODUCT_PRODUCT_BASE_FS_PATH) \
2019-06-25 08:58:13 +02:00
$( PRODUCT_SYSTEM_EXT_BASE_FS_PATH) \
2019-03-28 16:45:40 +01:00
$( PRODUCT_ODM_BASE_FS_PATH) \
2018-11-26 19:12:05 +01:00
$( LPMAKE) \
$( SELINUX_FC) \
2019-06-27 22:55:23 +02:00
$( INSTALLED_MISC_INFO_TARGET) \
2018-11-26 19:12:05 +01:00
$( APKCERTS_FILE) \
2019-02-18 07:21:19 +01:00
$( SOONG_APEX_KEYS_FILE) \
2018-11-26 19:12:05 +01:00
$( SOONG_ZIP) \
$( HOST_OUT_EXECUTABLES) /fs_config \
2019-06-25 20:42:12 +02:00
$( ADD_IMG_TO_TARGET_FILES) \
2019-08-07 08:21:23 +02:00
$( MAKE_RECOVERY_PATCH) \
2019-08-21 22:29:30 +02:00
$( BUILT_KERNEL_CONFIGS_FILE) \
$( BUILT_KERNEL_VERSION_FILE) \
2018-11-26 19:12:05 +01:00
| $( ACP)
2009-03-04 04:28:42 +01:00
@echo " Package target files: $@ "
2017-03-23 21:09:21 +01:00
$( call create-system-vendor-symlink)
2017-11-27 09:04:47 +01:00
$( call create-system-product-symlink)
2019-06-25 08:58:13 +02:00
$( call create-system-system_ext-symlink)
2017-11-14 16:42:30 +01:00
$( call create-vendor-odm-symlink)
2016-08-07 05:15:06 +02:00
$( hide) rm -rf $@ $@ .list $( zip_root)
2009-03-04 04:28:42 +01:00
$( hide) mkdir -p $( dir $@ ) $( zip_root)
2015-11-11 04:21:34 +01:00
i f n e q ( , $( INSTALLED_RECOVERYIMAGE_TARGET ) $( filter true ,$ ( BOARD_USES_RECOVERY_AS_BOOT ) ) )
2009-03-04 04:28:42 +01:00
@# Components of the recovery image
2015-11-11 04:21:34 +01:00
$( hide) mkdir -p $( zip_root) /$( PRIVATE_RECOVERY_OUT)
2009-03-04 04:28:42 +01:00
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_RECOVERY_ROOT_OUT) ,$( zip_root) /$( PRIVATE_RECOVERY_OUT) /RAMDISK)
2009-03-04 04:28:42 +01:00
i f d e f I N S T A L L E D _ K E R N E L _ T A R G E T
2020-03-12 00:03:07 +01:00
cp $( INSTALLED_KERNEL_TARGET) $( zip_root) /$( PRIVATE_RECOVERY_OUT) /
2009-03-04 04:28:42 +01:00
e n d i f
2020-03-17 03:13:46 +01:00
i f e q ( t r u e t r u e , $( strip $ ( BUILDING_VENDOR_BOOT_IMAGE ) ) $( strip $ ( AB_OTA_UPDATER ) ) )
2019-07-10 19:49:37 +02:00
echo " $( GENERIC_KERNEL_CMDLINE) " > $( zip_root) /$( PRIVATE_RECOVERY_OUT) /cmdline
2020-03-17 03:13:46 +01:00
e l s e # not (BUILDING_VENDOR_BOOT_IMAGE and AB_OTA_UPDATER)
2009-03-04 04:28:42 +01:00
i f d e f I N S T A L L E D _ 2 N D B O O T L O A D E R _ T A R G E T
2019-07-10 19:49:37 +02:00
cp $( INSTALLED_2NDBOOTLOADER_TARGET) $( zip_root) /$( PRIVATE_RECOVERY_OUT) /second
2009-03-04 04:28:42 +01:00
e n d i f
2018-03-21 20:15:11 +01:00
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ D T B O
2019-02-04 19:35:25 +01:00
i f d e f B O A R D _ P R E B U I L T _ R E C O V E R Y _ D T B O I M A G E
2019-07-10 19:49:37 +02:00
cp $( BOARD_PREBUILT_RECOVERY_DTBOIMAGE) $( zip_root) /$( PRIVATE_RECOVERY_OUT) /recovery_dtbo
2019-02-04 19:35:25 +01:00
e l s e
2019-07-10 19:49:37 +02:00
cp $( BOARD_PREBUILT_DTBOIMAGE) $( zip_root) /$( PRIVATE_RECOVERY_OUT) /recovery_dtbo
2019-02-04 19:35:25 +01:00
e n d i f
2019-07-10 19:49:37 +02:00
e n d i f # BOARD_INCLUDE_RECOVERY_DTBO
2018-09-23 16:10:47 +02:00
i f d e f B O A R D _ I N C L U D E _ R E C O V E R Y _ A C P I O
2019-07-10 19:49:37 +02:00
cp $( BOARD_RECOVERY_ACPIO) $( zip_root) /$( PRIVATE_RECOVERY_OUT) /recovery_acpio
2018-09-23 16:10:47 +02:00
e n d i f
2019-05-20 20:10:24 +02:00
i f d e f I N S T A L L E D _ D T B I M A G E _ T A R G E T
2019-07-10 19:49:37 +02:00
cp $( INSTALLED_DTBIMAGE_TARGET) $( zip_root) /$( PRIVATE_RECOVERY_OUT) /dtb
2019-01-23 03:08:59 +01:00
e n d i f
2016-10-06 01:57:27 +02:00
i f d e f I N T E R N A L _ K E R N E L _ C M D L I N E
2019-07-10 19:49:37 +02:00
echo " $( INTERNAL_KERNEL_CMDLINE) " > $( zip_root) /$( PRIVATE_RECOVERY_OUT) /cmdline
2009-06-17 18:07:09 +02:00
e n d i f
i f d e f B O A R D _ K E R N E L _ B A S E
2019-07-10 19:49:37 +02:00
echo " $( BOARD_KERNEL_BASE) " > $( zip_root) /$( PRIVATE_RECOVERY_OUT) /base
2010-08-25 23:29:34 +02:00
e n d i f
i f d e f B O A R D _ K E R N E L _ P A G E S I Z E
2019-07-10 19:49:37 +02:00
echo " $( BOARD_KERNEL_PAGESIZE) " > $( zip_root) /$( PRIVATE_RECOVERY_OUT) /pagesize
2009-03-04 04:28:42 +01:00
e n d i f
2019-07-10 19:49:37 +02:00
e n d i f # INSTALLED_VENDOR_BOOTIMAGE_TARGET not defined
2015-11-11 04:21:34 +01:00
e n d i f # INSTALLED_RECOVERYIMAGE_TARGET defined or BOARD_USES_RECOVERY_AS_BOOT is true
2009-03-04 04:28:42 +01:00
@# Components of the boot image
$( hide) mkdir -p $( zip_root) /BOOT
2015-07-22 03:01:20 +02:00
$( hide) mkdir -p $( zip_root) /ROOT
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_ROOT_OUT) ,$( zip_root) /ROOT)
2018-11-06 23:23:44 +01:00
@# If we are using recovery as boot, this is already done when processing recovery.
i f n e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
2018-08-09 23:26:00 +02:00
i f n e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
2009-03-04 04:28:42 +01:00
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_RAMDISK_OUT) ,$( zip_root) /BOOT/RAMDISK)
2015-07-22 03:01:20 +02:00
e n d i f
2009-03-04 04:28:42 +01:00
i f d e f I N S T A L L E D _ K E R N E L _ T A R G E T
2017-03-21 23:47:37 +01:00
$( hide) cp $( INSTALLED_KERNEL_TARGET) $( zip_root) /BOOT/kernel
2009-03-04 04:28:42 +01:00
e n d i f
2019-07-10 19:49:37 +02:00
i f n d e f I N S T A L L E D _ V E N D O R _ B O O T I M A G E _ T A R G E T
2009-03-04 04:28:42 +01:00
i f d e f I N S T A L L E D _ 2 N D B O O T L O A D E R _ T A R G E T
2019-07-10 19:49:37 +02:00
cp $( INSTALLED_2NDBOOTLOADER_TARGET) $( zip_root) /BOOT/second
2009-03-04 04:28:42 +01:00
e n d i f
2019-01-23 03:08:59 +01:00
i f d e f I N S T A L L E D _ D T B I M A G E _ T A R G E T
2019-07-10 19:49:37 +02:00
cp $( INSTALLED_DTBIMAGE_TARGET) $( zip_root) /BOOT/dtb
2009-03-04 04:28:42 +01:00
e n d i f
2019-07-10 19:49:37 +02:00
echo " $( INTERNAL_KERNEL_CMDLINE) " > $( zip_root) /BOOT/cmdline
2009-06-17 18:07:09 +02:00
i f d e f B O A R D _ K E R N E L _ B A S E
2019-07-10 19:49:37 +02:00
echo " $( BOARD_KERNEL_BASE) " > $( zip_root) /BOOT/base
2010-08-25 23:29:34 +02:00
e n d i f
i f d e f B O A R D _ K E R N E L _ P A G E S I Z E
2019-07-10 19:49:37 +02:00
echo " $( BOARD_KERNEL_PAGESIZE) " > $( zip_root) /BOOT/pagesize
2009-06-17 18:07:09 +02:00
e n d i f
2019-07-10 19:49:37 +02:00
e l s e # INSTALLED_VENDOR_BOOTIMAGE_TARGET defined
echo " $( GENERIC_KERNEL_CMDLINE) " > $( zip_root) /BOOT/cmdline
e n d i f # INSTALLED_VENDOR_BOOTIMAGE_TARGET defined
e n d i f # BOARD_USES_RECOVERY_AS_BOOT not true
2009-06-20 02:12:18 +02:00
$( hide) $( foreach t,$( INSTALLED_RADIOIMAGE_TARGET) ,\
mkdir -p $( zip_root) /RADIO; \
2017-03-21 23:47:37 +01:00
cp $( t) $( zip_root) /RADIO/$( notdir $( t) ) ; )
2019-07-10 19:49:37 +02:00
i f d e f I N S T A L L E D _ V E N D O R _ B O O T I M A G E _ T A R G E T
mkdir -p $( zip_root) /VENDOR_BOOT
$( call package_files-copy-root, \
$( TARGET_VENDOR_RAMDISK_OUT) ,$( zip_root) /VENDOR_BOOT/RAMDISK)
i f d e f I N S T A L L E D _ D T B I M A G E _ T A R G E T
cp $( INSTALLED_DTBIMAGE_TARGET) $( zip_root) /VENDOR_BOOT/dtb
e n d i f
i f d e f B O A R D _ K E R N E L _ B A S E
echo " $( BOARD_KERNEL_BASE) " > $( zip_root) /VENDOR_BOOT/base
e n d i f
i f d e f B O A R D _ K E R N E L _ P A G E S I Z E
echo " $( BOARD_KERNEL_PAGESIZE) " > $( zip_root) /VENDOR_BOOT/pagesize
e n d i f
echo " $( INTERNAL_KERNEL_CMDLINE) " > $( zip_root) /VENDOR_BOOT/vendor_cmdline
e n d i f # INSTALLED_VENDOR_BOOTIMAGE_TARGET
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ S Y S T E M _ I M A G E
2009-03-04 04:28:42 +01:00
@# Contents of the system image
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( SYSTEMIMAGE_SOURCE_DIR) ,$( zip_root) /SYSTEM)
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f
i f d e f B U I L D I N G _ U S E R D A T A _ I M A G E
2009-03-04 04:28:42 +01:00
@# Contents of the data image
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_DATA) ,$( zip_root) /DATA)
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f
i f d e f B U I L D I N G _ V E N D O R _ I M A G E
2013-03-20 19:02:05 +01:00
@# Contents of the vendor image
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_VENDOR) ,$( zip_root) /VENDOR)
2016-06-16 23:47:10 +02:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ P R O D U C T _ I M A G E
2017-11-27 09:04:47 +01:00
@# Contents of the product image
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_PRODUCT) ,$( zip_root) /PRODUCT)
2017-11-27 09:04:47 +01:00
e n d i f
2019-06-25 08:58:13 +02:00
i f d e f B U I L D I N G _ S Y S T E M _ E X T _ I M A G E
@# Contents of the system_ext image
2018-05-29 14:09:01 +02:00
$( hide) $( call package_files-copy-root, \
2019-06-25 08:58:13 +02:00
$( TARGET_OUT_SYSTEM_EXT) ,$( zip_root) /SYSTEM_EXT)
2018-05-29 14:09:01 +02:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ O D M _ I M A G E
2017-11-14 16:42:30 +01:00
@# Contents of the odm image
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_ODM) ,$( zip_root) /ODM)
2017-11-14 16:42:30 +01:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ S Y S T E M _ O T H E R _ I M A G E
2016-06-16 23:47:10 +02:00
@# Contents of the system_other image
$( hide) $( call package_files-copy-root, \
2018-11-26 19:12:05 +01:00
$( TARGET_OUT_SYSTEM_OTHER) ,$( zip_root) /SYSTEM_OTHER)
2013-03-20 19:02:05 +01:00
e n d i f
2009-03-04 04:28:42 +01:00
@# Extra contents of the OTA package
2015-10-02 08:53:31 +02:00
$( hide) mkdir -p $( zip_root) /OTA
2017-03-21 23:47:37 +01:00
$( hide) cp $( INSTALLED_ANDROID_INFO_TXT_TARGET) $( zip_root) /OTA/
2020-04-17 19:08:10 +02:00
i f e q ( $( TARGET_OTA_ALLOW_NON_AB ) , t r u e )
2015-12-07 19:45:19 +01:00
i f n e q ( $( built_ota_tools ) , )
2015-10-02 08:53:31 +02:00
$( hide) mkdir -p $( zip_root) /OTA/bin
2017-03-21 23:47:37 +01:00
$( hide) cp $( PRIVATE_OTA_TOOLS) $( zip_root) /OTA/bin/
2015-12-07 19:45:19 +01:00
e n d i f
2015-10-02 08:53:31 +02:00
e n d i f
2009-06-15 23:30:14 +02:00
@# Files that do not end up in any images, but are necessary to
2009-03-04 04:28:42 +01:00
@# build them.
$( hide) mkdir -p $( zip_root) /META
2017-03-21 23:47:37 +01:00
$( hide) cp $( APKCERTS_FILE) $( zip_root) /META/apkcerts.txt
2019-02-18 07:21:19 +01:00
$( hide) cp $( SOONG_APEX_KEYS_FILE) $( zip_root) /META/apexkeys.txt
2017-03-21 23:47:37 +01:00
i f n e q ( $( tool_extension ) , )
$( hide) cp $( PRIVATE_TOOL_EXTENSION) $( zip_root) /META/
e n d i f
2015-03-25 03:07:40 +01:00
$( hide) echo " $( PRODUCT_OTA_PUBLIC_KEYS) " > $( zip_root) /META/otakeys.txt
2017-03-21 23:47:37 +01:00
$( hide) cp $( SELINUX_FC) $( zip_root) /META/file_contexts.bin
2019-06-27 22:55:23 +02:00
$( hide) cp $( INSTALLED_MISC_INFO_TARGET) $( zip_root) /META/misc_info.txt
2019-03-28 16:45:40 +01:00
i f n e q ( $( PRODUCT_SYSTEM_BASE_FS_PATH ) , )
$( hide) cp $( PRODUCT_SYSTEM_BASE_FS_PATH) \
$( zip_root) /META/$( notdir $( PRODUCT_SYSTEM_BASE_FS_PATH) )
2016-03-30 00:12:37 +02:00
e n d i f
2019-03-28 16:45:40 +01:00
i f n e q ( $( PRODUCT_VENDOR_BASE_FS_PATH ) , )
$( hide) cp $( PRODUCT_VENDOR_BASE_FS_PATH) \
$( zip_root) /META/$( notdir $( PRODUCT_VENDOR_BASE_FS_PATH) )
2016-03-30 00:12:37 +02:00
e n d i f
2019-03-28 16:45:40 +01:00
i f n e q ( $( PRODUCT_PRODUCT_BASE_FS_PATH ) , )
$( hide) cp $( PRODUCT_PRODUCT_BASE_FS_PATH) \
$( zip_root) /META/$( notdir $( PRODUCT_PRODUCT_BASE_FS_PATH) )
2017-11-27 09:04:47 +01:00
e n d i f
2019-06-25 08:58:13 +02:00
i f n e q ( $( PRODUCT_SYSTEM_EXT_BASE_FS_PATH ) , )
$( hide) cp $( PRODUCT_SYSTEM_EXT_BASE_FS_PATH) \
$( zip_root) /META/$( notdir $( PRODUCT_SYSTEM_EXT_BASE_FS_PATH) )
2018-05-29 14:09:01 +02:00
e n d i f
2019-03-28 16:45:40 +01:00
i f n e q ( $( PRODUCT_ODM_BASE_FS_PATH ) , )
$( hide) cp $( PRODUCT_ODM_BASE_FS_PATH) \
$( zip_root) /META/$( notdir $( PRODUCT_ODM_BASE_FS_PATH) )
2017-11-14 16:42:30 +01:00
e n d i f
2020-04-17 19:08:10 +02:00
i f e q ( $( TARGET_OTA_ALLOW_NON_AB ) , t r u e )
2015-08-19 03:03:56 +02:00
i f n e q ( $( INSTALLED_RECOVERYIMAGE_TARGET ) , )
2019-06-24 21:39:10 +02:00
$( hide) PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH MKBOOTIMG = $( MKBOOTIMG) \
2019-08-07 08:21:23 +02:00
$( MAKE_RECOVERY_PATCH) $( zip_root) $( zip_root)
2015-09-25 03:12:33 +02:00
e n d i f
2019-11-07 20:27:02 +01:00
e n d i f
2015-09-30 04:05:37 +02:00
i f e q ( $( AB_OTA_UPDATER ) , t r u e )
@# When using the A/B updater, include the updater config files in the zip.
2017-03-21 23:47:37 +01:00
$( hide) cp $( TOPDIR) system/update_engine/update_engine.conf $( zip_root) /META/update_engine_config.txt
2015-10-23 03:15:27 +02:00
$( hide) for part in $( AB_OTA_PARTITIONS) ; do \
2015-10-02 02:38:09 +02:00
echo " $$ {part} " >> $( zip_root) /META/ab_partitions.txt; \
done
2015-11-12 22:53:25 +01:00
$( hide) for conf in $( AB_OTA_POSTINSTALL_CONFIG) ; do \
echo " $$ {conf} " >> $( zip_root) /META/postinstall_config.txt; \
done
2015-10-09 00:32:40 +02:00
i f d e f O S R E L E A S E D _ D I R E C T O R Y
2017-03-21 23:47:37 +01:00
$( hide) cp $( TARGET_OUT_OEM) /$( OSRELEASED_DIRECTORY) /product_id $( zip_root) /META/product_id.txt
$( hide) cp $( TARGET_OUT_OEM) /$( OSRELEASED_DIRECTORY) /product_version $( zip_root) /META/product_version.txt
$( hide) cp $( TARGET_OUT_ETC) /$( OSRELEASED_DIRECTORY) /system_version $( zip_root) /META/system_version.txt
2015-10-09 00:32:40 +02:00
e n d i f
2015-09-30 04:05:37 +02:00
e n d i f
2015-09-25 03:12:33 +02:00
i f e q ( $( BREAKPAD_GENERATE_SYMBOLS ) , t r u e )
2015-09-30 04:05:37 +02:00
@# If breakpad symbols have been generated, add them to the zip.
2019-05-29 00:36:47 +02:00
$( hide) cp -R $( TARGET_OUT_BREAKPAD) $( zip_root) /BREAKPAD
2016-06-17 23:07:37 +02:00
e n d i f
i f d e f B O A R D _ P R E B U I L T _ V E N D O R I M A G E
$( hide) mkdir -p $( zip_root) /IMAGES
$( hide) cp $( INSTALLED_VENDORIMAGE_TARGET) $( zip_root) /IMAGES/
2017-05-13 02:50:46 +02:00
e n d i f
2017-11-27 09:04:47 +01:00
i f d e f B O A R D _ P R E B U I L T _ P R O D U C T I M A G E
$( hide) mkdir -p $( zip_root) /IMAGES
$( hide) cp $( INSTALLED_PRODUCTIMAGE_TARGET) $( zip_root) /IMAGES/
e n d i f
2019-06-25 08:58:13 +02:00
i f d e f B O A R D _ P R E B U I L T _ S Y S T E M _ E X T I M A G E
2018-05-29 14:09:01 +02:00
$( hide) mkdir -p $( zip_root) /IMAGES
2019-06-25 08:58:13 +02:00
$( hide) cp $( INSTALLED_SYSTEM_EXTIMAGE_TARGET) $( zip_root) /IMAGES/
2018-05-29 14:09:01 +02:00
e n d i f
2017-07-18 19:05:13 +02:00
i f d e f B O A R D _ P R E B U I L T _ B O O T I M A G E
$( hide) mkdir -p $( zip_root) /IMAGES
$( hide) cp $( INSTALLED_BOOTIMAGE_TARGET) $( zip_root) /IMAGES/
e n d i f
2017-11-14 16:42:30 +01:00
i f d e f B O A R D _ P R E B U I L T _ O D M I M A G E
$( hide) mkdir -p $( zip_root) /IMAGES
$( hide) cp $( INSTALLED_ODMIMAGE_TARGET) $( zip_root) /IMAGES/
e n d i f
2017-05-13 02:50:46 +02:00
i f d e f B O A R D _ P R E B U I L T _ D T B O I M A G E
2017-05-31 06:46:33 +02:00
$( hide) mkdir -p $( zip_root) /PREBUILT_IMAGES
$( hide) cp $( INSTALLED_DTBOIMAGE_TARGET) $( zip_root) /PREBUILT_IMAGES/
2017-05-26 12:30:04 +02:00
e n d i f # BOARD_PREBUILT_DTBOIMAGE
Add options to sign the prebuilt custom images.
The custom images are any images owned by OEMs and SoCs, oem images
mounted on /oem is an example. The oem images can be used to customize
devices for different carriers, like wallpaper, ringtones, and
carrier-specific apks. OEMs can generate multiple oem images, like
oem.img, oem-carrier1.img and oem-carrier2.img and flash different oem
images for different carriers. The oem images are only one case, OEMs
and SoCs can add more custom images and mount them to custom partitions.
This change enables custom images to be vbmeta.img chained partitions.
The following configuration in BoardConfig.mk is an exmaple. It has two
custom partitions: oem and test. They will be signed by different keys.
And they will be chained by vbmeta.img. The custom images here are
prebuilts, which can be built by `make custom_images` separately.
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST should include all custom images
to apply AVB signing. And to every custom partition, one image whose
name is partition name must be added in its
BOARD_AVB_<CUSTOM_PARTITION>_IMAGE_LIST.
BOARD_CUSTOMIMAGES_PARTITION_LIST := oem test
BOARD_AVB_OEM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_OEM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_OEM_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_OEM_ROLLBACK_INDEX_LOCATION := 1
BOARD_AVB_OEM_PARTITION_SIZE := 5242880
BOARD_AVB_OEM_IMAGE_LIST := \
device/xxxx/yyyy/oem/oem.img \
device/xxxx/yyyy/oem/oem1.img
BOARD_AVB_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_TEST_ALGORITHM := SHA256_RSA2048
BOARD_AVB_TEST_ADD_HASHTREE_FOOTER_ARGS :=
BOARD_AVB_TEST_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_TEST_PARTITION_SIZE := 10485760
BOARD_AVB_TEST_IMAGE_LIST := \
device/xxxx/yyyy/test/test.img \
device/xxxx/yyyy/test/test1.img
To resign the custom images in the target zip file, the
avb_extra_custom_image_key, avb_extra_custom_image_algorithms and
avb_extra_custom_image_extra_args options are added to the
sign_target_files_apks tool too. The following test cases list some
examples about how to use them.
BUG: 154171021
Test: 1) "atest --host releasetools_test releasetools_py3_test -c"
2) Build images by 'make dist', sign and validate target files.
a) Test on dist w/ chained vbmeta_system and ome custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the oem images and vbmeta images in OUT and target zips by
avbtool.
b) Test on dist w/ chained vbmeta_system and oem and test custom images
sign_target_files_apks -d certs \
--avb_extra_custom_image_key oem=oem_rsa4096.pem \
--avb_extra_custom_image_algorithm oem=SHA256_RSA4096 \
--avb_extra_custom_image_extra_args oem=--do_not_generate_fec \
--avb_extra_custom_image_key test=test_rsa4096.pem \
--avb_extra_custom_image_algorithm test=SHA256_RSA4096 \
xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Verify the oem, test images and vbmeta images in OUT and target zips
by avbtool.
c) Test on dist w/o chained partition.
sign_target_files_apks -d certs xxx-target_xxx.zip signed.zip
validate_target_files.py signed.zip
Flash image and boot up.
Verify the vbmeta images in OUT and target zips by avbtool.
Change-Id: Ifccfee5e8909697eef6ccda0cc352fa16a9f6db6
2020-04-28 03:36:36 +02:00
i f n e q ( $( strip $ ( BOARD_CUSTOMIMAGES_PARTITION_LIST ) ) , )
$( hide) mkdir -p $( zip_root) /PREBUILT_IMAGES
$( hide) $( foreach partition,$( BOARD_CUSTOMIMAGES_PARTITION_LIST) , \
$( foreach image,$( BOARD_AVB_$( call to-upper,$( partition) ) _IMAGE_LIST) ,cp $( image) $( zip_root) /PREBUILT_IMAGES/; ) )
e n d i f # BOARD_CUSTOMIMAGES_PARTITION_LIST
2017-06-17 00:30:23 +02:00
@# The radio images in BOARD_PACK_RADIOIMAGES will be additionally copied from RADIO/ into
@# IMAGES/, which then will be added into <product>-img.zip. Such images must be listed in
@# INSTALLED_RADIOIMAGE_TARGET.
$( hide) $( foreach part,$( BOARD_PACK_RADIOIMAGES) , \
echo $( part) >> $( zip_root) /META/pack_radioimages.txt; )
2014-06-17 00:16:31 +02:00
@# Run fs_config on all the system, vendor, boot ramdisk,
@# and recovery ramdisk files in the zip, and save the output
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ S Y S T E M _ I M A G E
2017-03-06 04:56:52 +01:00
$( hide) $( call fs_config,$( zip_root) /SYSTEM,system/) > $( zip_root) /META/filesystem_config.txt
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
e n d i f
i f d e f B U I L D I N G _ V E N D O R _ I M A G E
2017-03-06 04:56:52 +01:00
$( hide) $( call fs_config,$( zip_root) /VENDOR,vendor/) > $( zip_root) /META/vendor_filesystem_config.txt
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ P R O D U C T _ I M A G E
2017-11-27 09:04:47 +01:00
$( hide) $( call fs_config,$( zip_root) /PRODUCT,product/) > $( zip_root) /META/product_filesystem_config.txt
e n d i f
2019-06-25 08:58:13 +02:00
i f d e f B U I L D I N G _ S Y S T E M _ E X T _ I M A G E
$( hide) $( call fs_config,$( zip_root) /SYSTEM_EXT,system_ext/) > $( zip_root) /META/system_ext_filesystem_config.txt
2018-05-29 14:09:01 +02:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ O D M _ I M A G E
2017-11-14 16:42:30 +01:00
$( hide) $( call fs_config,$( zip_root) /ODM,odm/) > $( zip_root) /META/odm_filesystem_config.txt
e n d i f
2018-08-09 23:26:00 +02:00
@# ROOT always contains the files for the root under normal boot.
2017-03-06 04:56:52 +01:00
$( hide) $( call fs_config,$( zip_root) /ROOT,) > $( zip_root) /META/root_filesystem_config.txt
2018-03-01 06:20:08 +01:00
i f e q ( $( BOARD_USES_RECOVERY_AS_BOOT ) , t r u e )
2018-09-20 20:04:37 +02:00
@# BOOT/RAMDISK exists and contains the ramdisk for recovery if using BOARD_USES_RECOVERY_AS_BOOT.
2018-03-01 06:20:08 +01:00
$( hide) $( call fs_config,$( zip_root) /BOOT/RAMDISK,) > $( zip_root) /META/boot_filesystem_config.txt
2015-07-22 03:01:20 +02:00
e n d i f
2019-07-10 19:49:37 +02:00
i f n e q ( $( INSTALLED_VENDOR_BOOTIMAGE_TARGET ) , )
$( call fs_config,$( zip_root) /VENDOR_BOOT/RAMDISK,) > $( zip_root) /META/vendor_boot_filesystem_config.txt
e n d i f
2018-09-20 20:04:37 +02:00
i f n e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
@# BOOT/RAMDISK also exists and contains the first stage ramdisk if not using BOARD_BUILD_SYSTEM_ROOT_IMAGE.
2017-03-06 04:56:52 +01:00
$( hide) $( call fs_config,$( zip_root) /BOOT/RAMDISK,) > $( zip_root) /META/boot_filesystem_config.txt
2018-03-01 06:20:08 +01:00
e n d i f
2015-10-28 03:25:18 +01:00
i f n e q ( $( INSTALLED_RECOVERYIMAGE_TARGET ) , )
2017-03-06 04:56:52 +01:00
$( hide) $( call fs_config,$( zip_root) /RECOVERY/RAMDISK,) > $( zip_root) /META/recovery_filesystem_config.txt
2016-06-16 23:47:10 +02:00
e n d i f
Add PRODUCT_BUILD_*_IMAGE, BUILDING_*_IMAGE to control building of images
These centralize the decisions on whether to build certain images or
not, and allow the product definition to override that choice.
There are a few use cases here:
* For GSI-like cases, we only want to build the system image. This
didn't really change, but it's somewhat simpler to configure, and
easier to understand the build logic.
* On the opposite side, when you're planning on using a GSI, the device
specific build can only build the vendor images (or some other set).
* Some cases (Fuchsia, etc) don't want to build any images, as they'll
be distributing the build artifacts in their own packaging.
I suspect in the future, TARGET_BUILD_APPS may be able to be refactored
into the third use case.
Test: treehugger
Test: Create a product definition that includes nothing, try to build it.
Test: compare build-aosp_crosshatch.ninja and build-crosshatch.ninja before/after
Change-Id: I685ab841be3718d3dd7052c28ccd764bb6f1991a
2019-01-16 21:42:05 +01:00
i f d e f B U I L D I N G _ S Y S T E M _ O T H E R _ I M A G E
2017-03-06 04:56:52 +01:00
$( hide) $( call fs_config,$( zip_root) /SYSTEM_OTHER,system/) > $( zip_root) /META/system_other_filesystem_config.txt
2015-10-28 03:25:18 +01:00
e n d i f
2017-04-04 22:01:18 +02:00
@# Metadata for compatibility verification.
2019-08-21 22:29:30 +02:00
i f d e f B U I L T _ K E R N E L _ C O N F I G S _ F I L E
$( hide) cp $( BUILT_KERNEL_CONFIGS_FILE) $( zip_root) /META/kernel_configs.txt
e n d i f
i f d e f B U I L T _ K E R N E L _ V E R S I O N _ F I L E
$( hide) cp $( BUILT_KERNEL_VERSION_FILE) $( zip_root) /META/kernel_version.txt
e n d i f
2019-11-02 01:03:57 +01:00
rm -rf $( zip_root) /META/dynamic_partitions_info.txt
i f e q ( t r u e , $( PRODUCT_USE_DYNAMIC_PARTITIONS ) )
$( call dump-dynamic-partitions-info, $( zip_root) /META/dynamic_partitions_info.txt)
e n d i f
2019-10-08 07:46:02 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH MKBOOTIMG = $( MKBOOTIMG) \
$( ADD_IMG_TO_TARGET_FILES) -a -v -p $( HOST_OUT) $( zip_root)
2019-07-05 11:30:41 +02:00
i f e q ( $( BUILD_QEMU_IMAGES ) , t r u e )
$( hide) AVBTOOL = $( AVBTOOL) $( MK_VBMETA_BOOT_KERNEL_CMDLINE_SH) $( zip_root) /IMAGES/vbmeta.img \
$( zip_root) /IMAGES/system.img $( zip_root) /IMAGES/VerifiedBootParams.textproto
e n d i f
2017-03-06 04:56:52 +01:00
@# Zip everything up, preserving symlinks and placing META/ files first to
@# help early validation of the .zip file while uploading it.
$( hide) find $( zip_root) /META | sort >$@ .list
2017-03-21 02:22:43 +01:00
$( hide) find $( zip_root) -path $( zip_root) /META -prune -o -print | sort >>$@ .list
2017-03-06 04:56:52 +01:00
$( hide) $( SOONG_ZIP) -d -o $@ -C $( zip_root) -l $@ .list
2010-03-16 01:52:32 +01:00
2013-03-20 19:02:05 +01:00
.PHONY : target -files -package
2009-03-04 04:28:42 +01:00
target-files-package : $( BUILT_TARGET_FILES_PACKAGE )
2014-04-15 02:25:43 +02:00
i f n e q ( $( filter $ ( MAKECMDGOALS ) ,target -files -package ) , )
$( call dist -for -goals , target -files -package , $ ( BUILT_TARGET_FILES_PACKAGE ) )
e n d i f
2009-06-16 03:56:51 +02:00
2016-10-14 22:23:06 +02:00
# -----------------------------------------------------------------
# NDK Sysroot Package
NDK_SYSROOT_TARGET := $( PRODUCT_OUT) /ndk_sysroot.tar.bz2
2018-06-18 06:54:21 +02:00
$(NDK_SYSROOT_TARGET) : $( SOONG_OUT_DIR ) /ndk .timestamp
2016-10-14 22:23:06 +02:00
@echo Package NDK sysroot...
$( hide) tar cjf $@ -C $( SOONG_OUT_DIR) ndk
$( call dist -for -goals ,sdk ,$ ( NDK_SYSROOT_TARGET ) )
2015-08-11 20:24:19 +02:00
i f e q ( $( build_ota_package ) , t r u e )
2010-10-20 23:01:09 +02:00
# -----------------------------------------------------------------
# OTA update package
2018-11-09 02:44:12 +01:00
# $(1): output file
# $(2): additional args
d e f i n e b u i l d - o t a - p a c k a g e - t a r g e t
2019-06-25 21:17:08 +02:00
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$$ PATH \
2019-08-05 21:05:45 +02:00
$( OTA_FROM_TARGET_FILES) \
--verbose \
--extracted_input_target_files $( patsubst %.zip,%,$( BUILT_TARGET_FILES_PACKAGE) ) \
--path $( HOST_OUT) \
$( if $( OEM_OTA_CONFIG) , --oem_settings $( OEM_OTA_CONFIG) ) \
$( 2) \
$( BUILT_TARGET_FILES_PACKAGE) $( 1)
2018-11-09 02:44:12 +01:00
e n d e f
2009-06-15 23:30:14 +02:00
name := $( TARGET_PRODUCT)
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
name := $( name) -ota-$( FILE_NAME_TAG)
INTERNAL_OTA_PACKAGE_TARGET := $( PRODUCT_OUT) /$( name) .zip
2019-02-19 23:52:33 +01:00
INTERNAL_OTA_METADATA := $( PRODUCT_OUT) /ota_metadata
2009-06-15 23:30:14 +02:00
$(INTERNAL_OTA_PACKAGE_TARGET) : KEY_CERT_PAIR := $( DEFAULT_KEY_CERT_PAIR )
2019-02-19 23:52:33 +01:00
$(INTERNAL_OTA_PACKAGE_TARGET) : .KATI_IMPLICIT_OUTPUTS := $( INTERNAL_OTA_METADATA )
2019-08-05 21:05:45 +02:00
$(INTERNAL_OTA_PACKAGE_TARGET) : $( BUILT_TARGET_FILES_PACKAGE ) $( OTA_FROM_TARGET_FILES )
2009-06-15 23:30:14 +02:00
@echo " Package OTA: $@ "
2019-02-19 23:52:33 +01:00
$( call build-ota-package-target,$@ ,-k $( KEY_CERT_PAIR) --output_metadata_path $( INTERNAL_OTA_METADATA) )
2009-06-15 23:30:14 +02:00
.PHONY : otapackage
otapackage : $( INTERNAL_OTA_PACKAGE_TARGET )
2018-12-27 21:47:23 +01:00
i f e q ( $( BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE ) , t r u e )
2018-11-09 02:44:12 +01:00
name := $( TARGET_PRODUCT)
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
name := $( name) -ota-retrofit-$( FILE_NAME_TAG)
INTERNAL_OTA_RETROFIT_DYNAMIC_PARTITIONS_PACKAGE_TARGET := $( PRODUCT_OUT) /$( name) .zip
$(INTERNAL_OTA_RETROFIT_DYNAMIC_PARTITIONS_PACKAGE_TARGET) : KEY_CERT_PAIR := $( DEFAULT_KEY_CERT_PAIR )
2019-08-05 21:05:45 +02:00
$(INTERNAL_OTA_RETROFIT_DYNAMIC_PARTITIONS_PACKAGE_TARGET) : \
$( BUILT_TARGET_FILES_PACKAGE) \
$( OTA_FROM_TARGET_FILES)
2018-11-09 02:44:12 +01:00
@echo " Package OTA (retrofit dynamic partitions): $@ "
$( call build-ota-package-target,$@ ,-k $( KEY_CERT_PAIR) --retrofit_dynamic_partitions)
.PHONY : otardppackage
otapackage otardppackage : $( INTERNAL_OTA_RETROFIT_DYNAMIC_PARTITIONS_PACKAGE_TARGET )
2018-12-27 21:47:23 +01:00
e n d i f # BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE
2018-11-09 02:44:12 +01:00
2015-08-11 20:24:19 +02:00
e n d i f # build_ota_package
2014-06-03 23:07:27 +02:00
2018-07-23 21:20:15 +02:00
# -----------------------------------------------------------------
# A zip of the appcompat directory containing logs
APPCOMPAT_ZIP := $( PRODUCT_OUT) /appcompat.zip
# For apps_only build we'll establish the dependency later in build/make/core/main.mk.
2020-06-04 16:16:39 +02:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2018-08-21 06:09:07 +02:00
$(APPCOMPAT_ZIP) : $( INSTALLED_SYSTEMIMAGE_TARGET ) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_RAMDISK_TARGET) \
$( INSTALLED_BOOTIMAGE_TARGET) \
$( INSTALLED_USERDATAIMAGE_TARGET) \
$( INSTALLED_VENDORIMAGE_TARGET) \
$( INSTALLED_PRODUCTIMAGE_TARGET) \
2019-06-25 08:58:13 +02:00
$( INSTALLED_SYSTEM_EXTIMAGE_TARGET)
2018-07-23 21:20:15 +02:00
e n d i f
$(APPCOMPAT_ZIP) : PRIVATE_LIST_FILE := $( call intermediates -dir -for ,PACKAGING ,appcompat ) /filelist
$(APPCOMPAT_ZIP) : $( SOONG_ZIP )
@echo " appcompat logs: $@ "
$( hide) rm -rf $@ $( PRIVATE_LIST_FILE)
$( hide) mkdir -p $( dir $@ ) $( PRODUCT_OUT) /appcompat $( dir $( PRIVATE_LIST_FILE) )
$( hide) find $( PRODUCT_OUT) /appcompat | sort >$( PRIVATE_LIST_FILE)
$( hide) $( SOONG_ZIP) -d -o $@ -C $( PRODUCT_OUT) /appcompat -l $( PRIVATE_LIST_FILE)
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# A zip of the symbols directory. Keep the full paths to make it
# more obvious where these files came from.
#
name := $( TARGET_PRODUCT)
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
name := $( name) -symbols-$( FILE_NAME_TAG)
SYMBOLS_ZIP := $( PRODUCT_OUT) /$( name) .zip
2017-10-20 20:37:33 +02:00
# For apps_only build we'll establish the dependency later in build/make/core/main.mk.
2020-06-04 16:16:39 +02:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2018-08-21 06:09:07 +02:00
$(SYMBOLS_ZIP) : $( INSTALLED_SYSTEMIMAGE_TARGET ) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_RAMDISK_TARGET) \
$( INSTALLED_BOOTIMAGE_TARGET) \
$( INSTALLED_USERDATAIMAGE_TARGET) \
$( INSTALLED_VENDORIMAGE_TARGET) \
$( INSTALLED_PRODUCTIMAGE_TARGET) \
2019-06-25 08:58:13 +02:00
$( INSTALLED_SYSTEM_EXTIMAGE_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_ODMIMAGE_TARGET) \
$( updater_dep)
2014-10-24 20:36:59 +02:00
e n d i f
2016-08-07 05:15:06 +02:00
$(SYMBOLS_ZIP) : PRIVATE_LIST_FILE := $( call intermediates -dir -for ,PACKAGING ,symbols ) /filelist
$(SYMBOLS_ZIP) : $( SOONG_ZIP )
2009-03-04 04:28:42 +01:00
@echo " Package symbols: $@ "
2016-08-07 05:15:06 +02:00
$( hide) rm -rf $@ $( PRIVATE_LIST_FILE)
$( hide) mkdir -p $( dir $@ ) $( TARGET_OUT_UNSTRIPPED) $( dir $( PRIVATE_LIST_FILE) )
2019-03-21 07:19:16 +01:00
$( hide) find -L $( TARGET_OUT_UNSTRIPPED) -type f | sort >$( PRIVATE_LIST_FILE)
2019-05-07 20:47:13 +02:00
$( hide) $( SOONG_ZIP) --ignore_missing_files -d -o $@ -C $( OUT_DIR) /.. -l $( PRIVATE_LIST_FILE)
2016-09-12 22:56:50 +02:00
# -----------------------------------------------------------------
# A zip of the coverage directory.
#
2019-05-01 00:14:44 +02:00
name := gcov-report-files-all
2016-09-12 22:56:50 +02:00
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
COVERAGE_ZIP := $( PRODUCT_OUT) /$( name) .zip
2020-06-04 16:16:39 +02:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2018-08-21 06:09:07 +02:00
$(COVERAGE_ZIP) : $( INSTALLED_SYSTEMIMAGE_TARGET ) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_RAMDISK_TARGET) \
$( INSTALLED_BOOTIMAGE_TARGET) \
$( INSTALLED_USERDATAIMAGE_TARGET) \
$( INSTALLED_VENDORIMAGE_TARGET) \
$( INSTALLED_PRODUCTIMAGE_TARGET) \
2019-06-25 08:58:13 +02:00
$( INSTALLED_SYSTEM_EXTIMAGE_TARGET) \
2018-11-26 19:12:05 +01:00
$( INSTALLED_ODMIMAGE_TARGET)
2016-09-12 22:56:50 +02:00
e n d i f
$(COVERAGE_ZIP) : PRIVATE_LIST_FILE := $( call intermediates -dir -for ,PACKAGING ,coverage ) /filelist
$(COVERAGE_ZIP) : $( SOONG_ZIP )
@echo " Package coverage: $@ "
$( hide) rm -rf $@ $( PRIVATE_LIST_FILE)
$( hide) mkdir -p $( dir $@ ) $( TARGET_OUT_COVERAGE) $( dir $( PRIVATE_LIST_FILE) )
$( hide) find $( TARGET_OUT_COVERAGE) | sort >$( PRIVATE_LIST_FILE)
$( hide) $( SOONG_ZIP) -d -o $@ -C $( TARGET_OUT_COVERAGE) -l $( PRIVATE_LIST_FILE)
2009-03-04 04:28:42 +01:00
2019-12-11 23:55:52 +01:00
#------------------------------------------------------------------
# Export the LLVM profile data tool and dependencies for Clang coverage processing
#
i f e q ( t r u e , $( CLANG_COVERAGE ) )
LLVM_PROFDATA := $( LLVM_PREBUILTS_BASE) /linux-x86/$( LLVM_PREBUILTS_VERSION) /bin/llvm-profdata
LIBCXX := $( LLVM_PREBUILTS_BASE) /linux-x86/$( LLVM_PREBUILTS_VERSION) /lib64/libc++.so.1
PROFDATA_ZIP := $( PRODUCT_OUT) /llvm-profdata.zip
$( PROFDATA_ZIP) : $( SOONG_ZIP)
$( hide) $( SOONG_ZIP) -d -o $@ -C $( LLVM_PREBUILTS_BASE) /linux-x86/$( LLVM_PREBUILTS_VERSION) -f $( LLVM_PROFDATA) -f $( LIBCXX)
$( call dist-for-goals,droidcore,$( PROFDATA_ZIP) )
e n d i f
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# A zip of the Android Apps. Not keeping full path so that we don't
# include product names when distributing
#
name := $( TARGET_PRODUCT)
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
name := $( name) -apps-$( FILE_NAME_TAG)
APPS_ZIP := $( PRODUCT_OUT) /$( name) .zip
2018-08-21 06:09:07 +02:00
$(APPS_ZIP) : $( INSTALLED_SYSTEMIMAGE_TARGET )
2009-03-04 04:28:42 +01:00
@echo " Package apps: $@ "
$( hide) rm -rf $@
$( hide) mkdir -p $( dir $@ )
2015-08-23 18:40:05 +02:00
$( hide) apps_to_zip = ` find $( TARGET_OUT_APPS) $( TARGET_OUT_APPS_PRIVILEGED) -mindepth 2 -maxdepth 3 -name "*.apk" ` ; \
if [ -z " $$ apps_to_zip " ] ; then \
2018-11-26 19:12:05 +01:00
echo "No apps to zip up. Generating empty apps archive." ; \
a = $$ ( mktemp /tmp/XXXXXXX) && touch $$ a && zip $@ $$ a && zip -d $@ $$ a; \
2015-08-23 18:40:05 +02:00
else \
2018-11-26 19:12:05 +01:00
zip -qjX $@ $$ apps_to_zip; \
2015-08-23 18:40:05 +02:00
fi
2010-04-23 20:54:37 +02:00
2012-08-15 21:22:44 +02:00
i f e q ( t r u e , $( EMMA_INSTRUMENT ) )
2017-09-27 23:28:41 +02:00
#------------------------------------------------------------------
# An archive of classes for use in generating code-coverage reports
# These are the uninstrumented versions of any classes that were
# to be instrumented.
2017-10-20 20:37:33 +02:00
# Any dependencies are set up later in build/make/core/main.mk.
2017-09-27 23:28:41 +02:00
JACOCO_REPORT_CLASSES_ALL := $( PRODUCT_OUT) /jacoco-report-classes-all.jar
2017-04-12 01:36:46 +02:00
$(JACOCO_REPORT_CLASSES_ALL) :
@echo "Collecting uninstrumented classes"
2020-02-12 23:14:27 +01:00
find $( TARGET_COMMON_OUT_ROOT) $( HOST_COMMON_OUT_ROOT) -name "jacoco-report-classes.jar" 2>/dev/null | sort > $@ .list
$( SOONG_ZIP) -o $@ -L 0 -C $( OUT_DIR) -P out -l $@ .list
2017-04-12 01:36:46 +02:00
2012-08-15 21:22:44 +02:00
e n d i f # EMMA_INSTRUMENT=true
2017-04-12 01:36:46 +02:00
2013-08-23 05:52:47 +02:00
#------------------------------------------------------------------
# A zip of Proguard obfuscation dictionary files.
#
2013-08-29 03:38:25 +02:00
PROGUARD_DICT_ZIP := $( PRODUCT_OUT) /$( TARGET_PRODUCT) -proguard-dict-$( FILE_NAME_TAG) .zip
2019-09-06 02:19:35 +02:00
# For apps_only build we'll establish the dependency later in build/make/core/main.mk.
2020-06-04 16:16:39 +02:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2019-09-06 02:19:35 +02:00
$(PROGUARD_DICT_ZIP) : \
$( INSTALLED_SYSTEMIMAGE_TARGET) \
$( INSTALLED_RAMDISK_TARGET) \
$( INSTALLED_BOOTIMAGE_TARGET) \
$( INSTALLED_USERDATAIMAGE_TARGET) \
$( INSTALLED_VENDORIMAGE_TARGET) \
$( INSTALLED_PRODUCTIMAGE_TARGET) \
$( INSTALLED_SYSTEM_EXTIMAGE_TARGET) \
$( INSTALLED_ODMIMAGE_TARGET) \
$( updater_dep)
e n d i f
$(PROGUARD_DICT_ZIP) : PRIVATE_LIST_FILE := $( call intermediates -dir -for ,PACKAGING ,proguard ) /filelist
$(PROGUARD_DICT_ZIP) : $( SOONG_ZIP )
2013-08-23 05:52:47 +02:00
@echo "Packaging Proguard obfuscation dictionary files."
2019-09-06 02:19:35 +02:00
mkdir -p $( dir $@ ) $( TARGET_OUT_COMMON_INTERMEDIATES) /APPS $( dir $( PRIVATE_LIST_FILE) )
find $( TARGET_OUT_COMMON_INTERMEDIATES) /APPS -name proguard_dictionary | \
sed -e 's/\(.*\)\/proguard_dictionary/\0\n\1\/classes.jar/' > $( PRIVATE_LIST_FILE)
$( SOONG_ZIP) --ignore_missing_files -d -o $@ -C $( OUT_DIR) /.. -l $( PRIVATE_LIST_FILE)
2013-08-23 05:52:47 +02:00
2018-11-29 21:06:31 +01:00
2019-06-28 20:00:05 +02:00
i f e q ( t r u e , $( PRODUCT_USE_DYNAMIC_PARTITIONS ) )
2018-11-29 21:06:31 +01:00
2019-06-28 20:00:05 +02:00
# Dump variables used by build_super_image.py (for building super.img and super_empty.img).
# $(1): output file
2019-03-11 23:55:33 +01:00
d e f i n e d u m p - s u p e r - i m a g e - i n f o
$( call dump-dynamic-partitions-info,$( 1) )
$( if $( filter true,$( AB_OTA_UPDATER) ) , \
echo "ab_update=true" >> $( 1) )
e n d e f
2019-06-28 20:00:05 +02:00
e n d i f # PRODUCT_USE_DYNAMIC_PARTITIONS
# -----------------------------------------------------------------
# super partition image (dist)
i f e q ( t r u e , $( PRODUCT_BUILD_SUPER_PARTITION ) )
# BOARD_SUPER_PARTITION_SIZE must be defined to build super image.
i f n e q ( $( BOARD_SUPER_PARTITION_SIZE ) , )
2018-11-29 21:06:31 +01:00
i f n e q ( t r u e , $( PRODUCT_RETROFIT_DYNAMIC_PARTITIONS ) )
2019-04-17 00:44:30 +02:00
# For real devices and for dist builds, build super image from target files to an intermediate directory.
INTERNAL_SUPERIMAGE_DIST_TARGET := $( call intermediates-dir-for,PACKAGING,super.img) /super.img
$(INTERNAL_SUPERIMAGE_DIST_TARGET) : extracted_input_target_files := $( patsubst %.zip ,%,$ ( BUILT_TARGET_FILES_PACKAGE ) )
$(INTERNAL_SUPERIMAGE_DIST_TARGET) : $( LPMAKE ) $( BUILT_TARGET_FILES_PACKAGE ) $( BUILD_SUPER_IMAGE )
$( call pretty," Target super fs image from target files: $@ " )
2018-12-13 19:45:46 +01:00
PATH = $( dir $( LPMAKE) ) :$$ PATH \
$( BUILD_SUPER_IMAGE) -v $( extracted_input_target_files) $@
2019-03-11 23:55:33 +01:00
2019-04-17 23:28:52 +02:00
# Skip packing it in dist package because it is in update package.
i f n e q ( t r u e , $( BOARD_SUPER_IMAGE_IN_UPDATE_PACKAGE ) )
2019-04-17 00:44:30 +02:00
$( call dist -for -goals ,dist_files ,$ ( INTERNAL_SUPERIMAGE_DIST_TARGET ) )
2019-04-17 23:28:52 +02:00
e n d i f
2019-04-17 00:44:30 +02:00
.PHONY : superimage_dist
superimage_dist : $( INTERNAL_SUPERIMAGE_DIST_TARGET )
e n d i f # PRODUCT_RETROFIT_DYNAMIC_PARTITIONS != "true"
e n d i f # BOARD_SUPER_PARTITION_SIZE != ""
e n d i f # PRODUCT_BUILD_SUPER_PARTITION == "true"
# -----------------------------------------------------------------
# super partition image for development
i f e q ( t r u e , $( PRODUCT_BUILD_SUPER_PARTITION ) )
i f n e q ( $( BOARD_SUPER_PARTITION_SIZE ) , )
i f n e q ( t r u e , $( PRODUCT_RETROFIT_DYNAMIC_PARTITIONS ) )
# Build super.img by using $(INSTALLED_*IMAGE_TARGET) to $(1)
# $(1): built image path
# $(2): misc_info.txt path; its contents should match expectation of build_super_image.py
d e f i n e b u i l d - s u p e r i m a g e - t a r g e t
mkdir -p $( dir $( 2) )
rm -rf $( 2)
$( call dump-super-image-info,$( 2) )
$( foreach p,$( BOARD_SUPER_PARTITION_PARTITION_LIST) , \
echo " $( p) _image= $( INSTALLED_$( call to-upper,$( p) ) IMAGE_TARGET) " >> $( 2) ; )
2019-10-15 06:26:19 +02:00
$( if $( BUILDING_SYSTEM_OTHER_IMAGE) , $( if $( filter system,$( BOARD_SUPER_PARTITION_PARTITION_LIST) ) , \
echo " system_other_image= $( INSTALLED_SYSTEMOTHERIMAGE_TARGET) " >> $( 2) ; ) )
2019-04-17 00:44:30 +02:00
mkdir -p $( dir $( 1) )
PATH = $( dir $( LPMAKE) ) :$$ PATH \
$( BUILD_SUPER_IMAGE) -v $( 2) $( 1)
e n d e f
INSTALLED_SUPERIMAGE_TARGET := $( PRODUCT_OUT) /super.img
INSTALLED_SUPERIMAGE_DEPENDENCIES := $( LPMAKE) $( BUILD_SUPER_IMAGE) \
2019-03-11 23:55:33 +01:00
$( foreach p, $( BOARD_SUPER_PARTITION_PARTITION_LIST) , $( INSTALLED_$( call to-upper,$( p) ) IMAGE_TARGET) )
2019-04-17 00:44:30 +02:00
2019-10-15 06:26:19 +02:00
i f d e f B U I L D I N G _ S Y S T E M _ O T H E R _ I M A G E
i f n e q ( $( filter system ,$ ( BOARD_SUPER_PARTITION_PARTITION_LIST ) ) , )
INSTALLED_SUPERIMAGE_DEPENDENCIES += $( INSTALLED_SYSTEMOTHERIMAGE_TARGET)
e n d i f
e n d i f
2019-04-17 00:44:30 +02:00
# If BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT is set, super.img is built from images in the
# $(PRODUCT_OUT) directory, and is built to $(PRODUCT_OUT)/super.img. Also, it will
# be built for non-dist builds. This is useful for devices that uses super.img directly, e.g.
# virtual devices.
i f e q ( t r u e , $( BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT ) )
$(INSTALLED_SUPERIMAGE_TARGET) : $( INSTALLED_SUPERIMAGE_DEPENDENCIES )
$( call pretty," Target super fs image for debug: $@ " )
$( call build-superimage-target,$( INSTALLED_SUPERIMAGE_TARGET) ,\
2019-08-14 12:52:13 +02:00
$( call intermediates-dir-for,PACKAGING,superimage_debug) /misc_info.txt)
2019-04-17 00:44:30 +02:00
droidcore : $( INSTALLED_SUPERIMAGE_TARGET )
# For devices that uses super image directly, the superimage target points to the file in $(PRODUCT_OUT).
.PHONY : superimage
superimage : $( INSTALLED_SUPERIMAGE_TARGET )
2019-08-14 12:52:13 +02:00
$(call dist-for-goals,dist_files,$(INSTALLED_MISC_INFO_TARGET) : super_misc_info .txt )
2019-04-17 00:44:30 +02:00
e n d i f # BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT
# Build $(PRODUCT_OUT)/super.img without dependencies.
.PHONY : superimage -nodeps supernod
superimage-nodeps supernod : intermediates :=
superimage-nodeps supernod : | $( INSTALLED_SUPERIMAGE_DEPENDENCIES )
2019-03-11 23:55:33 +01:00
$( call pretty," make $( INSTALLED_SUPERIMAGE_TARGET) : ignoring dependencies " )
2019-04-17 00:44:30 +02:00
$( call build-superimage-target,$( INSTALLED_SUPERIMAGE_TARGET) ,\
$( call intermediates-dir-for,PACKAGING,superimage-nodeps) /misc_info.txt)
2019-03-11 23:55:33 +01:00
e n d i f # PRODUCT_RETROFIT_DYNAMIC_PARTITIONS != "true"
2019-04-17 00:44:30 +02:00
e n d i f # BOARD_SUPER_PARTITION_SIZE != ""
e n d i f # PRODUCT_BUILD_SUPER_PARTITION == "true"
2018-11-29 21:06:31 +01:00
2019-04-17 00:44:30 +02:00
# -----------------------------------------------------------------
# super empty image
2019-06-28 20:00:05 +02:00
i f e q ( t r u e , $( PRODUCT_USE_DYNAMIC_PARTITIONS ) )
2019-04-17 00:44:30 +02:00
i f n e q ( $( BOARD_SUPER_PARTITION_SIZE ) , )
2018-11-29 21:06:31 +01:00
2018-11-29 21:32:00 +01:00
INSTALLED_SUPERIMAGE_EMPTY_TARGET := $( PRODUCT_OUT) /super_empty.img
$(INSTALLED_SUPERIMAGE_EMPTY_TARGET) : intermediates := $( call intermediates -dir -for ,PACKAGING ,super_empty )
$(INSTALLED_SUPERIMAGE_EMPTY_TARGET) : $( LPMAKE ) $( BUILD_SUPER_IMAGE )
$( call pretty," Target empty super fs image: $@ " )
mkdir -p $( intermediates)
rm -rf $( intermediates) /misc_info.txt
2019-03-11 23:55:33 +01:00
$( call dump-super-image-info,$( intermediates) /misc_info.txt)
2018-12-13 19:45:46 +01:00
PATH = $( dir $( LPMAKE) ) :$$ PATH \
$( BUILD_SUPER_IMAGE) -v $( intermediates) /misc_info.txt $@
2018-11-29 21:32:00 +01:00
$( call dist -for -goals ,dist_files ,$ ( INSTALLED_SUPERIMAGE_EMPTY_TARGET ) )
2018-11-29 21:06:31 +01:00
e n d i f # BOARD_SUPER_PARTITION_SIZE != ""
2019-06-28 20:00:05 +02:00
e n d i f # PRODUCT_USE_DYNAMIC_PARTITIONS == "true"
2018-11-29 21:06:31 +01:00
2019-04-17 23:28:52 +02:00
# -----------------------------------------------------------------
# The update package
name := $( TARGET_PRODUCT)
i f e q ( $( TARGET_BUILD_TYPE ) , d e b u g )
name := $( name) _debug
e n d i f
name := $( name) -img-$( FILE_NAME_TAG)
INTERNAL_UPDATE_PACKAGE_TARGET := $( PRODUCT_OUT) /$( name) .zip
2019-08-15 08:08:18 +02:00
$(INTERNAL_UPDATE_PACKAGE_TARGET) : $( BUILT_TARGET_FILES_PACKAGE ) $( IMG_FROM_TARGET_FILES )
$( call pretty," Package: $@ " )
PATH = $( INTERNAL_USERIMAGES_BINARY_PATHS) :$( dir $( ZIP2ZIP) ) :$$ PATH \
$( IMG_FROM_TARGET_FILES) \
--additional IMAGES/VerifiedBootParams.textproto:VerifiedBootParams.textproto \
$( BUILT_TARGET_FILES_PACKAGE) $@
2019-04-17 23:28:52 +02:00
.PHONY : updatepackage
updatepackage : $( INTERNAL_UPDATE_PACKAGE_TARGET )
2019-08-05 23:45:11 +02:00
$( call dist -for -goals ,updatepackage ,$ ( INTERNAL_UPDATE_PACKAGE_TARGET ) )
2019-04-17 23:28:52 +02:00
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# dalvik something
.PHONY : dalvikfiles
dalvikfiles : $( INTERNAL_DALVIK_MODULES )
2017-08-01 21:02:09 +02:00
i f e q ( $( BUILD_QEMU_IMAGES ) , t r u e )
MK_QEMU_IMAGE_SH := device/generic/goldfish/tools/mk_qemu_image.sh
2019-07-05 11:30:41 +02:00
MK_COMBINE_QEMU_IMAGE := $( HOST_OUT_EXECUTABLES) /mk_combined_img
2017-08-01 21:02:09 +02:00
SGDISK_HOST := $( HOST_OUT_EXECUTABLES) /sgdisk
2019-02-15 01:45:33 +01:00
i f d e f I N S T A L L E D _ S Y S T E M I M A G E _ T A R G E T
INSTALLED_QEMU_SYSTEMIMAGE := $( PRODUCT_OUT) /system-qemu.img
2019-03-07 19:03:41 +01:00
INSTALLED_SYSTEM_QEMU_CONFIG := $( PRODUCT_OUT) /system-qemu-config.txt
$(INSTALLED_SYSTEM_QEMU_CONFIG) : $( INSTALLED_SUPERIMAGE_TARGET ) $( INSTALLED_VBMETAIMAGE_TARGET )
@echo " $( PRODUCT_OUT) /vbmeta.img vbmeta 1 " > $@
@echo " $( INSTALLED_SUPERIMAGE_TARGET) super 2 " >> $@
2019-07-05 11:30:41 +02:00
$(INSTALLED_QEMU_SYSTEMIMAGE) : $( INSTALLED_VBMETAIMAGE_TARGET ) $( MK_COMBINE_QEMU_IMAGE ) $( SGDISK_HOST ) $( SIMG 2IMG ) \
2019-03-07 19:03:41 +01:00
$( INSTALLED_SUPERIMAGE_TARGET) $( INSTALLED_SYSTEM_QEMU_CONFIG)
@echo Create system-qemu.img now
( export SGDISK = $( SGDISK_HOST) SIMG2IMG = $( SIMG2IMG) ; \
2019-07-05 11:30:41 +02:00
$( MK_COMBINE_QEMU_IMAGE) -i $( INSTALLED_SYSTEM_QEMU_CONFIG) -o $@ )
2017-08-01 21:02:09 +02:00
systemimage : $( INSTALLED_QEMU_SYSTEMIMAGE )
droidcore : $( INSTALLED_QEMU_SYSTEMIMAGE )
2019-02-15 01:45:33 +01:00
e n d i f
2018-12-13 15:34:18 +01:00
i f d e f I N S T A L L E D _ V E N D O R I M A G E _ T A R G E T
2017-08-01 21:02:09 +02:00
INSTALLED_QEMU_VENDORIMAGE := $( PRODUCT_OUT) /vendor-qemu.img
2018-08-03 20:34:55 +02:00
$(INSTALLED_QEMU_VENDORIMAGE) : $( INSTALLED_VENDORIMAGE_TARGET ) $( MK_QEMU_IMAGE_SH ) $( SGDISK_HOST ) $( SIMG 2IMG )
2017-08-01 21:02:09 +02:00
@echo Create vendor-qemu.img
2019-02-15 19:22:45 +01:00
( export SGDISK = $( SGDISK_HOST) SIMG2IMG = $( SIMG2IMG) ; $( MK_QEMU_IMAGE_SH) $( INSTALLED_VENDORIMAGE_TARGET) )
2017-08-01 21:02:09 +02:00
vendorimage : $( INSTALLED_QEMU_VENDORIMAGE )
droidcore : $( INSTALLED_QEMU_VENDORIMAGE )
e n d i f
2020-03-31 05:16:13 +02:00
i f d e f I N S T A L L E D _ R A M D I S K _ T A R G E T
i f d e f I N S T A L L E D _ V E N D O R _ B O O T I M A G E _ T A R G E T
i f d e f I N T E R N A L _ V E N D O R _ R A M D I S K _ T A R G E T
INSTALLED_QEMU_RAMDISKIMAGE := $( PRODUCT_OUT) /ramdisk-qemu.img
$(INSTALLED_QEMU_RAMDISKIMAGE) : $( INTERNAL_VENDOR_RAMDISK_TARGET ) $( INSTALLED_RAMDISK_TARGET )
@echo Create ramdisk-qemu.img
( cat $( INSTALLED_RAMDISK_TARGET) $( INTERNAL_VENDOR_RAMDISK_TARGET) > $( INSTALLED_QEMU_RAMDISKIMAGE) )
droidcore : $( INSTALLED_QEMU_RAMDISKIMAGE )
e n d i f
e n d i f
e n d i f
2018-12-13 15:34:18 +01:00
i f d e f I N S T A L L E D _ P R O D U C T I M A G E _ T A R G E T
2017-11-27 09:04:47 +01:00
INSTALLED_QEMU_PRODUCTIMAGE := $( PRODUCT_OUT) /product-qemu.img
2018-08-03 20:34:55 +02:00
$(INSTALLED_QEMU_PRODUCTIMAGE) : $( INSTALLED_PRODUCTIMAGE_TARGET ) $( MK_QEMU_IMAGE_SH ) $( SGDISK_HOST ) $( SIMG 2IMG )
2017-11-27 09:04:47 +01:00
@echo Create product-qemu.img
2019-02-15 19:22:45 +01:00
( export SGDISK = $( SGDISK_HOST) SIMG2IMG = $( SIMG2IMG) ; $( MK_QEMU_IMAGE_SH) $( INSTALLED_PRODUCTIMAGE_TARGET) )
2017-11-27 09:04:47 +01:00
productimage : $( INSTALLED_QEMU_PRODUCTIMAGE )
droidcore : $( INSTALLED_QEMU_PRODUCTIMAGE )
e n d i f
2019-06-25 08:58:13 +02:00
i f d e f I N S T A L L E D _ S Y S T E M _ E X T I M A G E _ T A R G E T
INSTALLED_QEMU_SYSTEM_EXTIMAGE := $( PRODUCT_OUT) /system_ext-qemu.img
$(INSTALLED_QEMU_SYSTEM_EXTIMAGE) : $( INSTALLED_SYSTEM_EXTIMAGE_TARGET ) $( MK_QEMU_IMAGE_SH ) $( SGDISK_HOST ) $( SIMG 2IMG )
@echo Create system_ext-qemu.img
( export SGDISK = $( SGDISK_HOST) SIMG2IMG = $( SIMG2IMG) ; $( MK_QEMU_IMAGE_SH) $( INSTALLED_SYSTEM_EXTIMAGE_TARGET) )
2018-05-29 14:09:01 +02:00
2019-06-25 08:58:13 +02:00
systemextimage : $( INSTALLED_QEMU_SYSTEM_EXTIMAGE )
droidcore : $( INSTALLED_QEMU_SYSTEM_EXTIMAGE )
2018-05-29 14:09:01 +02:00
e n d i f
2018-12-13 15:34:18 +01:00
i f d e f I N S T A L L E D _ O D M I M A G E _ T A R G E T
2017-11-14 16:42:30 +01:00
INSTALLED_QEMU_ODMIMAGE := $( PRODUCT_OUT) /odm-qemu.img
$(INSTALLED_QEMU_ODMIMAGE) : $( INSTALLED_ODMIMAGE_TARGET ) $( MK_QEMU_IMAGE_SH ) $( SGDISK_HOST )
@echo Create odm-qemu.img
2019-02-15 19:22:45 +01:00
( export SGDISK = $( SGDISK_HOST) ; $( MK_QEMU_IMAGE_SH) $( INSTALLED_ODMIMAGE_TARGET) )
2017-11-14 16:42:30 +01:00
odmimage : $( INSTALLED_QEMU_ODMIMAGE )
droidcore : $( INSTALLED_QEMU_ODMIMAGE )
e n d i f
2018-08-08 01:29:22 +02:00
QEMU_VERIFIED_BOOT_PARAMS := $( PRODUCT_OUT) /VerifiedBootParams.textproto
2019-03-07 19:03:41 +01:00
$(QEMU_VERIFIED_BOOT_PARAMS) : $( INSTALLED_VBMETAIMAGE_TARGET ) $( INSTALLED_SYSTEMIMAGE_TARGET ) \
$( MK_VBMETA_BOOT_KERNEL_CMDLINE_SH) $( AVBTOOL)
2018-08-08 01:29:22 +02:00
@echo Creating $@
2019-03-07 19:03:41 +01:00
( export AVBTOOL = $( AVBTOOL) ; $( MK_VBMETA_BOOT_KERNEL_CMDLINE_SH) $( INSTALLED_VBMETAIMAGE_TARGET) \
$( INSTALLED_SYSTEMIMAGE_TARGET) $( QEMU_VERIFIED_BOOT_PARAMS) )
2018-08-08 01:29:22 +02:00
systemimage : $( QEMU_VERIFIED_BOOT_PARAMS )
droidcore : $( QEMU_VERIFIED_BOOT_PARAMS )
2019-03-07 19:03:41 +01:00
2017-08-01 21:02:09 +02:00
e n d i f
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# The emulator package
2012-07-26 19:15:21 +02:00
i f e q ( $( BUILD_EMULATOR ) , t r u e )
2009-03-04 04:28:42 +01:00
INTERNAL_EMULATOR_PACKAGE_FILES += \
$( HOST_OUT_EXECUTABLES) /emulator$( HOST_EXECUTABLE_SUFFIX) \
2012-01-07 01:44:06 +01:00
prebuilts/qemu-kernel/$( TARGET_ARCH) /kernel-qemu \
2009-03-04 04:28:42 +01:00
$( INSTALLED_RAMDISK_TARGET) \
2018-08-21 06:09:07 +02:00
$( INSTALLED_SYSTEMIMAGE_TARGET) \
$( INSTALLED_USERDATAIMAGE_TARGET)
2009-03-04 04:28:42 +01:00
name := $( TARGET_PRODUCT) -emulator-$( FILE_NAME_TAG)
INTERNAL_EMULATOR_PACKAGE_TARGET := $( PRODUCT_OUT) /$( name) .zip
2015-11-04 19:06:25 +01:00
$(INTERNAL_EMULATOR_PACKAGE_TARGET) : $( INTERNAL_EMULATOR_PACKAGE_FILES )
2009-03-04 04:28:42 +01:00
@echo " Package: $@ "
2015-10-30 00:33:05 +01:00
$( hide) zip -qjX $@ $( INTERNAL_EMULATOR_PACKAGE_FILES)
2009-03-04 04:28:42 +01:00
2012-07-26 19:15:21 +02:00
e n d i f
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
2012-02-28 00:49:23 +01:00
# Old PDK stuffs, retired
2009-03-04 04:28:42 +01:00
# The pdk package (Platform Development Kit)
2012-02-28 00:49:23 +01:00
#ifneq (,$(filter pdk,$(MAKECMDGOALS)))
# include development/pdk/Pdk.mk
#endif
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# The SDK
# The SDK includes host-specific components, so it belongs under HOST_OUT.
2014-06-03 01:16:53 +02:00
sdk_dir := $( HOST_OUT) /sdk/$( TARGET_PRODUCT)
2009-03-04 04:28:42 +01:00
# Build a name that looks like:
#
# linux-x86 --> android-sdk_12345_linux-x86
# darwin-x86 --> android-sdk_12345_mac-x86
# windows-x86 --> android-sdk_12345_windows
#
sdk_name := android-sdk_$( FILE_NAME_TAG)
i f e q ( $( HOST_OS ) , d a r w i n )
2009-04-13 17:31:16 +02:00
INTERNAL_SDK_HOST_OS_NAME := mac
2009-03-04 04:28:42 +01:00
e l s e
2009-04-13 17:31:16 +02:00
INTERNAL_SDK_HOST_OS_NAME := $( HOST_OS)
2009-03-04 04:28:42 +01:00
e n d i f
i f n e q ( $( HOST_OS ) , w i n d o w s )
2014-06-09 21:31:12 +02:00
INTERNAL_SDK_HOST_OS_NAME := $( INTERNAL_SDK_HOST_OS_NAME) -$( SDK_HOST_ARCH)
2009-03-04 04:28:42 +01:00
e n d i f
2009-04-13 17:31:16 +02:00
sdk_name := $( sdk_name) _$( INTERNAL_SDK_HOST_OS_NAME)
2009-03-04 04:28:42 +01:00
sdk_dep_file := $( sdk_dir) /sdk_deps.mk
ATREE_FILES :=
- i n c l u d e $( sdk_dep_file )
# if we don't have a real list, then use "everything"
i f e q ( $( strip $ ( ATREE_FILES ) ) , )
ATREE_FILES := \
$( ALL_DEFAULT_INSTALLED_MODULES) \
$( INSTALLED_RAMDISK_TARGET) \
$( ALL_DOCS) \
$( ALL_SDK_FILES)
e n d i f
atree_dir := development/build
2011-03-23 11:20:14 +01:00
2009-03-04 04:28:42 +01:00
sdk_atree_files := \
$( atree_dir) /sdk.exclude.atree \
2014-06-09 21:31:12 +02:00
$( atree_dir) /sdk-$( HOST_OS) -$( SDK_HOST_ARCH) .atree
2009-03-04 04:28:42 +01:00
2011-06-23 12:49:02 +02:00
# development/build/sdk-android-<abi>.atree is used to differentiate
# between architecture models (e.g. ARMv5TE versus ARMv7) when copying
# files like the kernel image. We use TARGET_CPU_ABI because we don't
# have a better way to distinguish between CPU models.
i f n e q ( , $( strip $ ( wildcard $ ( atree_dir ) /sdk -android -$ ( TARGET_CPU_ABI ) .atree ) ) )
sdk_atree_files += $( atree_dir) /sdk-android-$( TARGET_CPU_ABI) .atree
e n d i f
2019-03-28 16:45:40 +01:00
i f n e q ( $( PRODUCT_SDK_ATREE_FILES ) , )
sdk_atree_files += $( PRODUCT_SDK_ATREE_FILES)
2014-02-28 17:45:59 +01:00
e l s e
sdk_atree_files += $( atree_dir) /sdk.atree
e n d i f
2014-08-12 00:20:02 +02:00
i n c l u d e $( BUILD_SYSTEM ) / s d k _ f o n t . m k
2014-08-01 19:14:15 +02:00
2009-03-04 04:28:42 +01:00
deps := \
$( target_notice_file_txt) \
$( tools_notice_file_txt) \
$( OUT_DOCS) /offline-sdk-timestamp \
2019-10-10 20:35:08 +02:00
$( SDK_METADATA_FILES) \
2010-04-01 02:29:04 +02:00
$( SYMBOLS_ZIP) \
2016-09-12 22:56:50 +02:00
$( COVERAGE_ZIP) \
2018-07-23 21:20:15 +02:00
$( APPCOMPAT_ZIP) \
2018-08-21 06:09:07 +02:00
$( INSTALLED_SYSTEMIMAGE_TARGET) \
2017-08-01 21:02:09 +02:00
$( INSTALLED_QEMU_SYSTEMIMAGE) \
2020-03-31 05:16:13 +02:00
$( INSTALLED_QEMU_RAMDISKIMAGE) \
2017-08-14 23:52:20 +02:00
$( INSTALLED_QEMU_VENDORIMAGE) \
2018-08-08 01:29:22 +02:00
$( QEMU_VERIFIED_BOOT_PARAMS) \
2009-06-16 06:25:32 +02:00
$( INSTALLED_USERDATAIMAGE_TARGET) \
$( INSTALLED_RAMDISK_TARGET) \
2009-03-04 04:28:42 +01:00
$( INSTALLED_SDK_BUILD_PROP_TARGET) \
2010-04-01 02:29:04 +02:00
$( INSTALLED_BUILD_PROP_TARGET) \
2009-03-04 04:28:42 +01:00
$( ATREE_FILES) \
2014-02-18 23:29:59 +01:00
$( sdk_atree_files) \
2009-03-04 04:28:42 +01:00
$( HOST_OUT_EXECUTABLES) /atree \
2014-08-01 19:14:15 +02:00
$( HOST_OUT_EXECUTABLES) /line_endings \
2014-08-12 00:20:02 +02:00
$( SDK_FONT_DEPS)
2009-03-04 04:28:42 +01:00
INTERNAL_SDK_TARGET := $( sdk_dir) /$( sdk_name) .zip
$(INTERNAL_SDK_TARGET) : PRIVATE_NAME := $( sdk_name )
$(INTERNAL_SDK_TARGET) : PRIVATE_DIR := $( sdk_dir ) /$( sdk_name )
$(INTERNAL_SDK_TARGET) : PRIVATE_DEP_FILE := $( sdk_dep_file )
$(INTERNAL_SDK_TARGET) : PRIVATE_INPUT_FILES := $( sdk_atree_files )
# Set SDK_GNU_ERROR to non-empty to fail when a GNU target is built.
#
#SDK_GNU_ERROR := true
2015-11-04 19:06:25 +01:00
$(INTERNAL_SDK_TARGET) : $( deps )
2009-03-04 04:28:42 +01:00
@echo " Package SDK: $@ "
$( hide) rm -rf $( PRIVATE_DIR) $@
$( hide) for f in $( target_gnu_MODULES) ; do \
if [ -f $$ f ] ; then \
echo SDK: $( if $( SDK_GNU_ERROR) ,ERROR:,warning:) \
including GNU target $$ f >& 2; \
FAIL = $( SDK_GNU_ERROR) ; \
fi ; \
done ; \
if [ $$ FAIL ] ; then exit 1; fi
2014-08-12 19:23:58 +02:00
$( hide) echo $( notdir $( SDK_FONT_DEPS) ) | tr " " "\n" > $( SDK_FONT_TEMP) /fontsInSdk.txt
2009-03-04 04:28:42 +01:00
$( hide) ( \
2018-11-26 19:12:05 +01:00
ATREE_STRIP = " $( HOST_STRIP) -x " \
$( HOST_OUT_EXECUTABLES) /atree \
$( addprefix -f ,$( PRIVATE_INPUT_FILES) ) \
-m $( PRIVATE_DEP_FILE) \
-I . \
-I $( PRODUCT_OUT) \
-I $( HOST_OUT) \
-I $( TARGET_COMMON_OUT_ROOT) \
-v " PLATFORM_NAME=android- $( PLATFORM_VERSION) " \
-v " OUT_DIR= $( OUT_DIR) " \
-v " HOST_OUT= $( HOST_OUT) " \
-v " TARGET_ARCH= $( TARGET_ARCH) " \
-v " TARGET_CPU_ABI= $( TARGET_CPU_ABI) " \
-v " DLL_EXTENSION= $( HOST_SHLIB_SUFFIX) " \
-v " FONT_OUT= $( SDK_FONT_TEMP) " \
-o $( PRIVATE_DIR) && \
cp -f $( target_notice_file_txt) \
$( PRIVATE_DIR) /system-images/android-$( PLATFORM_VERSION) /$( TARGET_CPU_ABI) /NOTICE.txt && \
cp -f $( tools_notice_file_txt) $( PRIVATE_DIR) /platform-tools/NOTICE.txt && \
HOST_OUT_EXECUTABLES = $( HOST_OUT_EXECUTABLES) HOST_OS = $( HOST_OS) \
development/build/tools/sdk_clean.sh $( PRIVATE_DIR) && \
chmod -R ug+rwX $( PRIVATE_DIR) && \
cd $( dir $@ ) && zip -rqX $( notdir $@ ) $( PRIVATE_NAME) \
2009-03-04 04:28:42 +01:00
) || ( rm -rf $( PRIVATE_DIR) $@ && exit 44 )
2010-04-17 02:50:09 +02:00
# Is a Windows SDK requested? If so, we need some definitions from here
# in order to find the Linux SDK used to create the Windows one.
2011-02-16 01:09:36 +01:00
MAIN_SDK_NAME := $( sdk_name)
MAIN_SDK_DIR := $( sdk_dir)
MAIN_SDK_ZIP := $( INTERNAL_SDK_TARGET)
2015-01-27 21:47:10 +01:00
i f n e q ( $( filter win_sdk winsdk -tools ,$ ( MAKECMDGOALS ) ) , )
2010-04-17 02:50:09 +02:00
i n c l u d e $( TOPDIR ) d e v e l o p m e n t / b u i l d / t o o l s / w i n d o w s _ s d k . m k
e n d i f
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# Findbugs
INTERNAL_FINDBUGS_XML_TARGET := $( PRODUCT_OUT) /findbugs.xml
INTERNAL_FINDBUGS_HTML_TARGET := $( PRODUCT_OUT) /findbugs.html
$(INTERNAL_FINDBUGS_XML_TARGET) : $( ALL_FINDBUGS_FILES )
@echo UnionBugs: $@
2014-05-20 10:04:16 +02:00
$( hide) $( FINDBUGS_DIR) /unionBugs $( ALL_FINDBUGS_FILES) \
2009-03-04 04:28:42 +01:00
> $@
$(INTERNAL_FINDBUGS_HTML_TARGET) : $( INTERNAL_FINDBUGS_XML_TARGET )
@echo ConvertXmlToText: $@
2014-05-20 10:04:16 +02:00
$( hide) $( FINDBUGS_DIR) /convertXmlToText -html:fancy.xsl \
2013-08-09 01:34:29 +02:00
$( INTERNAL_FINDBUGS_XML_TARGET) > $@
2009-03-04 04:28:42 +01:00
# -----------------------------------------------------------------
# Findbugs
# -----------------------------------------------------------------
# These are some additional build tasks that need to be run.
2013-08-09 01:34:29 +02:00
i f n e q ( $( dont_bother ) , t r u e )
2009-03-04 04:28:42 +01:00
i n c l u d e $( sort $ ( wildcard $ ( BUILD_SYSTEM ) /tasks /*.mk ) )
2010-11-12 15:46:00 +01:00
- i n c l u d e $( sort $ ( wildcard vendor /*/build /tasks /*.mk ) )
2012-04-16 19:03:16 +02:00
- i n c l u d e $( sort $ ( wildcard device /*/build /tasks /*.mk ) )
2015-08-21 00:39:56 +02:00
- i n c l u d e $( sort $ ( wildcard product /*/build /tasks /*.mk ) )
2014-09-06 02:47:34 +02:00
# Also the project-specific tasks
- i n c l u d e $( sort $ ( wildcard vendor /*/*/build /tasks /*.mk ) )
- i n c l u d e $( sort $ ( wildcard device /*/*/build /tasks /*.mk ) )
2015-08-21 00:39:56 +02:00
- i n c l u d e $( sort $ ( wildcard product /*/*/build /tasks /*.mk ) )
2016-06-21 07:03:24 +02:00
# Also add test specifc tasks
i n c l u d e $( sort $ ( wildcard platform_testing /build /tasks /*.mk ) )
2016-08-31 18:20:51 +02:00
i n c l u d e $( sort $ ( wildcard test /vts /tools /build /tasks /*.mk ) )
2013-08-09 01:34:29 +02:00
e n d i f
2011-02-16 01:09:36 +01:00
2015-10-29 00:42:39 +01:00
i n c l u d e $( BUILD_SYSTEM ) / p r o d u c t - g r a p h . m k
2011-02-16 01:09:36 +01:00
# -----------------------------------------------------------------
# Create SDK repository packages. Must be done after tasks/* since
# we need the addon rules defined.
i f n e q ( $( sdk_repo_goal ) , )
i n c l u d e $( TOPDIR ) d e v e l o p m e n t / b u i l d / t o o l s / s d k _ r e p o . m k
e n d i f
2019-09-27 01:37:59 +02:00
2019-10-18 04:24:46 +02:00
# -----------------------------------------------------------------
# Soong generates the list of all shared libraries that are depended on by fuzz
# targets. It saves this list as a source:destination pair to
# FUZZ_TARGET_SHARED_DEPS_INSTALL_PAIRS, where the source is the path to the
# build of the unstripped shared library, and the destination is the
# /data/fuzz/$ARCH/lib (for device) or /fuzz/$ARCH/lib (for host) directory
# where fuzz target shared libraries are to be "reinstalled". The
# copy-many-files below generates the rules to copy the unstripped shared
# libraries to the device or host "reinstallation" directory. These rules are
# depended on by each module in soong_cc_prebuilt.mk, where the module will have
# a dependency on each shared library that it needs to be "reinstalled".
FUZZ_SHARED_DEPS := $( call copy-many-files,$( strip $( FUZZ_TARGET_SHARED_DEPS_INSTALL_PAIRS) ) )
2019-09-27 01:37:59 +02:00
# -----------------------------------------------------------------
# The rule to build all fuzz targets, and package them.
# Note: The packages are created in Soong, and in a perfect world,
# we'd be able to create the phony rule there. But, if we want to
# have dist goals for the fuzz target, we need to have the PHONY
# target defined in make. MakeVarsContext.DistForGoal doesn't take
# into account that a PHONY rule create by Soong won't be available
# during make, and such will fail with `writing to readonly
2019-11-26 21:03:39 +01:00
# directory`, because kati will see 'haiku' as being a file, not a
2019-09-27 01:37:59 +02:00
# phony target.
2019-11-26 21:03:39 +01:00
.PHONY : haiku
haiku : $( SOONG_FUZZ_PACKAGING_ARCH_MODULES ) $( ALL_FUZZ_TARGETS )
$( call dist -for -goals ,haiku ,$ ( SOONG_FUZZ_PACKAGING_ARCH_MODULES ) )
2020-02-07 01:41:49 +01:00
# -----------------------------------------------------------------
# The makefile for haiku line coverage.
i n c l u d e $( BUILD_SYSTEM ) / l i n e _ c o v e r a g e . m k