Commit Graph

4286 Commits

Author SHA1 Message Date
Jiyong Park
d7536ba58d shared_lib dependency from a static lib crosses the APEX boundary
cc_library_static {
    name: "libfoo",
    shared_libs: ["libbar"],
}

cc_library {
   name: "libbar",
}

If libfoo is part of an APEX, then libbar is no longer considered as a
member of the APEX, because it isn't actually linked to libfoo.

To distinguish such a shared lib dependency from a static library from a
shared lib dependency from a shared library, a new dep type
SharedFromStaticDepTag is introduced. It is treated exactly the same as
SharedDepTag, except when we determine whether a dependency is crossing
the APEX boundary or not.

This allows us to check the apex_available property more correctly.
Previously, modules were incorrectly considered as being used for an
APEX due to the shared lib dependency from a static lib.

As a good side effect, this also reduces the number of APEX variants.
Specifically, on aosp_arm64, the number of the generated modules were
reduced from 44745 to 44180.

Exempt-From-Owner-Approval: cherry-pick from internal

Bug: 147671264
Test: m

Merged-In: I899ccb9eae1574effef77ca1bc3a0df145983861
(cherry picked from commit 931b676a69)
Change-Id: I899ccb9eae1574effef77ca1bc3a0df145983861
2020-02-06 14:45:43 +09:00
Jiyong Park
0f80c1848a apex_available tracks static dependencies
This change fixes a bug that apex_available is not enforced for static
dependencies. For example, a module with 'apex_available:
["//apex_available:platform"]' was able to be statically linked to any
APEX. This was happening because the check was done on the modules that
are actually installed to an APEX. Static dependencies of the modules
were not counted as they are not installed to the APEX as files.

Fixing this bug by doing the check by traversing the tree in the method
checkApexAvailability.

This change includes a few number of related changes:

1) DepIsInSameApex implementation for cc.Module was changed as well.
Previuosly, it returned false only when the dependency is actually a
stub variant of a lib. Now, it returns false when the dependency has one
or more stub variants. To understand why, we need to recall that when
there is a dependency to a lib having stubs, we actually create two
dependencies: to the non-stub variant and to the stub variant during the
DepsMutator phase. And later in the build action generation phase, we
choose one of them depending on the context. Also recall that an APEX
variant is created only when DepIsInSameApex returns true. Given these,
with the previous implementatin of DepIsInSameApex, we did create apex
variants of the non-stub variant of the dependency, while not creating
the apex variant for the stub variant. This is not right; we needlessly
created the apex variant. The extra apex variant has caused no harm so
far, but since the apex_available check became more correct, it actually
breaks the build. To fix the issue, we stop creating the APEX variant
both for non-stub and stub variants.

2) platform variant is created regardless of the apex_available value.
This is required for the case when a library X that provides stub is in
an APEX A and is configured to be available only for A. In that case,
libs in other APEX can't use the stub library since the stub library is
mutated only for apex A. By creating the platform variant for the stub
library, it can be used from outside as the default dependency variation
is set to the platform variant when creating the APEX variations.

3) The ApexAvailableWhitelist is added with the dependencies that were
revealed with this change.

Exempt-From-Owner-Approval: cherry-pick from internal

Bug: 147671264
Test: m

Merged-In: Iaedc05494085ff4e8af227a6392bdd0c338b8e6e
(cherry picked from commit fa89944c79)
Change-Id: Iaedc05494085ff4e8af227a6392bdd0c338b8e6e
2020-02-06 14:45:08 +09:00
Jiyong Park
931b676a69 shared_lib dependency from a static lib crosses the APEX boundary
cc_library_static {
    name: "libfoo",
    shared_libs: ["libbar"],
}

cc_library {
   name: "libbar",
}

If libfoo is part of an APEX, then libbar is no longer considered as a
member of the APEX, because it isn't actually linked to libfoo.

To distinguish such a shared lib dependency from a static library from a
shared lib dependency from a shared library, a new dep type
SharedFromStaticDepTag is introduced. It is treated exactly the same as
SharedDepTag, except when we determine whether a dependency is crossing
the APEX boundary or not.

This allows us to check the apex_available property more correctly.
Previously, modules were incorrectly considered as being used for an
APEX due to the shared lib dependency from a static lib.

As a good side effect, this also reduces the number of APEX variants.
Specifically, on aosp_arm64, the number of the generated modules were
reduced from 44745 to 44180.

Bug: 147671264
Test: m

Change-Id: I899ccb9eae1574effef77ca1bc3a0df145983861
2020-02-06 09:16:19 +09:00
Jiyong Park
fa89944c79 apex_available tracks static dependencies
This change fixes a bug that apex_available is not enforced for static
dependencies. For example, a module with 'apex_available:
["//apex_available:platform"]' was able to be statically linked to any
APEX. This was happening because the check was done on the modules that
are actually installed to an APEX. Static dependencies of the modules
were not counted as they are not installed to the APEX as files.

Fixing this bug by doing the check by traversing the tree in the method
checkApexAvailability.

This change includes a few number of related changes:

1) DepIsInSameApex implementation for cc.Module was changed as well.
Previuosly, it returned false only when the dependency is actually a
stub variant of a lib. Now, it returns false when the dependency has one
or more stub variants. To understand why, we need to recall that when
there is a dependency to a lib having stubs, we actually create two
dependencies: to the non-stub variant and to the stub variant during the
DepsMutator phase. And later in the build action generation phase, we
choose one of them depending on the context. Also recall that an APEX
variant is created only when DepIsInSameApex returns true. Given these,
with the previous implementatin of DepIsInSameApex, we did create apex
variants of the non-stub variant of the dependency, while not creating
the apex variant for the stub variant. This is not right; we needlessly
created the apex variant. The extra apex variant has caused no harm so
far, but since the apex_available check became more correct, it actually
breaks the build. To fix the issue, we stop creating the APEX variant
both for non-stub and stub variants.

2) platform variant is created regardless of the apex_available value.
This is required for the case when a library X that provides stub is in
an APEX A and is configured to be available only for A. In that case,
libs in other APEX can't use the stub library since the stub library is
mutated only for apex A. By creating the platform variant for the stub
library, it can be used from outside as the default dependency variation
is set to the platform variant when creating the APEX variations.

3) The ApexAvailableWhitelist is added with the dependencies that were
revealed with this change.

Bug: 147671264
Test: m

Change-Id: Iaedc05494085ff4e8af227a6392bdd0c338b8e6e
2020-02-06 09:16:19 +09:00
Vic Yang
f36dceef4d More cleanup of no-vendor-variant VNDK whitelist
Bug: 148082691
Test: Build success
Change-Id: Icad28af29e80908c0d353f6fc70913678fd82064
2020-02-05 15:21:55 -08:00
Automerger Merge Worker
020f3b8886 Merge "Dedup adding of arch/common properties to cc library snapshot" am: 26a6eb7971 am: af3948b120 am: f14a1746e5
Change-Id: Iaa2df6f64906251bf6434c3cff0fb50fb563c100
2020-02-04 23:32:30 +00:00
Paul Duffin
74fc190d90 Dedup adding of arch/common properties to cc library snapshot
Some additional, possibly arch specific, properties need adding to
cc library (e.g. recovery_available). This dedups and cleans up the
code involved to simply the addition of those new properties.

Bug: 142918168
Test: m nothing
Change-Id: I0963aa02e9504af1ae9b427ff1016e7c481465f4
2020-02-04 18:48:31 +00:00
Nicolas Geoffray
0b78766fbc Support missing a shared library variant.
When SOONG_ALLOW_MISSING_DEPENDENCIES is set, it should be OK to miss
shared library variants.

Test: master-art manifest, use bionic stubs
Bug: 142935992
Change-Id: Ie0054acfef7c4406594a87378a7029380a9fda50
2020-02-04 18:27:55 +00:00
Automerger Merge Worker
5af05cc080 Merge "Disable no-vendor-variant VNDK for CFI modules" am: 6cee077b0b am: 4e702abe65 am: 24f82725ab
Change-Id: Ic852d1d25cff79aa7d0574428ef84d62dc304de9
2020-02-03 21:44:09 +00:00
Vic Yang
6cee077b0b Merge "Disable no-vendor-variant VNDK for CFI modules" 2020-02-03 21:09:47 +00:00
Automerger Merge Worker
5426c89024 Merge "Switch to r370808b." am: ab2053ffab am: ee7726901a am: 1d6ab48772
Change-Id: I424662a5968b93d6a3e180db34a0631731f17d4f
2020-02-03 18:37:23 +00:00
Stephen Hines
ab2053ffab Merge "Switch to r370808b." 2020-02-03 18:06:41 +00:00
Automerger Merge Worker
a7f9df3c6c Merge "Fix writing module_bp_cc_deps.json" am: 4136c9b9ea am: 52010cc9c3 am: 4544d561d9
Change-Id: I0d4a8878946848f3bf851aa3cf412c65c9a013e5
2020-02-01 06:52:53 +00:00
Treehugger Robot
4136c9b9ea Merge "Fix writing module_bp_cc_deps.json" 2020-02-01 06:14:28 +00:00
Stephen Hines
2b2df22ca5 Switch to r370808b.
Bug: http://b/147628579
Test: m and run CTS subset
Change-Id: I9eb1b33385b939001bfcc50c807829068a35744c
2020-01-31 15:24:22 -08:00
Automerger Merge Worker
ff06acfc01 Merge "Default to pattern initialization for uninitialized variables (try 2)." am: d35fcae5dc am: b286d3e1d9 am: 447c894c0d
Change-Id: I698c550344cafec72d7a439a203b2bc6e8066672
2020-01-31 22:25:23 +00:00
Treehugger Robot
d35fcae5dc Merge "Default to pattern initialization for uninitialized variables (try 2)." 2020-01-31 21:52:44 +00:00
Vic Yang
1a5812a262 Disable no-vendor-variant VNDK for CFI modules
If CFI is enabled for a module, no-vendor-variant VNDK will fail
because CFI is not used for the vendor variant.

Bug: 148638729
Test: Remove libstagefright_bufferpool@2.0 from the whitelist. Build on
      crosshatch is successful. Build on a ARM32 device with
      TARGET_VNDK_USE_CORE_VARIANT set and check no-vendor-variant VNDK
      is still enabled for libstagefright_bufferpool@2.0.

Change-Id: Ib0a411d7ea769097186afa802751b0796527ec76
2020-01-31 10:41:27 -08:00
Colin Cross
37c5cda47c Fix writing module_bp_cc_deps.json
module_bp_cc_deps.json was not written through
android.WriteFileToOuptutDir, so it didn't get the absolute path
prepended when sandboxing was turned on.  Reuse the implementation
from module_bp_java_deps.json.

Bug: 147409906
Test: m SOONG_COLLECT_CC_DEPS=1 nothing
Change-Id: I3b255bdfd3b4c442db06fe185765414905531410
2020-01-31 18:12:41 +00:00
Automerger Merge Worker
b104dcfe61 Merge "Add -fprofile-sample-accurate flag for sampling PGO" am: 56bcaa6dc1 am: 13c665036f am: b700c75aaf
Change-Id: Iaa5fe8fd858389e564a0d7202c2c41e0a858b6cc
2020-01-31 17:14:50 +00:00
Automerger Merge Worker
662bf45773 Merge "Add -fdebug-info-for-profiling flag to emit more debug info for sampling pgo" am: 50dab0e45f am: 8481ce2850 am: 8a6f16bf11
Change-Id: I4b8f9f50e83a44b4e7d9a0551349b4e26e0008f1
2020-01-31 17:14:09 +00:00
Yi Kong
b6ec66a173 Add -fprofile-sample-accurate flag for sampling PGO
This flag indicates that the sample profile data matches the source
and can be fully trusted. The compiler will make aggressive
assumption that functions without any samples are cold functions,
and will optimize for size for them.

Test: binary size reduces to match instr PGO
Bug: 79161490
Change-Id: I53d6d05be70c39e5eb28b2f5b0549d9eb6b5cc62
2020-01-31 12:36:38 +08:00
Stephen Hines
0e1d5d8ab3 Default to pattern initialization for uninitialized variables (try 2).
Pattern initialization helps us make C++ safer, while not altering the
semantics/usage of C++ (as zero init does).

Bug: 131390872
Test: Local testing. Parts of CTS.
Change-Id: Ic4af9260a48c10cbd70315fa56d6b01c5ca61768
2020-01-30 15:06:00 -08:00
Automerger Merge Worker
4c70ee6274 Merge "build: soong: windres: use clang to preprocess" am: 1562752fc6 am: 5f2c30c6dc am: 411b9aacd8
Change-Id: I8917d1a3c508a69f9bd7abfc0870403c933e2596
2020-01-30 18:18:46 +00:00
Automerger Merge Worker
3ecb0f107f Merge "Use relocation-packer style relocation packing between 23 and 28." am: 730573cfc4 am: 6bae66aa74 am: 11631c65bb
Change-Id: I92ed8ba3441bf173876895f420086a18f80929a7
2020-01-30 18:17:16 +00:00
Yi Kong
61a1b988fd Add -fdebug-info-for-profiling flag to emit more debug info for sampling pgo
Test: m
Bug: 79161490
Change-Id: I25cfbf78b27d653286dc7f956743f8855b852b35
2020-01-30 21:15:12 +08:00
Treehugger Robot
1562752fc6 Merge "build: soong: windres: use clang to preprocess" 2020-01-30 02:21:02 +00:00
Nick Desaulniers
18eeffa4ce build: soong: windres: use clang to preprocess
Otherwise binaries under:
prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/bin/
are being invoked.

https://sourceware.org/binutils/docs-2.33.1/binutils/windres.html
states:
When windres reads an rc file, it runs it through the C preprocessor first.

Use the `--preprocessor` flag to specify the exact command to run. The
args to the preprocessor get wiped out when setting that flag, so
`-E -xc-header -DRC_INVOKED` must be re-passed, else clang will error as
it tries to invoke ld.

Once AOSP packages llvm-rc, aosp/1206346 can be rebased on top, so this
patch should be a short lived change.

Bug: 147295872
Test: <remove mingw gcc> && lunch aosp_x86-eng && \
  cd external/mdnsresponder && mm
Change-Id: Ic0e6b75e7e964ee9f9757e534cddd16438604c34
Suggested-by: Pirama Arumuga Nainar <pirama@google.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
2020-01-29 16:28:06 -08:00
Elliott Hughes
730573cfc4 Merge "Use relocation-packer style relocation packing between 23 and 28." 2020-01-29 22:18:06 +00:00
Automerger Merge Worker
14c4f427a3 Merge "Don't check library variant identicalness for VNDK extensions" am: 7a833bdf2b am: 3bd0c2a219 am: 54df290daa
Change-Id: I93652a1ac4bd66c6c294f64280df4a40f3155020
2020-01-29 22:03:12 +00:00
Steven Laver
7a833bdf2b Merge "Don't check library variant identicalness for VNDK extensions" 2020-01-29 21:26:48 +00:00
Automerger Merge Worker
0fc81af6a9 Merge "Add whole_static_libs to non-svelte configs." am: c0ebc81e3d am: b3e6f5f64e am: 9beba772e6
Change-Id: I1557d0e0f3fc53dc8264703022bef30545ffff7c
2020-01-29 18:01:22 +00:00
Christopher Ferris
c0ebc81e3d Merge "Add whole_static_libs to non-svelte configs." 2020-01-29 17:22:01 +00:00
Steven Laver
025d98162b Don't check library variant identicalness for VNDK extensions
These libraries don't have a core variant against which to check
for identicalness.

Bug: 148526685
Test: built a previously failing target with this change (succeeded)
Change-Id: Ide8ec58df1868175f52c005bf73bb81fc196a571
2020-01-29 08:23:09 -08:00
Automerger Merge Worker
3ccf41b598 Add AUTO_UNINITIALIZE as another option for trivial initialization. am: 797e1959e3 am: 5cbb2c9c4e am: 7e785a4708
Change-Id: Id11df160ddadc47428c58fb15c270ae9b74c4c9d
2020-01-29 01:13:16 +00:00
Stephen Hines
797e1959e3 Add AUTO_UNINITIALIZE as another option for trivial initialization.
This lets us test uninitialized variables even if we change the defaults
for -ftrivial-auto-var-init.

Bug: 131390872
Test: AUTO_UNINITIALIZE=true m
Change-Id: I2b4473a0547dc9c4d9f081d8af2d283f17f66f7a
2020-01-28 14:43:11 -08:00
Elliott Hughes
da909feb95 Use relocation-packer style relocation packing between 23 and 28.
Bug: http://b/147452927
Test: treehugger
Change-Id: I8197dcb7884993d75775eaea667981d7822d6d1d
2020-01-28 13:08:40 -08:00
Automerger Merge Worker
1bf59ab8ab Merge "Add support for experimentally enabling RBE support on specific rules." am: 5e0dbe4e3e am: 205edb5da3 am: a171ec4e95
Change-Id: I2922a3dd955162fa9f713ebfe9fe1852d76fd2c3
2020-01-28 20:31:14 +00:00
Christopher Ferris
c71193ae53 Add whole_static_libs to non-svelte configs.
This is to support enabling scudo only for non-svelte configs.

Also, add exclude_static_libs to allow removing the jemalloc libs.

Bug: 137795072

Test: Verified that a svelte and non-svelte config can use this method
Test: to properly choose between scudo and jemalloc.

Change-Id: Iec6bfe159f8491138e93dde1d225a8c874c7ce31
2020-01-28 12:02:46 -08:00
Ramy Medhat
8ea054a81e Add support for experimentally enabling RBE support on specific rules.
This CL adds RBE support to javac, r8, and d8 rules which is only
enabled if respective environment variables are set.

Test: an aosp_crosshatch build with and without the new variables.
Change-Id: Ic82f3627944f6a5ee7b9f3228170c2709b1bfcb8
2020-01-28 12:42:47 -05:00
Automerger Merge Worker
2b4893b669 Add target.ramdisk am: cf4832c8bc am: 0e4b401dd0 am: 7bfa6b0a56
Change-Id: I9a43e57ee9fa173fe80633e7974b74c7d4149a2a
2020-01-25 01:14:19 +00:00
Automerger Merge Worker
7c6b9aa0f4 Add ramdisk image. am: 1b3348d50a am: 45fd8b4547 am: f9e51442b6
Change-Id: Icfa7eaeaa70bc7380a01b33c110f74ec783c8b4d
2020-01-25 01:14:09 +00:00
Yifan Hong
0e4b401dd0 Add target.ramdisk
am: cf4832c8bc

Change-Id: Iffaa86779dc03939bc3e94f6fba53c5b9f6dbbbb
2020-01-24 16:33:45 -08:00
Yifan Hong
45fd8b4547 Add ramdisk image.
am: 1b3348d50a

Change-Id: I9bf85d8119a970b0526a13b6a7e251f6de307929
2020-01-24 16:32:50 -08:00
Yifan Hong
a8c82cc218 Merge changes from topics "board_use_recovery_as_root_soong", "ramdisk"
* changes:
  libatomic / libgcc_stripped: ramdisk_available
  Add target.ramdisk
  Ramdisk modules install to correct location
  Add ramdisk image.
2020-01-24 22:39:41 +00:00
Ivailo Karamanolev
5650166b98 Merge "Add android.hardware.light-ndk_platform to vndkMustUseVendorVariantList" 2020-01-23 16:05:08 +00:00
Automerger Merge Worker
7ae23db1e5 Merge "Revert "Revert "apex_vndk uses vendor variants only""" am: 7b2970536e am: 4e5f39e9d8 am: d2293a5d6c
Change-Id: I75f3c5fbf97a422a15deebf9a07514a27517b88c
2020-01-23 13:50:46 +00:00
Treehugger Robot
7b2970536e Merge "Revert "Revert "apex_vndk uses vendor variants only""" 2020-01-23 13:16:52 +00:00
Ivailo Karamanolev
1415cb8397 Add android.hardware.light-ndk_platform to vndkMustUseVendorVariantList
aidl libs need to be differentiated because they explicitly set
different system/vendor stabilities.

Bug: 142230898
Test: fixes build
Change-Id: Ib09baa946faff8334f7c50568db5e6735dfbbfe2
2020-01-23 10:42:01 +01:00
Automerger Merge Worker
c0bd73f156 Merge "Reland "Clean up no-vendor-variant VNDK whitelist"" am: 641e87a02c am: a54fbcbce0 am: 6db7972481
Change-Id: I10726f2b4b1337a529112b5c74691e84f9a6f376
2020-01-23 06:43:52 +00:00