diff --git a/Android.bp b/Android.bp index 8e2a96604..7549b8483 100644 --- a/Android.bp +++ b/Android.bp @@ -44,105 +44,105 @@ license { cc_defaults { name: "selinux_policy_version", cflags: ["-DSEPOLICY_VERSION=30"], } -se_filegroup { +se_build_files { name: "28.0.board.compat.map", srcs: [ "compat/28.0/28.0.cil", ], } -se_filegroup { +se_build_files { name: "29.0.board.compat.map", srcs: [ "compat/29.0/29.0.cil", ], } -se_filegroup { +se_build_files { name: "30.0.board.compat.map", srcs: [ "compat/30.0/30.0.cil", ], } -se_filegroup { +se_build_files { name: "31.0.board.compat.map", srcs: [ "compat/31.0/31.0.cil", ], } -se_filegroup { +se_build_files { name: "32.0.board.compat.map", srcs: [ "compat/32.0/32.0.cil", ], } -se_filegroup { +se_build_files { name: "28.0.board.compat.cil", srcs: [ "compat/28.0/28.0.compat.cil", ], } -se_filegroup { +se_build_files { name: "29.0.board.compat.cil", srcs: [ "compat/29.0/29.0.compat.cil", ], } -se_filegroup { +se_build_files { name: "30.0.board.compat.cil", srcs: [ "compat/30.0/30.0.compat.cil", ], } -se_filegroup { +se_build_files { name: "31.0.board.compat.cil", srcs: [ "compat/31.0/31.0.compat.cil", ], } -se_filegroup { +se_build_files { name: "32.0.board.compat.cil", srcs: [ "compat/32.0/32.0.compat.cil", ], } -se_filegroup { +se_build_files { name: "28.0.board.ignore.map", srcs: [ "compat/28.0/28.0.ignore.cil", ], } -se_filegroup { +se_build_files { name: "29.0.board.ignore.map", srcs: [ "compat/29.0/29.0.ignore.cil", ], } -se_filegroup { +se_build_files { name: "30.0.board.ignore.map", srcs: [ "compat/30.0/30.0.ignore.cil", ], } -se_filegroup { +se_build_files { name: "31.0.board.ignore.map", srcs: [ "compat/31.0/31.0.ignore.cil", ], } -se_filegroup { +se_build_files { name: "32.0.board.ignore.map", srcs: [ "compat/32.0/32.0.ignore.cil", @@ -1055,27 +1055,27 @@ se_policy_cil { } // bug_map - Bug tracking information for selinux denials loaded by auditd. -se_filegroup { +se_build_files { name: "bug_map_files", srcs: ["bug_map"], } se_bug_map { name: "plat_bug_map", - srcs: [":bug_map_files"], + srcs: [":bug_map_files{.plat_private}"], stem: "bug_map", } se_bug_map { name: "system_ext_bug_map", - srcs: [":bug_map_files"], + srcs: [":bug_map_files{.system_ext_private}"], stem: "bug_map", system_ext_specific: true, } se_bug_map { name: "vendor_bug_map", - srcs: [":bug_map_files"], + srcs: [":bug_map_files{.vendor}", ":bug_map_files{.plat_vendor_for_vendor}"], // Legacy file name of the vendor partition bug_map. stem: "selinux_denial_metadata", vendor: true, diff --git a/build/soong/Android.bp b/build/soong/Android.bp index 8518d4d70..d1cead3be 100644 --- a/build/soong/Android.bp +++ b/build/soong/Android.bp @@ -35,7 +35,6 @@ bootstrap_go_package { "build_files.go", "cil_compat_map.go", "compat_cil.go", - "filegroup.go", "policy.go", "selinux.go", "selinux_contexts.go", diff --git a/build/soong/bug_map.go b/build/soong/bug_map.go index 00df33cae..e24a21b49 100644 --- a/build/soong/bug_map.go +++ b/build/soong/bug_map.go @@ -40,7 +40,7 @@ type bugMap struct { } type bugMapProperties struct { - // List of source files. Can reference se_filegroup type modules with the ":module" syntax. + // List of source files or se_build_files modules. Srcs []string `android:"path"` // Output file name. Defaults to module name if unspecified. @@ -52,31 +52,7 @@ func (b *bugMap) stem() string { } func (b *bugMap) expandSeSources(ctx android.ModuleContext) android.Paths { - srcPaths := make(android.Paths, 0, len(b.properties.Srcs)) - for _, src := range b.properties.Srcs { - if m := android.SrcIsModule(src); m != "" { - module := android.GetModuleFromPathDep(ctx, m, "") - if module == nil { - // Error would have been handled by ExtractSourcesDeps - continue - } - if fg, ok := module.(*fileGroup); ok { - if b.SocSpecific() { - srcPaths = append(srcPaths, fg.VendorSrcs()...) - srcPaths = append(srcPaths, fg.SystemVendorSrcs()...) - } else if b.SystemExtSpecific() { - srcPaths = append(srcPaths, fg.SystemExtPrivateSrcs()...) - } else { - srcPaths = append(srcPaths, fg.SystemPrivateSrcs()...) - } - } else { - ctx.PropertyErrorf("srcs", "%q is not an se_filegroup", m) - } - } else { - srcPaths = append(srcPaths, android.PathForModuleSrc(ctx, src)) - } - } - return android.FirstUniquePaths(srcPaths) + return android.PathsForModuleSrc(ctx, b.properties.Srcs) } func (b *bugMap) GenerateAndroidBuildActions(ctx android.ModuleContext) { diff --git a/build/soong/cil_compat_map.go b/build/soong/cil_compat_map.go index 78e870e7a..c9daf7c7b 100644 --- a/build/soong/cil_compat_map.go +++ b/build/soong/cil_compat_map.go @@ -59,7 +59,7 @@ type cilCompatMapProperties struct { // se_cil_compat_map module representing a compatibility mapping file for // platform versions (x->y). Bottom half represents a mapping (y->z). // Together the halves are used to generate a (x->z) mapping. - Top_half *string + Top_half *string `android:"path"` // list of source (.cil) files used to build an the bottom half of sepolicy // compatibility mapping file. bottom_half may reference the outputs of // other modules that produce source files like genrule or filegroup using @@ -94,31 +94,7 @@ func expandTopHalf(ctx android.ModuleContext) android.OptionalPath { } func expandSeSources(ctx android.ModuleContext, srcFiles []string) android.Paths { - expandedSrcFiles := make(android.Paths, 0, len(srcFiles)) - for _, s := range srcFiles { - if m := android.SrcIsModule(s); m != "" { - module := android.GetModuleFromPathDep(ctx, m, "") - if module == nil { - // Error will have been handled by ExtractSourcesDeps - continue - } - if fg, ok := module.(*fileGroup); ok { - if ctx.ProductSpecific() { - expandedSrcFiles = append(expandedSrcFiles, fg.ProductPrivateSrcs()...) - } else if ctx.SystemExtSpecific() { - expandedSrcFiles = append(expandedSrcFiles, fg.SystemExtPrivateSrcs()...) - } else { - expandedSrcFiles = append(expandedSrcFiles, fg.SystemPrivateSrcs()...) - } - } else { - ctx.ModuleErrorf("srcs dependency %q is not an selinux filegroup", m) - } - } else { - p := android.PathForModuleSrc(ctx, s) - expandedSrcFiles = append(expandedSrcFiles, p) - } - } - return expandedSrcFiles + return android.PathsForModuleSrc(ctx, srcFiles) } func (c *cilCompatMap) GenerateAndroidBuildActions(ctx android.ModuleContext) { diff --git a/build/soong/compat_cil.go b/build/soong/compat_cil.go index e7b3af265..afd2396ef 100644 --- a/build/soong/compat_cil.go +++ b/build/soong/compat_cil.go @@ -48,7 +48,7 @@ type compatCil struct { } type compatCilProperties struct { - // List of source files. Can reference se_filegroup type modules with the ":module" syntax. + // List of source files. Can reference se_build_files type modules with the ":module" syntax. Srcs []string `android:"path"` // Output file name. Defaults to module name if unspecified. @@ -60,28 +60,7 @@ func (c *compatCil) stem() string { } func (c *compatCil) expandSeSources(ctx android.ModuleContext) android.Paths { - srcPaths := make(android.Paths, 0, len(c.properties.Srcs)) - for _, src := range c.properties.Srcs { - if m := android.SrcIsModule(src); m != "" { - module := android.GetModuleFromPathDep(ctx, m, "") - if module == nil { - // Error would have been handled by ExtractSourcesDeps - continue - } - if fg, ok := module.(*fileGroup); ok { - if c.SystemExtSpecific() { - srcPaths = append(srcPaths, fg.SystemExtPrivateSrcs()...) - } else { - srcPaths = append(srcPaths, fg.SystemPrivateSrcs()...) - } - } else { - ctx.PropertyErrorf("srcs", "%q is not an se_filegroup", m) - } - } else { - srcPaths = append(srcPaths, android.PathForModuleSrc(ctx, src)) - } - } - return srcPaths + return android.PathsForModuleSrc(ctx, c.properties.Srcs) } func (c *compatCil) GenerateAndroidBuildActions(ctx android.ModuleContext) { diff --git a/build/soong/filegroup.go b/build/soong/filegroup.go deleted file mode 100644 index 9dd4bd981..000000000 --- a/build/soong/filegroup.go +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2018 Google Inc. All rights reserved. -// -// 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. - -package selinux - -import ( - "android/soong/android" - "path/filepath" -) - -func init() { - android.RegisterModuleType("se_filegroup", FileGroupFactory) -} - -func FileGroupFactory() android.Module { - module := &fileGroup{} - module.AddProperties(&module.properties) - android.InitAndroidModule(module) - return module -} - -type fileGroupProperties struct { - // list of source file suffixes used to collect selinux policy files. - // Source files will be looked up in the following local directories: - // system/sepolicy/{public, private, vendor, reqd_mask} - // and directories specified by following config variables: - // BOARD_SEPOLICY_DIRS, BOARD_ODM_SEPOLICY_DIRS - // SYSTEM_EXT_PUBLIC_SEPOLICY_DIR, SYSTEM_EXT_PRIVATE_SEPOLICY_DIR - Srcs []string -} - -type fileGroup struct { - android.ModuleBase - properties fileGroupProperties - - systemPublicSrcs android.Paths - systemPrivateSrcs android.Paths - systemVendorSrcs android.Paths - systemReqdMaskSrcs android.Paths - - systemExtPublicSrcs android.Paths - systemExtPrivateSrcs android.Paths - - productPublicSrcs android.Paths - productPrivateSrcs android.Paths - - vendorSrcs android.Paths - vendorReqdMaskSrcs android.Paths - odmSrcs android.Paths -} - -// Source files from system/sepolicy/public -func (fg *fileGroup) SystemPublicSrcs() android.Paths { - return fg.systemPublicSrcs -} - -// Source files from system/sepolicy/private -func (fg *fileGroup) SystemPrivateSrcs() android.Paths { - return fg.systemPrivateSrcs -} - -// Source files from system/sepolicy/vendor -func (fg *fileGroup) SystemVendorSrcs() android.Paths { - return fg.systemVendorSrcs -} - -// Source files from system/sepolicy/reqd_mask -func (fg *fileGroup) SystemReqdMaskSrcs() android.Paths { - return fg.systemReqdMaskSrcs -} - -// Source files from SYSTEM_EXT_PUBLIC_SEPOLICY_DIR -func (fg *fileGroup) SystemExtPublicSrcs() android.Paths { - return fg.systemExtPublicSrcs -} - -// Source files from SYSTEM_EXT_PRIVATE_SEPOLICY_DIR -func (fg *fileGroup) SystemExtPrivateSrcs() android.Paths { - return fg.systemExtPrivateSrcs -} - -// Source files from PRODUCT_PUBLIC_SEPOLICY_DIRS -func (fg *fileGroup) ProductPublicSrcs() android.Paths { - return fg.productPublicSrcs -} - -// Source files from PRODUCT_PRIVATE_SEPOLICY_DIRS -func (fg *fileGroup) ProductPrivateSrcs() android.Paths { - return fg.productPrivateSrcs -} - -// Source files from BOARD_VENDOR_SEPOLICY_DIRS -func (fg *fileGroup) VendorSrcs() android.Paths { - return fg.vendorSrcs -} - -func (fg *fileGroup) VendorReqdMaskSrcs() android.Paths { - return fg.vendorReqdMaskSrcs -} - -// Source files from BOARD_ODM_SEPOLICY_DIRS -func (fg *fileGroup) OdmSrcs() android.Paths { - return fg.odmSrcs -} - -func (fg *fileGroup) findSrcsInDirs(ctx android.ModuleContext, dirs []string) android.Paths { - result := android.Paths{} - for _, f := range fg.properties.Srcs { - for _, d := range dirs { - path := filepath.Join(d, f) - files, _ := ctx.GlobWithDeps(path, nil) - for _, f := range files { - result = append(result, android.PathForSource(ctx, f)) - } - } - } - return result -} - -func (fg *fileGroup) findSrcsInDir(ctx android.ModuleContext, dir string) android.Paths { - return fg.findSrcsInDirs(ctx, []string{dir}) -} - -func (fg *fileGroup) DepsMutator(ctx android.BottomUpMutatorContext) {} - -func (fg *fileGroup) GenerateAndroidBuildActions(ctx android.ModuleContext) { - fg.systemPublicSrcs = fg.findSrcsInDir(ctx, filepath.Join(ctx.ModuleDir(), "public")) - fg.systemPrivateSrcs = fg.findSrcsInDir(ctx, filepath.Join(ctx.ModuleDir(), "private")) - fg.systemReqdMaskSrcs = fg.findSrcsInDir(ctx, filepath.Join(ctx.ModuleDir(), "reqd_mask")) - - fg.systemExtPublicSrcs = fg.findSrcsInDirs(ctx, ctx.DeviceConfig().SystemExtPublicSepolicyDirs()) - fg.systemExtPrivateSrcs = fg.findSrcsInDirs(ctx, ctx.DeviceConfig().SystemExtPrivateSepolicyDirs()) - - fg.productPublicSrcs = fg.findSrcsInDirs(ctx, ctx.Config().ProductPublicSepolicyDirs()) - fg.productPrivateSrcs = fg.findSrcsInDirs(ctx, ctx.Config().ProductPrivateSepolicyDirs()) - - systemVendorDirs := ctx.DeviceConfig().BoardPlatVendorPolicy() - if len(systemVendorDirs) == 0 || ctx.DeviceConfig().PlatformSepolicyVersion() == ctx.DeviceConfig().BoardSepolicyVers() { - systemVendorDirs = []string{filepath.Join(ctx.ModuleDir(), "vendor")} - } - fg.systemVendorSrcs = fg.findSrcsInDirs(ctx, systemVendorDirs) - fg.vendorReqdMaskSrcs = fg.findSrcsInDirs(ctx, ctx.DeviceConfig().BoardReqdMaskPolicy()) - fg.vendorSrcs = fg.findSrcsInDirs(ctx, ctx.DeviceConfig().VendorSepolicyDirs()) - fg.odmSrcs = fg.findSrcsInDirs(ctx, ctx.DeviceConfig().OdmSepolicyDirs()) -} diff --git a/compat/Android.bp b/compat/Android.bp index bc8409a13..b473e52c5 100644 --- a/compat/Android.bp +++ b/compat/Android.bp @@ -26,42 +26,42 @@ package { se_cil_compat_map { name: "plat_28.0.cil", stem: "28.0.cil", - bottom_half: [":28.0.board.compat.map"], + bottom_half: [":28.0.board.compat.map{.plat_private}"], top_half: "plat_29.0.cil", } se_cil_compat_map { name: "plat_29.0.cil", stem: "29.0.cil", - bottom_half: [":29.0.board.compat.map"], + bottom_half: [":29.0.board.compat.map{.plat_private}"], top_half: "plat_30.0.cil", } se_cil_compat_map { name: "plat_30.0.cil", stem: "30.0.cil", - bottom_half: [":30.0.board.compat.map"], + bottom_half: [":30.0.board.compat.map{.plat_private}"], top_half: "plat_31.0.cil", } se_cil_compat_map { name: "plat_31.0.cil", stem: "31.0.cil", - bottom_half: [":31.0.board.compat.map"], + bottom_half: [":31.0.board.compat.map{.plat_private}"], top_half: "plat_32.0.cil", } se_cil_compat_map { name: "plat_32.0.cil", stem: "32.0.cil", - bottom_half: [":32.0.board.compat.map"], + bottom_half: [":32.0.board.compat.map{.plat_private}"], // top_half: "plat_33.0.cil", } se_cil_compat_map { name: "system_ext_28.0.cil", stem: "28.0.cil", - bottom_half: [":28.0.board.compat.map"], + bottom_half: [":28.0.board.compat.map{.system_ext_private}"], top_half: "system_ext_29.0.cil", system_ext_specific: true, } @@ -69,7 +69,7 @@ se_cil_compat_map { se_cil_compat_map { name: "system_ext_29.0.cil", stem: "29.0.cil", - bottom_half: [":29.0.board.compat.map"], + bottom_half: [":29.0.board.compat.map{.system_ext_private}"], top_half: "system_ext_30.0.cil", system_ext_specific: true, } @@ -77,7 +77,7 @@ se_cil_compat_map { se_cil_compat_map { name: "system_ext_30.0.cil", stem: "30.0.cil", - bottom_half: [":30.0.board.compat.map"], + bottom_half: [":30.0.board.compat.map{.system_ext_private}"], top_half: "system_ext_31.0.cil", system_ext_specific: true, } @@ -85,7 +85,7 @@ se_cil_compat_map { se_cil_compat_map { name: "system_ext_31.0.cil", stem: "31.0.cil", - bottom_half: [":31.0.board.compat.map"], + bottom_half: [":31.0.board.compat.map{.system_ext_private}"], top_half: "system_ext_32.0.cil", system_ext_specific: true, } @@ -93,7 +93,7 @@ se_cil_compat_map { se_cil_compat_map { name: "system_ext_32.0.cil", stem: "32.0.cil", - bottom_half: [":32.0.board.compat.map"], + bottom_half: [":32.0.board.compat.map{.system_ext_private}"], // top_half: "system_ext_33.0.cil", system_ext_specific: true, } @@ -101,7 +101,7 @@ se_cil_compat_map { se_cil_compat_map { name: "product_28.0.cil", stem: "28.0.cil", - bottom_half: [":28.0.board.compat.map"], + bottom_half: [":28.0.board.compat.map{.product_private}"], top_half: "product_29.0.cil", product_specific: true, } @@ -109,7 +109,7 @@ se_cil_compat_map { se_cil_compat_map { name: "product_29.0.cil", stem: "29.0.cil", - bottom_half: [":29.0.board.compat.map"], + bottom_half: [":29.0.board.compat.map{.product_private}"], top_half: "product_30.0.cil", product_specific: true, } @@ -117,7 +117,7 @@ se_cil_compat_map { se_cil_compat_map { name: "product_30.0.cil", stem: "30.0.cil", - bottom_half: [":30.0.board.compat.map"], + bottom_half: [":30.0.board.compat.map{.product_private}"], top_half: "product_31.0.cil", product_specific: true, } @@ -125,7 +125,7 @@ se_cil_compat_map { se_cil_compat_map { name: "product_31.0.cil", stem: "31.0.cil", - bottom_half: [":31.0.board.compat.map"], + bottom_half: [":31.0.board.compat.map{.product_private}"], top_half: "product_32.0.cil", product_specific: true, } @@ -133,139 +133,139 @@ se_cil_compat_map { se_cil_compat_map { name: "product_32.0.cil", stem: "32.0.cil", - bottom_half: [":32.0.board.compat.map"], + bottom_half: [":32.0.board.compat.map{.product_private}"], // top_half: "product_33.0.cil", product_specific: true, } se_cil_compat_map { name: "28.0.ignore.cil", - bottom_half: [":28.0.board.ignore.map"], + bottom_half: [":28.0.board.ignore.map{.plat_private}"], top_half: "29.0.ignore.cil", } se_cil_compat_map { name: "29.0.ignore.cil", - bottom_half: [":29.0.board.ignore.map"], + bottom_half: [":29.0.board.ignore.map{.plat_private}"], top_half: "30.0.ignore.cil", } se_cil_compat_map { name: "30.0.ignore.cil", - bottom_half: [":30.0.board.ignore.map"], + bottom_half: [":30.0.board.ignore.map{.plat_private}"], top_half: "31.0.ignore.cil", } se_cil_compat_map { name: "31.0.ignore.cil", - bottom_half: [":31.0.board.ignore.map"], + bottom_half: [":31.0.board.ignore.map{.plat_private}"], top_half: "32.0.ignore.cil", } se_cil_compat_map { name: "32.0.ignore.cil", - bottom_half: [":32.0.board.ignore.map"], + bottom_half: [":32.0.board.ignore.map{.plat_private}"], // top_half: "33.0.ignore.cil", } se_cil_compat_map { name: "system_ext_30.0.ignore.cil", - bottom_half: [":30.0.board.ignore.map"], + bottom_half: [":30.0.board.ignore.map{.system_ext_private}"], top_half: "system_ext_31.0.ignore.cil", system_ext_specific: true, } se_cil_compat_map { name: "system_ext_31.0.ignore.cil", - bottom_half: [":31.0.board.ignore.map"], + bottom_half: [":31.0.board.ignore.map{.system_ext_private}"], top_half: "system_ext_32.0.ignore.cil", system_ext_specific: true, } se_cil_compat_map { name: "system_ext_32.0.ignore.cil", - bottom_half: [":32.0.board.ignore.map"], + bottom_half: [":32.0.board.ignore.map{.system_ext_private}"], // top_half: "system_ext_33.0.ignore.cil", system_ext_specific: true, } se_cil_compat_map { name: "product_30.0.ignore.cil", - bottom_half: [":30.0.board.ignore.map"], + bottom_half: [":30.0.board.ignore.map{.product_private}"], top_half: "product_31.0.ignore.cil", product_specific: true, } se_cil_compat_map { name: "product_31.0.ignore.cil", - bottom_half: [":31.0.board.ignore.map"], + bottom_half: [":31.0.board.ignore.map{.product_private}"], top_half: "product_32.0.ignore.cil", product_specific: true, } se_cil_compat_map { name: "product_32.0.ignore.cil", - bottom_half: [":32.0.board.ignore.map"], + bottom_half: [":32.0.board.ignore.map{.product_private}"], // top_half: "product_33.0.ignore.cil", product_specific: true, } se_compat_cil { name: "28.0.compat.cil", - srcs: [":28.0.board.compat.cil"], + srcs: [":28.0.board.compat.cil{.plat_private}"], } se_compat_cil { name: "29.0.compat.cil", - srcs: [":29.0.board.compat.cil"], + srcs: [":29.0.board.compat.cil{.plat_private}"], } se_compat_cil { name: "30.0.compat.cil", - srcs: [":30.0.board.compat.cil"], + srcs: [":30.0.board.compat.cil{.plat_private}"], } se_compat_cil { name: "31.0.compat.cil", - srcs: [":31.0.board.compat.cil"], + srcs: [":31.0.board.compat.cil{.plat_private}"], } se_compat_cil { name: "32.0.compat.cil", - srcs: [":32.0.board.compat.cil"], + srcs: [":32.0.board.compat.cil{.plat_private}"], } se_compat_cil { name: "system_ext_28.0.compat.cil", - srcs: [":28.0.board.compat.cil"], + srcs: [":28.0.board.compat.cil{.system_ext_private}"], stem: "28.0.compat.cil", system_ext_specific: true, } se_compat_cil { name: "system_ext_29.0.compat.cil", - srcs: [":29.0.board.compat.cil"], + srcs: [":29.0.board.compat.cil{.system_ext_private}"], stem: "29.0.compat.cil", system_ext_specific: true, } se_compat_cil { name: "system_ext_30.0.compat.cil", - srcs: [":30.0.board.compat.cil"], + srcs: [":30.0.board.compat.cil{.system_ext_private}"], stem: "30.0.compat.cil", system_ext_specific: true, } se_compat_cil { name: "system_ext_31.0.compat.cil", - srcs: [":31.0.board.compat.cil"], + srcs: [":31.0.board.compat.cil{.system_ext_private}"], stem: "31.0.compat.cil", system_ext_specific: true, } se_compat_cil { name: "system_ext_32.0.compat.cil", - srcs: [":32.0.board.compat.cil"], + srcs: [":32.0.board.compat.cil{.system_ext_private}"], stem: "32.0.compat.cil", system_ext_specific: true, }