Replace se_filegroup to se_build_files

se_build_files is a replacement for se_filegroup module. se_build_files
can be used with the normal Soong convention ":module_name{.tag}" by
implementing android.OutputFileProducer. It's better than implementing
ad-hoc logics across various modules, which is the case for se_filegroup
module.

Test: build and boot
Change-Id: Ic0e34549601eb043145e433055f5a030eaf4347e
This commit is contained in:
Inseob Kim 2022-04-22 07:50:22 +09:00
parent 222e99e26f
commit 4196403c36
7 changed files with 61 additions and 287 deletions

View file

@ -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,

View file

@ -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",

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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())
}

View file

@ -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,
}