//
// 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.
//

init_common_sources = [
    "action.cpp",
    "action_manager.cpp",
    "action_parser.cpp",
    "capabilities.cpp",
    "epoll.cpp",
    "import_parser.cpp",
    "interface_utils.cpp",
    "keychords.cpp",
    "parser.cpp",
    "property_type.cpp",
    "rlimit_parser.cpp",
    "service.cpp",
    "service_list.cpp",
    "service_parser.cpp",
    "service_utils.cpp",
    "subcontext.cpp",
    "subcontext.proto",
    "tokenizer.cpp",
    "util.cpp",
]
init_device_sources = [
    "bootchart.cpp",
    "builtins.cpp",
    "devices.cpp",
    "firmware_handler.cpp",
    "first_stage_init.cpp",
    "first_stage_mount.cpp",
    "fscrypt_init_extensions.cpp",
    "init.cpp",
    "lmkd_service.cpp",
    "modalias_handler.cpp",
    "mount_handler.cpp",
    "mount_namespace.cpp",
    "persistent_properties.cpp",
    "persistent_properties.proto",
    "property_service.cpp",
    "property_service.proto",
    "reboot.cpp",
    "reboot_utils.cpp",
    "security.cpp",
    "selabel.cpp",
    "selinux.cpp",
    "sigchld_handler.cpp",
    "switch_root.cpp",
    "uevent_listener.cpp",
    "ueventd.cpp",
    "ueventd_parser.cpp",
]
init_host_sources = [
    "check_builtins.cpp",
    "host_import_parser.cpp",
    "host_init_verifier.cpp",
]

cc_defaults {
    name: "init_defaults",
    cpp_std: "experimental",
    sanitize: {
        misc_undefined: ["signed-integer-overflow"],
    },
    cflags: [
        "-DLOG_UEVENTS=0",
        "-Wall",
        "-Wextra",
        "-Wno-unused-parameter",
        "-Werror",
        "-DALLOW_FIRST_STAGE_CONSOLE=0",
        "-DALLOW_LOCAL_PROP_OVERRIDE=0",
        "-DALLOW_PERMISSIVE_SELINUX=0",
        "-DREBOOT_BOOTLOADER_ON_PANIC=0",
        "-DWORLD_WRITABLE_KMSG=0",
        "-DDUMP_ON_UMOUNT_FAILURE=0",
        "-DSHUTDOWN_ZERO_TIMEOUT=0",
    ],
    product_variables: {
        debuggable: {
            cppflags: [
                "-UALLOW_FIRST_STAGE_CONSOLE",
                "-DALLOW_FIRST_STAGE_CONSOLE=1",
                "-UALLOW_LOCAL_PROP_OVERRIDE",
                "-DALLOW_LOCAL_PROP_OVERRIDE=1",
                "-UALLOW_PERMISSIVE_SELINUX",
                "-DALLOW_PERMISSIVE_SELINUX=1",
                "-UREBOOT_BOOTLOADER_ON_PANIC",
                "-DREBOOT_BOOTLOADER_ON_PANIC=1",
                "-UWORLD_WRITABLE_KMSG",
                "-DWORLD_WRITABLE_KMSG=1",
                "-UDUMP_ON_UMOUNT_FAILURE",
                "-DDUMP_ON_UMOUNT_FAILURE=1",
            ],
        },
        eng: {
            cppflags: [
                "-USHUTDOWN_ZERO_TIMEOUT",
                "-DSHUTDOWN_ZERO_TIMEOUT=1",
            ],
        },
        uml: {
            cppflags: ["-DUSER_MODE_LINUX"],
        },
    },
    static_libs: [
        "libavb",
        "libc++fs",
        "libcgrouprc_format",
        "liblmkd_utils",
        "libmodprobe",
        "libprotobuf-cpp-lite",
        "libpropertyinfoserializer",
        "libpropertyinfoparser",
        "libsnapshot_init",
        "lib_apex_manifest_proto_lite",
    ],
    shared_libs: [
        "libbacktrace",
        "libbase",
        "libbootloader_message",
        "libcutils",
        "libdl",
        "libext4_utils",
        "libfs_mgr",
        "libgsi",
        "libhidl-gen-utils",
        "libkeyutils",
        "liblog",
        "liblogwrap",
        "liblp",
        "libprocessgroup",
        "libprocessgroup_setup",
        "libselinux",
        "libutils",
    ],
    bootstrap: true,
    visibility: [":__subpackages__"],
}

cc_library_static {
    name: "libinit",
    recovery_available: true,
    defaults: [
        "init_defaults",
        "selinux_policy_version",
    ],
    srcs: init_common_sources + init_device_sources,
    whole_static_libs: [
        "libcap",
        "com.android.sysprop.apex",
        "com.android.sysprop.init",
    ],
    header_libs: ["bootimg_headers"],
    proto: {
        type: "lite",
        export_proto_headers: true,
    },

    target: {
        recovery: {
            cflags: ["-DRECOVERY"],
            exclude_shared_libs: [
                "libbinder",
                "libutils",
            ],
        },
    },
}

phony {
    name: "init",
    required: [
        "init_second_stage",
    ],
}

cc_binary {
    name: "init_second_stage",
    recovery_available: true,
    stem: "init",
    defaults: ["init_defaults"],
    static_libs: ["libinit"],
    required: [
        "e2fsdroid",
        "init.rc",
        "mke2fs",
        "sload_f2fs",
        "make_f2fs",
        "ueventd.rc",
    ],
    srcs: ["main.cpp"],
    symlinks: ["ueventd"],
    target: {
        recovery: {
            cflags: ["-DRECOVERY"],
            exclude_shared_libs: [
                "libbinder",
                "libutils",
            ],
        },
    },
}

// Tests
// ------------------------------------------------------------------------------

cc_test {
    name: "CtsInitTestCases",
    defaults: ["init_defaults"],
    require_root: true,

    compile_multilib: "both",
    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },

    srcs: [
        "devices_test.cpp",
        "firmware_handler_test.cpp",
        "init_test.cpp",
        "keychords_test.cpp",
        "persistent_properties_test.cpp",
        "property_service_test.cpp",
        "property_type_test.cpp",
        "rlimit_parser_test.cpp",
        "service_test.cpp",
        "subcontext_test.cpp",
        "tokenizer_test.cpp",
        "ueventd_parser_test.cpp",
        "ueventd_test.cpp",
        "util_test.cpp",
    ],
    static_libs: ["libinit"],

    test_suites: [
        "cts",
        "device-tests",
        "vts",
    ],
}

cc_benchmark {
    name: "init_benchmarks",
    defaults: ["init_defaults"],
    srcs: [
        "subcontext_benchmark.cpp",
    ],
    static_libs: ["libinit"],
}

// Host Verifier
// ------------------------------------------------------------------------------

genrule {
    name: "generated_stub_builtin_function_map",
    tool_files: ["host_builtin_map.py"],
    out: ["generated_stub_builtin_function_map.h"],
    srcs: [
        "builtins.cpp",
        "check_builtins.cpp",
    ],
    cmd: "$(location host_builtin_map.py) --builtins $(location builtins.cpp) --check_builtins $(location check_builtins.cpp) > $(out)",
}

cc_binary {
    name: "host_init_verifier",
    host_supported: true,
    cpp_std: "experimental",
    cflags: [
        "-Wall",
        "-Wextra",
        "-Wno-unused-parameter",
        "-Werror",
    ],
    static_libs: [
        "libbase",
        "libselinux",
        "libpropertyinfoserializer",
        "libpropertyinfoparser",
    ],
    whole_static_libs: ["libcap"],
    shared_libs: [
        "libcutils",
        "libhidl-gen-utils",
        "libhidlmetadata",
        "liblog",
        "libprocessgroup",
        "libprotobuf-cpp-lite",
    ],
    srcs: init_common_sources + init_host_sources,
    proto: {
        type: "lite",
    },
    generated_headers: [
        "generated_stub_builtin_function_map",
        "generated_android_ids",
    ],
    target: {
        android: {
            enabled: false,
        },
        darwin: {
            enabled: false,
        },
    },
}
