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

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_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_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: [
        "libseccomp_policy",
        "libavb",
        "libc++fs",
        "libcgrouprc_format",
        "libprotobuf-cpp-lite",
        "libpropertyinfoserializer",
        "libpropertyinfoparser",
    ],
    shared_libs: [
        "libbacktrace",
        "libbase",
        "libbinder",
        "libbootloader_message",
        "libcutils",
        "libcrypto",
        "libdl",
        "libext4_utils",
        "libfs_mgr",
        "libfscrypt",
        "libgsi",
        "libhidl-gen-utils",
        "libkeyutils",
        "liblog",
        "liblogwrap",
        "liblp",
        "libprocessgroup",
        "libprocessgroup_setup",
        "libselinux",
        "libutils",
    ],
    bootstrap: true,
}

cc_library_static {
    name: "libinit",
    recovery_available: true,
    defaults: ["init_defaults", "selinux_policy_version"],
    srcs: [
        "action.cpp",
        "action_manager.cpp",
        "action_parser.cpp",
        "boringssl_self_test.cpp",
        "bootchart.cpp",
        "builtins.cpp",
        "capabilities.cpp",
        "descriptors.cpp",
        "devices.cpp",
        "epoll.cpp",
        "firmware_handler.cpp",
        "first_stage_init.cpp",
        "first_stage_mount.cpp",
        "import_parser.cpp",
        "init.cpp",
        "keychords.cpp",
        "modalias_handler.cpp",
        "mount_handler.cpp",
        "mount_namespace.cpp",
        "parser.cpp",
        "persistent_properties.cpp",
        "persistent_properties.proto",
        "property_service.cpp",
        "property_type.cpp",
        "reboot.cpp",
        "reboot_utils.cpp",
        "security.cpp",
        "selinux.cpp",
        "service.cpp",
        "sigchld_handler.cpp",
        "subcontext.cpp",
        "subcontext.proto",
        "switch_root.cpp",
        "rlimit_parser.cpp",
        "tokenizer.cpp",
        "uevent_listener.cpp",
        "ueventd.cpp",
        "ueventd_parser.cpp",
        "util.cpp",
    ],
    whole_static_libs: ["libcap", "com.android.sysprop.apex"],
    header_libs: ["bootimg_headers"],
    proto: {
        type: "lite",
        export_proto_headers: true,
    },

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

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

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

cc_test {
    name: "init_tests",
    defaults: ["init_defaults"],
    compile_multilib: "first",
    srcs: [
        "devices_test.cpp",
        "init_test.cpp",
        "keychords_test.cpp",
        "persistent_properties_test.cpp",
        "property_service_test.cpp",
        "property_type_test.cpp",
        "result_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: ["device-tests"],
}

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

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

genrule {
    name: "generated_stub_builtin_function_map",
    out: ["generated_stub_builtin_function_map.h"],
    srcs: ["builtins.cpp"],
    cmd: "sed -n '/Builtin-function-map start/{:a;n;/Builtin-function-map end/q;p;ba}' $(in) | sed -e 's/do_[^}]*/do_stub/g' > $(out)",
}

cc_binary {
    name: "host_init_verifier",
    host_supported: true,
    cpp_std: "experimental",
    cflags: [
        "-Wall",
        "-Wextra",
        "-Wno-unused-parameter",
        "-Werror",
    ],
    static_libs: [
        "libbase",
        "libselinux",
    ],
    whole_static_libs: ["libcap"],
    shared_libs: [
        "libprotobuf-cpp-lite",
        "libhidl-gen-utils",
        "libprocessgroup",
        "liblog",
        "libcutils",
    ],
    srcs: [
        "action.cpp",
        "action_manager.cpp",
        "action_parser.cpp",
        "capabilities.cpp",
        "descriptors.cpp",
        "epoll.cpp",
        "keychords.cpp",
        "import_parser.cpp",
        "host_import_parser.cpp",
        "host_init_verifier.cpp",
        "host_init_stubs.cpp",
        "parser.cpp",
        "rlimit_parser.cpp",
        "tokenizer.cpp",
        "service.cpp",
        "subcontext.cpp",
        "subcontext.proto",
        "util.cpp",
    ],
    proto: {
        type: "lite",
    },
    generated_headers: [
        "generated_stub_builtin_function_map",
        "generated_android_ids"
    ],
    target: {
        android: {
            enabled: false,
        },
        darwin: {
            enabled: false,
        },
    },
}

subdirs = ["*"]
