Commit Graph

4818 Commits

Author SHA1 Message Date
Paul Duffin
6c6dde04bd Make uncompressDex available for use through hiddenAPIModule
In order for the bootclasspath_fragment to perform dex encoding on its
contents it needs to know whether the dex file is uncompressed or not.
This change makes that information available by passing it to
initHiddenAPI, storing it in hiddenAPI struct and providing access
through the hiddenAPIModule.

Bug: 179354495
Test: m droid
Merged-In: I913416b4836766de194203fd8ed5124b61dfa3dd
Change-Id: I913416b4836766de194203fd8ed5124b61dfa3dd
(cherry picked from commit 1bbd0626f2)
2021-05-18 08:00:16 +01:00
Paul Duffin
c9e52dbc57 Remove hiddenAPI.primary field
Now that the individual modules no longer participate in the generation
of the monolithic files it is no longer necessary to select a single
primary module to provide the information they need.

Bug: 179354495
Test: m droid
Merged-In: If09796de710927e3e3f2ccecad0b57ca5fce5dc9
Change-Id: If09796de710927e3e3f2ccecad0b57ca5fce5dc9
(cherry picked from commit 45897dd663)
2021-05-18 08:00:02 +01:00
Paul Duffin
f88ab95d85 Merge initHiddenAPI and hiddenAPIUpdatePaths
These two methods did very similar jobs and merging them together
simplifies the behavior.

Bug: 179354495
Test: m droid
Merged-In: Ibe1a23d54105e6a0e5693079cd8743679301fc85
Change-Id: Ibe1a23d54105e6a0e5693079cd8743679301fc85
(cherry picked from commit 74d18d1d6f)
2021-05-18 07:59:52 +01:00
Paul Duffin
59190602af Remove configurationName from java library and hidden API
The configurationName was intended to separate the name of the module
from the name used in configuration (such as BootJars) so that the
child implementation library of a java_sdk_library on the bootclasspath
would have hidden API encoding performed on it just as for the main
java_library embedded within the java_sdk_library.

While that did use to work it no longer does as the test added in the
preceding change proves. It is not surprising that this regression does
not appear to have caused any issues as the the child implementation
library is only a build time artifact and not used at runtime.

In future the only modules that will require hidden API encoding are
those that are part of a bootclasspath module so there is no point in
maintaining this capability.

Bug: 179354495
Test: m droid
Merged-In: Ief8136fa9e98600cdd8d36108ec22edc2ebd7c69
Change-Id: Ief8136fa9e98600cdd8d36108ec22edc2ebd7c69
(cherry picked from commit 66cdbf07ef)
2021-05-18 07:59:41 +01:00
Paul Duffin
78fc68695e Add a test for hidden API encoding of java_sdk_library
Fill a hole in the testing of hidden API encoding. Some comments in the
code indicate that the child implementation java_library of a
java_sdk_library should have hidden API flags encoded in its dex jar
just like the embedded java_library. However, this test proves that it
is not working. This will be fixed in a follow up change.

Bug: 179354495
Test: m nothing
Merged-In: Ia581a17f1e48dff252d17f16bf76adf039f46b60
Change-Id: Ia581a17f1e48dff252d17f16bf76adf039f46b60
(cherry picked from commit 0d586581d1)
2021-05-18 07:59:29 +01:00
Paul Duffin
460952c7f4 Add temporary restriction on hidden API processing
Hidden API processing of a bootclasspath_fragment requires the fragment
provides information, such as dependencies on other fragments and flag
files to override the default flags. Failing to do so will cause hidden
API generation to either fail or to generate different flags to that
generated by the hidden API processing done by platform_bootclasspath
which will cause the build to fail.

Previously, this was handled by only performing hidden API processing
for those modules that provide stub libs and relied on there only being
bootclasspath_fragments defined for ART (which already supports hidden
API processing), and Conscrypt and I18n neither of which provide stubs.
Unfortunately, that can no longer be relied upon due to a couple of
recent changes:
1. A java_sdk_library in a bootclasspath_fragment's content property is
   automatically treated a stub library. That avoids duplication for
   most bootclasspath_fragments that provide the implementation and
   stub libraries through the same java_sdk_library. It does not affect
   either ART, conscrypt or i18n as they all define the implementation
   separately to the stubs.

2. bootclasspath_fragment modules have been defined for a number of
   android modules as they are needed for reasons other than hidden API
   processing.

In combination this meant that rules to perform hidden API processing
were being created but they were not currently being used which is
good because they fail.

However, adding the fragment to the platform-bootclasspath will cause
those rules to be used as the platform_bootclasspath module performs a
consistency check on the hidden API flags generated by each of the
fragments to ensure that they are consistent with those it generates
itself.

The dynamic bootclasspath work will need to add fragments to the
platform_bootclasspath and without this change that would be blocked
until all fragments had been switched to generating hidden API flags
properly.

This change adds a new fragments property to the bootclasspath and
disables hidden API processing for everything other than ART and tests
if the fragments property or stub libs is empty.

Bug: 179354495
Test: - Before making this change.
      - Add com.android.os.statds-bootclasspath-fragment to platform-bootclasspath.fragments
      m out/soong/hiddenapi/hiddenapi-flags.csv
      - hidden API processing fails in statsd as it cannot find java.lang.Object.
      - After making this change, run the above command again and it should pass.

Merged-In: Ifbb362f8fcfb2c06595fbd5ae39421b536e329ef
Change-Id: Ifbb362f8fcfb2c06595fbd5ae39421b536e329ef
(cherry picked from commit 70cfdff3da)
2021-05-17 21:30:03 +01:00
Paul Duffin
20042da220 Merge "Refactor special handling of hidden API encoding for master-art" am: fdd9743609 am: 1b5e8cdbee am: 23b34baa5c
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707569

Change-Id: I5dbe8a4c4fc0f4e8a91ec9c04f32a7d71f96715e
2021-05-14 19:52:52 +00:00
Paul Duffin
63472fe5ba Merge "Stop generating unnecessary hidden API rules" am: b7c78731d4 am: 97961f4837 am: d12106540b
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707574

Change-Id: I592af32aa225403d5ba1d1a4c89dda84d3aad0ba
2021-05-14 19:52:47 +00:00
Paul Duffin
7b07c01f20 Merge "Generate monolithic hidden API files direct from class jars" am: 21f62ef867 am: b28f562092 am: 8063427dc4
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707573

Change-Id: I116c3a4028fd199df12ead373fbfb4d47c6fdf8e
2021-05-14 19:52:42 +00:00
Paul Duffin
f8b776e97f Merge "Dedup hidden API rule generation" am: 2bc8b3a646 am: 93b312c2dd am: 29c6e9fa55
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707572

Change-Id: I584f17bd5ee9092730d4e37c5b34233805dd6b1a
2021-05-14 19:52:33 +00:00
Paul Duffin
23b34baa5c Merge "Refactor special handling of hidden API encoding for master-art" am: fdd9743609 am: 1b5e8cdbee
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707569

Change-Id: I49f3ee3a7bb0eb9f26440a278c5f1ec56a6037bf
2021-05-14 19:33:34 +00:00
Paul Duffin
d12106540b Merge "Stop generating unnecessary hidden API rules" am: b7c78731d4 am: 97961f4837
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707574

Change-Id: Ida624f82ac4394cad434a943271ecc64203fce26
2021-05-14 19:33:28 +00:00
Paul Duffin
8063427dc4 Merge "Generate monolithic hidden API files direct from class jars" am: 21f62ef867 am: b28f562092
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707573

Change-Id: I64919be5a862620eb5077e6f18982e02eae8dcb4
2021-05-14 19:33:23 +00:00
Paul Duffin
29c6e9fa55 Merge "Dedup hidden API rule generation" am: 2bc8b3a646 am: 93b312c2dd
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707572

Change-Id: Ib9a86e05001db3571b1be5ebb851fa5aa63af044
2021-05-14 19:33:15 +00:00
Paul Duffin
fdd9743609 Merge "Refactor special handling of hidden API encoding for master-art" 2021-05-14 18:53:43 +00:00
Paul Duffin
b7c78731d4 Merge "Stop generating unnecessary hidden API rules" 2021-05-14 18:53:08 +00:00
Paul Duffin
21f62ef867 Merge "Generate monolithic hidden API files direct from class jars" 2021-05-14 18:52:11 +00:00
Paul Duffin
2bc8b3a646 Merge "Dedup hidden API rule generation" 2021-05-14 18:51:10 +00:00
Paul Duffin
1b3dbb7c7d Merge "Allow shared libraries on bootclasspath" am: b0f20d134f am: 42a9a2ede6 am: 8a9a8ffd2f
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707576

Change-Id: I5d9603841e7dd422bcd18e45249556918f724fcc
2021-05-14 18:21:45 +00:00
Paul Duffin
8a9a8ffd2f Merge "Allow shared libraries on bootclasspath" am: b0f20d134f am: 42a9a2ede6
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707576

Change-Id: I96dcd94c06aa2cbf12fbf4e0effb708d26658ccb
2021-05-14 17:51:21 +00:00
Paul Duffin
b0f20d134f Merge "Allow shared libraries on bootclasspath" 2021-05-14 17:03:03 +00:00
Paul Duffin
79fd3d728c Allow shared libraries on bootclasspath
A previous change treated this as an error in order to try and detect
issues with misconfigured java_sdk_library modules and/or
bootclasspath_fragment modules but unfortunately this is not always an
error, e.g. when migrating a library that was a shared library to the
bootclasspath.

This change stops treating that as an error.

Bug: 179354495
Test: m nothing
Change-Id: I4a833ab5f4caf86c6cd340090fc65d2c2f141512
2021-05-14 16:14:17 +01:00
Paul Duffin
b6f53c064e Refactor special handling of hidden API encoding for master-art
Instead of encoding the hidden API with an empty set of flags when the
monolithic flags are not available this simply disables encoding
altogether which should have the same behavior at runtime.

This change also removes the unused flags field in hiddenAPISingleton
which was set but never read.

Bug: 179354495
Test: m nothing
Change-Id: I32d5825e5271829993dd4e5be4d4ee1b22fa7b22
2021-05-14 15:57:10 +01:00
Paul Duffin
afaa47c74a Stop generating unnecessary hidden API rules
The rules to extract hidden API information from an individual module
in order to create module specific files are no longer necessary as
the monolithic files are created directly from the module's class jars
and not the module specific files.

Bug: 179354495
Test: verified that the monolithic out/soong/hiddenapi/... files are
      unchanged by this change
Change-Id: I573ac17f3ea5da5a2a7e4f08718160dacca71c0c
2021-05-14 15:57:10 +01:00
Paul Duffin
537ea3d04c Generate monolithic hidden API files direct from class jars
Previously, the monolithic hidden API files, e.g. hiddenapi-index.csv
file, were generated in two steps. First, each module created its own
files using the information in its class jars. Then, the monolithic
files were created by merging those module specific files into a larger
file.

This change switches to generating the monolithic files directly from
the class jar files and bypassing the intermediate files.

In order to ensure that this change did not change the monolithic files
it is necessary for the hiddenapi-metadata.csv to go through a
reformatting step. Hopefully, this will be able to be removed in a
follow up change.

Bug: 179354495
Test: verified that the monolithic out/soong/hiddenapi/... files are
      unchanged by this change
Change-Id: I5a78e747516014b7c0f402a4b4431b14be6a84b2
2021-05-14 15:57:04 +01:00
Paul Duffin
850e61f234 Dedup hidden API rule generation
Bug: 179354495
Test: verified that the monolithic out/soong/hiddenapi/... files are
      unchanged by this change
Change-Id: I54b677c97712a7573ff5eed017c1b2198b80bc51
2021-05-14 14:53:19 +01:00
Paul Duffin
27f8ab9c19 Make hidden API handle jacoco-stubs consistently am: 098c878838 am: 86d7f1ba59 am: 63f7830b71
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707571

Change-Id: I9bf7ab8b354098403a1591622008d6363526015f
2021-05-14 12:52:52 +00:00
Paul Duffin
63f7830b71 Make hidden API handle jacoco-stubs consistently am: 098c878838 am: 86d7f1ba59
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707571

Change-Id: I23ba1c6f9d5a06e6a1ea03f201ef2499af5417d1
2021-05-14 12:18:23 +00:00
Paul Duffin
098c878838 Make hidden API handle jacoco-stubs consistently
Previously, when code coverage was enabled the monolithic hidden API
processing would add jacoco-stubs to public APIs only as that would
make them accessible for everyone. However, the
art-bootclasspath-fragment added jacoco-stubs to public, system and
test APIs as that was the simplest way of handling it and while the
extract APIs were unnecessary they would not change behavior.

Unfortunately, that lead to a difference in the flags generated which
caused the check that verifies flags are consistent between the
monolithic and modular files to fail.

This change adds jacoco-stubs to system and test APIs for the
monolithic hidden API processing to ensure consistency.

Bug: 179354495
Bug: 188143639
Test: m EMMA_INSTRUMENT=true EMMA_INSTRUMENT_FRAMEWORK=true out/soong/hiddenapi/hiddenapi-flags.csv
      - ran before making the change to reproduce the problem and after
        to verify the fix.
Change-Id: Icbd15f0ece871a8c44d9e4a73fd0f7acc3760bba
2021-05-14 10:19:46 +00:00
Paul Duffin
7102bb1c47 Use java_sdk_library in bootclasspath_fragment contents as stubs am: 34827d4c0e am: e48bebd77d am: 735c0a088c
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707567

Change-Id: Ia904dca2a2dcb866db1f25412479273d686b0169
2021-05-14 07:35:22 +00:00
Paul Duffin
37f80999a2 Validate monolithic and modular hidden API flags are consistent am: dfa1083fee am: 02618f854e am: 10e912e02f
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1705309

Change-Id: I65c4a0ac5e3c3b4ee701efc7c8ba28b7ebe7e344
2021-05-14 07:35:16 +00:00
Paul Duffin
7a73beac0e Generate hidden API flags for a bootclasspath_fragment am: 2fef136885 am: c23b7e4d5b am: d66a44fe65
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1705308

Change-Id: I8179467fb3a1d1280e872b843b6faa326e435ce0
2021-05-14 07:35:02 +00:00
Paul Duffin
735c0a088c Use java_sdk_library in bootclasspath_fragment contents as stubs am: 34827d4c0e am: e48bebd77d
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707567

Change-Id: Ic590746d95d388c3f5a8df719d57c4587f731c2a
2021-05-14 07:16:52 +00:00
Paul Duffin
10e912e02f Validate monolithic and modular hidden API flags are consistent am: dfa1083fee am: 02618f854e
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1705309

Change-Id: Ia3dda5851254696de493d3542e0a331c30cfc927
2021-05-14 07:16:47 +00:00
Paul Duffin
d66a44fe65 Generate hidden API flags for a bootclasspath_fragment am: 2fef136885 am: c23b7e4d5b
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1705308

Change-Id: I6a5f1667db83ce176179b520621eb47b074d326b
2021-05-14 07:16:35 +00:00
Paul Duffin
a4ec850482 Populate hiddenAPI structure even when not active am: 001e606e5c am: 251bb0cfaf am: e3ab70f204
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707568

Change-Id: I46a78147495fa7455fa3c4b2ecd9a390cddb7466
2021-05-14 06:42:43 +00:00
Paul Duffin
10141eb0ba Disallow shared libraries in bootclasspath_fragment contents am: f4600f6e6a am: 5afc79746a am: d642862dcb
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707566

Change-Id: I875ebabe9cf05b0cdd854021b9e770adc6e6bbb0
2021-05-14 06:42:40 +00:00
Paul Duffin
e3ab70f204 Populate hiddenAPI structure even when not active am: 001e606e5c am: 251bb0cfaf
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707568

Change-Id: Ie16eb49bc6a0f51da5f143f0ce8dbb1cc8d7b8b8
2021-05-14 06:25:21 +00:00
Paul Duffin
d642862dcb Disallow shared libraries in bootclasspath_fragment contents am: f4600f6e6a am: 5afc79746a
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1707566

Change-Id: I70daf119a679f01ac216b482fa95f6b21c1a64da
2021-05-14 06:25:17 +00:00
Paul Duffin
34827d4c0e Use java_sdk_library in bootclasspath_fragment contents as stubs
A java_sdk_library specified in the bootclasspath_fragment contents
must be providing APIs for the bootclasspath_fragment and so must be
treated as if they were specified in the stub_libs. This avoids having
to specify them in both contents and stub_libs.

Bug: 179354495
Test: m nothing
Change-Id: I535065ee1a79b439e2676f35e06a75d4626adcaf
2021-05-14 01:49:19 +01:00
Paul Duffin
dfa1083fee Validate monolithic and modular hidden API flags are consistent
This makes sure that where there is overlap between the hidden API
flags generated for a module and the monolithic flags that they are
identical. That ensures that the modular hidden API flags will be
compatible with previous releases that relied on the monolithic flags.

Bug: 179354495
Test: m out/soong/.intermediates/art/build/boot/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/all-flags.csv
      m out/soong/hiddenapi/hiddenapi-flags.csv
      - Create some inconsistencies between the above two files.
      m out/soong/hiddenapi/hiddenapi-flags.csv.valid
Change-Id: Iaf9e23cef63e221608955d89dc8d496bcc70c86e
2021-05-14 01:49:19 +01:00
Paul Duffin
2fef136885 Generate hidden API flags for a bootclasspath_fragment
This change adds support for generating the hidden API flags for the
contents of a bootclasspath_fragment. Currently, it will only work for
the art-bootclasspath-fragment as it has no support for creating
dependencies between bootclasspath_fragment modules which will be
needed for handling any other bootclasspath_fragment.

The hidden API flag generation added by this change is completely
separate to the normal hidden API processing and is not as yet encoded
in dex jars so will have no effect on the runtime.

The generated files are provided for use by other modules and copied
into the sdk snapshot. That is needed to allow the build to verify that
the hidden API flags generated by the individual bootclasspath_fragment
modules are consistent with the flags generated for the whole
bootclasspath, whether building from source or prebuilts.

Bug: 179354495
Test: m art-module-sdk
      m out/soong/.intermediates/art/build/boot/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/all-flags.csv
      m out/soong/hiddenapi/hiddenapi-flags.csv
      - test that the former file is a subset of the latter and that
        where they overlap they are identical.
Change-Id: Ie27303e2960953db1b7abe95510e3bca4411b09a
2021-05-14 01:48:51 +01:00
Paul Duffin
001e606e5c Populate hiddenAPI structure even when not active
The modular hidden API processing needs access to the classesJarPaths
and bootDexJarPath fields of the hiddenAPI structure even if the
modules are not themselves considered to be active participants in the
existing hidden API processing.

This change moves the initialization of those fields to before inactive
modules are ignored.

Bug: 179354495
Test: m art-module-sdk out/soong/hiddenapi/hiddenapi-flags.csv
Change-Id: I06f96d39d0b413295d3e2af50453ebe7e4d3e9c8
2021-05-14 01:45:42 +01:00
Yuntao Xu
3cf22ccb31 Merge "syntax check to jacoco filters for any build" am: 0589914135 am: 6b968b9531 am: f2f04e4160
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1706576

Change-Id: I6a95529702279a50c095c423f2052b2f5ce01b21
2021-05-14 00:16:14 +00:00
Yuntao Xu
f2f04e4160 Merge "syntax check to jacoco filters for any build" am: 0589914135 am: 6b968b9531
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1706576

Change-Id: Iaceecc8c587231aa3bed8b7f661c1ebfc2abc8df
2021-05-13 23:59:44 +00:00
Paul Duffin
f4600f6e6a Disallow shared libraries in bootclasspath_fragment contents
Bug: 177892522
Test: m nothing
Change-Id: I78c8ef8664ec1eb0fe3456a2de2cb956162ca0da
2021-05-14 00:39:24 +01:00
Paul Duffin
f3042faefe Add java_sdk_library in bootclasspath_fragment contents to sdk am: a10bd3c127 am: 94a452c768 am: 58fcebb1a7
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1705470

Change-Id: I673fd870c37f11966c4914c033ab8f96b8ece825
2021-05-13 23:23:42 +00:00
Yuntao Xu
0589914135 Merge "syntax check to jacoco filters for any build" 2021-05-13 23:11:48 +00:00
Paul Duffin
58fcebb1a7 Add java_sdk_library in bootclasspath_fragment contents to sdk am: a10bd3c127 am: 94a452c768
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1705470

Change-Id: I611119b71b2087c37250968024278ce938cfe04a
2021-05-13 23:05:14 +00:00
Paul Duffin
a10bd3c127 Add java_sdk_library in bootclasspath_fragment contents to sdk
A java_library specified in a bootclasspath_fragment's contents
property will be automatically added to the sdk containing that
bootclasspath_fragment. Previously, if that was attempted with a
java_sdk_library it would be added to the sdk as if it was a normal
java_boot_libs which would prevent the sdk from containing the
API specific artifact such as current.txt files and stub libraries
and sources.

This change fixes that and adds a java_sdk_library as a java_sdk_libs
module.

Bug: 177892522
Test: m nothing
Change-Id: Ided57b846ce5b8940c7e898c786fd77602582ea2
2021-05-13 21:25:42 +01:00