// Copyright (C) 2008 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_library_headers {
    name: "libutils_headers",
    vendor_available: true,
    host_supported: true,

    header_libs: [
        "liblog_headers",
        "libsystem_headers",
        "libcutils_headers"
    ],
    export_header_lib_headers: [
        "liblog_headers",
        "libsystem_headers",
        "libcutils_headers"
    ],
    export_include_dirs: ["include"],

    target: {
        android: {
            header_libs: ["libbacktrace_headers"],
            export_header_lib_headers: ["libbacktrace_headers"],
        },
        linux_bionic: {
            enabled: true,
        },
        windows: {
            enabled: true,
        },
    },
}

cc_library {
    name: "libutils",
    vendor_available: true,
    host_supported: true,

    srcs: [
        "CallStack.cpp",
        "FileMap.cpp",
        "JenkinsHash.cpp",
        "LinearTransform.cpp",
        "NativeHandle.cpp",
        "Printer.cpp",
        "PropertyMap.cpp",
        "RefBase.cpp",
        "SharedBuffer.cpp",
        "Static.cpp",
        "StopWatch.cpp",
        "String8.cpp",
        "String16.cpp",
        "StrongPointer.cpp",
        "SystemClock.cpp",
        "Threads.cpp",
        "Timers.cpp",
        "Tokenizer.cpp",
        "Unicode.cpp",
        "VectorImpl.cpp",
        "misc.cpp",
    ],

    cflags: ["-Werror"],
    include_dirs: ["external/safe-iop/include"],
    header_libs: ["libutils_headers"],
    export_header_lib_headers: ["libutils_headers"],

    shared_libs: [
        "liblog",
    ],

    arch: {
        mips: {
            cflags: ["-DALIGN_DOUBLE"],
        },
    },

    target: {
        android: {
            srcs: [
                "BlobCache.cpp",
                "Looper.cpp",
                "ProcessCallStack.cpp",
                "Trace.cpp",
            ],

            cflags: ["-fvisibility=protected"],

            shared_libs: [
                "libbacktrace",
                "libcutils",
                "libdl",
            ],

            sanitize: {
                misc_undefined: ["integer"],
            },
        },

        host: {
            cflags: ["-DLIBUTILS_NATIVE=1"],

            shared: {
                enabled: false,
            },
        },

        linux: {
            srcs: [
                "Looper.cpp",
                "ProcessCallStack.cpp",
            ],
        },
        linux_bionic: {
            enabled: true,
            srcs: [
                "Looper.cpp",
                "ProcessCallStack.cpp",
            ],
        },

        darwin: {
            cflags: ["-Wno-unused-parameter"],
        },

        // Under MinGW, ctype.h doesn't need multi-byte support
        windows: {
            cflags: ["-DMB_CUR_MAX=1"],

            enabled: true,
        },
    },

    clang: true,
}

// Include subdirectory makefiles
// ============================================================

cc_test {
    name: "SharedBufferTest",
    host_supported: true,
    static_libs: ["libutils"],
    shared_libs: ["liblog"],
    srcs: ["SharedBufferTest.cpp"],
}

subdirs = ["tests"]
