// 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,
    recovery_available: true,
    host_supported: true,
    native_bridge_supported: true,

    header_libs: [
        "liblog_headers",
        "libsystem_headers",
        "libcutils_headers",
        "libprocessgroup_headers",
    ],
    export_header_lib_headers: [
        "liblog_headers",
        "libsystem_headers",
        "libcutils_headers",
        "libprocessgroup_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_defaults {
    name: "libutils_defaults",
    vendor_available: true,
    recovery_available: true,
    vndk: {
        enabled: true,
        support_system_process: true,
    },
    host_supported: true,

    cflags: [
        "-Wall",
        "-Werror",
    ],
    header_libs: [
        "libbase_headers",
        "libutils_headers",
    ],
    export_header_lib_headers: [
        "libutils_headers",
    ],

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

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

    target: {
        android: {
            cflags: ["-fvisibility=protected"],

            shared_libs: [
                "libprocessgroup",
                "libdl",
                "libvndksupport",
            ],

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

        recovery: {
            exclude_shared_libs: ["libvndksupport"],
        },

        linux_bionic: {
            enabled: true,
        },

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

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

            enabled: true,
        },
    },
}

cc_library {
    name: "libutils",
    defaults: ["libutils_defaults"],
    native_bridge_supported: true,

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

    target: {
        android: {
            srcs: [
                "Trace.cpp",
            ],
        },
        linux: {
            header_libs: ["libbase_headers"],
            srcs: [
                "Looper.cpp",
            ],
        },
    },
}

cc_library {
    name: "libutilscallstack",
    defaults: ["libutils_defaults"],

    srcs: [
        "CallStack.cpp",
    ],

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

    shared_libs: [
         "libutils",
         "libbacktrace",
    ],

    target: {
        linux: {
            srcs: [
                "ProcessCallStack.cpp",
            ],
        },
        darwin: {
            enabled: false,
        },
        windows: {
            enabled: false,
        },
    },
}

cc_test {
    name: "libutils_test",
    host_supported: true,

    srcs: [
        "BitSet_test.cpp",
        "FileMap_test.cpp",
        "LruCache_test.cpp",
        "Mutex_test.cpp",
        "SharedBuffer_test.cpp",
        "String8_test.cpp",
        "StrongPointer_test.cpp",
        "Unicode_test.cpp",
        "Vector_test.cpp",
    ],

    target: {
        android: {
            srcs: [
                "SystemClock_test.cpp",
            ],
            shared_libs: [
                "libz",
                "liblog",
                "libcutils",
                "libutils",
                "libbase",
            ],
        },
        linux: {
            srcs: [
                "Looper_test.cpp",
                "RefBase_test.cpp",
            ],
        },
        host: {
            static_libs: [
                "libutils",
                "liblog",
                "libbase",
            ],
        },
    },

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wthread-safety",
    ],

    test_suites: ["device-tests"],
}

// TODO: the test infrastructure isn't yet capable of running this,
// so it's broken out into its own test so that the main libutils_tests
// can be in presubmit even if this can't.

cc_test {
    name: "libutils_singleton_test",
    srcs: ["Singleton_test.cpp"],
    cflags: [
        "-Wall",
        "-Werror",
    ],
    shared_libs: ["libbase"],

    required: [
        ":libutils_test_singleton1",
        ":libutils_test_singleton2",
    ],
}

cc_test_library {
    name: "libutils_test_singleton1",
    host_supported: true,
    relative_install_path: "libutils_test",
    srcs: ["Singleton_test1.cpp"],
    cflags: [
        "-Wall",
        "-Werror",
    ],
}

cc_test_library {
    name: "libutils_test_singleton2",
    host_supported: true,
    relative_install_path: "libutils_test",
    srcs: ["Singleton_test2.cpp"],
    cflags: [
        "-Wall",
        "-Werror",
    ],
    shared_libs: ["libutils_test_singleton1"],
}
