//
// 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",
        "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"],
            cppflags: ["-Wexit-time-destructors"],
        },
        darwin: {
            srcs: ["errors_unix.cpp"],
            cppflags: ["-Wexit-time-destructors"],
        },
        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",
        "parseint_test.cpp",
        "parsenetaddress_test.cpp",
        "stringprintf_test.cpp",
        "strings_test.cpp",
        "test_main.cpp",
    ],
    target: {
        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",
        },
    },
}
