Commit Graph

54 Commits

Author SHA1 Message Date
Vladimir Marko
e3a2db8661 Remove conscrypt from boot image.
But keep it as part of the boot class path and deliver the
dex files uncompressed in /system/framework/conscrypt.jar.

Test: Pixel 2 XL boots.
Bug: 119868597
Change-Id: I41b96a586401d120998be5a111331935030922c6
2019-01-11 10:27:17 +00:00
Alex Light
2c108e08e4 Save invocation info of dex2oat runs.
It is useful to have the exact dex2oat invocation used to generate
artifacts for some tests. This adds the --write-invocation-to= flag to
the build to save this information.

Test: m droid
Bug: 119332327
Change-Id: Ie17ac73c790b0c55ef5569f03d11e7f03b5ef035
2018-12-18 14:30:27 -08:00
Colin Cross
6db5b0ea9a Move dexpreopting to Soong
Move the dexpreopting logic into Soong.  Make modules will be
dexpreopted by executing the Soong logic in the standalone
dexpreopt_gen binary, which will generate scripts that will
perform dexpreopting for each module.  Export global configuration
as JSON to $OUT/dexpreopt.config, which will be used by
dexpreopt_gen and Soong, and per-module JSON configuration that
will be used by dexpreopt_gen.

This relands I59b20c931ee3e5a8d35eb30da4148691c5095502,
I39d580999947ee54cfefe875b57a028be5333bd7,
Ie7daa94e107d53eff075ca58dbe721bd9d7fc8c2 and
Ica006a007d112c232311435aaac0c0e476232b67, with a minor
update to match the changes made to dexpreopt_gen arguments
and a fix to correctly keep dexpreopt disabled on mac builds.

Bug: 119412419
Bug: 120273280
Test: no differences to dexpreopt outputs on aosp_sailfish system/,
      only expected changes to dexpreopt outputs on system_other
      (.vdex files for privileged Soong modules no longer incorrectly
      contain .dex contents).
Change-Id: I25163e91886cea6941afa25cdb529ed053278dcb
2018-12-17 13:46:17 -08:00
Colin Cross
b8901d7fb8 Revert "Move dexpreopting to Soong"
This reverts commit e736c58043.

Test: none
Bug: 119412419
2018-12-14 11:49:55 -08:00
Colin Cross
e736c58043 Move dexpreopting to Soong
Move the dexpreopting logic into Soong.  Make modules will be
dexpreopted by executing the Soong logic in the standalone
dexpreopt_gen binary, which will generate scripts that will
perform dexpreopting for each module.  Export global configuration
as JSON to $OUT/dexpreopt.config, which will be used by
dexpreopt_gen and Soong, and per-module JSON configuration that
will be used by dexpreopt_gen.

Bug: 119412419
Bug: 120273280
Test: no differences to dexpreopt outputs on aosp_sailfish system/,
      only expected changes to dexpreopt outputs on system_other
      (.vdex files for privileged Soong modules no longer incorrectly
      contain .dex contents).
Change-Id: I59b20c931ee3e5a8d35eb30da4148691c5095502
2018-12-12 17:21:22 -08:00
Colin Cross
3ec2c61549 Pass --avoid-storing-invocation to dex2oat
Pass --avoid-storing-invocation to dex2oat, which will remove the
command line from the final .odex files.  This will help make the
.odex files reproducible across devices and build system changes,
simplifying comparisons.

Bug: 119412419
Test: m checkbuild
Change-Id: I46cedadab9a87addc0f9e35f7bbe578beae1df60
2018-11-28 11:57:47 -08:00
Vladimir Marko
0aea49c0ce Prebuild: Remove --multi-image.
The option is ignored since
    https://android-review.googlesource.com/784718 .

Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: Pixel 2 XL boots.
Test: testrunner.py --target --optimizing
Bug: 77856493
Change-Id: I32c323c0cabbd87cd1993c4355a354bc65529bc0
2018-10-11 17:14:45 +01:00
Vladimir Marko
a332207767 Prebuild: Remove --compile-pic and -Xnorelocate.
The --compile-pic argument is obsolete, all generated code
is now PIC.

The -Xnorelocate is ignored by dex2oat since
    https://android-review.googlesource.com/771001
where the option was reinterpreted from "use patchoat if
needed" to "relocate the boot image in memory if possible"
and dex2oat forbids that relocation.

Test: Pixel 2 XL boots.
Bug: 77856493
Change-Id: I60cdf81267a129be8a482af26fb865110561268e
2018-10-09 17:35:07 +01:00
Vladimir Marko
e47795ba3d Build: Remove boot*.art.rel file generation.
These files are now unused, patchoat shall be removed soon.

Test: m
Test: Pixel 2 XL boots.
Bug: 77856493
Change-Id: I07babe7e6b2657e340265e74042e958a91678329
2018-10-02 08:54:11 +01:00
David Srbecky
a21fdb55b2 Generate unstripped .oat files in the symbols directory.
Test: Check the generated files with readelf.
Bug: 70512966
Change-Id: Iee70c5cc6f5a3d12e0f1e87c983e5487e415acff
2018-07-17 17:04:20 +01:00
Mathieu Chartier
399a6d8673 Specify dirty image objects for profile boot image
This wasn't being specified previously while it should have been.

Test: make
Change-Id: I671e93d4502b1f47cff31de19f2ea558dde6253b
2018-05-07 11:50:00 -07:00
Andreas Gampe
35ab4203ef Revert "Build: Support for compiled-classes file"
This reverts commit 96a522037f.

Bug: 76145463
Test: m
Change-Id: I5a368cd01812e16869352ec219eae095df4919c4
2018-04-13 13:08:13 -07:00
Andreas Gampe
5147749d1a Build: Add some dex2oat boot image error message
Typical failure case for boot image dex2oat is an inconsistent boot
classpath left over from incomplete build dependencies. Give advice
to run a top-level build.

Bug: 73749543
Test: m
Change-Id: I81c4ce9d02b2b360fe867b594d0a2b21c763e473
2018-03-01 08:47:44 -08:00
Andreas Gampe
fc2fefcd83 Build: Factor out ANDROID_LOG_TAGS
Factor out ANDROID_LOG_TAGS for boot image compilation. Do not use
the setting when ART_BOOT_IMAGE_EXTRA_ARGS is set.

Bug: 73749543
Test: m
Test: ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifier" m art-boot-image
Change-Id: Ia599381991f74f243fee966184715b0172742e78
2018-03-01 08:47:44 -08:00
Andreas Gampe
10c86d588e Build: Silence patchoat
Move it to only log error-level messages, similar to dex2oat.

Test: m
Change-Id: I2884fa19aa084ac2f4cb115b0600dbe061685266
2018-02-27 20:38:00 -08:00
Treehugger Robot
6cb3e300fc Merge "have patchoat take directories instead of filenames" 2018-02-20 18:30:42 +00:00
Chris Morin
83522a10e1 have patchoat take directories instead of filenames
patchoat was already ignoring the basename part of the filename passed
to it for both --output-image-file and --output-image-relocation-file.
We can therefore just pass in the directories instead.

Bug: 72828459
Test: make test-art-host-gtest-patchoat_test
Change-Id: I50f2e19fec1fd27433d3e6ec82df0cfb04c43f21
2018-02-13 15:56:55 -08:00
bowen_lai
4570fdbb4c Create symbolic boot vdex files for different ISAs
Create only one vdex file and share between different ISAs.
By sharing vdex file, zygote32 and zygote64 can share the same file and
the system partition size is reduced by about 32MB.

Test: make framework & check boot.vdex and boot-*.vdex files
Test: test system boots with no selinux violations

Bug: 64211239

Change-Id: I31ede4b6aa342f2047d9309b8c631217e6699202
2018-02-12 19:45:21 -08:00
Alex Klyubin
a1b5dfe151 Reland: Add boot.art.rel files to system image
This file is used to verify that all differences between /system
boot*.art and /data/dalvik-cache boot*.art only consist of relocation
changes. The goal is to mitigate /data/dalvik-cache boot*.art files
being a persistence vector.

Test: Build and ensure boot.art.rel files are on the image.
Bug: 66697305
Change-Id: I68c445da46b2d3099ee347a04af4fbb84da85b0d
2018-01-19 14:34:32 -08:00
Ian Pedowitz
74076b7556 Revert "Add boot.art.rel files to system image"
This reverts commit d616e0e820.

Reason for revert: b/72207339 - user builds are failing with this change

Bug: 72207339
Bug: 66697305
Change-Id: Ia309d04d837851ae11518f05aca468ecca895e6f
Test: Before the revert, taimen-user does not build.  After the revert taimen-user builds
2018-01-19 12:43:38 +00:00
Alex Klyubin
d616e0e820 Add boot.art.rel files to system image
This file is used to verify that all differences between /system
boot*.art and /data/dalvik-cache boot*.art only consist of relocation
changes. The goal is to mitigate /data/dalvik-cache boot*.art files
being a persistence vector.

Test: Build and ensure boot.art.rel files are on the image.
Bug: 66697305
Change-Id: I41486dd541e429f2f2b4c4a521009ee5e81e50b9
2018-01-17 15:20:06 -08:00
Andreas Gampe
5ccf0900d0 Build: Make dex2oat boot image error abort explicit
Add explicit arguments that will abort boot image compilation when
a class is found that fails compile-time verification.

This allows certain configurations to disable these checks.

WARNING: Disabling the checks is highly discouraged.

Bug: 69106371
Test: m
Change-Id: I63e915005fcda588b223ec60ef8c9db28d42e577
2017-11-22 14:16:24 -08:00
Mathieu Chartier
a996337658 Re-add missing log filter
Was accidentally deleted in a61acf62c9

Test: make
Change-Id: Ib25b5c5b54bfbfa1ec80dfc4a0ee5134c8be2631
2017-10-11 17:10:25 -07:00
Mathieu Chartier
a2cc65b099 Fix boot image profile in make files
Update location to framework/base/config instead of frameworks/base

Fixed dex2oat dependency to my_out_boot_image_profile_location
instead of my_out_profile_location.

Bug: 37966211
Test: make and flash

Merged-In: I446f11216cf6342861bbbf56ac5c4da2f36fb755

(cherry picked from commit 75edf540e2)

Change-Id: I4a34be8a344880d3e2ccaea3ed0e6390616e0d6c
2017-09-02 23:47:32 +00:00
Andreas Gampe
4ed21d10e8 Build: Change SANITIZE_LITE install settings
Under SANITIZE_LITE, the default app_process is not instrumented.
Embedding sanitized libraries into APKs will lead to crashing apps.
So move second-stage APKs to /data/asan.

The tradeoff is that for now we won't run these sanitized binaries.
Adding support for that is future work.

Also do not do a rebuild of the boot image. This would invalidate
the first-stage results. Note that this is technically dangerous,
as stack overflow guard sizes will not be adapted for ASAN runs.
However, this is a general incompatibility.

Also do not rebuild system_other. Apps are not rebuilt, so it will
create an empty image.

(cherry picked from commit 481660ef34)

Bug: 36458146
Test: m && m SANITIZE_TARGET=address SANITIZE_LITE=true
Merged-In: I3898bc53cad264529f126e6bf0af9c6ca1736877
Change-Id: I3898bc53cad264529f126e6bf0af9c6ca1736877
2017-08-31 08:56:18 -07:00
Jeff Hao
b454ee195a Add dirty-images-objects handling to boot image build.
Allows grouping of classes with dirty static fields to be grouped
together in the image to have fewer dirty pages.

(cherry-picked from commit 865d54caf2)

Bug: 62554875
Test: mm test-art-host

Merged-In: I2486d2704d74a192f1ecdc02589e569b61efa4ae
Change-Id: I2486d2704d74a192f1ecdc02589e569b61efa4ae
2017-08-03 11:04:11 -07:00
Mathieu Chartier
a61acf62c9 Add support for using profiles for boot images
Added two product flags:
PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE
PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION

If PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE is enabled (default false), a
art profile is used to create the preopted boot image. This profile
is also passed to the runtime in AndroidRuntime.cpp.

The profile is created from the
PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION variable that defaults
to "frameworks/base/boot-image-profile.txt".

(cherry picked from commit 77226f6333)

Bug: 37966211
Test: make and flash

Merged-In: Ic89cc4c0c4d39aa9726843f5d9c2fb1dedeb7885
Change-Id: Ic89cc4c0c4d39aa9726843f5d9c2fb1dedeb7885
2017-07-28 11:17:32 -07:00
Richard Uhler
41408b0e1a Don't include patch information for dex preopt.
Because we always compile pic, patch information is not needed.

Test: phone boots.
Bug: 33192586
Change-Id: I46a6db713e0ce21300e3f4b86bd771a68eeed0c4
2017-02-28 17:05:12 +00:00
Richard Uhler
c30981e2d0 Remove option for non-pic dex preopt.
Test: make checkbuild, aosp_bullhead-userdebug boots.
Bug: 33192586

Change-Id: I4dd179fac33d777fb10cc85a99ff68c3b0d0e03d
2016-12-19 09:52:25 +00:00
David Srbecky
5ccc874ba1 Merge "Generate SHA-1 build ID for host-generated *.oat files (2/2)." 2016-10-13 12:52:31 +00:00
Andreas Gampe
da6ddc4086 Build: add preloaded-classes and compiled-classes dependency
Make the ART boot image compilation rule depend on the files
influencing the layout and contents of the image. Required for
incremental builds.

Bug: 32107291
Test: m
Test: echo "android.util.MutableChar" >> frameworks/base/compiled-classes-phone && m
Test: rm frameworks/base/compiled-classes-phone && m
Change-Id: I7b7438672460d8d9d2c8b08b8e7c3cbde8d07a1a
2016-10-12 09:35:39 -07:00
Alexey Alexandrov
e469063a93 Generate SHA-1 build ID for host-generated *.oat files (2/2).
For host-generated *.oat files, generate a SHA-1 build ID based on the
file content and write it to .note.gnu.build-id ELF section.  This
should allow various developer tools like profilers correlate the data
captured for files like boot.oat on the device with the corresponding
known version of the file during an offline analysis.

Test: Verified that boot.oat contains the build ID section now.
Test: make test-art-host
Bug: 31292208
Change-Id: Iee48e437009488f20995e73868d5059d349701c0
2016-10-05 19:20:36 -07:00
Andreas Gampe
0a0fd088c1 Merge "Build: Add ART_BOOT_IMAGE_EXTRA_ARGS" am: 8a547f1
am: c0f254a

* commit 'c0f254a5b9710f459fba044530bace0c4bb107e1':
  Build: Add ART_BOOT_IMAGE_EXTRA_ARGS

Change-Id: I98d2311fd4789ea9e31f753b5a2ea09ac605ce00
2016-04-12 03:06:52 +00:00
Andreas Gampe
907fb03273 Build: Add ART_BOOT_IMAGE_EXTRA_ARGS
Allow to modify the boot image compilation. Can be used to easily
dump initialization failures.

Bug: 27265238
Change-Id: I9d54c562a2e623b23b7c1dea9cdbe303786c95dd
2016-04-11 15:10:09 -07:00
Ying Wang
fbc5b9f56b Rebuild odex files in PDK fusion build.
To rebuild odex files of Java libraries and apps,
we store the jars/apks without stripping the classes.dex inside the
platform.zip. We also save the build variables that may affect how we
rebuild an odex in pdk_dexpreopt_config.mk in the platform.zip.
We store the files and configuration only for libraries/apps that get
installed to the system.img (or vendor.img).

In PDK fusion build, we auto-generate prebuilt module definitions for
the javalib.jar and package.dex.apk carried in the platform.zip, using
configuration stored in pdk_dexpreopt_config.mk.
With the prebult modules, we override the implicit rule that directly
copies the odex from the platform.zip.
To rebuild odex of javalib.jar, we added support for prebuilt shared Java
library to prebiult_internal.mk. An installable prebuilt Java library is
treated as shared Java library, i.e. with classes.dex in the jar instead
of a set of .class files.
For apks in the platform.zip, we install the stripped version from
platform files inside platform.zip, instead of the package.dex.apk,
using a new variable LOCAL_REPLACE_PREBUILT_APK_INSTALLED. We can't
strip package.dex.apk because we can't re-sign the stripped apk at this
point.

We generate prebuilt module only if it's not already defined in the
source tree.

Bug: 27543283
Change-Id: I9e146f8b713d6f57c397fd28d88c9ab700757ca1
(cherry-pick from commit 3a61eeb6cb)
2016-03-25 11:06:04 -07:00
Joe Onorato
632db649fb Also turn down the logging for dex2oat on the boot image
Bug: 27499257
Change-Id: I190ce72b44e49451dab44902e2ca33dd5c2815ce
2016-03-17 10:38:03 -07:00
Ying Wang
3a61eeb6cb Rebuild odex files in PDK fusion build.
To rebuild odex files of Java libraries and apps,
we store the jars/apks without stripping the classes.dex inside the
platform.zip. We also save the build variables that may affect how we
rebuild an odex in pdk_dexpreopt_config.mk in the platform.zip.
We store the files and configuration only for libraries/apps that get
installed to the system.img (or vendor.img).

In PDK fusion build, we auto-generate prebuilt module definitions for
the javalib.jar and package.dex.apk carried in the platform.zip, using
configuration stored in pdk_dexpreopt_config.mk.
With the prebult modules, we override the implicit rule that directly
copies the odex from the platform.zip.
To rebuild odex of javalib.jar, we added support for prebuilt shared Java
library to prebiult_internal.mk. An installable prebuilt Java library is
treated as shared Java library, i.e. with classes.dex in the jar instead
of a set of .class files.
For apks in the platform.zip, we install the stripped version from
platform files inside platform.zip, instead of the package.dex.apk,
using a new variable LOCAL_REPLACE_PREBUILT_APK_INSTALLED. We can't
strip package.dex.apk because we can't re-sign the stripped apk at this
point.

We generate prebuilt module only if it's not already defined in the
source tree.

Bug: 27543283
Change-Id: I9e146f8b713d6f57c397fd28d88c9ab700757ca1
2016-03-14 21:01:46 -07:00
Colin Cross
52dcb2f816 Install boot.art extra files individually
The rule that builds boot.art also produces boot.oat, boot-*.art, and
boot-*.oat as a side effect, and the install rule for boot.art was
installing them using *.art and *.oat.  This meant that PDK builds had
no rule to install the extra files, so it used the ones from the
platform.zip file instead of the locally built ones.

Generate a list of the files that should be produced by the boot.art
build, and manually create install rules for them that depend on the
built boot.art and are depended on by the installed boot.art.

Bug: 27546601
Change-Id: I9734491c3179bca2d4b2ae13b0c6a03e4c26b0b2
2016-03-08 18:00:05 -08:00
Jeff Hao
5aabca204f Build: Build changes for multi oat/image support.
Use the --multi-image option to generate a preopted boot image. This
generates a separate oat file and image file output for each dex file
input.

Stop inlining core.

(cherry picked from commit d1d3fd933f)

Change-Id: Ibd23bc06d346ff404cabd88f7461f041af6016dd
2015-12-24 10:10:55 +00:00
Jeff Hao
d1d3fd933f Build: Build changes for multi oat/image support.
Use the --multi-image option to generate a preopted boot image. This
generates a separate oat file and image file output for each dex file
input.

Stop inlining core.

Change-Id: I4437a2d43bc9b9695516bc4b90a5b59a147e13d5
2015-12-23 17:37:35 -08:00
Shinichiro Hamaji
9cb76922aa Do not use $? in recipe
Kati cannot support this automatic variable as ninja doesn't
have a feature for this.

Change-Id: Ibc3a18dc5739b5008b156d2672a626621e046f5a
2015-12-22 00:55:37 +09:00
David Srbecky
d8fae9a6a6 Pass --no-generate-debug-info to dex2oat.
The two flags have been merged and renamed in ART.

Change-Id: Iffc1dcc6764367239d6f45a3598cdb2c5d5d5013
2015-05-28 16:32:55 +01:00
David Srbecky
299d3f4960 Add --include-cfi compiler option.
Decouple generation of CFI from the rest of debug symbols.
This makes it possible to generate oat with CFI but without
the rest of debug symbols.

This is in line with intention of the .eh_frame section.
The section does not have the .debug_ prefix because it
is considered somewhat different to the rest of debug symbols.

Change-Id: I32816ecd4f30ac4e0dc69d69a4993e349c737f96
2015-04-13 19:50:51 +01:00
Brian Carlstrom
2bc19019e5 Remove obsolete PRODUCT_DEX_PREOPT_.*_IN_DATA
Bug: 18673991
Change-Id: I64261ef6a37df92eeef8552b8fd0a67157e4a034
2014-12-15 22:09:58 -08:00
Andreas Gampe
96a522037f Build: Support for compiled-classes file
Allow a compiled-classes file for pre-opting.

Bug: 18410571

(cherry picked from commit 4fec0bb265)

Change-Id: I8c69dd0fb8c04aaae0c4f062049cc9cce7d755c7
2014-11-18 15:09:51 -08:00
Igor Murashkin
97f28c63d4 core: Use WITH_DEXPREOPT_PIC=true to have dex2oat build pic oat files
When WITH_DEXPREOPT=true is set, if we also set WITH_DEXPREOPT_PIC=true
then the build will generate position-independent OAT images.

This means that all the system applications no longer need to be
relocated into /data/dalvik-cache and this can achieve saving disk space
at the cost of slightly slower running code.

Bug: 18035729

(cherry picked from commit da9f1a7e82)

Change-Id: Ifd517c842f48bf31568bf5ff56667298d422c2c0
2014-11-18 14:58:48 -08:00
Ian Rogers
a18a28305d Pass instruction set variant to dex2oat.
Also, add it to the ANDROID_BUILD_PROPERTIES.
Remove non-default instruction set features.
Bug: 18056890

Change-Id: I9169cdfecbb176f62b941852948222edc3f511fd
2014-11-08 17:07:23 -08:00
Ying Wang
20ebd2ef08 Introduce per-product per-module dex-preopt config
- Added LOCAL_DEX_PREOPT_FLAGS to pass extra flags to dex2oat.
- Added macro add-product-dex-preopt-module-config to specify almost
  arbitrary dex-preopt config/flags to modules in product
  configuration:
  $(call \
  add-product-dex-preopt-module-config,<module_name_list>,<config_or_flags>)
  How <config_or_flags> is interpreted is decided by
  dex_preopt_odex_install.mk and dex2oat. For now if it's "disable" we
  disable dexpreopt for the given modules; otherwise pass it to dex2oat as
  command line flags.
- If there are multiple configs for the same module in the product
  inheritance, the first takes precedence.
- Added PRODUCT_DEX_PREOPT_DEFAULT_FLAGS so you can specify default
  dex2oat flags in product configuration.
- Added PRODUCT_DEX_PREOPT_BOOT_FLAGS to specify flags of building boot.oat.

Bug: 17791867
Change-Id: I1b2955e8e51039e94d1ff43a3265a8d03598632c
2014-10-08 10:11:17 -07:00
Nicolas Geoffray
75c08b2118 Make which dex2oat version to use configurable.
Change-Id: Ic13cf6f9dfb117193a5101781945c501d138955c
2014-10-07 08:30:18 +00:00
Brian Carlstrom
a4331e35b6 Add --no-include-debug-symbols to avoid bloat in user builds
Bug: 16938924

(cherry picked from commit 91b9d01b6b)

Change-Id: I0b744e0aaacc11fe8983f22f56ffc546a07ae764
2014-08-28 18:10:42 -07:00