// Copyright (C) 2017 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_defaults {
    name: "wayland_defaults",

    cflags: [
        "-Wall",
        "-Wextra",
        "-g",
        "-Wstrict-prototypes",
        "-Wmissing-prototypes",
        "-fvisibility=hidden",
        "-Wno-cast-qual",
        "-Wno-pointer-arith",
        "-Wno-unused-parameter",
    ],
}

filegroup {
    name: "wayland_core_protocol",
    srcs: [
        "protocol/wayland.xml",
    ],
}

// Generate wayland-version.h
genrule {
    name: "wayland_version_header",
    cmd: "$(location gen_wayland_version_header.sh) $(location configure.ac) < $(in) > $(out)",
    srcs: ["src/wayland-version.h.in"],
    out: ["wayland-version.h"],
    tool_files: [
        "gen_wayland_version_header.sh",
        "configure.ac",
    ],
}

// Build wayland_scanner, used to generate code
cc_binary_host {
    name: "wayland_scanner",
    defaults: ["wayland_defaults"],
    srcs: [
        "src/scanner.c",
        "src/wayland-util.c",
    ],
    cflags: [
        "-Wall",
        "-Werror",
    ],
    static_libs: ["libexpat"],
    generated_headers: ["wayland_version_header"],
}

// Generate protocol source files used by both client and server
genrule {
    name: "wayland_core_protocol_sources",
    cmd: "$(location wayland_scanner) private-code < $(in) > $(out)",
    srcs: [":wayland_core_protocol"],
    out: ["wayland-protocol.c"],
    tools: ["wayland_scanner"],
}

// Generate protocol header files used by the client
genrule {
    name: "wayland_core_client_protocol_headers",
    cmd: "$(location wayland_scanner) client-header < $(in) > $(out)",
    srcs: [":wayland_core_protocol"],
    out: ["wayland-client-protocol.h"],
    tools: ["wayland_scanner"],
}

// Generate protocol header files used by the server
genrule {
    name: "wayland_core_server_protocol_headers",
    cmd: "$(location wayland_scanner) server-header < $(in) > $(out)",
    srcs: [":wayland_core_protocol"],
    out: ["wayland-server-protocol.h"],
    tools: ["wayland_scanner"],
}

// Build wayland_client
cc_library_static {
    name: "libwayland_client",
    vendor_available: true,
    host_supported: true,
    defaults: ["wayland_defaults"],
    srcs: [
        "src/connection.c",
        "src/wayland-client.c",
        "src/wayland-os.c",
        "src/wayland-util.c",
    ],
    cflags: [
        "-Wall",
        "-Werror",
    ],
    generated_sources: ["wayland_core_protocol_sources"],
    static_libs: ["libffi"],
    local_include_dirs: ["src"],
    generated_headers: [
        "wayland_version_header",
        "wayland_core_client_protocol_headers",
    ],
    export_include_dirs: ["src"],
    export_generated_headers: [
        "wayland_version_header",
        "wayland_core_client_protocol_headers",
    ],
}

// Build wayland_server
cc_library_static {
    name: "libwayland_server",
    vendor_available: true,
    host_supported: true,
    defaults: ["wayland_defaults"],
    srcs: [
        "src/connection.c",
        "src/wayland-os.c",
        "src/wayland-util.c",
        "src/wayland-server.c",
        "src/wayland-shm.c",
        "src/event-loop.c",
    ],
    cflags: [
        "-Wall",
        "-Werror",
    ],
    generated_sources: ["wayland_core_protocol_sources"],
    static_libs: ["libffi"],
    local_include_dirs: ["src"],
    generated_headers: [
        "wayland_version_header",
        "wayland_core_server_protocol_headers",
    ],
    export_include_dirs: ["src"],
    export_generated_headers: [
        "wayland_version_header",
        "wayland_core_server_protocol_headers",
    ],
}
