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

libbase_cppflags = [
    "-Wall",
    "-Wextra",
    "-Werror",
]

cc_library {
    name: "libbase",
    clang: true,
    host_supported: true,
    srcs: [
        "file.cpp",
        "logging.cpp",
        "parsenetaddress.cpp",
        "quick_exit.cpp",
        "stringprintf.cpp",
        "strings.cpp",
        "test_utils.cpp",
    ],
    local_include_dirs: ["include"],
    cppflags: libbase_cppflags,
    export_include_dirs: ["include"],
    shared_libs: ["liblog"],
    target: {
        android: {
            srcs: [
                "errors_unix.cpp",
                "properties.cpp",
            ],
            cppflags: ["-Wexit-time-destructors"],
            sanitize: {
                misc_undefined: ["integer"],
            },
        },
        darwin: {
            srcs: ["errors_unix.cpp"],
            cppflags: ["-Wexit-time-destructors"],
        },
        linux_bionic: {
            srcs: ["errors_unix.cpp"],
            cppflags: ["-Wexit-time-destructors"],
            enabled: true,
        },
        linux: {
            srcs: ["errors_unix.cpp"],
            cppflags: ["-Wexit-time-destructors"],
        },
        windows: {
            srcs: [
                "errors_windows.cpp",
                "utf8.cpp",
            ],
            enabled: true,
        },
    },
}

// Tests
// ------------------------------------------------------------------------------
cc_test {
    name: "libbase_test",
    host_supported: true,
    clang: true,
    srcs: [
        "errors_test.cpp",
        "file_test.cpp",
        "logging_test.cpp",
        "parsedouble_test.cpp",
        "parseint_test.cpp",
        "parsenetaddress_test.cpp",
        "quick_exit_test.cpp",
        "stringprintf_test.cpp",
        "strings_test.cpp",
        "test_main.cpp",
    ],
    target: {
        android: {
            srcs: ["properties_test.cpp"],
            sanitize: {
                misc_undefined: ["integer"],
            },
        },
        windows: {
            srcs: ["utf8_test.cpp"],
            enabled: true,
        },
    },
    local_include_dirs: ["."],
    cppflags: libbase_cppflags,
    shared_libs: ["libbase"],
    compile_multilib: "both",
    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },
}
