# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

GRALLOC = gralloc.cros.so

SRCS    = $(wildcard *.cc)
SRCS   += $(wildcard ../*.c)

SRCS   += $(wildcard gralloc0/*.cc)

SOURCES = $(filter-out ../gbm%, $(SRCS))
PKG_CONFIG ?= pkg-config

VPATH = $(dir $(SOURCES))
LIBDRM_CFLAGS := $(shell $(PKG_CONFIG) --cflags libdrm)
LIBDRM_LIBS := $(shell $(PKG_CONFIG) --libs libdrm)

CPPFLAGS += -Wall -fPIC -Werror -flto $(LIBDRM_CFLAGS)
CXXFLAGS += -std=c++14
CFLAGS   += -std=c99
LIBS     += -shared -lcutils -lhardware -lsync $(LIBDRM_LIBS)

OBJS =  $(foreach source, $(SOURCES), $(addsuffix .o, $(basename $(source))))

OBJECTS = $(addprefix $(TARGET_DIR), $(notdir $(OBJS)))
LIBRARY = $(addprefix $(TARGET_DIR), $(GRALLOC))

.PHONY: all clean

all: $(LIBRARY)

$(LIBRARY): $(OBJECTS)

clean:
	$(RM) $(LIBRARY)
	$(RM) $(OBJECTS)

$(LIBRARY):
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $@ $(LIBS)

$(TARGET_DIR)%.o: %.cc
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $^ -o $@ -MMD

$(TARGET_DIR)%.o: %.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $^ -o $@ -MMD
