Commit Graph

533 Commits

Author SHA1 Message Date
LaMont Jones
89d97bf901 base_rules: Separate aconfig and module_info code
Record LOCAL_ACONFIG_FILES when LOCAL_SOONG_MODULE_INFO_JSON is defined.

Bug: b/308625757
Test: out/soong/module-info-${TARGET_PRODUCT}.json is unchanged
Test: fixes some aconfig flags.
Change-Id: I7ca9d2723e38ec5588bc6ada8769320a0b63bcb5
2024-01-25 19:15:09 +00:00
Inseob Kim
7b06c6918e Remove LOCAL_FILE_CONTEXTS
It's not used anymore.

Bug: N/A
Test: TH
Change-Id: Ib61922add91ad07e2c28b0950117470e5435ab34
2024-01-18 12:33:02 +09:00
Jiyong Park
7a66924a60 Revert "Revert "Limit System SDK to 34 for Java modules in the v..."
Revert submission 2897568-revert-2894701-limit_systemsdk-WNEMOTGMRS

Reason for revert: Forward fix was merged

Reverted changes: /q/submissionid:2897568-revert-2894701-limit_systemsdk-WNEMOTGMRS

Change-Id: Ia103db05bfaebdfd301dbf84183a89d01f58eb67
2024-01-04 23:20:49 +00:00
Sebastian Pickl
78c6e1368b Revert "Limit System SDK to 34 for Java modules in the vendor pa..."
Revert submission 2894701-limit_systemsdk

Reason for revert: might be breaking builds at 318695834

Bug: 318695834

Reverted changes: /q/submissionid:2894701-limit_systemsdk

Change-Id: Idfaec65ddfbb0091672993d6c857a06e9cfdfb13
2024-01-04 19:28:02 +00:00
Jiyong Park
e67e0dda48 Merge "Limit System SDK to 34 for Java modules in the vendor partition" into main 2024-01-04 09:37:36 +00:00
Jiyong Park
e3c278844d Limit System SDK to 34 for Java modules in the vendor partition
This change disallows Java modules in the vendor partition to use System
SDK that is newer than API level 34; 34 is the latest allowed.

Background 1: with Trunk Stable, the system/vendor interface is released
at Q2 whereas the system/app interface is released at Q3. In other
words, at Q2, the APIs which will be added to the system SDK at Q3 are
not available. Since the system/vendor interface (which is fronzen at
Q2) is what the modules in the vendor partition will be building
against, they can't and shouldn't use those new APIs that will be added
in the future (Q3). Using those APIs is risky because there's a chance
that those APIs get removed or changed between Q2 and Q3. For example,
2024 Q2 is technically still Android U, not Android V.

Background 2: The use of Java APIs in the vendor partition had many
issues. Most significantly, those "vendor" Java apps are categorized as
part of the system partition because all Java app processes require
access to platform internal libraries that are prohibited to vendor
processes. Furthermore, since the Project Treble, the vendor partition
was re-purposed to a partition to host SoC-dependent bits - usually
HALs. Implementing HALs in Java has never been officially supported and
has had many loop holes.

We'd like to use both background 1 and 2 as a chance to disallow any
Java code in the vendor partition. However, since there are already some
Java modules in the partition, we can't suddenly ban it. The deprecation
will be made gradually, and this CL is the start.

This CL implements the "Make" part of the restriction. The "Soong" part
will follow.

Note that LOCAL_SDK_VERSION := current or LOCAL_SDK_VERSION :=
system_current is automatically overridden into 34 or system_34. This is
to prevent sudden breakage of vendor modules that have been targetting
the latest (i.e. current) API level. They will however fail if they use
APIs newer than API level 34.

Bug: 314011075
Test: The following Android.mk module fails as expected.
some/Android.mk:

include $(CLEAR_VARS)
LOCAL_MODULE := example_module
LOCAL_VENDOR_MODULE := true
LOCAL_SDK_VERSION := system_35
LOCAL_SRC_FILES := Foo.java
include $(BUILD_JAVA_LIBRARY)

FAILED:
some/Android.mk: error: example_module: Incompatible
LOCAL_SDK_VERSION 'system_35'. System SDK version '35' is not supported.
Supported versions are: 28 29 30 31 32 33 34

Change-Id: I44c29c6dc45b91a9a30b8a21cd2baae685fa27fb
2024-01-03 16:35:08 +09:00
Colin Cross
3b89c6532a Support Soong-generated module-info.json entries
Allow Soong modules to generate their own module-info.json entries
by merging Soong's module-info.json file into the one generated in
Make.

Skip collecting unnecessary ALL_MODULES.$(my_register_name).*
that are only used for module-info.json if the module was already
handled by Soong via the LOCAL_SOONG_MODULE_INFO_JSON property.

Bug: 309006256
Test: Compare module-info.json
Change-Id: I2c9db3c7c7bae7bd6cb889d7ebc2e383c278c82d
2024-01-02 17:21:22 -08:00
Colin Cross
b2063049f8 Don't install vintf and init.rc from Soong
Soong is now handling installing init.rc and vintf fragment files,
don't install them in Make for Soong modules.

Bug: 309006256
Test: Compare installed files
Change-Id: Ied43c207c6ae158d3f41d81c7fe16688331bf13c
2024-01-02 14:33:20 -08:00
Colin Cross
7bf03bf68e Fix test data to use my_test_data_file_pairs
The format of LOCAL_TEST_DATA when provided by Soong can included a
third colon-separated field with an extra relative path that is not
being handled when assigning to ALL_MODULES.$(my_register_name).TEST_DATA.
Use my_test_data_file_pairs instead, which has already been transformed
to a src:dest pair.

Bug: 311428265
Test: examine module-info.json
Change-Id: I3a089cc24ea1492f1f7cf891c73ee7b43f273bb3
2023-11-29 10:18:52 -08:00
Colin Cross
2062646c87 Don't install test data from Soong
Soong has already created the test data installation rules.  Make still
handles packaging the test data into test suites.

Bug: 311428265
Test: atest --host toybox-gtests --test-timeout=120000
Change-Id: Ida0469e600b1dec4ce4e450a6c517ae13c133ded
2023-11-29 10:18:52 -08:00
Colin Cross
9cb51b7446 Store ALL_DEPS under my_register_name
ALL_DEPS was original stored in ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS for
use by the old licensing code.  That has been removed, and it is now
only used by module-info.json.  Storing it with $(LOCAL_MODULE) causes
_32 entries in module-info.json to be missing dependencies, and causes
the dependencies from _32 variants to be squashed into the normal
variants.  Replace ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS with
ALL_MODULES.$(my_register_name).ALL_DEPS.

Test: builds
Change-Id: Ieddfcddd8547b61bd938ae051beb738268aac5af
2023-11-16 11:46:40 -08:00
Colin Cross
93e1e702a4 Remove ALL_DEPS.MODULES
Nothing reads it any more.

Test: m checkbuild
Change-Id: I6f11a5273b0c2cc92a3b0c49bbefbf084cb734a1
2023-11-14 11:03:08 -08:00
Colin Cross
34fe77a493 Removed unused license code
Nothing ever reads ALL_DEPS.*.LICENSE, and its an ever-growing list
that is sorted every time, which is extremely expensive.

notice_target is never set after I4cddf9a381a1258bdc2b1b42be72c447df10d234,
remove all the related code.

Test: no change to out/build-aosp_cf_x86_64_phone.ninja
Change-Id: I0fa6a46e62ef8aa78873b43d3064b57b1c54de51
2023-11-02 10:10:36 -07:00
Colin Cross
aed37d79f2 Remove obsolete uses of LOCAL_MODULE_TAGS
Only LOCAL_MODULE_TAGS := tests is used is meaningful in the current
implementation.  "optional" and "samples" both exist in the tree, but
are meaningless.  "gnu", "user", "eng" and "debug" are  no longer used,
and are already forbidden by the unusual tags check.  The info from the
"module" target is now available in module-info.json.  Delete all the
irrelevant code.

Test: no change to out/build-aosp_cf_x86_64_phone.ninja
Change-Id: I04e8178a362e382a1a4bd997c1b4c3a480db7714
2023-11-02 10:10:06 -07:00
Jooyung Han
8b162283f7 Rewrite how to generate apexkeys.txt
Instead of listing all apexes in the source tree, now each apex emits
its own fragment for apexkeys.txt, which is pointed by
LOCAL_APEX_KEYS_FILE. Makefile collects apexkeys.txt from installed apex
files. This is to avoid listing unrelated apexes (not installed,
testdata, unexported namespaces, etc.)

Bug: 304914238
Test: m apexkeys.txt
Test: m blueprint-tests
Change-Id: I6b5601609d16452a0717f09ecaa703ee09693094
2023-11-01 13:06:08 +09:00
Cole Faust
c67e769b8c Install LOCAL_SOONG_INSTALL_SYMLINKS even if LOCAL_SOONG_INSTALLED_MODULE isn't set
LOCAL_SOONG_INSTALL_SYMLINKS can now be set by the install_symlink
module type. The install_symlink module type doesn't set
LOCAL_SOONG_INSTALLED_MODULE because make tries to copy that file
around, which doesn't work with a symlink.

Bug: 205632228
Test: built and ran the emulator observed the /system/bin/hwservicemanager symlink is still there
Change-Id: I1ec355b5ae057d0b7fe167674d70da6a4d03f6b5
2023-09-05 14:16:38 -07:00
Cole Faust
075d9622ff Ignore vndk compat symlinks in artifact path requirements
A change is being made to properly track apex compat symlinks in
the installation logic, which causes the artifact path requirements
to start complaining about them. Exclude them from the artifact path
requirements.

Bug: 205632228
Test: m nothing
Change-Id: Ie975b7450574d41bb13bb2179edc31ba4edd413e
2023-08-22 11:58:17 -07:00
Treehugger Robot
21e6105b79 Merge "Combine aconfig cache files into per-partition dumps." into main 2023-07-21 14:34:44 +00:00
Jooyung Han
2ecded04a6 Do not install required modules from order-only deps
When a vintf_fragments or init_rc file is shared by two modules,
unintended modules are installed due to the shared file.

This was caused by add-all-target-to-target-required-modules-deps.

With the following definitions:

cc_binary {
  name: "foo",
  vintf_fragments: ["shared.xml"],
  required: ["foo-req"],
}

cc_binary {
  name: "bar",
  vintf_fragments: ["shared.xml"],
}

When installing "bar", surprisingly, "foo-req" is installed due to the
link between "shared.xml" and "foo-req" added by
add-all-target-to-target-required-modules-deps.

To fix that, in this change, vintf_fragments and init_rc files are
marked as "order-only" deps. In
add-all-target-to-target-required-modules-deps, order-only deps are not
used to add links to "required" modules.

Now, with the same definitions, installing "bar" won't installs
"foo-req".

Bug: 198818343
Test: (see above)
Change-Id: I16be0dcb84564c559cb2f4223e2812321ee14729
2023-07-11 22:26:15 +09:00
Jooyung Han
b14b4cd6a5 Install vintf_fragments/init_rc along with targets
Even though `m foo` installs vintf_fragments and init_rc files. There
was no direct dependency from the installed target to
vintf_fragments/init_rc files.

With the following:

cc_binary {
  name: "foo",
  vintf_fragments: ["foo.xml"]
}

`m out/target/product/vsoc_x86_64/system/bin/foo` didn't install
foo.xml.

This change adds the order-only deps from the target install to
vintf_fragments/init_fc files.

Bug: 198818343
Test: (see above)
Change-Id: I4656d43d15407a85fea7c95b22e4bbe19fb86aee
2023-07-11 22:26:12 +09:00
Joe Onorato
63a84551ca Combine aconfig cache files into per-partition dumps.
Bug: 283910439
Test: manual validation of outputs, soong unit tests
Change-Id: I5f7dc16ee42c3722dc66ffe964ed20479eea1e15
2023-07-07 17:33:09 -07:00
Jooyung Han
7650ddad01 Install vintf_fragments even when they are shared
Vintf_fragments should be installed regardless when they are shared with
other modules or not.

cc_binary {
  name: "foo",
  vintf_fragments: ["shared.xml"],
}

cc_binary {
  name: "bar",
  vintf_fragments: ["shared.xml"],
}

Either `m bar` or `m foo` should install `shared.xml`.

Previously, only *new* vintf_fragments were installed, which means, one
of "foo" or "bar" didn't trigger the installation of "shared.xml".

Bug: 198818343
Test: (see above)
Change-Id: I52b831df046b585db41449f06a6f9c684d623468
2023-07-06 13:45:12 +09:00
Dan Albert
617597c0fa Trace build time by module name.
Bug: http://b/259130368
Test: built, manually examined trace file to find module_name
Change-Id: I2a20b60726e884ca82ba3244669d0257e9114222
2023-06-26 23:30:31 +00:00
Devin Moore
48d7b3462d Add static_libs to module-info.json
This is helpful for analyzing how often a library is included statically
on a device. If a large library is linked statically in many processes
in a single device, it may be a good candidate for shared linking
instead.

This increases the size of module-info.json file on Cuttlefish by ~12.5%
from 65MB to 72MB.

Test: m
Bug: 280829178
Change-Id: I3614d86d799810e1ce845e1097f43f1ec0a412a3
2023-06-05 20:17:50 +00:00
Cole Faust
ab4f856bbc Remove gpl_source.tgz
This file was an archive of all the gpl files that could be found
in the source tree. Because it looks for gpl files using $(wildcard),
kati had to rerun the wildcards every single build to see if they had
changed. These GPL wildcards made up 30294 of 63996 wildcards present
on aosp-master. Removing these wildcards saves (aosp/internal) ~0.2/~0.1
seconds from every build, and ~0.4/~0.6 seconds from the wildcard
checking portion of kati. (The whole build sees <0.4s/0.6s of
improvement because it's parallelized with the shell checking, but
improvements here mean that we can now improve the shell commands as
well and get more fruitful results)

We don't actually use gpl_source.tgz anywhere, so we can just remove it.

Bug: 282079550
Test: m nothing
Change-Id: I77141dbb39b2d8ebd96bc258fe7dbdff5a372977
2023-05-11 18:00:38 -07:00
Wei Li
499333616c Generate SBOM of the target product in file sbom.spdx.json in product out directory.
Original aosp/2374663 was reverted, so this change cnotains the implementation but disabled by default and SBOM will not be built by default with "m dist".

The feature will be enabled later in small CLs after running tests successfully in forrest.

Test: m sbom
Test: m dist
Test: on aosp, lunch aosp_bluejay-userdebug && m dist
Bug: 266726655
Change-Id: I926d0f97f3a0330ef61d059f12ea660005d370e6
2023-03-14 15:14:06 -07:00
Yike
40f5c3a1fe Export test config info to module-info while the module is uninstallable
All Robolectric tests are set as uninstallable modules, which skips the
logic exporting `test_config` and `auto_test_config` to module-info.
But downstream infra needs this information to determine if a module is
a test module. So that this change moves the logic that sets
`test_config` and `auto_test_config` for Robolectric tests out of the
snippet specifically for installable module.

Test: m out/target/product/coral/module-info.json
Bug: 268670243
Change-Id: Icf4caf3d6833f3a39927fb69c6fb76762b8f6f14
2023-02-15 03:18:28 +08:00
Kelvin Zhang
1143aaf772 Fix generic ramdisk build failures on dedicated recovery partitions
For targets with BoardUsesRecoveryAsBoot set to true, binaries in
generic_ramdisk are installed to $OUT/recovery/root/first_stage_ramdisk
This path is not on generic_ramdisk.mk 's allowlist, hence build fails.
To fix the failure, add $OUT/recovery/root/first_stage_ramdisk/system to
allow list.

Test: th, lunch eos-userdebug(a dedicated recovery partition target) and build.

Bug: 265477065
Change-Id: I89cf229adc028a7e5de632b9a3188ecb411de735
2023-01-17 17:11:55 +00:00
Yike Zhang
6ba1c7b6c3 Merge "Export Java libraries into module-info" 2022-09-08 10:46:59 +00:00
Yike
82f0a2d751 Export Java libraries into module-info
Some Java modules are defined in Android.mk and they declare
dependencies in eigther LOCAL_STATIC_JAVA_LIBRARIES or
LOCAL_JAVA_LIBRARIES. This information needs to present in
module_info.json and be exported to properly generate Bazel targets
that include these dependencies.

Test: m out/target/product/coral/module-info.json
Bug: 245686435
Change-Id: I77bc8de59f1d46bb098463066e1f52b98ebae955
2022-09-08 07:59:20 +00:00
Kiyoung Kim
ad0d7710fe Replace dependencies from the Makefile to API imported modules
There are some module definitions in the Makefile, which needs to be
built with API imported module. This change replaces existing
dependencies from the Makefile, to append suffix on the reference, so it
can be linked to API imported modules.

Bug: 243736650
Test: 'ALLOW_MISSING_DEPENDENCIES=true m halutil' succeeded.
Change-Id: I12baa36e41c0c69228be5f0d08fb4c18eb8a22b1
2022-09-02 13:15:05 +09:00
Zhenhuang Wang
415ee12c76 Export test_options.tags to module-info
The test_options.tags attribute modifies execution behavior when running
tests in ATest Bazel mode. Exporting the value to module-info enables
ATest to add them to the corresponding Bazel target.

Bug: 240928948
Test: manually add `test_options.tags` attribute and run:
    $ refreshmod && \
      cat out/target/product/generic/module-info.json |\
      grep <tags>
Change-Id: I1a70d5c66703ed6a5a250459a80e8bca71d659b6
2022-08-22 20:59:54 +08:00
Cole Faust
f773f3a024 Add deprecation warning for base-rules-hook
This lets product/board config define a function that
is called while processing modules defined in an
Android.mk file.

When the product/board configs are converted
to starlark, they won't be able to supply a base-rules-hook
anymore. Emit a warning saying that it's deprecated.

Bug: 226974242
Test: Manually
Change-Id: Ie6baa4952516a3ec5c6c440f9106f7b5185803b7
2022-04-28 16:20:32 -07:00
Treehugger Robot
8a6fa9c7c5 Merge "Allow init_rc files to be installed in ramdisk" 2022-04-20 18:07:17 +00:00
Kelvin Zhang
701f161eb6 Allow init_rc files to be installed in ramdisk
Test: th
Test: m target-file-package, then check INIT_BOOT dir of target file,
    make sure snapuserd.rc is there
Bug: 219841787
Bug: 228893064

Change-Id: Iac3f219c763fbf8acd17f0339089c7576974dc05
2022-04-15 10:17:18 -07:00
Trevor Radcliffe
6bb8a1ad22 Add comment for previous CL
Let people know why why change 2051889 was created

Bug: 226402757
Test: N/A
Change-Id: I57cfa6382805aa20e2a905936d63ffaec6c3c236
2022-04-05 16:29:18 +00:00
Trevor Radcliffe
74a4de735b Make changes to support test_suites for test lib
Had to make changes to make to ensure that we don't duplicate

Bug: 226402757
Test: Confirmed that libraries are installed to the correct place
Change-Id: I64e4a5ab7cac3fb57442d19b0f796fffb0a3f48a
2022-03-31 18:15:58 +00:00
Bob Badour
42f00c7b61 Test suite notices using dependencies.
Switch from combine-notice-files to html-notice-rule and
text-notice-rule.

Bug: 151177513
Bug: 213388645
Bug: 210912771

Test: m cts reportmissinglicenses
Change-Id: I59d78553f15f0fd6be87228c933693b63e2ebf04
2022-03-23 11:18:39 -07:00
yangbill
b2219c7052 Add supported variants to module-info
Export the list of variants (host, host_cross, device) a build module
supports to module-info for downstream tools. The values correspond to
the Soong `host_supported`, `host_cross_supported`, and `device_supported`
attribute values.

Bug: 220263783
Test: m out/target/product/vsoc_x86_64/module-info.json
Change-Id: I10ae6ea21791d0d100686dcabecbce543a9adc3f
2022-02-25 01:28:51 +00:00
yangbill
e6b498bf2d Add data_bins to data_dependencies in module-info
This change exports the list of test_data_bins as data dependencies
that are required by modules when running the test.

Bug: 215234071
Test: m out/target/product/vsoc_x86_64/module-info.json
Change-Id: Ie5c1ef70055618a5fa0ba1bcfbcba8054743d41a
2022-02-17 05:17:03 +00:00
yangbill
fa5026c4d8 Export runtime dependencies in module-info
This change exports the list of dependencies that are required by
modules at runtime. Note that only the host case is currently
handled.

Bug: 215243373
Test: m out/target/product/vsoc_x86_64/module-info.json
Change-Id: I05199c54da311e59c7ea87595397ee4eecfab6a3
2022-02-10 08:07:13 +00:00
yangbill
724565d885 Export test data dependencies in module-info
Add the list of targets that are handled as data inputs and
required by tests at runtime.

Bug: 205726862
Test: m out/target/product/vsoc_x86_64/module-info.json
Change-Id: Id1468ebaf8f72cf37787f3cc514a29724c115db5
2022-01-05 10:34:51 +08:00
yangbill
6dd962fdda Preserve all COMPATIBILITY_SUITES values in module-info
Extend COMPATIBILITY_SUITES in module-info to avoid overwriting previous
values. In particular, this happens for the `host-unit-tests` suite
which is automatically added by Soong rules only to be clobbered by the
modules that have both device and host variants.

Bug: 209806322
Test: source build/envsetup.sh ; lunch aosp_cf_x86_64_phone ;
      m out/target/product/vsoc_x86_64/module-info.json
Change-Id: I56a2d4c9786ed3da1e788ba211ec1bcaa6559549
2021-12-14 05:54:30 +00:00
Colin Cross
802f2116ed Translate BUILT_INSTALLED to LOCAL_BUILT_MODULE
Soong creates install rules and lists them in LOCAL_SOONG_INSTALL_PAIRS,
where they get copied to ALL_MODULE.$(m).BUILT_INSTALLED.  BUILT_INSTALLED
is used by package-modules.mk to copy the built modules to alternate
install locations for building zips like continuous_native_tests.zip.

Translate Soong's built module location, which is listed in
LOCAL_PREBUILT_MODULE_FILE, into $(LOCAL_BUILT_MODULE) when setting
BUILT_INSTALLED so that package-modules.mk copies from
$(LOCAL_BUILT_MODULE) instead of $(LOCAL_PREBUILT_MODULE_FILE).  This
ensures that the transitive dependencies added to $(LOCAL_BUILT_MODULE),
for example the unstripped symbols files, are present when
continuous_native_tests.zip is built.

Bug: 206137439
Test: manual
Change-Id: I1a45cd6d3c81d6435a10f4d29557e521753068a4
2021-11-15 13:15:22 -08:00
Treehugger Robot
372d74a8c9 Merge "Record ALL_DEPS by default." 2021-11-11 04:48:16 +00:00
Jim Tang
5c6410edee Record ALL_DEPS by default.
Abandon the use of RECORD_ALL_DEPS to record ALL_DEPS.

BUG: 204397180

Test: m, and inspect module-info.json.
Change-Id: Iaf35580b52c11ad37017b1fb8e0937b859d3f55b
2021-11-11 10:24:51 +08:00
Treehugger Robot
585ec03c47 Merge changes from topic "soong-java-install"
* changes:
  Move java install rules into Soong
  Don't create compatibility suite copy rules for installed path
2021-11-10 17:05:51 +00:00
Colin Cross
a69b809425 Don't create compatibility suite copy rules for installed path
Don't create compatibility suite copy rules for $(LOCAL_BUILT_MODULE)
to $(LOCAL_INSTALLED_MODULE), as that could conflict with a Soong
install rule.  Instead, always create the install rule the normal way,
and replace the compatibility suite copy rule with a noop if it is the
same as the normal rule.

Bug: 204136549
Test: m checkbuild
Change-Id: Ic8ac80eda8554fae2b7ecc2516165da020bdaebe
2021-11-08 15:23:32 -08:00
Colin Cross
d954ea888a Add missing dependency from module name to symlinks
The rules to install the symlinks had dependencies from PRODUCT_PACKAGES
install rules, but from manual install requests like `m toybox`.  Add
the missing dependencies.  Also add the new declare-0p-target licensing
call.

Fixes: 205524422
Test: m toybox
Change-Id: Ie9a5e37b09250aa271ab153a13f41bc34fa4a38a
2021-11-08 19:40:22 +00:00
Steven Moreland
ec71cbf0c8 Merge "vintf recovery install parity w/ init_rc" 2021-11-04 22:28:51 +00:00