cc_defaults {
    name: "surfaceflinger_defaults",
    cflags: [
        "-Wall",
        "-Werror",
        "-Wformat",
        "-Wthread-safety",
        "-Wunused",
        "-Wunreachable-code",
    ],
}

cc_defaults {
    name: "libsurfaceflinger_defaults",
    defaults: ["surfaceflinger_defaults"],
    cflags: [
        "-DLOG_TAG=\"SurfaceFlinger\"",
        "-DGL_GLEXT_PROTOTYPES",
        "-DEGL_EGLEXT_PROTOTYPES",
    ],
    shared_libs: [
        "android.frameworks.vr.composer@1.0",
        "android.hardware.configstore-utils",
        "android.hardware.configstore@1.0",
        "android.hardware.configstore@1.1",
        "android.hardware.graphics.allocator@2.0",
        "android.hardware.graphics.allocator@3.0",
        "android.hardware.graphics.common@1.2",
        "android.hardware.graphics.composer@2.1",
        "android.hardware.graphics.composer@2.2",
        "android.hardware.graphics.composer@2.3",
        "android.hardware.power@1.0",
        "android.hardware.power@1.3",
        "libbase",
        "libbinder",
        "libbufferhubqueue",
        "libcutils",
        "libdl",
        "libEGL",
        "libfmq",
        "libGLESv1_CM",
        "libGLESv2",
        "libgui",
        "libhardware",
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
        "liblayers_proto",
        "liblog",
        "libnativewindow",
        "libpdx_default_transport",
        "libprocessgroup",
        "libprotobuf-cpp-lite",
        "libsync",
        "libtimestats_proto",
        "libui",
        "libinput",
        "libutils",
        "libSurfaceFlingerProp",
    ],
    static_libs: [
        "libcompositionengine",
        "librenderengine",
        "libserviceutils",
        "libtrace_proto",
        "libvr_manager",
        "libvrflinger",
    ],
    header_libs: [
        "android.hardware.graphics.composer@2.1-command-buffer",
        "android.hardware.graphics.composer@2.2-command-buffer",
        "android.hardware.graphics.composer@2.3-command-buffer",
    ],
    export_static_lib_headers: [
        "libcompositionengine",
        "librenderengine",
        "libserviceutils",
    ],
    export_shared_lib_headers: [
        "android.hardware.graphics.allocator@2.0",
        "android.hardware.graphics.allocator@3.0",
        "android.hardware.graphics.common@1.2",
        "android.hardware.graphics.composer@2.1",
        "android.hardware.graphics.composer@2.2",
        "android.hardware.graphics.composer@2.3",
        "android.hardware.power@1.3",
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
    ],
}

cc_defaults {
    name: "libsurfaceflinger_production_defaults",
    defaults: ["libsurfaceflinger_defaults"],
    cflags: [
        "-fvisibility=hidden",
        "-fwhole-program-vtables", // requires ThinLTO
    ],
    lto: {
        thin: true,
    },
}

cc_library_headers {
    name: "libsurfaceflinger_headers",
    export_include_dirs: ["."],
    static_libs: ["libserviceutils"],
    export_static_lib_headers: ["libserviceutils"],
}

filegroup {
    name: "libsurfaceflinger_sources",
    srcs: [
        "BufferLayer.cpp",
        "BufferLayerConsumer.cpp",
        "BufferQueueLayer.cpp",
        "BufferStateLayer.cpp",
        "ClientCache.cpp",
        "Client.cpp",
        "ColorLayer.cpp",
        "ContainerLayer.cpp",
        "DisplayDevice.cpp",
        "DisplayHardware/ComposerHal.cpp",
        "DisplayHardware/DisplayIdentification.cpp",
        "DisplayHardware/FramebufferSurface.cpp",
        "DisplayHardware/HWC2.cpp",
        "DisplayHardware/HWComposer.cpp",
        "DisplayHardware/PowerAdvisor.cpp",
        "DisplayHardware/VirtualDisplaySurface.cpp",
        "Effects/Daltonizer.cpp",
        "EventLog/EventLog.cpp",
        "FrameTracker.cpp",
        "Layer.cpp",
        "LayerProtoHelper.cpp",
        "LayerRejecter.cpp",
        "LayerStats.cpp",
        "LayerVector.cpp",
        "MonitoredProducer.cpp",
        "NativeWindowSurface.cpp",
        "RefreshRateOverlay.cpp",
        "RegionSamplingThread.cpp",
        "RenderArea.cpp",
        "Scheduler/DispSync.cpp",
        "Scheduler/DispSyncSource.cpp",
        "Scheduler/EventControlThread.cpp",
        "Scheduler/EventThread.cpp",
        "Scheduler/IdleTimer.cpp",
        "Scheduler/LayerHistory.cpp",
        "Scheduler/LayerInfo.cpp",
        "Scheduler/MessageQueue.cpp",
        "Scheduler/Scheduler.cpp",
        "Scheduler/SchedulerUtils.cpp",
        "Scheduler/PhaseOffsets.cpp",
        "StartPropertySetThread.cpp",
        "SurfaceFlinger.cpp",
        "SurfaceInterceptor.cpp",
        "SurfaceTracing.cpp",
        "TimeStats/TimeStats.cpp",
        "TransactionCompletedThread.cpp",
    ],
}

cc_library_shared {
    // Please use libsurfaceflinger_defaults to configure how the sources are
    // built, so the same settings can be used elsewhere.
    name: "libsurfaceflinger",
    defaults: ["libsurfaceflinger_production_defaults"],
    srcs: [
        ":libsurfaceflinger_sources",

        // Note: SurfaceFlingerFactory is not in the default sources so that it
        // can be easily replaced.
        "SurfaceFlingerFactory.cpp",
    ],
    logtags: ["EventLog/EventLogTags.logtags"],
}

cc_defaults {
    name: "libsurfaceflinger_binary",
    defaults: ["surfaceflinger_defaults"],
    cflags: [
        "-DLOG_TAG=\"SurfaceFlinger\"",
    ],
    whole_static_libs: [
        "libsigchain",
    ],
    shared_libs: [
        "android.frameworks.displayservice@1.0",
        "android.hardware.configstore-utils",
        "android.hardware.configstore@1.0",
        "android.hardware.graphics.allocator@2.0",
        "android.hardware.graphics.allocator@3.0",
        "libbinder",
        "libcutils",
        "libdisplayservicehidl",
        "libhidlbase",
        "libhidltransport",
        "libinput",
        "liblayers_proto",
        "liblog",
        "libprocessgroup",
        "libsync",
        "libtimestats_proto",
        "libutils",
    ],
    static_libs: [
        "libserviceutils",
        "libtrace_proto",
    ],
    ldflags: ["-Wl,--export-dynamic"],
}

filegroup {
    name: "surfaceflinger_binary_sources",
    srcs: ["main_surfaceflinger.cpp"],
}

cc_binary {
    name: "surfaceflinger",
    defaults: ["libsurfaceflinger_binary"],
    init_rc: ["surfaceflinger.rc"],
    srcs: [":surfaceflinger_binary_sources"],
    shared_libs: [
        "libsurfaceflinger",
        "libSurfaceFlingerProp",
    ],
}

subdirs = [
    "layerproto",
    "TimeStats/timestatsproto",
    "tests",
]

cc_library_shared {
    name: "libSurfaceFlingerProp",
    srcs: [
        "SurfaceFlingerProperties.cpp",
    ],
    shared_libs: [
        "android.hardware.configstore-utils",
        "android.hardware.configstore@1.0",
        "android.hardware.configstore@1.1",
        "android.hardware.graphics.common@1.2",
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
        "libui",
        "libutils",
        "liblog",
    ],
    static_libs: [
        "SurfaceFlingerProperties",
    ],
    export_shared_lib_headers: [
        "android.hardware.graphics.common@1.2",
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
    ],
    export_static_lib_headers: [
        "SurfaceFlingerProperties",
    ],
}