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

// some files must not be compiled when building against Mingw
// they correspond to features not used by our host development tools
// which are also hard or even impossible to port to native Win32
libcutils_nonwindows_sources = [
    "android_get_control_file.cpp",
    "fs.cpp",
    "hashmap.cpp",
    "multiuser.cpp",
    "socket_inaddr_any_server_unix.cpp",
    "socket_local_client_unix.cpp",
    "socket_local_server_unix.cpp",
    "socket_network_client_unix.cpp",
    "sockets_unix.cpp",
    "str_parms.cpp",
]

cc_library_headers {
    name: "libcutils_headers",
    vendor_available: true,
    recovery_available: true,
    host_supported: true,
    export_include_dirs: ["include"],
    target: {
        vendor: {
            override_export_include_dirs: ["include_vndk"],
        },
        linux_bionic: {
            enabled: true,
        },
        windows: {
            enabled: true,
        },
    },
}

cc_library {
    name: "libcutils",
    vendor_available: true,
    vndk: {
        enabled: true,
        support_system_process: true,
    },
    recovery_available: true,
    host_supported: true,
    srcs: [
        "config_utils.cpp",
        "canned_fs_config.cpp",
        "iosched_policy.cpp",
        "load_file.cpp",
        "native_handle.cpp",
        "record_stream.cpp",
        "sockets.cpp",
        "strdup16to8.cpp",
        "strdup8to16.cpp",
        "strlcpy.c",
        "threads.cpp",
    ],

    target: {
        linux_bionic: {
            enabled: true,
        },
        not_windows: {
            srcs: libcutils_nonwindows_sources + [
                "ashmem-host.cpp",
                "fs_config.cpp",
                "trace-host.cpp",
            ],
        },
        windows: {
            srcs: [
                "socket_inaddr_any_server_windows.cpp",
                "socket_network_client_windows.cpp",
                "sockets_windows.cpp",
                "trace-host.cpp",
            ],

            enabled: true,
            shared: {
                enabled: false,
            },
            cflags: [
                "-D_GNU_SOURCE",
            ],
        },

        android: {
            srcs: libcutils_nonwindows_sources + [
                "android_reboot.cpp",
                "ashmem-dev.cpp",
                "fs_config.cpp",
                "klog.cpp",
                "partition_utils.cpp",
                "properties.cpp",
                "qtaguid.cpp",
                "trace-dev.cpp",
                "uevent.cpp",
            ],
        },

        android_arm: {
            srcs: ["arch-arm/memset32.S"],
            sanitize: {
                misc_undefined: ["integer"],
            },
        },
        android_arm64: {
            srcs: ["arch-arm64/android_memset.S"],
            sanitize: {
                misc_undefined: ["integer"],
            },
        },

        android_mips: {
            srcs: ["arch-mips/android_memset.c"],
            sanitize: {
                misc_undefined: ["integer"],
            },
        },
        android_mips64: {
            srcs: ["arch-mips/android_memset.c"],
            sanitize: {
                misc_undefined: ["integer"],
            },
        },

        android_x86: {
            srcs: [
                "arch-x86/android_memset16.S",
                "arch-x86/android_memset32.S",
            ],
            // TODO: This is to work around b/29412086.
            // Remove once __mulodi4 is available and move the "sanitize" block
            // to the android target.
            sanitize: {
                misc_undefined: [],
            },
        },

        android_x86_64: {
            srcs: [
                "arch-x86_64/android_memset16.S",
                "arch-x86_64/android_memset32.S",
            ],
            sanitize: {
                misc_undefined: ["integer"],
            },
        },

        vendor: {
            exclude_srcs: [
                // qtaguid.cpp loads libnetd_client.so with dlopen().  Since
                // the interface of libnetd_client.so may vary between AOSP
                // releases, exclude qtaguid.cpp from the VNDK-SP variant.
                "qtaguid.cpp",
            ],
        }
    },

    shared_libs: [
        "liblog",
        "libbase",
    ],
    header_libs: [
        "libbase_headers",
        "libcutils_headers",
        "libutils_headers",
        "libprocessgroup_headers",
    ],
    export_header_lib_headers: [
        "libcutils_headers",
        "libprocessgroup_headers",
    ],
    local_include_dirs: ["include"],

    cflags: [
        "-Werror",
        "-Wall",
        "-Wextra",
    ],
}

cc_defaults {
    name: "libcutils_test_default",
    srcs: ["sockets_test.cpp"],

    target: {
        android: {
            srcs: [
                "android_get_control_file_test.cpp",
                "android_get_control_socket_test.cpp",
                "ashmem_test.cpp",
                "fs_config_test.cpp",
                "memset_test.cpp",
                "multiuser_test.cpp",
                "properties_test.cpp",
                "sched_policy_test.cpp",
                "str_parms_test.cpp",
                "trace-dev_test.cpp",
            ],
        },

        not_windows: {
            srcs: [
                "str_parms_test.cpp",
            ],
        },
    },

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
    ],
}

test_libraries = [
    "libcutils",
    "liblog",
    "libbase",
    "libjsoncpp",
    "libprocessgroup",
]

cc_test {
    name: "libcutils_test",
    test_suites: ["device-tests"],
    defaults: ["libcutils_test_default"],
    host_supported: true,
    shared_libs: test_libraries,
}

cc_test {
    name: "libcutils_test_static",
    test_suites: ["device-tests"],
    defaults: ["libcutils_test_default"],
    static_libs: ["libc"] + test_libraries,
    stl: "libc++_static",

    target: {
        android: {
            static_executable: true,
        },
        windows: {
            host_ldlibs: ["-lws2_32"],

            enabled: true,
        },
    },
}
