Loading PREUPLOAD.cfg +0 −1 Original line number Original line Diff line number Diff line Loading @@ -5,7 +5,6 @@ ignore_merged_commits = true bpfmt = true bpfmt = true clang_format = true clang_format = true aidl_format = true aidl_format = true gofmt = true [Hook Scripts] [Hook Scripts] aosp_hook_confirmationui = ${REPO_ROOT}/frameworks/base/tools/aosp/aosp_sha.sh ${PREUPLOAD_COMMIT} confirmationui aosp_hook_confirmationui = ${REPO_ROOT}/frameworks/base/tools/aosp/aosp_sha.sh ${PREUPLOAD_COMMIT} confirmationui Loading compatibility_matrices/Android.bp +0 −31 Original line number Original line Diff line number Diff line Loading @@ -93,14 +93,6 @@ vintf_compatibility_matrix { } } // Device framework compatibility matrix (common to all FCM versions) // Reference: https://source.android.com/docs/core/architecture/vintf/comp-matrices vintf_compatibility_matrix { name: "framework_compatibility_matrix.device.xml", stem: "compatibility_matrix.device.xml", type: "device_fcm", } // Phony target that installs all system compatibility matrix files // Phony target that installs all system compatibility matrix files SYSTEM_MATRIX_DEPS = [ SYSTEM_MATRIX_DEPS = [ "framework_compatibility_matrix.5.xml", "framework_compatibility_matrix.5.xml", Loading @@ -122,26 +114,3 @@ phony { }, }, }, }, } } // Product Compatibility Matrix vintf_compatibility_matrix { name: "product_compatibility_matrix.xml", stem: "compatibility_matrix.xml", product_specific: true, type: "product_fcm", } // Phony target that installs all framework compatibility matrix files (system + product) FRAMEWORK_MATRIX_DEPS = SYSTEM_MATRIX_DEPS + ["product_compatibility_matrix.xml"] phony { name: "framework_compatibility_matrix.xml", required: FRAMEWORK_MATRIX_DEPS, product_variables: { release_aidl_use_unfrozen: { required: [ "framework_compatibility_matrix.202504.xml", ], }, }, } compatibility_matrices/Android.mk 0 → 100644 +134 −0 Original line number Original line Diff line number Diff line # # Copyright (C) 2017 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. # LOCAL_PATH := $(call my-dir) BUILD_FRAMEWORK_COMPATIBILITY_MATRIX := $(LOCAL_PATH)/compatibility_matrix.mk my_empty_manifest := $(LOCAL_PATH)/manifest.empty.xml # System Compatibility Matrix (common to all FCM versions) include $(CLEAR_VARS) include $(LOCAL_PATH)/clear_vars.mk LOCAL_MODULE := framework_compatibility_matrix.device.xml LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE LOCAL_MODULE_STEM := compatibility_matrix.device.xml # define LOCAL_MODULE_CLASS for local-generated-sources-dir. LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_RELATIVE_PATH := vintf ifndef DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE LOCAL_SRC_FILES := compatibility_matrix.empty.xml else # DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE specifies absolute paths LOCAL_GENERATED_SOURCES := $(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE) # Enforce that DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE does not specify required HALs # by checking it against an empty manifest. But the empty manifest needs to contain # BOARD_SEPOLICY_VERS to be compatible with DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE. my_gen_check_manifest := $(local-generated-sources-dir)/manifest.check.xml $(my_gen_check_manifest): PRIVATE_SRC_FILE := $(my_empty_manifest) $(my_gen_check_manifest): $(my_empty_manifest) $(HOST_OUT_EXECUTABLES)/assemble_vintf BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \ VINTF_IGNORE_TARGET_FCM_VERSION=true \ $(HOST_OUT_EXECUTABLES)/assemble_vintf -i $(PRIVATE_SRC_FILE) -o $@ LOCAL_GEN_FILE_DEPENDENCIES += $(my_gen_check_manifest) LOCAL_ASSEMBLE_VINTF_FLAGS += -c "$(my_gen_check_manifest)" my_gen_check_manifest := endif # DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE # TODO(b/296875906): use POLICYVERS from Soong POLICYVERS ?= 30 LOCAL_ADD_VBMETA_VERSION := true LOCAL_ASSEMBLE_VINTF_ENV_VARS := \ POLICYVERS \ PLATFORM_SEPOLICY_VERSION \ PLATFORM_SEPOLICY_COMPAT_VERSIONS include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) # Product Compatibility Matrix include $(CLEAR_VARS) include $(LOCAL_PATH)/clear_vars.mk LOCAL_MODULE := product_compatibility_matrix.xml LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE ifndef DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE my_framework_matrix_deps := include $(BUILD_PHONY_PACKAGE) else # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE LOCAL_MODULE_STEM := compatibility_matrix.xml LOCAL_PRODUCT_MODULE := true LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_RELATIVE_PATH := vintf # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE specifies absolute paths LOCAL_GENERATED_SOURCES := $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE) # Enforce that DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE does not specify required HALs # by checking it against an empty manifest. LOCAL_GEN_FILE_DEPENDENCIES += $(my_empty_manifest) LOCAL_ASSEMBLE_VINTF_FLAGS += -c "$(my_empty_manifest)" my_framework_matrix_deps := $(LOCAL_MODULE) include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) endif # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE my_system_matrix_deps := \ framework_compatibility_matrix.5.xml \ framework_compatibility_matrix.6.xml \ framework_compatibility_matrix.7.xml \ framework_compatibility_matrix.8.xml \ framework_compatibility_matrix.202404.xml \ framework_compatibility_matrix.device.xml \ # Only allow the use of the unreleased compatibility matrix when we can use unfrozen # interfaces (in the `next` release configuration). ifeq ($(RELEASE_AIDL_USE_UNFROZEN),true) my_system_matrix_deps += \ framework_compatibility_matrix.202504.xml \ endif my_framework_matrix_deps += \ $(my_system_matrix_deps) # Phony target that installs all framework compatibility matrix files (system + product) include $(CLEAR_VARS) LOCAL_MODULE := framework_compatibility_matrix.xml LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE LOCAL_REQUIRED_MODULES := $(my_framework_matrix_deps) include $(BUILD_PHONY_PACKAGE) my_system_matrix_deps := my_framework_matrix_deps := my_empty_manifest := BUILD_FRAMEWORK_COMPATIBILITY_MATRIX := compatibility_matrices/build/Android.bp +0 −1 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ bootstrap_go_package { "kernel-config-soong-rules", "kernel-config-soong-rules", "soong", "soong", "soong-android", "soong-android", "soong-selinux", ], ], srcs: [ srcs: [ "vintf_compatibility_matrix.go", "vintf_compatibility_matrix.go", Loading compatibility_matrices/build/vintf_compatibility_matrix.go +6 −119 Original line number Original line Diff line number Diff line Loading @@ -24,7 +24,6 @@ import ( "android/soong/android" "android/soong/android" "android/soong/kernel/configs" "android/soong/kernel/configs" "android/soong/selinux" ) ) type dependencyTag struct { type dependencyTag struct { Loading @@ -36,10 +35,10 @@ var ( pctx = android.NewPackageContext("android/vintf") pctx = android.NewPackageContext("android/vintf") assembleVintfRule = pctx.AndroidStaticRule("assemble_vintf", blueprint.RuleParams{ assembleVintfRule = pctx.AndroidStaticRule("assemble_vintf", blueprint.RuleParams{ Command: `${assembleVintfEnv} ${assembleVintfCmd} -i ${inputs} -o ${out} ${extraArgs}`, Command: `${assembleVintfCmd} -i ${inputs} -o ${out}`, CommandDeps: []string{"${assembleVintfCmd}", "${AvbToolCmd}"}, CommandDeps: []string{"${assembleVintfCmd}"}, Description: "assemble_vintf -i ${inputs}", Description: "assemble_vintf -i ${inputs}", }, "inputs", "extraArgs", "assembleVintfEnv") }, "inputs") xmllintXsd = pctx.AndroidStaticRule("xmllint-xsd", blueprint.RuleParams{ xmllintXsd = pctx.AndroidStaticRule("xmllint-xsd", blueprint.RuleParams{ Command: `$XmlLintCmd --quiet --schema $xsd $in > /dev/null && touch -a $out`, Command: `$XmlLintCmd --quiet --schema $xsd $in > /dev/null && touch -a $out`, Loading @@ -54,10 +53,6 @@ var ( const ( const ( relpath = "vintf" relpath = "vintf" emptyManifest = "hardware/interfaces/compatibility_matrices/manifest.empty.xml" compatibilityEmptyMatrix = "hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml" deviceFcmType = "device_fcm" productFcmType = "product_fcm" ) ) type vintfCompatibilityMatrixProperties struct { type vintfCompatibilityMatrixProperties struct { Loading @@ -69,9 +64,6 @@ type vintfCompatibilityMatrixProperties struct { // list of kernel_config modules to be combined to final output // list of kernel_config modules to be combined to final output Kernel_configs []string Kernel_configs []string // Type of the FCM type, the allowed type are device_fcm and product_fcm and it should only be used under hardware/interfaces/compatibility_matrices Type *string } } type vintfCompatibilityMatrixRule struct { type vintfCompatibilityMatrixRule struct { Loading @@ -80,13 +72,11 @@ type vintfCompatibilityMatrixRule struct { genFile android.WritablePath genFile android.WritablePath additionalDependencies android.WritablePaths additionalDependencies android.WritablePaths phonyOnly bool } } func init() { func init() { pctx.HostBinToolVariable("assembleVintfCmd", "assemble_vintf") pctx.HostBinToolVariable("assembleVintfCmd", "assemble_vintf") pctx.HostBinToolVariable("XmlLintCmd", "xmllint") pctx.HostBinToolVariable("XmlLintCmd", "xmllint") pctx.HostBinToolVariable("AvbToolCmd", "avbtool") android.RegisterModuleType("vintf_compatibility_matrix", vintfCompatibilityMatrixFactory) android.RegisterModuleType("vintf_compatibility_matrix", vintfCompatibilityMatrixFactory) } } Loading Loading @@ -141,20 +131,6 @@ func (g *vintfCompatibilityMatrixRule) getSchema(ctx android.ModuleContext) andr } } func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.ModuleContext) { // Types attribute only allow `device_fcm` or `product_fcm` if set and only restricted it being used under // `hardware/interfaces/compatibility_matrices` to prevent accidental external usages. matrixType := proptools.String(g.properties.Type) if matrixType != "" { if matrixType != deviceFcmType && matrixType != productFcmType { panic(fmt.Errorf("The attribute 'type' value must be either 'device_fcm' or 'product_fcm' if set!")) } if !strings.HasPrefix(android.PathForModuleSrc(ctx).String(), "hardware/interfaces/compatibility_matrices") { panic(fmt.Errorf("Attribute type can only be set for module under `hardware/interfaces/compatibility_matrices`!")) } if (len(g.properties.Srcs) + len(g.properties.Kernel_configs)) > 0 { panic(fmt.Errorf("Attribute 'type' and 'srcs' or 'kernel_configs' should not set simultaneously! To update inputs for this rule, edit vintf_compatibility_matrix.go directly.")) } } outputFilename := proptools.String(g.properties.Stem) outputFilename := proptools.String(g.properties.Stem) if outputFilename == "" { if outputFilename == "" { Loading Loading @@ -182,72 +158,15 @@ func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.M } } }) }) // For product_compatibility_matrix.xml the source is from the product configuration // DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE. extraArgs := []string{} if matrixType == productFcmType { productMatrixs := android.PathsForSource(ctx, ctx.Config().DeviceProductCompatibilityMatrixFile()) if len(productMatrixs) > 0 { inputPaths = append(inputPaths, productMatrixs...) extraArgs = append(extraArgs, "-c", android.PathForSource(ctx, emptyManifest).String()) } else { // For product_fcm, if DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE not set, treat it as a phony target without any output generated. g.phonyOnly = true return } } // For framework_compatibility_matrix.device.xml the source may come from the product configuration // DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE or use compatibilityEmptyMatrix if not set. We can't // use a phony target because we still need to install framework_compatibility_matrix.device.xml to // include sepolicy versions. frameworkRuleImplicits := []android.Path{} if matrixType == deviceFcmType { frameworkMatrixs := android.PathsForSource(ctx, ctx.Config().DeviceFrameworkCompatibilityMatrixFile()) if len(frameworkMatrixs) > 0 { inputPaths = append(inputPaths, frameworkMatrixs...) // Generate BuildAction for generating the check manifest. emptyManifestPath := android.PathForSource(ctx, emptyManifest) genCheckManifest := android.PathForModuleGen(ctx, "manifest.check.xml") checkManifestInputs := []android.Path{emptyManifestPath} genCheckManifestEnvs := []string{ "BOARD_SEPOLICY_VERS=" + ctx.DeviceConfig().BoardSepolicyVers(), "VINTF_IGNORE_TARGET_FCM_VERSION=true", } ctx.Build(pctx, android.BuildParams{ Rule: assembleVintfRule, Description: "Framework Check Manifest", Implicits: checkManifestInputs, Output: genCheckManifest, Args: map[string]string{ "inputs": android.PathForSource(ctx, emptyManifest).String(), "extraArgs": "", "assembleVintfEnv": strings.Join(genCheckManifestEnvs, " "), }, }) frameworkRuleImplicits = append(frameworkRuleImplicits, genCheckManifest) extraArgs = append(extraArgs, "-c", genCheckManifest.String()) } else { inputPaths = append(inputPaths, android.PathForSource(ctx, compatibilityEmptyMatrix)) } } g.genFile = android.PathForModuleGen(ctx, outputFilename) g.genFile = android.PathForModuleGen(ctx, outputFilename) frameworkRuleImplicits = append(frameworkRuleImplicits, inputPaths...) ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{ Rule: assembleVintfRule, Rule: assembleVintfRule, Description: "Framework Compatibility Matrix", Description: "Framework Compatibility Matrix", Implicits: frameworkRuleImplicits, Implicits: inputPaths, Output: g.genFile, Output: g.genFile, Args: map[string]string{ Args: map[string]string{ "inputs": strings.Join(inputPaths.Strings(), ":"), "inputs": strings.Join(inputPaths.Strings(), ":"), "extraArgs": strings.Join(extraArgs, " "), "assembleVintfEnv": g.getAssembleVintfEnv(ctx), }, }, }) }) g.generateValidateBuildAction(ctx, g.genFile, schema.Path()) g.generateValidateBuildAction(ctx, g.genFile, schema.Path()) Loading @@ -255,39 +174,7 @@ func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.M ctx.InstallFile(android.PathForModuleInstall(ctx, "etc", relpath), outputFilename, g.genFile) ctx.InstallFile(android.PathForModuleInstall(ctx, "etc", relpath), outputFilename, g.genFile) } } func (g *vintfCompatibilityMatrixRule) getAssembleVintfEnv(ctx android.ModuleContext) string { if proptools.String(g.properties.Type) == deviceFcmType { assembleVintfEnvs := []string{ // POLICYVERS defined in system/sepolicy/build/soong/policy.go fmt.Sprintf("POLICYVERS=%d", selinux.PolicyVers), fmt.Sprintf("PLATFORM_SEPOLICY_VERSION=%s", ctx.DeviceConfig().PlatformSepolicyVersion()), fmt.Sprintf("PLATFORM_SEPOLICY_COMPAT_VERSIONS=\"%s\"", strings.Join(ctx.DeviceConfig().PlatformSepolicyCompatVersions(), " ")), } if ctx.Config().BoardAvbEnable() { assembleVintfEnvs = append(assembleVintfEnvs, fmt.Sprintf("FRAMEWORK_VBMETA_VERSION=\"$$(${AvbToolCmd} add_hashtree_footer --print_required_libavb_version %s)\"", strings.Join(ctx.Config().BoardAvbSystemAddHashtreeFooterArgs(), " "))) } else { assembleVintfEnvs = append(assembleVintfEnvs, "FRAMEWORK_VBMETA_VERSION=\"0.0\"") } return strings.Join(assembleVintfEnvs, " ") } return "" } func (g *vintfCompatibilityMatrixRule) AndroidMk() android.AndroidMkData { func (g *vintfCompatibilityMatrixRule) AndroidMk() android.AndroidMkData { if g.phonyOnly { return android.AndroidMkData{ Custom: func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) { fmt.Fprintln(w, "\ninclude $(CLEAR_VARS)", " # vintf.vintf_compatibility_matrix") fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir) fmt.Fprintln(w, "LOCAL_MODULE :=", name) fmt.Fprintln(w, "include $(BUILD_PHONY_PACKAGE)") }, } } return android.AndroidMkData{ return android.AndroidMkData{ Class: "ETC", Class: "ETC", OutputFile: android.OptionalPathForPath(g.genFile), OutputFile: android.OptionalPathForPath(g.genFile), Loading Loading
PREUPLOAD.cfg +0 −1 Original line number Original line Diff line number Diff line Loading @@ -5,7 +5,6 @@ ignore_merged_commits = true bpfmt = true bpfmt = true clang_format = true clang_format = true aidl_format = true aidl_format = true gofmt = true [Hook Scripts] [Hook Scripts] aosp_hook_confirmationui = ${REPO_ROOT}/frameworks/base/tools/aosp/aosp_sha.sh ${PREUPLOAD_COMMIT} confirmationui aosp_hook_confirmationui = ${REPO_ROOT}/frameworks/base/tools/aosp/aosp_sha.sh ${PREUPLOAD_COMMIT} confirmationui Loading
compatibility_matrices/Android.bp +0 −31 Original line number Original line Diff line number Diff line Loading @@ -93,14 +93,6 @@ vintf_compatibility_matrix { } } // Device framework compatibility matrix (common to all FCM versions) // Reference: https://source.android.com/docs/core/architecture/vintf/comp-matrices vintf_compatibility_matrix { name: "framework_compatibility_matrix.device.xml", stem: "compatibility_matrix.device.xml", type: "device_fcm", } // Phony target that installs all system compatibility matrix files // Phony target that installs all system compatibility matrix files SYSTEM_MATRIX_DEPS = [ SYSTEM_MATRIX_DEPS = [ "framework_compatibility_matrix.5.xml", "framework_compatibility_matrix.5.xml", Loading @@ -122,26 +114,3 @@ phony { }, }, }, }, } } // Product Compatibility Matrix vintf_compatibility_matrix { name: "product_compatibility_matrix.xml", stem: "compatibility_matrix.xml", product_specific: true, type: "product_fcm", } // Phony target that installs all framework compatibility matrix files (system + product) FRAMEWORK_MATRIX_DEPS = SYSTEM_MATRIX_DEPS + ["product_compatibility_matrix.xml"] phony { name: "framework_compatibility_matrix.xml", required: FRAMEWORK_MATRIX_DEPS, product_variables: { release_aidl_use_unfrozen: { required: [ "framework_compatibility_matrix.202504.xml", ], }, }, }
compatibility_matrices/Android.mk 0 → 100644 +134 −0 Original line number Original line Diff line number Diff line # # Copyright (C) 2017 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. # LOCAL_PATH := $(call my-dir) BUILD_FRAMEWORK_COMPATIBILITY_MATRIX := $(LOCAL_PATH)/compatibility_matrix.mk my_empty_manifest := $(LOCAL_PATH)/manifest.empty.xml # System Compatibility Matrix (common to all FCM versions) include $(CLEAR_VARS) include $(LOCAL_PATH)/clear_vars.mk LOCAL_MODULE := framework_compatibility_matrix.device.xml LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE LOCAL_MODULE_STEM := compatibility_matrix.device.xml # define LOCAL_MODULE_CLASS for local-generated-sources-dir. LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_RELATIVE_PATH := vintf ifndef DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE LOCAL_SRC_FILES := compatibility_matrix.empty.xml else # DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE specifies absolute paths LOCAL_GENERATED_SOURCES := $(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE) # Enforce that DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE does not specify required HALs # by checking it against an empty manifest. But the empty manifest needs to contain # BOARD_SEPOLICY_VERS to be compatible with DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE. my_gen_check_manifest := $(local-generated-sources-dir)/manifest.check.xml $(my_gen_check_manifest): PRIVATE_SRC_FILE := $(my_empty_manifest) $(my_gen_check_manifest): $(my_empty_manifest) $(HOST_OUT_EXECUTABLES)/assemble_vintf BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \ VINTF_IGNORE_TARGET_FCM_VERSION=true \ $(HOST_OUT_EXECUTABLES)/assemble_vintf -i $(PRIVATE_SRC_FILE) -o $@ LOCAL_GEN_FILE_DEPENDENCIES += $(my_gen_check_manifest) LOCAL_ASSEMBLE_VINTF_FLAGS += -c "$(my_gen_check_manifest)" my_gen_check_manifest := endif # DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE # TODO(b/296875906): use POLICYVERS from Soong POLICYVERS ?= 30 LOCAL_ADD_VBMETA_VERSION := true LOCAL_ASSEMBLE_VINTF_ENV_VARS := \ POLICYVERS \ PLATFORM_SEPOLICY_VERSION \ PLATFORM_SEPOLICY_COMPAT_VERSIONS include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) # Product Compatibility Matrix include $(CLEAR_VARS) include $(LOCAL_PATH)/clear_vars.mk LOCAL_MODULE := product_compatibility_matrix.xml LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE ifndef DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE my_framework_matrix_deps := include $(BUILD_PHONY_PACKAGE) else # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE LOCAL_MODULE_STEM := compatibility_matrix.xml LOCAL_PRODUCT_MODULE := true LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_RELATIVE_PATH := vintf # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE specifies absolute paths LOCAL_GENERATED_SOURCES := $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE) # Enforce that DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE does not specify required HALs # by checking it against an empty manifest. LOCAL_GEN_FILE_DEPENDENCIES += $(my_empty_manifest) LOCAL_ASSEMBLE_VINTF_FLAGS += -c "$(my_empty_manifest)" my_framework_matrix_deps := $(LOCAL_MODULE) include $(BUILD_FRAMEWORK_COMPATIBILITY_MATRIX) endif # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE my_system_matrix_deps := \ framework_compatibility_matrix.5.xml \ framework_compatibility_matrix.6.xml \ framework_compatibility_matrix.7.xml \ framework_compatibility_matrix.8.xml \ framework_compatibility_matrix.202404.xml \ framework_compatibility_matrix.device.xml \ # Only allow the use of the unreleased compatibility matrix when we can use unfrozen # interfaces (in the `next` release configuration). ifeq ($(RELEASE_AIDL_USE_UNFROZEN),true) my_system_matrix_deps += \ framework_compatibility_matrix.202504.xml \ endif my_framework_matrix_deps += \ $(my_system_matrix_deps) # Phony target that installs all framework compatibility matrix files (system + product) include $(CLEAR_VARS) LOCAL_MODULE := framework_compatibility_matrix.xml LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE LOCAL_REQUIRED_MODULES := $(my_framework_matrix_deps) include $(BUILD_PHONY_PACKAGE) my_system_matrix_deps := my_framework_matrix_deps := my_empty_manifest := BUILD_FRAMEWORK_COMPATIBILITY_MATRIX :=
compatibility_matrices/build/Android.bp +0 −1 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ bootstrap_go_package { "kernel-config-soong-rules", "kernel-config-soong-rules", "soong", "soong", "soong-android", "soong-android", "soong-selinux", ], ], srcs: [ srcs: [ "vintf_compatibility_matrix.go", "vintf_compatibility_matrix.go", Loading
compatibility_matrices/build/vintf_compatibility_matrix.go +6 −119 Original line number Original line Diff line number Diff line Loading @@ -24,7 +24,6 @@ import ( "android/soong/android" "android/soong/android" "android/soong/kernel/configs" "android/soong/kernel/configs" "android/soong/selinux" ) ) type dependencyTag struct { type dependencyTag struct { Loading @@ -36,10 +35,10 @@ var ( pctx = android.NewPackageContext("android/vintf") pctx = android.NewPackageContext("android/vintf") assembleVintfRule = pctx.AndroidStaticRule("assemble_vintf", blueprint.RuleParams{ assembleVintfRule = pctx.AndroidStaticRule("assemble_vintf", blueprint.RuleParams{ Command: `${assembleVintfEnv} ${assembleVintfCmd} -i ${inputs} -o ${out} ${extraArgs}`, Command: `${assembleVintfCmd} -i ${inputs} -o ${out}`, CommandDeps: []string{"${assembleVintfCmd}", "${AvbToolCmd}"}, CommandDeps: []string{"${assembleVintfCmd}"}, Description: "assemble_vintf -i ${inputs}", Description: "assemble_vintf -i ${inputs}", }, "inputs", "extraArgs", "assembleVintfEnv") }, "inputs") xmllintXsd = pctx.AndroidStaticRule("xmllint-xsd", blueprint.RuleParams{ xmllintXsd = pctx.AndroidStaticRule("xmllint-xsd", blueprint.RuleParams{ Command: `$XmlLintCmd --quiet --schema $xsd $in > /dev/null && touch -a $out`, Command: `$XmlLintCmd --quiet --schema $xsd $in > /dev/null && touch -a $out`, Loading @@ -54,10 +53,6 @@ var ( const ( const ( relpath = "vintf" relpath = "vintf" emptyManifest = "hardware/interfaces/compatibility_matrices/manifest.empty.xml" compatibilityEmptyMatrix = "hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml" deviceFcmType = "device_fcm" productFcmType = "product_fcm" ) ) type vintfCompatibilityMatrixProperties struct { type vintfCompatibilityMatrixProperties struct { Loading @@ -69,9 +64,6 @@ type vintfCompatibilityMatrixProperties struct { // list of kernel_config modules to be combined to final output // list of kernel_config modules to be combined to final output Kernel_configs []string Kernel_configs []string // Type of the FCM type, the allowed type are device_fcm and product_fcm and it should only be used under hardware/interfaces/compatibility_matrices Type *string } } type vintfCompatibilityMatrixRule struct { type vintfCompatibilityMatrixRule struct { Loading @@ -80,13 +72,11 @@ type vintfCompatibilityMatrixRule struct { genFile android.WritablePath genFile android.WritablePath additionalDependencies android.WritablePaths additionalDependencies android.WritablePaths phonyOnly bool } } func init() { func init() { pctx.HostBinToolVariable("assembleVintfCmd", "assemble_vintf") pctx.HostBinToolVariable("assembleVintfCmd", "assemble_vintf") pctx.HostBinToolVariable("XmlLintCmd", "xmllint") pctx.HostBinToolVariable("XmlLintCmd", "xmllint") pctx.HostBinToolVariable("AvbToolCmd", "avbtool") android.RegisterModuleType("vintf_compatibility_matrix", vintfCompatibilityMatrixFactory) android.RegisterModuleType("vintf_compatibility_matrix", vintfCompatibilityMatrixFactory) } } Loading Loading @@ -141,20 +131,6 @@ func (g *vintfCompatibilityMatrixRule) getSchema(ctx android.ModuleContext) andr } } func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.ModuleContext) { // Types attribute only allow `device_fcm` or `product_fcm` if set and only restricted it being used under // `hardware/interfaces/compatibility_matrices` to prevent accidental external usages. matrixType := proptools.String(g.properties.Type) if matrixType != "" { if matrixType != deviceFcmType && matrixType != productFcmType { panic(fmt.Errorf("The attribute 'type' value must be either 'device_fcm' or 'product_fcm' if set!")) } if !strings.HasPrefix(android.PathForModuleSrc(ctx).String(), "hardware/interfaces/compatibility_matrices") { panic(fmt.Errorf("Attribute type can only be set for module under `hardware/interfaces/compatibility_matrices`!")) } if (len(g.properties.Srcs) + len(g.properties.Kernel_configs)) > 0 { panic(fmt.Errorf("Attribute 'type' and 'srcs' or 'kernel_configs' should not set simultaneously! To update inputs for this rule, edit vintf_compatibility_matrix.go directly.")) } } outputFilename := proptools.String(g.properties.Stem) outputFilename := proptools.String(g.properties.Stem) if outputFilename == "" { if outputFilename == "" { Loading Loading @@ -182,72 +158,15 @@ func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.M } } }) }) // For product_compatibility_matrix.xml the source is from the product configuration // DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE. extraArgs := []string{} if matrixType == productFcmType { productMatrixs := android.PathsForSource(ctx, ctx.Config().DeviceProductCompatibilityMatrixFile()) if len(productMatrixs) > 0 { inputPaths = append(inputPaths, productMatrixs...) extraArgs = append(extraArgs, "-c", android.PathForSource(ctx, emptyManifest).String()) } else { // For product_fcm, if DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE not set, treat it as a phony target without any output generated. g.phonyOnly = true return } } // For framework_compatibility_matrix.device.xml the source may come from the product configuration // DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE or use compatibilityEmptyMatrix if not set. We can't // use a phony target because we still need to install framework_compatibility_matrix.device.xml to // include sepolicy versions. frameworkRuleImplicits := []android.Path{} if matrixType == deviceFcmType { frameworkMatrixs := android.PathsForSource(ctx, ctx.Config().DeviceFrameworkCompatibilityMatrixFile()) if len(frameworkMatrixs) > 0 { inputPaths = append(inputPaths, frameworkMatrixs...) // Generate BuildAction for generating the check manifest. emptyManifestPath := android.PathForSource(ctx, emptyManifest) genCheckManifest := android.PathForModuleGen(ctx, "manifest.check.xml") checkManifestInputs := []android.Path{emptyManifestPath} genCheckManifestEnvs := []string{ "BOARD_SEPOLICY_VERS=" + ctx.DeviceConfig().BoardSepolicyVers(), "VINTF_IGNORE_TARGET_FCM_VERSION=true", } ctx.Build(pctx, android.BuildParams{ Rule: assembleVintfRule, Description: "Framework Check Manifest", Implicits: checkManifestInputs, Output: genCheckManifest, Args: map[string]string{ "inputs": android.PathForSource(ctx, emptyManifest).String(), "extraArgs": "", "assembleVintfEnv": strings.Join(genCheckManifestEnvs, " "), }, }) frameworkRuleImplicits = append(frameworkRuleImplicits, genCheckManifest) extraArgs = append(extraArgs, "-c", genCheckManifest.String()) } else { inputPaths = append(inputPaths, android.PathForSource(ctx, compatibilityEmptyMatrix)) } } g.genFile = android.PathForModuleGen(ctx, outputFilename) g.genFile = android.PathForModuleGen(ctx, outputFilename) frameworkRuleImplicits = append(frameworkRuleImplicits, inputPaths...) ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{ Rule: assembleVintfRule, Rule: assembleVintfRule, Description: "Framework Compatibility Matrix", Description: "Framework Compatibility Matrix", Implicits: frameworkRuleImplicits, Implicits: inputPaths, Output: g.genFile, Output: g.genFile, Args: map[string]string{ Args: map[string]string{ "inputs": strings.Join(inputPaths.Strings(), ":"), "inputs": strings.Join(inputPaths.Strings(), ":"), "extraArgs": strings.Join(extraArgs, " "), "assembleVintfEnv": g.getAssembleVintfEnv(ctx), }, }, }) }) g.generateValidateBuildAction(ctx, g.genFile, schema.Path()) g.generateValidateBuildAction(ctx, g.genFile, schema.Path()) Loading @@ -255,39 +174,7 @@ func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.M ctx.InstallFile(android.PathForModuleInstall(ctx, "etc", relpath), outputFilename, g.genFile) ctx.InstallFile(android.PathForModuleInstall(ctx, "etc", relpath), outputFilename, g.genFile) } } func (g *vintfCompatibilityMatrixRule) getAssembleVintfEnv(ctx android.ModuleContext) string { if proptools.String(g.properties.Type) == deviceFcmType { assembleVintfEnvs := []string{ // POLICYVERS defined in system/sepolicy/build/soong/policy.go fmt.Sprintf("POLICYVERS=%d", selinux.PolicyVers), fmt.Sprintf("PLATFORM_SEPOLICY_VERSION=%s", ctx.DeviceConfig().PlatformSepolicyVersion()), fmt.Sprintf("PLATFORM_SEPOLICY_COMPAT_VERSIONS=\"%s\"", strings.Join(ctx.DeviceConfig().PlatformSepolicyCompatVersions(), " ")), } if ctx.Config().BoardAvbEnable() { assembleVintfEnvs = append(assembleVintfEnvs, fmt.Sprintf("FRAMEWORK_VBMETA_VERSION=\"$$(${AvbToolCmd} add_hashtree_footer --print_required_libavb_version %s)\"", strings.Join(ctx.Config().BoardAvbSystemAddHashtreeFooterArgs(), " "))) } else { assembleVintfEnvs = append(assembleVintfEnvs, "FRAMEWORK_VBMETA_VERSION=\"0.0\"") } return strings.Join(assembleVintfEnvs, " ") } return "" } func (g *vintfCompatibilityMatrixRule) AndroidMk() android.AndroidMkData { func (g *vintfCompatibilityMatrixRule) AndroidMk() android.AndroidMkData { if g.phonyOnly { return android.AndroidMkData{ Custom: func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) { fmt.Fprintln(w, "\ninclude $(CLEAR_VARS)", " # vintf.vintf_compatibility_matrix") fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir) fmt.Fprintln(w, "LOCAL_MODULE :=", name) fmt.Fprintln(w, "include $(BUILD_PHONY_PACKAGE)") }, } } return android.AndroidMkData{ return android.AndroidMkData{ Class: "ETC", Class: "ETC", OutputFile: android.OptionalPathForPath(g.genFile), OutputFile: android.OptionalPathForPath(g.genFile), Loading