//
// 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"],
    },
    cppflags: [
        "-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"],
        }
    },
}

cc_library_static {
    name: "libinit",
    defaults: ["init_defaults"],
    srcs: [
        "action.cpp",
        "capabilities.cpp",
        "descriptors.cpp",
        "devices.cpp",
        "firmware_handler.cpp",
        "import_parser.cpp",
        "log.cpp",
        "parser.cpp",
        "persistent_properties.cpp",
        "property_service.cpp",
        "security.cpp",
        "selinux.cpp",
        "service.cpp",
        "rlimit_parser.cpp",
        "tokenizer.cpp",
        "uevent_listener.cpp",
        "ueventd_parser.cpp",
        "util.cpp",
    ],
    whole_static_libs: ["libcap"],
    static_libs: [
        "libbase",
        "libselinux",
        "liblog",
        "libprocessgroup",
        "libfs_mgr",
    ],
    include_dirs: [
        "system/core/mkbootimg",
    ],

}

/*
This is not yet ready, see the below TODOs for what is missing

cc_binary {
    // TODO: Missing,
    //LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
    //LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED)

    name: "init",
    defaults: ["init_defaults"],
    required: [
        "e2fsdroid",
        "mke2fs",
    ],
    static_executable: true,
    srcs: [
        "bootchart.cpp",
        "builtins.cpp",
        "init.cpp",
        "init_first_stage.cpp",
        "keychords.cpp",
        "reboot.cpp",
        "sigchld_handler.cpp",
        "ueventd.cpp",
        "watchdogd.cpp",
    ],
    static_libs: [
        "libinit",
        "libbootloader_message",
        "libfs_mgr",
        "libfec",
        "libfec_rs",
        "libsquashfs_utils",
        "liblogwrap",
        "libext4_utils",
        "libcutils",
        "libbase",
        "libc",
        "libselinux",
        "liblog",
        "libcrypto_utils",
        "libcrypto",
        "libc++_static",
        "libdl",
        "libsparse",
        "libz",
        "libprocessgroup",
        "libavb",
        "libkeyutils",
    ],
    symlinks: [
        "sbin/ueventd",
        "sbin/watchdogd",
    ],
}
*/

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

cc_test {
    name: "init_tests",
    defaults: ["init_defaults"],
    srcs: [
        "devices_test.cpp",
        "init_test.cpp",
        "persistent_properties_test.cpp",
        "property_service_test.cpp",
        "result_test.cpp",
        "rlimit_parser_test.cpp",
        "service_test.cpp",
        "ueventd_test.cpp",
        "util_test.cpp",
    ],
    shared_libs: [
        "libbase",
        "libcutils",
    ],
    static_libs: [
        "libinit",
        "libselinux",
        "libcrypto",
    ],
}

subdirs = ["*"]
