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

ifeq ($(INTEL_HWC_MOOREFIELD_HDMI),true)

LOCAL_PATH := $(call my-dir)

# HAL module implemenation, not prelinked and stored in
# hw/<OVERLAY_HARDWARE_MODULE_ID>.<ro.product.board>.so
include $(CLEAR_VARS)

# HwcModule.cpp uses GNU old-style field designator extension.
LOCAL_CLANG_CFLAGS += -Wno-gnu-designator

LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := hwcomposer.$(TARGET_BOARD_PLATFORM)
LOCAL_CFLAGS := -Werror

LOCAL_SHARED_LIBRARIES := liblog libcutils libdrm \
                          libwsbm libutils libhardware \
                          libva libva-tpi libva-android libsync

LOCAL_SRC_FILES := \
    common/base/Drm.cpp \
    common/base/HwcLayer.cpp \
    common/base/HwcLayerList.cpp \
    common/base/Hwcomposer.cpp \
    common/base/HwcModule.cpp \
    common/base/DisplayAnalyzer.cpp \
    common/buffers/BufferCache.cpp \
    common/buffers/GraphicBuffer.cpp \
    common/buffers/BufferManager.cpp \
    common/devices/DummyDevice.cpp \
    common/devices/PhysicalDevice.cpp \
    common/devices/PrimaryDevice.cpp \
    common/devices/ExternalDevice.cpp \
    common/observers/UeventObserver.cpp \
    common/observers/VsyncEventObserver.cpp \
    common/observers/SoftVsyncObserver.cpp \
    common/planes/DisplayPlane.cpp \
    common/planes/DisplayPlaneManager.cpp \
    common/utils/Dump.cpp

LOCAL_SRC_FILES += \
    ips/common/BlankControl.cpp \
    ips/common/HdcpControl.cpp \
    ips/common/DrmControl.cpp \
    ips/common/VsyncControl.cpp \
    ips/common/OverlayPlaneBase.cpp \
    ips/common/SpritePlaneBase.cpp \
    ips/common/PixelFormat.cpp \
    ips/common/GrallocBufferBase.cpp \
    ips/common/GrallocBufferMapperBase.cpp \
    ips/common/TTMBufferMapper.cpp \
    ips/common/DrmConfig.cpp \
    ips/common/Wsbm.cpp \
    ips/common/WsbmWrapper.c \
    ips/common/RotationBufferProvider.cpp

LOCAL_SRC_FILES += \
    ips/tangier/TngGrallocBuffer.cpp \
    ips/tangier/TngGrallocBufferMapper.cpp \
    ips/tangier/TngDisplayQuery.cpp \
    ips/tangier/TngDisplayContext.cpp

LOCAL_SRC_FILES += \
    ips/anniedale/AnnPlaneManager.cpp \
    ips/anniedale/AnnOverlayPlane.cpp \
    ips/anniedale/AnnRGBPlane.cpp \
    ips/anniedale/AnnCursorPlane.cpp \
    ips/anniedale/PlaneCapabilities.cpp

LOCAL_SRC_FILES += \
    platforms/merrifield_plus/PlatfBufferManager.cpp \
    platforms/merrifield_plus/PlatfPrimaryDevice.cpp \
    platforms/merrifield_plus/PlatfExternalDevice.cpp \
    platforms/merrifield_plus/PlatfHwcomposer.cpp

LOCAL_C_INCLUDES := \
    $(LOCAL_PATH)/include \
    $(LOCAL_PATH)/include/pvr/hal \
    $(TARGET_OUT_HEADERS)/libdrm \
    $(TARGET_OUT_HEADERS)/libwsbm/wsbm \
    $(TARGET_OUT_HEADERS)/libttm \
    frameworks/native/include/media/openmax

ifeq ($(TARGET_SUPPORT_HDMI_PRIMARY),true)
   LOCAL_CFLAGS += -DINTEL_SUPPORT_HDMI_PRIMARY
endif

LOCAL_COPY_HEADERS := \
 include/pvr/hal/hal_public.h \
 include/pvr/hal/img_gralloc_public.h
LOCAL_COPY_HEADERS_TO := pvr/hal

include $(BUILD_SHARED_LIBRARY)

endif
