//
// 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 = [
    "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: {
            host_ldlibs: ["-lws2_32"],

            srcs: [
                "socket_inaddr_any_server_windows.cpp",
                "socket_network_client_windows.cpp",
                "sockets_windows.cpp",
                "trace-host.cpp",
            ],

            enabled: true,
            cflags: [
                "-D_GNU_SOURCE",
            ],
        },

        android: {
            srcs: libcutils_nonwindows_sources + [
                "android_get_control_file.cpp",
                "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",
    "libcgrouprc",
]

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",
        "libcgrouprc_format",
    ] + test_libraries,
    stl: "libc++_static",

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

            enabled: true,
        },
    },
}
