Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ddb31a2 authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Remove unnecessary build steps for ravenwood-runtime.

- Use framework-platform-compat-config created from the host jar,
which is faster to rebuild because it won't have to run D8.

The generated XML is identical. See the inline comment for more details.

We should be able to use it for the device side build too, but we
don't do so 1) to avoid the risk of subtly breaking something
and 2) it's unclear if the D8 is actually a bottle neck for non-ravenwood
workflows too.

- Do the same thing on services-platform-compat-config, but
also use the version created from services.core.jar, instead of services.jar.

This is to avoid dependency on services.permission.jar, which is very
slow to build.

Currently Ravenwood only uses services.core.jar, so the compat-ids from
the other services.*.jar modules are not needed.

Flag: EXEMPT host test change only
Bug: 384791418
Bug: 384938854
Test: $ANDROID_BUILD_TOP/frameworks/base/ravenwood/scripts/run-ravenwood-tests.sh -s

To make sure the generated XML is identical...
Test:   cd $ANDROID_BUILD_TOP/out/soong/.intermediates/frameworks/base/ && diff framework-platform-compat-config/android_common/framework-platform-compat-config_meta.xml  framework-platform-compat-config-from-host-jar/andr..

Test: Manual test -- make sure out/soong/compat_config/merged_compat_config.xml
    doesn't change with and without this change.

Change-Id: Ie28eefe9726cb9011c6518d251acafd29cf1f995
parent ee588f91
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
@@ -345,14 +345,41 @@ java_library {
    ],
}

// We define our own version of platform_compat_config's here, because:
// - The original version (e.g. "framework-platform-compat-config) is built from
//   the output file of the device side jar, rather than the host jar, meaning
//   they're slow to build because they depend on D8/R8 output.
// - The original services one ("services-platform-compat-config") is built from services.jar,
//   which includes service.permission, which is very slow to rebuild because of kotlin.
//
// Because we're re-defining the same compat-IDs that are defined elsewhere,
// they should all have `include_in_merged_xml: false`. Otherwise, generating
// merged_compat_config.xml would fail due to duplicate IDs.
//
// These module names must end with "compat-config" because these will be used as the filename,
// and at runtime, we only loads files that match `*compat-config.xml`.
platform_compat_config {
    name: "ravenwood-framework-platform-compat-config",
    src: ":framework-minus-apex-for-host",
    include_in_merged_xml: false,
    visibility: ["//visibility:private"],
}

platform_compat_config {
    name: "ravenwood-services.core-platform-compat-config",
    src: ":services.core-for-host",
    include_in_merged_xml: false,
    visibility: ["//visibility:private"],
}

filegroup {
    name: "ravenwood-data",
    device_common_srcs: [
        ":system-build.prop",
        ":framework-res",
        ":ravenwood-empty-res",
        ":framework-platform-compat-config",
        ":services-platform-compat-config",
        ":ravenwood-framework-platform-compat-config",
        ":ravenwood-services.core-platform-compat-config",
        "texts/ravenwood-build.prop",
    ],
    device_first_srcs: [
@@ -616,6 +643,10 @@ android_ravenwood_libgroup {
        "android.test.mock.ravenwood",
        "ravenwood-helper-runtime",
        "hoststubgen-helper-runtime.ravenwood",

        // Note, when we include other services.* jars, we'll need to add
        // platform_compat_config for that module too.
        // See ravenwood-services.core-platform-compat-config above.
        "services.core.ravenwood-jarjar",
        "services.fakes.ravenwood-jarjar",

ravenwood/CleanSpec.mk

0 → 100644
+45 −0
Original line number Diff line number Diff line
# Copyright (C) 2024 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# If you don't need to do a full clean build but would like to touch
# a file or delete some intermediate files, add a clean step to the end
# of the list.  These steps will only be run once, if they haven't been
# run before.
#
# E.g.:
#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
#
# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
# files that are missing or have been moved.
#
# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
# Use $(OUT_DIR) to refer to the "out" directory.
#
# If you need to re-do something that's already mentioned, just copy
# the command and add it to the bottom of the list.  E.g., if a change
# that you made last week required touching a file and a change you
# made today requires touching the same file, just copy the old
# touch step and add it to the end of the list.
#
# *****************************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THE BANNER
# *****************************************************************

$(call add-clean-step, rm -rf $(OUT_DIR)/host/linux-x86/testcases/ravenwood-runtime)

# ******************************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER
# ******************************************************************