// 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",
    host_supported: true,
    export_include_dirs: ["include"],
    target: {
        windows: {
           enabled: true,
      },
    },
}

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

    srcs: [
        "CallStack.cpp",
        "FileMap.cpp",
        "JenkinsHash.cpp",
        "LinearTransform.cpp",
        "Log.cpp",
        "NativeHandle.cpp",
        "Printer.cpp",
        "PropertyMap.cpp",
        "RefBase.cpp",
        "SharedBuffer.cpp",
        "Static.cpp",
        "StopWatch.cpp",
        "String8.cpp",
        "String16.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"],

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

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

            cflags: ["-fvisibility=protected"],

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

            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"]
