# Copyright 2020 Fairphone B.V.
#
# 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.
#

#Platform names
TARGET_BOARD_PLATFORM := msm8974

B_FAMILY := msm8226 msm8610 msm8974
BOARD_USES_ADRENO := true

# UM platforms no longer need this set on O+
ifneq ($(filter $(B_FAMILY),$(TARGET_BOARD_PLATFORM)),)
	 TARGET_USES_QCOM_BSP := true
endif

# Tell HALs that we're compiling an AOSP build with an in-line kernel
TARGET_COMPILE_WITH_MSM_KERNEL := true

# Enable media extensions
TARGET_USES_MEDIA_EXTENSIONS := true

# Allow building audio encoders
TARGET_USES_QCOM_MM_AUDIO := true

# Mark GRALLOC_USAGE_PRIVATE_WFD as valid gralloc bits
TARGET_ADDITIONAL_GRALLOC_10_USAGE_BITS ?= 0
TARGET_ADDITIONAL_GRALLOC_10_USAGE_BITS += | (1 << 21)

ifneq ($(filter $(B_FAMILY),$(TARGET_BOARD_PLATFORM)),)
	MSM_VIDC_TARGET_LIST := $(B_FAMILY)
	QCOM_HARDWARE_VARIANT := msm8974
else
	MSM_VIDC_TARGET_LIST := $(TARGET_BOARD_PLATFORM)
QCOM_HARDWARE_VARIANT := $(TARGET_BOARD_PLATFORM)
endif

PRODUCT_SOONG_NAMESPACES += \
	hardware/qcom/audio \
	hardware/qcom/display\
	hardware/qcom/media

# QCOM HW crypto
ifeq ($(TARGET_HW_DISK_ENCRYPTION),true)
	 TARGET_CRYPTFS_HW_PATH ?= vendor/qcom/opensource/cryptfs_hw
endif
