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

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",
        "property_service.cpp",
        "security.cpp",
        "selinux.cpp",
        "service.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",
        "signal_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",
        "property_service_test.cpp",
        "service_test.cpp",
        "ueventd_test.cpp",
        "util_test.cpp",
    ],
    shared_libs: [
        "libbase",
        "libcutils",
    ],
    static_libs: [
        "libinit",
        "libselinux",
        "libcrypto",
    ],
}

subdirs = ["*"]
