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

package {
    default_team: "trendy_team_native_tools_libraries",
    default_applicable_licenses: ["system_libbase_license"],
}

license {
    name: "system_libbase_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-BSD",
    ],
    license_text: [
        "NOTICE",
    ],
}

cc_defaults {
    name: "libbase_cflags_defaults",
    cflags: [
        "-Wall",
        "-Werror",
        "-Wextra",
    ],
    target: {
        android: {
            cflags: [
                "-D_FILE_OFFSET_BITS=64",
            ],
        },
        windows: {
            cflags: [
                "-D_POSIX_THREAD_SAFE_FUNCTIONS",
            ],
        },
    },
}

cc_library_headers {
    name: "libbase_headers",
    vendor_available: true,
    product_available: true,
    ramdisk_available: true,
    vendor_ramdisk_available: true,
    recovery_available: true,
    host_supported: true,
    native_bridge_supported: true,
    export_include_dirs: ["include"],

    header_libs: ["fmtlib_headers"],
    export_header_lib_headers: ["fmtlib_headers"],

    target: {
        linux_bionic: {
            enabled: true,
        },
        windows: {
            enabled: true,
        },
    },
    apex_available: [
        "//apex_available:anyapex",
        "//apex_available:platform",
    ],
    min_sdk_version: "29",
    sdk_version: "current",
}

cc_defaults {
    name: "libbase_defaults",
    defaults: ["libbase_cflags_defaults"],
    srcs: [
        "abi_compatibility.cpp",
        "chrono_utils.cpp",
        "cmsg.cpp",
        "file.cpp",
        "hex.cpp",
        "logging.cpp",
        "mapped_file.cpp",
        "parsebool.cpp",
        "parsenetaddress.cpp",
        "posix_strerror_r.cpp",
        "process.cpp",
        "properties.cpp",
        "stringprintf.cpp",
        "strings.cpp",
        "threads.cpp",
        "test_utils.cpp",
    ],

    cppflags: ["-Wexit-time-destructors"],
    shared_libs: ["liblog"],
    target: {
        android: {
            sanitize: {
                misc_undefined: ["integer"],
            },

        },
        linux: {
            srcs: [
                "errors_unix.cpp",
            ],
        },
        darwin: {
            srcs: [
                "errors_unix.cpp",
            ],
        },
        linux_bionic: {
            enabled: true,
        },
        windows: {
            srcs: [
                "errors_windows.cpp",
                "utf8.cpp",
            ],
            exclude_srcs: [
                "cmsg.cpp",
            ],
            enabled: true,
        },
    },
    min_sdk_version: "29",
}

cc_library {
    name: "libbase",
    defaults: ["libbase_defaults"],
    vendor_available: true,
    product_available: true,
    ramdisk_available: true,
    vendor_ramdisk_available: true,
    recovery_available: true,
    host_supported: true,
    native_bridge_supported: true,
    vndk: {
        enabled: true,
        support_system_process: true,
    },
    header_libs: [
        "libbase_headers",
    ],
    export_header_lib_headers: ["libbase_headers"],
    whole_static_libs: ["fmtlib"],
    export_static_lib_headers: ["fmtlib"],
    apex_available: [
        "//apex_available:anyapex",
        "//apex_available:platform",
    ],
}

cc_library_static {
    name: "libbase_ndk",
    defaults: ["libbase_defaults"],
    sdk_version: "current",
    stl: "c++_static",
    export_include_dirs: ["include"],
    whole_static_libs: ["fmtlib_ndk"],
    apex_available: [
        "//apex_available:platform",
        "com.android.mediaprovider",
    ],
}

// Tests
// ------------------------------------------------------------------------------
cc_test {
    name: "libbase_test",
    defaults: ["libbase_cflags_defaults"],
    host_supported: true,
    require_root: true,
    srcs: [
        "cmsg_test.cpp",
        "endian_test.cpp",
        "errors_test.cpp",
        "expected_test.cpp",
        "file_test.cpp",
        "function_ref_test.cpp",
        "hex_test.cpp",
        "logging_splitters_test.cpp",
        "logging_test.cpp",
        "macros_test.cpp",
        "mapped_file_test.cpp",
        "no_destructor_test.cpp",
        "parsedouble_test.cpp",
        "parsebool_test.cpp",
        "parseint_test.cpp",
        "parsenetaddress_test.cpp",
        "process_test.cpp",
        "properties_test.cpp",
        "result_test.cpp",
        "scopeguard_test.cpp",
        "stringprintf_test.cpp",
        "strings_test.cpp",
        "test_main.cpp",
        "test_utils_test.cpp",
    ],
    target: {
        android: {
            sanitize: {
                misc_undefined: ["integer"],
            },
        },
        linux: {
            srcs: ["chrono_utils_test.cpp"],
        },
        windows: {
            srcs: ["utf8_test.cpp"],
            cflags: ["-Wno-unused-parameter"],
            enabled: true,
        },
    },
    local_include_dirs: ["."],
    shared_libs: ["libbase"],
    static_libs: ["libgmock"],
    compile_multilib: "both",
    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },
    test_suites: ["device-tests"],
}

cc_test {
    name: "libbase_tidy_test",
    defaults: ["libbase_cflags_defaults"],
    host_supported: true,

    tidy: true,
    tidy_checks_as_errors: ["bugprone-use-after-move"],

    srcs: [
        "tidy/unique_fd_test.cpp",
        "tidy/unique_fd_test2.cpp",
    ],

    shared_libs: ["libbase"],
    test_suites: ["device_tests"],
}

// Can be removed when we move to c++20
cc_test {
    name: "libbase_result_constraint_test",
    defaults: ["libbase_cflags_defaults"],
    host_supported: true,
    srcs: [
        "result_test_constraint.cpp",
    ],
    target: {
        android: {
            sanitize: {
                misc_undefined: ["integer"],
            },
        },
    },
    cpp_std: "gnu++20",
    local_include_dirs: ["."],
    shared_libs: ["libbase"],
    static_libs: ["libgmock"],
    compile_multilib: "both",
    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },
    test_suites: ["device-tests"],
}

cc_benchmark {
    name: "libbase_benchmark",
    defaults: ["libbase_cflags_defaults"],

    srcs: [
        "file_benchmark.cpp",
        "format_benchmark.cpp",
        "function_ref_benchmark.cpp",
    ],
    shared_libs: ["libbase"],

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

cc_fuzz {
    name: "libbase_parsenetaddress_fuzzer",
    shared_libs: ["libbase"],
    host_supported: true,
    srcs: ["parsenetaddress_fuzzer.cpp"],
    dictionary: "parsenetaddress_fuzzer.dict",

    fuzz_config: {
        cc: [
            "android-bionic@google.com",
        ],
        componentid: 128577,
    },
}
