# Copyright (C) 2016 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.


# This hardware composer implements version 2.0. It is to be used as a reference
# guide for writing HWC 2.0 implementations. To enable, add
# "TARGET_USES_HWC2 := true" to flounder's BoardConfig.mk.
# It is a 2D HAL (no GL acceleration). Enabling it will degrade performance.
# To disable, remove "TARGET_USES_HWC2 := true" and run "make installclean"
ifeq ($(TARGET_USES_HWC2),true)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# HAL module implemenation, not prelinked and stored in
# hw/<OVERLAY_HARDWARE_MODULE_ID>.<ro.product.board>.so
LOCAL_MODULE_RELATIVE_PATH := hw

LOCAL_MODULE := hwcomposer.$(TARGET_BOOTLOADER_BOARD_NAME)

LOCAL_SHARED_LIBRARIES := \
	liblog \
	libutils \
	libcutils

LOCAL_STATIC_LIBRARIES := \
	libadfhwc \
	libadf \
	libbase

LOCAL_SRC_FILES := \
	hwc2.cpp \
	hwc2_dev.cpp \
	hwc2_display.cpp \
	hwc2_config.cpp \
	hwc2_callback.cpp \
	hwc2_layer.cpp \
	hwc2_buffer.cpp \
	hwc2_gralloc.cpp \
	hwc2_window.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

LOCAL_MODLE_TAGS := optional

LOCAL_CFLAGS += -DLOG_TAG=\"hwcomposer\"

# The liboemcrypto.a prebuilt was built before we introduced the workaround for
# -Bsymbolic, so it was built without -fPIC. Work around this by using
# -Bsymbolic for projects that depend on it.
LOCAL_LDFLAGS := -Wl,-Bsymbolic

include $(BUILD_SHARED_LIBRARY)

include $(call all-makefiles-under,$(LOCAL_PATH))

endif # TARGET_USES_HWC2
