// Copyright (C) 2018 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.

cc_defaults { name: "selinux_policy_version", cflags: ["-DSEPOLICY_VERSION=30"], }

se_filegroup {
    name: "26.0.board.compat.map",
    srcs: [
        "compat/26.0/26.0.cil",
    ],
}

se_filegroup {
    name: "27.0.board.compat.map",
    srcs: [
        "compat/27.0/27.0.cil",
    ],
}

se_filegroup {
    name: "28.0.board.compat.map",
    srcs: [
        "compat/28.0/28.0.cil",
    ],
}

se_filegroup {
    name: "26.0.board.ignore.map",
    srcs: [
        "compat/26.0/26.0.ignore.cil",
    ],
}

se_filegroup {
    name: "27.0.board.ignore.map",
    srcs: [
        "compat/27.0/27.0.ignore.cil",
    ],
}

se_filegroup {
    name: "28.0.board.ignore.map",
    srcs: [
        "compat/28.0/28.0.ignore.cil",
    ],
}

se_cil_compat_map {
    name: "26.0.cil",
    bottom_half: [":26.0.board.compat.map"],
    top_half: "27.0.cil",
}

se_cil_compat_map {
    name: "27.0.cil",
    bottom_half: [":27.0.board.compat.map"],
    top_half: "28.0.cil",
}

se_cil_compat_map {
    name: "28.0.cil",
    bottom_half: [":28.0.board.compat.map"],
    // top_half: "29.0.cil",
}

se_cil_compat_map {
    name: "26.0.ignore.cil",
    bottom_half: [":26.0.board.ignore.map"],
    top_half: "27.0.ignore.cil",
}

se_cil_compat_map {
    name: "27.0.ignore.cil",
    bottom_half: [":27.0.board.ignore.map"],
    top_half: "28.0.ignore.cil",
}

se_cil_compat_map {
    name: "28.0.ignore.cil",
    bottom_half: [":28.0.board.ignore.map"],
    // top_half: "29.0.ignore.cil",
}

se_filegroup {
    name: "file_contexts_files",
    srcs: ["file_contexts"],
}

se_filegroup {
    name: "file_contexts_asan_files",
    srcs: ["file_contexts_asan"],
}

se_filegroup {
    name: "file_contexts_overlayfs_files",
    srcs: ["file_contexts_overlayfs"],
}

se_filegroup {
    name: "hwservice_contexts_files",
    srcs: ["hwservice_contexts"],
}

se_filegroup {
    name: "property_contexts_files",
    srcs: ["property_contexts"],
}

se_filegroup {
    name: "service_contexts_files",
    srcs: ["service_contexts"],
}

file_contexts {
    name: "plat_file_contexts",
    srcs: [":file_contexts_files"],
    product_variables: {
        address_sanitize: {
            srcs: [":file_contexts_asan_files"],
        },
        debuggable: {
            srcs: [":file_contexts_overlayfs_files"],
        },
    },

    flatten_apex: {
        srcs: ["apex/*-file_contexts"],
    },

    recovery_available: true,
}

file_contexts {
    name: "vendor_file_contexts",
    srcs: [":file_contexts_files"],
    soc_specific: true,
    recovery_available: true,
}

file_contexts {
    name: "product_file_contexts",
    srcs: [":file_contexts_files"],
    product_specific: true,
    recovery_available: true,
}

file_contexts {
    name: "odm_file_contexts",
    srcs: [":file_contexts_files"],
    device_specific: true,
    recovery_available: true,
}

hwservice_contexts {
    name: "plat_hwservice_contexts",
    srcs: [":hwservice_contexts_files"],
}

hwservice_contexts {
    name: "product_hwservice_contexts",
    srcs: [":hwservice_contexts_files"],
    product_specific: true,
}

hwservice_contexts {
    name: "vendor_hwservice_contexts",
    srcs: [":hwservice_contexts_files"],
    reqd_mask: true,
    soc_specific: true,
}

hwservice_contexts {
    name: "odm_hwservice_contexts",
    srcs: [":hwservice_contexts_files"],
    device_specific: true,
}

property_contexts {
    name: "plat_property_contexts",
    srcs: [":property_contexts_files"],
    recovery_available: true,
}

property_contexts {
    name: "product_property_contexts",
    srcs: [":property_contexts_files"],
    product_specific: true,
    recovery_available: true,
}

property_contexts {
    name: "vendor_property_contexts",
    srcs: [":property_contexts_files"],
    reqd_mask: true,
    soc_specific: true,
    recovery_available: true,
}

property_contexts {
    name: "odm_property_contexts",
    srcs: [":property_contexts_files"],
    device_specific: true,
    recovery_available: true,
}

service_contexts {
    name: "plat_service_contexts",
    srcs: [":service_contexts_files"],
}

service_contexts {
    name: "product_service_contexts",
    srcs: [":service_contexts_files"],
    product_specific: true,
}

service_contexts {
    name: "vendor_service_contexts",
    srcs: [":service_contexts_files"],
    reqd_mask: true,
    soc_specific: true,
}
