#
# Copyright (C) 2016-2019 ARM Limited. All rights reserved.
#
# 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.

LOCAL_PATH := $(call my-dir)

# HAL module implemenation, not prelinked.
# Binary located in hw/gralloc.<ro.product.board>.so
include $(CLEAR_VARS)
ifndef PLATFORM_SDK_VERSION
include $(BUILD_SYSTEM)/version_defaults.mk
endif

# Include makefile which exports Gralloc Major and Minor version numbers
include $(LOCAL_PATH)/../gralloc.version.mk

# Include platform specific makefiles
include $(if $(wildcard $(LOCAL_PATH)/Android.$(TARGET_BOARD_PLATFORM).mk), $(LOCAL_PATH)/Android.$(TARGET_BOARD_PLATFORM).mk,)

PLATFORM_SDK_GREATER_THAN_24 := $(shell expr $(PLATFORM_SDK_VERSION) \> 24)
PLATFORM_SDK_LESS_THAN_28 := $(shell expr $(PLATFORM_SDK_VERSION) \< 28)

MALI_GRALLOC_VPU_LIBRARY_PATH?=\"/system/lib/\"
MALI_GRALLOC_GPU_LIBRARY_64_PATH1 := \"/vendor/lib64/egl/\"
MALI_GRALLOC_GPU_LIBRARY_64_PATH2 := \"/system/lib64/egl/\"
MALI_GRALLOC_DPU_LIBRARY_64_PATH := \"/vendor/lib64/hw/\"
MALI_GRALLOC_GPU_LIBRARY_32_PATH1 := \"/vendor/lib/egl/\"
MALI_GRALLOC_GPU_LIBRARY_32_PATH2 := \"/system/lib/egl/\"
MALI_GRALLOC_DPU_LIBRARY_32_PATH := \"/vendor/lib/hw/\"

# 2.0+ specific.
# If set to the default value of zero then build the allocator. Otherwise build the mapper.
# The top-level make file builds both.
GRALLOC_MAPPER?=0

#
# Static hardware defines
#
# These defines are used in case runtime detection does not find the
# user-space driver to read out hardware capabilities

# GPU support for AFBC 1.0
MALI_GPU_SUPPORT_AFBC_BASIC?=1
# GPU support for AFBC 1.1 block split
MALI_GPU_SUPPORT_AFBC_SPLITBLK?=0
# GPU support for AFBC 1.1 wide block
MALI_GPU_SUPPORT_AFBC_WIDEBLK?=0
# GPU support for AFBC 1.2 tiled headers
MALI_GPU_SUPPORT_AFBC_TILED_HEADERS?=0
# GPU support for writing AFBC YUV formats
MALI_GPU_SUPPORT_AFBC_YUV_WRITE?=0

#
# Software behaviour defines
#

# The following defines are used to override default behaviour of which heap is selected for allocations.
# The default is to pick system heap.
# The following two defines enable either DMA heap or compound page heap for when the usage has
# GRALLOC_USAGE_HW_FB or GRALLOC_USAGE_HW_COMPOSER set and GRALLOC_USAGE_HW_VIDEO_ENCODER is not set.
# These defines should not be enabled at the same time.
GRALLOC_USE_ION_DMA_HEAP?=0
GRALLOC_USE_ION_COMPOUND_PAGE_HEAP?=0

# fbdev bitdepth to use
GRALLOC_FB_BPP?=32
# When enabled, forces display framebuffer format to BGRA_8888
GRALLOC_FB_SWAP_RED_BLUE?=1
# Disables the framebuffer HAL device. When a hwc impl is available.
GRALLOC_DISABLE_FRAMEBUFFER_HAL?=1

# When enabled, buffers will never be allocated with AFBC
GRALLOC_ARM_NO_EXTERNAL_AFBC?=1
# Properly initializes an empty AFBC buffer
GRALLOC_INIT_AFBC?=0

ifeq ($(BOARD_USES_EXYNOS_AFBC_FEATURE), true)
GRALLOC_ARM_NO_EXTERNAL_AFBC:=0
GRALLOC_INIT_AFBC:=1
endif

# Minimum buffer dimensions in pixels when buffer will use AFBC
GRALLOC_DISP_W?=1080
GRALLOC_DISP_H?=1920
GRALLOC_AFBC_MIN_SIZE?=50

ifdef BOARD_GRALLOC_AFBC_DISP_W
GRALLOC_DISP_W:=$(BOARD_GRALLOC_AFBC_DISP_W)
endif
ifdef BOARD_GRALLOC_AFBC_DISP_H
GRALLOC_DISP_H:=$(BOARD_GRALLOC_AFBC_DISP_H)
endif
ifdef BOARD_GRALLOC_AFBC_MIN_SIZE
GRALLOC_AFBC_MIN_SIZE := $(BOARD_GRALLOC_AFBC_MIN_SIZE)
endif

# Vsync backend(not used)
GRALLOC_VSYNC_BACKEND?=default

GRALLOC_USE_ION_DMABUF_SYNC?=1

MALI_GRALLOC_DISABLE_ALOGV?=1

# Set 1 to require importBuffer before locking raw buffers
GRALLOC_IMPORT_BUFFER_REQUIRED?=0

# Used for WFD on exynos3830
ifeq ($(TARGET_SOC_BASE), exynos3830)
GRALLOC_SCALER_WFD:=1
else
GRALLOC_SCALER_WFD:=0
endif

# Disable AFBC on secure buffers for exynos9830 based SOC
ifeq ($(TARGET_SOC_BASE), exynos9830)
GRALLOC_SECURE_BUFFER_NO_AFBC:=1
else
GRALLOC_SECURE_BUFFER_NO_AFBC:=0
endif

# DPU support RGBA1010102 AFBC
ifeq ($(TARGET_SOC), exynos2100)
GRALLOC_DPU_SUPPORT_1010102_AFBC:=1
else
GRALLOC_DPU_SUPPORT_1010102_AFBC:=0
endif

# Disable ION debug handle import on 7885
ifneq ($(TARGET_SOC), exynos7885)
GRALLOC_ION_HANDLE_IMPORT:=1
else
GRALLOC_ION_HANDLE_IMPORT:=0
endif

GRALLOC_USE_ASHMEM_METADATA:=0

GRALLOC_HFR_BATCH_SIZE?=8

ifeq ($(GRALLOC_USE_ION_DMA_HEAP), 1)
ifeq ($(GRALLOC_USE_ION_COMPOUND_PAGE_HEAP), 1)
$(error GRALLOC_USE_ION_DMA_HEAP and GRALLOC_USE_ION_COMPOUND_PAGE_HEAP can't be enabled at the same time)
endif
endif

LOCAL_C_INCLUDES := $(MALI_LOCAL_PATH) $(MALI_DDK_INCLUDES) \
    $(TOP)/hardware/samsung_slsi-linaro/exynos/include

# General compilation flags
LOCAL_CFLAGS := -Werror -DLOG_TAG=\"gralloc\" -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)

# ALOGV flag
LOCAL_CFLAGS += -DLOG_NDEBUG=$(MALI_GRALLOC_DISABLE_ALOGV)

# Static hw flags
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_BASIC=$(MALI_GPU_SUPPORT_AFBC_BASIC)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_SPLITBLK=$(MALI_GPU_SUPPORT_AFBC_SPLITBLK)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_WIDEBLK=$(MALI_GPU_SUPPORT_AFBC_WIDEBLK)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_TILED_HEADERS=$(MALI_GPU_SUPPORT_AFBC_TILED_HEADERS)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_YUV_WRITE=$(MALI_GPU_SUPPORT_AFBC_YUV_WRITE)

LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_GPU_LIBRARY_PATH1=$(MALI_GRALLOC_GPU_LIBRARY_64_PATH1)
LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_GPU_LIBRARY_PATH2=$(MALI_GRALLOC_GPU_LIBRARY_64_PATH2)
LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_DPU_LIBRARY_PATH=$(MALI_GRALLOC_DPU_LIBRARY_64_PATH)
LOCAL_CFLAGS_arm += -DMALI_GRALLOC_GPU_LIBRARY_PATH1=$(MALI_GRALLOC_GPU_LIBRARY_32_PATH1)
LOCAL_CFLAGS_arm += -DMALI_GRALLOC_GPU_LIBRARY_PATH2=$(MALI_GRALLOC_GPU_LIBRARY_32_PATH2)
LOCAL_CFLAGS_arm += -DMALI_GRALLOC_DPU_LIBRARY_PATH=$(MALI_GRALLOC_DPU_LIBRARY_32_PATH)
LOCAL_CFLAGS += -DMALI_GRALLOC_VPU_LIBRARY_PATH=$(MALI_GRALLOC_VPU_LIBRARY_PATH)

# Software behaviour flags
LOCAL_CFLAGS += -DGRALLOC_VERSION_MAJOR=$(GRALLOC_VERSION_MAJOR)
LOCAL_CFLAGS += -DHIDL_ALLOCATOR_VERSION_SCALED=$(HIDL_ALLOCATOR_VERSION_SCALED)
LOCAL_CFLAGS += -DHIDL_MAPPER_VERSION_SCALED=$(HIDL_MAPPER_VERSION_SCALED)
LOCAL_CFLAGS += -DHIDL_COMMON_VERSION_SCALED=$(HIDL_COMMON_VERSION_SCALED)
LOCAL_CFLAGS += -DHIDL_IALLOCATOR_NAMESPACE=$(HIDL_IALLOCATOR_NAMESPACE)
LOCAL_CFLAGS += -DHIDL_IMAPPER_NAMESPACE=$(HIDL_IMAPPER_NAMESPACE)
LOCAL_CFLAGS += -DHIDL_COMMON_NAMESPACE=$(HIDL_COMMON_NAMESPACE)
LOCAL_CFLAGS += -DGRALLOC_DISP_W=$(GRALLOC_DISP_W)
LOCAL_CFLAGS += -DGRALLOC_DISP_H=$(GRALLOC_DISP_H)
LOCAL_CFLAGS += -DGRALLOC_AFBC_MIN_SIZE=$(GRALLOC_AFBC_MIN_SIZE)
LOCAL_CFLAGS += -DDISABLE_FRAMEBUFFER_HAL=$(GRALLOC_DISABLE_FRAMEBUFFER_HAL)
LOCAL_CFLAGS += -DGRALLOC_USE_ION_DMA_HEAP=$(GRALLOC_USE_ION_DMA_HEAP)
LOCAL_CFLAGS += -DGRALLOC_USE_ION_COMPOUND_PAGE_HEAP=$(GRALLOC_USE_ION_COMPOUND_PAGE_HEAP)
LOCAL_CFLAGS += -DGRALLOC_INIT_AFBC=$(GRALLOC_INIT_AFBC)
LOCAL_CFLAGS += -DGRALLOC_FB_BPP=$(GRALLOC_FB_BPP)
LOCAL_CFLAGS += -DGRALLOC_FB_SWAP_RED_BLUE=$(GRALLOC_FB_SWAP_RED_BLUE)
LOCAL_CFLAGS += -DGRALLOC_ARM_NO_EXTERNAL_AFBC=$(GRALLOC_ARM_NO_EXTERNAL_AFBC)
LOCAL_CFLAGS += -DGRALLOC_LIBRARY_BUILD=1
LOCAL_CFLAGS += -DGRALLOC_USE_ION_DMABUF_SYNC=$(GRALLOC_USE_ION_DMABUF_SYNC)
LOCAL_CFLAGS += -DGRALLOC_IMPORT_BUFFER_REQUIRED=$(GRALLOC_IMPORT_BUFFER_REQUIRED)
LOCAL_CFLAGS += -DGRALLOC_SCALER_WFD=$(GRALLOC_SCALER_WFD)
LOCAL_CFLAGS += -DGRALLOC_HFR_BATCH_SIZE=$(GRALLOC_HFR_BATCH_SIZE)
LOCAL_CFLAGS += -DGRALLOC_USE_ASHMEM_METADATA=$(GRALLOC_USE_ASHMEM_METADATA)
LOCAL_CFLAGS += -DGRALLOC_ION_HANDLE_IMPORT=$(GRALLOC_ION_HANDLE_IMPORT)
LOCAL_CFLAGS += -DGRALLOC_DPU_SUPPORT_1010102_AFBC=$(GRALLOC_DPU_SUPPORT_1010102_AFBC)
LOCAL_CFLAGS += -DGRALLOC_SECURE_BUFFER_NO_AFBC=$(GRALLOC_SECURE_BUFFER_NO_AFBC)

ifeq ($(TARGET_SOC_BASE), exynos7885)
LOCAL_CFLAGS += -DGRALLOC_7885_WA
endif

ifeq ($(BOARD_USES_ALIGN_RESTRICTION), true)
LOCAL_CFLAGS += -DGRALLOC_MSCL_ALIGN_RESTRICTION
endif

ifeq ($(BOARD_EXYNOS_S10B_FORMAT_ALIGN), 64)
LOCAL_CFLAGS += -DBOARD_EXYNOS_S10B_FORMAT_ALIGN=$(BOARD_EXYNOS_S10B_FORMAT_ALIGN)
else
LOCAL_CFLAGS += -DBOARD_EXYNOS_S10B_FORMAT_ALIGN=16
endif

ifeq ($(BOARD_USES_GRALLOC_ION_SYNC), true)
LOCAL_CFLAGS += -DGRALLOC_ION_SYNC
endif

# HEVC Encoder H/W restriction
ifneq ($(filter exynos7885 exynos7872,$(TARGET_SOC_BASE)),)
LOCAL_CFLAGS += -DEXYNOS_CHROMA_VSTRIDE_ALIGN -DCHROMA_VALIGN=$(BOARD_MFC_CHROMA_VALIGN)
endif

ifneq ($(BOARD_USES_EXYNOS_DATASPACE_FEATURE), true)
LOCAL_CFLAGS += -DGRALLOC_FORCE_BT601
endif

ifeq ($(shell expr $(GRALLOC_VERSION_MAJOR) \<= 1), 1)
LOCAL_SHARED_LIBRARIES := libhardware liblog libcutils libGLESv1_CM libion_exynos libsync libutils
else ifeq ($(GRALLOC_VERSION_MAJOR), 2)
    ifeq ($(GRALLOC_MAPPER), 1)
        LOCAL_SHARED_LIBRARIES := libhardware libhidlbase liblog libcutils libion_exynos libsync libutils
        LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.0
        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
            LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.1
        endif
    else
        LOCAL_SHARED_LIBRARIES := libhardware libhidlbase liblog libcutils libion_exynos libsync libutils
        LOCAL_SHARED_LIBRARIES += android.hardware.graphics.allocator@2.0
        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
            LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.1
        endif
    endif
endif

PLATFORM_SDK_GREATER_THAN_26 := $(shell expr $(PLATFORM_SDK_VERSION) \> 26)
ifeq ($(PLATFORM_SDK_GREATER_THAN_26), 1)
LOCAL_SHARED_LIBRARIES += libnativewindow
LOCAL_STATIC_LIBRARIES := libarect
LOCAL_HEADER_LIBRARIES := libnativebase_headers
endif

LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib
LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64
ifeq ($(shell expr $(GRALLOC_VERSION_MAJOR) \<= 1), 1)
    ifeq ($(TARGET_SOC),)
        LOCAL_MODULE := gralloc.default
    else
        LOCAL_MODULE := gralloc.$(TARGET_SOC)
    endif
else ifeq ($(GRALLOC_VERSION_MAJOR), 2)
    ifeq ($(GRALLOC_MAPPER), 1)
        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 200)
            LOCAL_MODULE := android.hardware.graphics.mapper@2.0-impl
        else ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
            LOCAL_MODULE := android.hardware.graphics.mapper@2.0-impl-2.1
        endif
    else
        LOCAL_MODULE := android.hardware.graphics.allocator@2.0-impl
    endif
endif

LOCAL_MODULE_OWNER := arm
LOCAL_PROPRIETARY_MODULE := true

LOCAL_MODULE_TAGS := optional
LOCAL_MULTILIB := both

LOCAL_SRC_FILES := \
    gralloc_buffer_priv.cpp \
    mali_gralloc_bufferaccess.cpp \
    mali_gralloc_bufferallocation.cpp \
    mali_gralloc_bufferdescriptor.cpp \
    mali_gralloc_ion.cpp \
    mali_gralloc_formats.cpp \
    mali_gralloc_reference.cpp \
    mali_gralloc_debug.cpp \
    format_info.cpp

ifeq ($(GRALLOC_VERSION_MAJOR), 0)
    LOCAL_SRC_FILES += mali_gralloc_module.cpp \
                       framebuffer_device.cpp \
                       gralloc_vsync_${GRALLOC_VSYNC_BACKEND}.cpp \
                       legacy/alloc_device.cpp
else ifeq ($(GRALLOC_VERSION_MAJOR), 1)
    LOCAL_SRC_FILES += mali_gralloc_module.cpp \
                       framebuffer_device.cpp \
                       gralloc_vsync_${GRALLOC_VSYNC_BACKEND}.cpp \
                       mali_gralloc_public_interface.cpp \
                       mali_gralloc_private_interface.cpp
else ifeq ($(GRALLOC_VERSION_MAJOR), 2)
    ifeq ($(GRALLOC_MAPPER), 1)
        LOCAL_SRC_FILES += GrallocMapper.cpp
    else
        LOCAL_SRC_FILES += framebuffer_device.cpp \
                           GrallocAllocator.cpp
    endif

    LOCAL_EXPORT_SHARED_LIBRARY_HEADERS := \
        android.hardware.graphics.allocator@2.0 \
        libhidlbase

    ifeq ($(HIDL_MAPPER_VERSION_SCALED), 200)
        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.mapper@2.0
        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.0
    else ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.mapper@2.1
        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.1
    endif

    ifeq ($(HIDL_COMMON_VERSION_SCALED), 100)
        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.0
    else ifeq ($(HIDL_COMMON_VERSION_SCALED), 110)
        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.1
    endif
endif

LOCAL_MODULE_OWNER := arm

include $(BUILD_SHARED_LIBRARY)

######### GrallocMapperCamera ############

include $(CLEAR_VARS)

# HAL module implemenation, not prelinked.
# Binary located in hw/gralloc.<ro.product.board>.so
include $(CLEAR_VARS)
ifndef PLATFORM_SDK_VERSION
include $(BUILD_SYSTEM)/version_defaults.mk
endif

# Include makefile which exports Gralloc Major and Minor version numbers
include $(LOCAL_PATH)/../gralloc.version.mk

# Include platform specific makefiles
include $(if $(wildcard $(LOCAL_PATH)/Android.$(TARGET_BOARD_PLATFORM).mk), $(LOCAL_PATH)/Android.$(TARGET_BOARD_PLATFORM).mk,)

PLATFORM_SDK_GREATER_THAN_24 := $(shell expr $(PLATFORM_SDK_VERSION) \> 24)
PLATFORM_SDK_LESS_THAN_28 := $(shell expr $(PLATFORM_SDK_VERSION) \< 28)

MALI_GRALLOC_VPU_LIBRARY_PATH?=\"/system/lib/\"
MALI_GRALLOC_GPU_LIBRARY_64_PATH1 := \"/vendor/lib64/egl/\"
MALI_GRALLOC_GPU_LIBRARY_64_PATH2 := \"/system/lib64/egl/\"
MALI_GRALLOC_DPU_LIBRARY_64_PATH := \"/vendor/lib64/hw/\"
MALI_GRALLOC_GPU_LIBRARY_32_PATH1 := \"/vendor/lib/egl/\"
MALI_GRALLOC_GPU_LIBRARY_32_PATH2 := \"/system/lib/egl/\"
MALI_GRALLOC_DPU_LIBRARY_32_PATH := \"/vendor/lib/hw/\"

# 2.0+ specific.
# If set to the default value of zero then build the allocator. Otherwise build the mapper.
# The top-level make file builds both.
GRALLOC_MAPPER?=0

#
# Static hardware defines
#
# These defines are used in case runtime detection does not find the
# user-space driver to read out hardware capabilities

# GPU support for AFBC 1.0
MALI_GPU_SUPPORT_AFBC_BASIC?=1
# GPU support for AFBC 1.1 block split
MALI_GPU_SUPPORT_AFBC_SPLITBLK?=0
# GPU support for AFBC 1.1 wide block
MALI_GPU_SUPPORT_AFBC_WIDEBLK?=0
# GPU support for AFBC 1.2 tiled headers
MALI_GPU_SUPPORT_AFBC_TILED_HEADERS?=0
# GPU support for writing AFBC YUV formats
MALI_GPU_SUPPORT_AFBC_YUV_WRITE?=0

#
# Software behaviour defines
#

# The following defines are used to override default behaviour of which heap is selected for allocations.
# The default is to pick system heap.
# The following two defines enable either DMA heap or compound page heap for when the usage has
# GRALLOC_USAGE_HW_FB or GRALLOC_USAGE_HW_COMPOSER set and GRALLOC_USAGE_HW_VIDEO_ENCODER is not set.
# These defines should not be enabled at the same time.
GRALLOC_USE_ION_DMA_HEAP?=0
GRALLOC_USE_ION_COMPOUND_PAGE_HEAP?=0

# fbdev bitdepth to use
GRALLOC_FB_BPP?=32
# When enabled, forces display framebuffer format to BGRA_8888
GRALLOC_FB_SWAP_RED_BLUE?=1
# Disables the framebuffer HAL device. When a hwc impl is available.
GRALLOC_DISABLE_FRAMEBUFFER_HAL?=1

# When enabled, buffers will never be allocated with AFBC
GRALLOC_ARM_NO_EXTERNAL_AFBC?=1
# Properly initializes an empty AFBC buffer
GRALLOC_INIT_AFBC?=0

ifeq ($(BOARD_USES_EXYNOS_AFBC_FEATURE), true)
GRALLOC_ARM_NO_EXTERNAL_AFBC:=0
GRALLOC_INIT_AFBC:=1
endif

# Minimum buffer dimensions in pixels when buffer will use AFBC
GRALLOC_DISP_W?=1080
GRALLOC_DISP_H?=1920
GRALLOC_AFBC_MIN_SIZE?=75

ifdef BOARD_GRALLOC_AFBC_DISP_W
GRALLOC_DISP_W:=$(BOARD_GRALLOC_AFBC_DISP_W)
endif
ifdef BOARD_GRALLOC_AFBC_DISP_H
GRALLOC_DISP_H:=$(BOARD_GRALLOC_AFBC_DISP_H)
endif
ifdef BOARD_GRALLOC_AFBC_MIN_SIZE
GRALLOC_AFBC_MIN_SIZE := $(BOARD_GRALLOC_AFBC_MIN_SIZE)
endif

# Vsync backend(not used)
GRALLOC_VSYNC_BACKEND?=default

GRALLOC_USE_ION_DMABUF_SYNC?=1

MALI_GRALLOC_DISABLE_ALOGV?=1

# Set 1 to require importBuffer before locking raw buffers
GRALLOC_IMPORT_BUFFER_REQUIRED?=0

# Used for WFD on exynos3830
ifeq ($(TARGET_SOC_BASE), exynos3830)
GRALLOC_SCALER_WFD:=1
else
GRALLOC_SCALER_WFD:=0
endif

# Disable ION debug handle import on 7885
ifneq ($(TARGET_SOC), exynos7885)
GRALLOC_ION_HANDLE_IMPORT:=1
else
GRALLOC_ION_HANDLE_IMPORT:=0
endif

GRALLOC_USE_ASHMEM_METADATA:=0

GRALLOC_HFR_BATCH_SIZE?=8

ifeq ($(GRALLOC_USE_ION_DMA_HEAP), 1)
ifeq ($(GRALLOC_USE_ION_COMPOUND_PAGE_HEAP), 1)
$(error GRALLOC_USE_ION_DMA_HEAP and GRALLOC_USE_ION_COMPOUND_PAGE_HEAP can't be enabled at the same time)
endif
endif

LOCAL_C_INCLUDES := $(MALI_LOCAL_PATH) $(MALI_DDK_INCLUDES) \
    $(TOP)/hardware/samsung_slsi-linaro/exynos/include

# General compilation flags
LOCAL_CFLAGS := -Werror -DLOG_TAG=\"gralloc\" -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)

# ALOGV flag
LOCAL_CFLAGS += -DLOG_NDEBUG=$(MALI_GRALLOC_DISABLE_ALOGV)

# Static hw flags
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_BASIC=$(MALI_GPU_SUPPORT_AFBC_BASIC)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_SPLITBLK=$(MALI_GPU_SUPPORT_AFBC_SPLITBLK)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_WIDEBLK=$(MALI_GPU_SUPPORT_AFBC_WIDEBLK)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_TILED_HEADERS=$(MALI_GPU_SUPPORT_AFBC_TILED_HEADERS)
LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_YUV_WRITE=$(MALI_GPU_SUPPORT_AFBC_YUV_WRITE)

LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_GPU_LIBRARY_PATH1=$(MALI_GRALLOC_GPU_LIBRARY_64_PATH1)
LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_GPU_LIBRARY_PATH2=$(MALI_GRALLOC_GPU_LIBRARY_64_PATH2)
LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_DPU_LIBRARY_PATH=$(MALI_GRALLOC_DPU_LIBRARY_64_PATH)
LOCAL_CFLAGS_arm += -DMALI_GRALLOC_GPU_LIBRARY_PATH1=$(MALI_GRALLOC_GPU_LIBRARY_32_PATH1)
LOCAL_CFLAGS_arm += -DMALI_GRALLOC_GPU_LIBRARY_PATH2=$(MALI_GRALLOC_GPU_LIBRARY_32_PATH2)
LOCAL_CFLAGS_arm += -DMALI_GRALLOC_DPU_LIBRARY_PATH=$(MALI_GRALLOC_DPU_LIBRARY_32_PATH)
LOCAL_CFLAGS += -DMALI_GRALLOC_VPU_LIBRARY_PATH=$(MALI_GRALLOC_VPU_LIBRARY_PATH)

# Software behaviour flags
LOCAL_CFLAGS += -DGRALLOC_VERSION_MAJOR=$(GRALLOC_VERSION_MAJOR)
LOCAL_CFLAGS += -DHIDL_ALLOCATOR_VERSION_SCALED=$(HIDL_ALLOCATOR_VERSION_SCALED)
LOCAL_CFLAGS += -DHIDL_MAPPER_VERSION_SCALED=$(HIDL_MAPPER_VERSION_SCALED)
LOCAL_CFLAGS += -DHIDL_COMMON_VERSION_SCALED=$(HIDL_COMMON_VERSION_SCALED)
LOCAL_CFLAGS += -DHIDL_IALLOCATOR_NAMESPACE=$(HIDL_IALLOCATOR_NAMESPACE)
LOCAL_CFLAGS += -DHIDL_IMAPPER_NAMESPACE=$(HIDL_IMAPPER_NAMESPACE)
LOCAL_CFLAGS += -DHIDL_COMMON_NAMESPACE=$(HIDL_COMMON_NAMESPACE)
LOCAL_CFLAGS += -DGRALLOC_DISP_W=$(GRALLOC_DISP_W)
LOCAL_CFLAGS += -DGRALLOC_DISP_H=$(GRALLOC_DISP_H)
LOCAL_CFLAGS += -DGRALLOC_AFBC_MIN_SIZE=$(GRALLOC_AFBC_MIN_SIZE)
LOCAL_CFLAGS += -DDISABLE_FRAMEBUFFER_HAL=$(GRALLOC_DISABLE_FRAMEBUFFER_HAL)
LOCAL_CFLAGS += -DGRALLOC_USE_ION_DMA_HEAP=$(GRALLOC_USE_ION_DMA_HEAP)
LOCAL_CFLAGS += -DGRALLOC_USE_ION_COMPOUND_PAGE_HEAP=$(GRALLOC_USE_ION_COMPOUND_PAGE_HEAP)
LOCAL_CFLAGS += -DGRALLOC_INIT_AFBC=$(GRALLOC_INIT_AFBC)
LOCAL_CFLAGS += -DGRALLOC_FB_BPP=$(GRALLOC_FB_BPP)
LOCAL_CFLAGS += -DGRALLOC_FB_SWAP_RED_BLUE=$(GRALLOC_FB_SWAP_RED_BLUE)
LOCAL_CFLAGS += -DGRALLOC_ARM_NO_EXTERNAL_AFBC=$(GRALLOC_ARM_NO_EXTERNAL_AFBC)
LOCAL_CFLAGS += -DGRALLOC_LIBRARY_BUILD=1
LOCAL_CFLAGS += -DGRALLOC_USE_ION_DMABUF_SYNC=$(GRALLOC_USE_ION_DMABUF_SYNC)
LOCAL_CFLAGS += -DGRALLOC_IMPORT_BUFFER_REQUIRED=$(GRALLOC_IMPORT_BUFFER_REQUIRED)
LOCAL_CFLAGS += -DGRALLOC_SCALER_WFD=$(GRALLOC_SCALER_WFD)
LOCAL_CFLAGS += -DGRALLOC_HFR_BATCH_SIZE=$(GRALLOC_HFR_BATCH_SIZE)
LOCAL_CFLAGS += -DGRALLOC_USE_ASHMEM_METADATA=$(GRALLOC_USE_ASHMEM_METADATA)
LOCAL_CFLAGS += -DGRALLOC_ION_HANDLE_IMPORT=$(GRALLOC_ION_HANDLE_IMPORT)

ifeq ($(TARGET_SOC_BASE), exynos7885)
LOCAL_CFLAGS += -DGRALLOC_7885_WA
endif

ifeq ($(BOARD_USES_ALIGN_RESTRICTION), true)
LOCAL_CFLAGS += -DGRALLOC_MSCL_ALIGN_RESTRICTION
endif

ifeq ($(BOARD_EXYNOS_S10B_FORMAT_ALIGN), 64)
LOCAL_CFLAGS += -DBOARD_EXYNOS_S10B_FORMAT_ALIGN=$(BOARD_EXYNOS_S10B_FORMAT_ALIGN)
else
LOCAL_CFLAGS += -DBOARD_EXYNOS_S10B_FORMAT_ALIGN=16
endif

ifeq ($(BOARD_USES_GRALLOC_ION_SYNC), true)
LOCAL_CFLAGS += -DGRALLOC_ION_SYNC
endif

# HEVC Encoder H/W restriction
ifneq ($(filter exynos7885 exynos7872,$(TARGET_SOC_BASE)),)
LOCAL_CFLAGS += -DEXYNOS_CHROMA_VSTRIDE_ALIGN -DCHROMA_VALIGN=$(BOARD_MFC_CHROMA_VALIGN)
endif

# Kernel 3.18 ion allocation is different comapred to higer kernel version
ifneq ($(filter exynos7870 exynos7570,$(TARGET_SOC_BASE)),)
LOCAL_CFLAGS += -DGRALLOC_7570_7870_WA
endif

ifneq ($(BOARD_USES_EXYNOS_DATASPACE_FEATURE), true)
LOCAL_CFLAGS += -DGRALLOC_FORCE_BT601
endif

ifeq ($(shell expr $(GRALLOC_VERSION_MAJOR) \<= 1), 1)
LOCAL_SHARED_LIBRARIES := libhardware liblog libcutils libGLESv1_CM libion_exynos libsync libutils
else ifeq ($(GRALLOC_VERSION_MAJOR), 2)
    ifeq ($(GRALLOC_MAPPER), 1)
        LOCAL_SHARED_LIBRARIES := libhardware libhidlbase liblog libcutils libion_exynos libsync libutils
        LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.0
        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
            LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.1
        endif
    else
        LOCAL_SHARED_LIBRARIES := libhardware libhidlbase liblog libcutils libion_exynos libsync libutils
        LOCAL_SHARED_LIBRARIES += android.hardware.graphics.allocator@2.0
        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
            LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.1
        endif
    endif
endif

LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.0

PLATFORM_SDK_GREATER_THAN_26 := $(shell expr $(PLATFORM_SDK_VERSION) \> 26)
ifeq ($(PLATFORM_SDK_GREATER_THAN_26), 1)
LOCAL_SHARED_LIBRARIES += libnativewindow
LOCAL_STATIC_LIBRARIES := libarect
LOCAL_HEADER_LIBRARIES := libnativebase_headers
endif

LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib
LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64

LOCAL_MODULE := libGrallocMapperCamera

LOCAL_MODULE_OWNER := samsung_arm
LOCAL_PROPRIETARY_MODULE := true

LOCAL_MODULE_TAGS := optional
LOCAL_MULTILIB := both

#GRALLOC_INIT_AFBC := 0

LOCAL_SRC_FILES := \
	mali_gralloc_bufferaccess.cpp \
	GrallocMapperCamera.cpp \
	format_info.cpp \
	mali_gralloc_ion.cpp \
	mali_gralloc_formats.cpp \
	mali_gralloc_bufferallocation.cpp \
	gralloc_buffer_priv.cpp \
	mali_gralloc_debug.cpp

include $(BUILD_SHARED_LIBRARY)
