1#
2# Copyright (C) 2016-2019 ARM Limited. All rights reserved.
3#
4# Copyright (C) 2008 The Android Open Source Project
5#
6# Licensed under the Apache License, Version 2.0 (the "License");
7# you may not use this file except in compliance with the License.
8# You may obtain a copy of the License at
9#
10#      http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17
18LOCAL_PATH := $(call my-dir)
19
20# HAL module implemenation, not prelinked.
21# Binary located in hw/gralloc.<ro.product.board>.so
22include $(CLEAR_VARS)
23ifndef PLATFORM_SDK_VERSION
24include $(BUILD_SYSTEM)/version_defaults.mk
25endif
26
27# Include makefile which exports Gralloc Major and Minor version numbers
28include $(LOCAL_PATH)/../gralloc.version.mk
29
30# Include platform specific makefiles
31include $(if $(wildcard $(LOCAL_PATH)/Android.$(TARGET_BOARD_PLATFORM).mk), $(LOCAL_PATH)/Android.$(TARGET_BOARD_PLATFORM).mk,)
32
33PLATFORM_SDK_GREATER_THAN_24 := $(shell expr $(PLATFORM_SDK_VERSION) \> 24)
34PLATFORM_SDK_LESS_THAN_28 := $(shell expr $(PLATFORM_SDK_VERSION) \< 28)
35
36MALI_GRALLOC_VPU_LIBRARY_PATH?=\"/system/lib/\"
37MALI_GRALLOC_GPU_LIBRARY_64_PATH1 := \"/vendor/lib64/egl/\"
38MALI_GRALLOC_GPU_LIBRARY_64_PATH2 := \"/system/lib64/egl/\"
39MALI_GRALLOC_DPU_LIBRARY_64_PATH := \"/vendor/lib64/hw/\"
40MALI_GRALLOC_GPU_LIBRARY_32_PATH1 := \"/vendor/lib/egl/\"
41MALI_GRALLOC_GPU_LIBRARY_32_PATH2 := \"/system/lib/egl/\"
42MALI_GRALLOC_DPU_LIBRARY_32_PATH := \"/vendor/lib/hw/\"
43
44# 2.0+ specific.
45# If set to the default value of zero then build the allocator. Otherwise build the mapper.
46# The top-level make file builds both.
47GRALLOC_MAPPER?=0
48
49#
50# Static hardware defines
51#
52# These defines are used in case runtime detection does not find the
53# user-space driver to read out hardware capabilities
54
55ifeq ($(USE_SWIFTSHADER),true)
56# GPU support for AFBC 1.0
57MALI_GPU_SUPPORT_AFBC_BASIC?=0
58# GPU support for AFBC 1.1 block split
59MALI_GPU_SUPPORT_AFBC_SPLITBLK?=0
60# GPU support for AFBC 1.1 wide block
61MALI_GPU_SUPPORT_AFBC_WIDEBLK?=0
62# GPU support for AFBC 1.2 tiled headers
63MALI_GPU_SUPPORT_AFBC_TILED_HEADERS?=0
64# GPU support for writing AFBC YUV formats
65MALI_GPU_SUPPORT_AFBC_YUV_WRITE?=0
66else # !USE_SWIFTSHADER
67# GPU support for AFBC 1.0
68MALI_GPU_SUPPORT_AFBC_BASIC?=1
69# GPU support for AFBC 1.1 block split
70MALI_GPU_SUPPORT_AFBC_SPLITBLK?=0
71# GPU support for AFBC 1.1 wide block
72MALI_GPU_SUPPORT_AFBC_WIDEBLK?=1
73# GPU support for AFBC 1.2 tiled headers
74MALI_GPU_SUPPORT_AFBC_TILED_HEADERS?=0
75# GPU support for writing AFBC YUV formats
76MALI_GPU_SUPPORT_AFBC_YUV_WRITE?=1
77endif # USE_SWIFTSHADER
78
79#
80# Software behaviour defines
81#
82
83# The following defines are used to override default behaviour of which heap is selected for allocations.
84# The default is to pick system heap.
85# The following two defines enable either DMA heap or compound page heap for when the usage has
86# GRALLOC_USAGE_HW_FB or GRALLOC_USAGE_HW_COMPOSER set and GRALLOC_USAGE_HW_VIDEO_ENCODER is not set.
87# These defines should not be enabled at the same time.
88GRALLOC_USE_ION_DMA_HEAP?=0
89GRALLOC_USE_ION_COMPOUND_PAGE_HEAP?=0
90
91# fbdev bitdepth to use
92GRALLOC_FB_BPP?=32
93# When enabled, forces display framebuffer format to BGRA_8888
94GRALLOC_FB_SWAP_RED_BLUE?=1
95# Disables the framebuffer HAL device. When a hwc impl is available.
96GRALLOC_DISABLE_FRAMEBUFFER_HAL?=1
97
98# When enabled, buffers will never be allocated with AFBC
99GRALLOC_ARM_NO_EXTERNAL_AFBC?=1
100# Properly initializes an empty AFBC buffer
101GRALLOC_INIT_AFBC?=0
102
103ifeq ($(BOARD_USES_EXYNOS_AFBC_FEATURE), true)
104GRALLOC_ARM_NO_EXTERNAL_AFBC:=0
105GRALLOC_INIT_AFBC:=1
106endif
107
108# Minimum buffer dimensions in pixels when buffer will use AFBC
109GRALLOC_DISP_W?=0
110GRALLOC_DISP_H?=0
111GRALLOC_AFBC_MIN_SIZE?=75
112
113ifdef BOARD_GRALLOC_AFBC_DISP_W
114GRALLOC_DISP_W:=$(BOARD_GRALLOC_AFBC_DISP_W)
115endif
116ifdef BOARD_GRALLOC_AFBC_DISP_H
117GRALLOC_DISP_H:=$(BOARD_GRALLOC_AFBC_DISP_H)
118endif
119ifdef BOARD_GRALLOC_AFBC_MIN_SIZE
120GRALLOC_AFBC_MIN_SIZE := $(BOARD_GRALLOC_AFBC_MIN_SIZE)
121endif
122
123# Vsync backend(not used)
124GRALLOC_VSYNC_BACKEND?=default
125
126GRALLOC_USE_ION_DMABUF_SYNC?=1
127
128MALI_GRALLOC_DISABLE_ALOGV?=1
129
130# Set 1 to require importBuffer before locking raw buffers
131GRALLOC_IMPORT_BUFFER_REQUIRED?=0
132
133# Used for WFD on exynos3830
134ifeq ($(TARGET_BOARD_PLATFORM), exynos3830)
135GRALLOC_ION_HEAP_CRYPTO_MASK:=1
136else
137GRALLOC_ION_HEAP_CRYPTO_MASK:=0
138endif
139
140# Disable ION debug handle import on 7885
141ifneq ($(TARGET_SOC), exynos7885)
142GRALLOC_ION_HANDLE_IMPORT:=1
143else
144GRALLOC_ION_HANDLE_IMPORT:=0
145endif
146
147GRALLOC_USE_ASHMEM_METADATA:=0
148
149GRALLOC_HFR_BATCH_SIZE?=8
150
151ifeq ($(GRALLOC_USE_ION_DMA_HEAP), 1)
152ifeq ($(GRALLOC_USE_ION_COMPOUND_PAGE_HEAP), 1)
153$(error GRALLOC_USE_ION_DMA_HEAP and GRALLOC_USE_ION_COMPOUND_PAGE_HEAP can't be enabled at the same time)
154endif
155endif
156
157ifeq (,$(wildcard $(TARGET_BOARD_KERNEL_HEADERS)/video/mfc_macros.h))
158# b/175341085
159$(warning "Couldn't find video/mfc_macros in UAPI, using local_mfc_macros.h")
160endif
161
162LOCAL_C_INCLUDES := $(MALI_LOCAL_PATH) $(MALI_DDK_INCLUDES) \
163    $(TOP)/hardware/google/gchips/include \
164    $(TARGET_BOARD_KERNEL_HEADERS)
165
166# General compilation flags
167LOCAL_CFLAGS := -ldl -Werror -DLOG_TAG=\"gralloc\" -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
168
169# ALOGV flag
170LOCAL_CFLAGS += -DLOG_NDEBUG=$(MALI_GRALLOC_DISABLE_ALOGV)
171
172# Static hw flags
173LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_BASIC=$(MALI_GPU_SUPPORT_AFBC_BASIC)
174LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_SPLITBLK=$(MALI_GPU_SUPPORT_AFBC_SPLITBLK)
175LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_WIDEBLK=$(MALI_GPU_SUPPORT_AFBC_WIDEBLK)
176LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_TILED_HEADERS=$(MALI_GPU_SUPPORT_AFBC_TILED_HEADERS)
177LOCAL_CFLAGS += -DMALI_GPU_SUPPORT_AFBC_YUV_WRITE=$(MALI_GPU_SUPPORT_AFBC_YUV_WRITE)
178
179LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_GPU_LIBRARY_PATH1=$(MALI_GRALLOC_GPU_LIBRARY_64_PATH1)
180LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_GPU_LIBRARY_PATH2=$(MALI_GRALLOC_GPU_LIBRARY_64_PATH2)
181LOCAL_CFLAGS_arm64 += -DMALI_GRALLOC_DPU_LIBRARY_PATH=$(MALI_GRALLOC_DPU_LIBRARY_64_PATH)
182LOCAL_CFLAGS_arm += -DMALI_GRALLOC_GPU_LIBRARY_PATH1=$(MALI_GRALLOC_GPU_LIBRARY_32_PATH1)
183LOCAL_CFLAGS_arm += -DMALI_GRALLOC_GPU_LIBRARY_PATH2=$(MALI_GRALLOC_GPU_LIBRARY_32_PATH2)
184LOCAL_CFLAGS_arm += -DMALI_GRALLOC_DPU_LIBRARY_PATH=$(MALI_GRALLOC_DPU_LIBRARY_32_PATH)
185LOCAL_CFLAGS += -DMALI_GRALLOC_VPU_LIBRARY_PATH=$(MALI_GRALLOC_VPU_LIBRARY_PATH)
186
187# Software behaviour flags
188LOCAL_CFLAGS += -DGRALLOC_VERSION_MAJOR=$(GRALLOC_VERSION_MAJOR)
189LOCAL_CFLAGS += -DHIDL_ALLOCATOR_VERSION_SCALED=$(HIDL_ALLOCATOR_VERSION_SCALED)
190LOCAL_CFLAGS += -DHIDL_MAPPER_VERSION_SCALED=$(HIDL_MAPPER_VERSION_SCALED)
191LOCAL_CFLAGS += -DHIDL_COMMON_VERSION_SCALED=$(HIDL_COMMON_VERSION_SCALED)
192LOCAL_CFLAGS += -DHIDL_IALLOCATOR_NAMESPACE=$(HIDL_IALLOCATOR_NAMESPACE)
193LOCAL_CFLAGS += -DHIDL_IMAPPER_NAMESPACE=$(HIDL_IMAPPER_NAMESPACE)
194LOCAL_CFLAGS += -DHIDL_COMMON_NAMESPACE=$(HIDL_COMMON_NAMESPACE)
195LOCAL_CFLAGS += -DGRALLOC_DISP_W=$(GRALLOC_DISP_W)
196LOCAL_CFLAGS += -DGRALLOC_DISP_H=$(GRALLOC_DISP_H)
197LOCAL_CFLAGS += -DGRALLOC_AFBC_MIN_SIZE=$(GRALLOC_AFBC_MIN_SIZE)
198LOCAL_CFLAGS += -DDISABLE_FRAMEBUFFER_HAL=$(GRALLOC_DISABLE_FRAMEBUFFER_HAL)
199LOCAL_CFLAGS += -DGRALLOC_USE_ION_DMA_HEAP=$(GRALLOC_USE_ION_DMA_HEAP)
200LOCAL_CFLAGS += -DGRALLOC_USE_ION_COMPOUND_PAGE_HEAP=$(GRALLOC_USE_ION_COMPOUND_PAGE_HEAP)
201LOCAL_CFLAGS += -DGRALLOC_INIT_AFBC=$(GRALLOC_INIT_AFBC)
202LOCAL_CFLAGS += -DGRALLOC_FB_BPP=$(GRALLOC_FB_BPP)
203LOCAL_CFLAGS += -DGRALLOC_FB_SWAP_RED_BLUE=$(GRALLOC_FB_SWAP_RED_BLUE)
204LOCAL_CFLAGS += -DGRALLOC_ARM_NO_EXTERNAL_AFBC=$(GRALLOC_ARM_NO_EXTERNAL_AFBC)
205LOCAL_CFLAGS += -DGRALLOC_LIBRARY_BUILD=1
206LOCAL_CFLAGS += -DGRALLOC_USE_ION_DMABUF_SYNC=$(GRALLOC_USE_ION_DMABUF_SYNC)
207LOCAL_CFLAGS += -DGRALLOC_IMPORT_BUFFER_REQUIRED=$(GRALLOC_IMPORT_BUFFER_REQUIRED)
208LOCAL_CFLAGS += -DGRALLOC_ION_HEAP_CRYPTO_MASK=$(GRALLOC_ION_HEAP_CRYPTO_MASK)
209LOCAL_CFLAGS += -DGRALLOC_HFR_BATCH_SIZE=$(GRALLOC_HFR_BATCH_SIZE)
210LOCAL_CFLAGS += -DGRALLOC_USE_ASHMEM_METADATA=$(GRALLOC_USE_ASHMEM_METADATA)
211LOCAL_CFLAGS += -DGRALLOC_ION_HANDLE_IMPORT=$(GRALLOC_ION_HANDLE_IMPORT)
212
213ifeq ($(BOARD_USES_ALIGN_RESTRICTION), true)
214LOCAL_CFLAGS += -DGRALLOC_MSCL_ALIGN_RESTRICTION
215endif
216
217ifeq ($(BOARD_EXYNOS_S10B_FORMAT_ALIGN), 64)
218LOCAL_CFLAGS += -DBOARD_EXYNOS_S10B_FORMAT_ALIGN=$(BOARD_EXYNOS_S10B_FORMAT_ALIGN)
219else
220LOCAL_CFLAGS += -DBOARD_EXYNOS_S10B_FORMAT_ALIGN=16
221endif
222
223ifeq ($(BOARD_USES_GRALLOC_ION_SYNC), true)
224LOCAL_CFLAGS += -DGRALLOC_ION_SYNC
225endif
226
227ifneq ($(BOARD_USES_EXYNOS_DATASPACE_FEATURE), true)
228LOCAL_CFLAGS += -DGRALLOC_NO_CSC_SUPPORTED
229endif
230
231ifeq ($(shell expr $(GRALLOC_VERSION_MAJOR) \<= 1), 1)
232LOCAL_SHARED_LIBRARIES := libhardware liblog libcutils libGLESv1_CM libion_google libsync libutils libdmabufheap
233else ifeq ($(GRALLOC_VERSION_MAJOR), 2)
234    ifeq ($(GRALLOC_MAPPER), 1)
235        LOCAL_SHARED_LIBRARIES := libhardware libhidlbase libhidltransport liblog libcutils libion_google libsync libutils libdmabufheap
236        LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.0
237        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
238            LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.1
239        endif
240    else
241        LOCAL_SHARED_LIBRARIES := libhardware libhidlbase libhidltransport liblog libcutils libion_google libsync libutils libdmabufheap
242        LOCAL_SHARED_LIBRARIES += android.hardware.graphics.allocator@2.0
243        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
244            LOCAL_SHARED_LIBRARIES += android.hardware.graphics.mapper@2.1
245        endif
246    endif
247endif
248
249PLATFORM_SDK_GREATER_THAN_26 := $(shell expr $(PLATFORM_SDK_VERSION) \> 26)
250ifeq ($(PLATFORM_SDK_GREATER_THAN_26), 1)
251LOCAL_SHARED_LIBRARIES += libnativewindow
252LOCAL_STATIC_LIBRARIES := libarect
253LOCAL_HEADER_LIBRARIES := libnativebase_headers
254endif
255
256LOCAL_PRELINK_MODULE := false
257LOCAL_MODULE_RELATIVE_PATH := hw
258LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib
259LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64
260ifeq ($(shell expr $(GRALLOC_VERSION_MAJOR) \<= 1), 1)
261    ifeq ($(TARGET_BOARD_PLATFORM),)
262        LOCAL_MODULE := gralloc.default
263        LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
264        LOCAL_LICENSE_CONDITIONS := notice
265    else
266        LOCAL_MODULE := gralloc.$(TARGET_BOARD_PLATFORM)
267        LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
268        LOCAL_LICENSE_CONDITIONS := notice
269    endif
270else ifeq ($(GRALLOC_VERSION_MAJOR), 2)
271    ifeq ($(GRALLOC_MAPPER), 1)
272        ifeq ($(HIDL_MAPPER_VERSION_SCALED), 200)
273            LOCAL_MODULE := android.hardware.graphics.mapper@2.0-impl
274            LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
275            LOCAL_LICENSE_CONDITIONS := notice
276        else ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
277            LOCAL_MODULE := android.hardware.graphics.mapper@2.0-impl-2.1
278            LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
279            LOCAL_LICENSE_CONDITIONS := notice
280        endif
281    else
282        LOCAL_MODULE := android.hardware.graphics.allocator@2.0-impl
283        LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
284        LOCAL_LICENSE_CONDITIONS := notice
285    endif
286endif
287
288LOCAL_MODULE_OWNER := arm
289LOCAL_PROPRIETARY_MODULE := true
290
291LOCAL_MODULE_TAGS := optional
292LOCAL_MULTILIB := both
293
294LOCAL_SRC_FILES := \
295    gralloc_buffer_priv.cpp \
296    mali_gralloc_bufferaccess.cpp \
297    mali_gralloc_bufferallocation.cpp \
298    mali_gralloc_bufferdescriptor.cpp \
299    mali_gralloc_ion.cpp \
300    mali_gralloc_formats.cpp \
301    mali_gralloc_reference.cpp \
302    mali_gralloc_debug.cpp \
303    format_info.cpp
304
305ifeq ($(GRALLOC_VERSION_MAJOR), 0)
306    LOCAL_SRC_FILES += mali_gralloc_module.cpp \
307                       framebuffer_device.cpp \
308                       gralloc_vsync_${GRALLOC_VSYNC_BACKEND}.cpp \
309                       legacy/alloc_device.cpp
310else ifeq ($(GRALLOC_VERSION_MAJOR), 1)
311    LOCAL_SRC_FILES += mali_gralloc_module.cpp \
312                       framebuffer_device.cpp \
313                       gralloc_vsync_${GRALLOC_VSYNC_BACKEND}.cpp \
314                       mali_gralloc_public_interface.cpp \
315                       mali_gralloc_private_interface.cpp
316else ifeq ($(GRALLOC_VERSION_MAJOR), 2)
317    ifeq ($(GRALLOC_MAPPER), 1)
318        LOCAL_SRC_FILES += GrallocMapper.cpp
319    else
320        LOCAL_SRC_FILES += framebuffer_device.cpp \
321                           GrallocAllocator.cpp
322    endif
323
324    LOCAL_EXPORT_SHARED_LIBRARY_HEADERS := \
325        android.hardware.graphics.allocator@2.0 \
326        libhidlbase \
327        libhidltransport
328
329    ifeq ($(HIDL_MAPPER_VERSION_SCALED), 200)
330        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.mapper@2.0
331        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.0
332    else ifeq ($(HIDL_MAPPER_VERSION_SCALED), 210)
333        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.mapper@2.1
334        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.1
335    endif
336
337    ifeq ($(HIDL_COMMON_VERSION_SCALED), 100)
338        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.0
339    else ifeq ($(HIDL_COMMON_VERSION_SCALED), 110)
340        LOCAL_EXPORT_SHARED_LIBRARY_HEADERS += android.hardware.graphics.common@1.1
341    endif
342endif
343
344LOCAL_MODULE_OWNER := arm
345
346include $(BUILD_SHARED_LIBRARY)
347