//
// 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,
    native_bridge_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,
    native_bridge_supported: true,
    srcs: [
        "config_utils.cpp",
        "canned_fs_config.cpp",
        "iosched_policy.cpp",
        "load_file.cpp",
        "native_handle.cpp",
        "record_stream.cpp",
        "sockets.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,
        },
    },
}
