# AUTOGENERATED by FslBuildGen 
# Any manual changes to it will be lost if its regenerated.
#
# Please modify the 'Fsl.gen' file instead
#
# You may define standard make variables such as CFLAGS or
# CXXFLAGS to affect the build. For example, you could use:
#
#      make CXXFLAGS=-g
#
# to build with debug information. The full list of variables
# that can be used by this makefile is:
# AR, CC, CFLAGS, CPPFLAGS, CXX, CXXFLAGS, LD, LDFLAGS, MAKE, RANLIB.

# You may also specify config=Debug|Release
# or their corresponding lower case variants on make command line to select
# the corresponding default flags values.

TARGET_NAME=Example1
TARGET_INSTALL_PATH=OpenVG

SOURCES=\
  source/Example1.cpp \
  source/Example1_Register.cpp 

INCLUDE_DIRS=\
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslBase/include \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslDemoApp/include \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslDemoAppVG/include \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslGraphics/include \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslGraphicsVG/include \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslNativeWindow/include

CPP_DEFINE_FLAG_NAMES=\
  FSL_ENABLE_GRAPHICS_OPENVG

USER_LIB_DEPS=\
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslDemoAppVG/build/Yocto/obj_$(WindowSystem)/$(config)/libFslDemoAppVG$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslDemoHostEGL/build/Yocto/obj_$(WindowSystem)/$(config)/libFslDemoHostEGL$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslNativeGraphicsVG/build/Yocto/obj/$(config)/libFslNativeGraphicsVG$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslDemoPlatform/build/Yocto/obj/$(config)/libFslDemoPlatform$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslGraphicsVG/build/Yocto/obj/$(config)/libFslGraphicsVG$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslNativeWindowEGL/build/Yocto/obj_$(WindowSystem)/$(config)/libFslNativeWindowEGL$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslDemoHost/build/Yocto/obj/$(config)/libFslDemoHost$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslGraphicsEGL/build/Yocto/obj_$(WindowSystem)/$(config)/libFslGraphicsEGL$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslNativeWindowPlatform/build/Yocto/obj_$(WindowSystem)/$(config)/libFslNativeWindowPlatform$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/ThirdParty/Mmdc/build/Yocto/obj/$(config)/libMmdc$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslDemoApp/build/Yocto/obj/$(config)/libFslDemoApp$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslGraphics/build/Yocto/obj/$(config)/libFslGraphics$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslNativeWindow/build/Yocto/obj/$(config)/libFslNativeWindow$(TARGET_POSTFIX).a \
  $(FSL_GRAPHICS_SDK)/DemoFramework/FslBase/build/Yocto/obj/$(config)/libFslBase$(TARGET_POSTFIX).a

USER_EXTLIB_DEPS=\
  IL \
  OpenVG \
  EGL

USER_EXTLIB_PATHS=

# Stuff below is basically the same for all builds

SHELL = /bin/bash

CC  ?= $(CROSS_COMPILE)gcc
AR  ?= $(CROSS_COMPILE)ar
CXX ?= $(CROSS_COMPILE)g++

# Default to a release build
config ?= Release
 
ifeq ($(config),debug)
override config := Debug
endif
ifeq ($(config),release)
override config := Release
endif
ifeq ($(config),Debug)
TARGET_POSTFIX=_d
CPPFLAGS += $(CPPFLAGS_EXT) -DDEBUG -D_DEBUG
CFLAGS   += $(CFLAGS_EXT) -g -O0
CXXFLAGS += $(CXXFLAGS_EXT) -g -O0
LDFLAGS  += $(LDFLAGS_EXT) -g
else ifeq ($(config),Release)
TARGET_POSTFIX=
CPPFLAGS += $(CPPFLAGS_EXT) -DNDEBUG
CFLAGS   += $(CFLAGS_EXT) -O3
CXXFLAGS += $(CXXFLAGS_EXT) -O3
LDFLAGS  += $(LDFLAGS_EXT)
REQUIRED_LINK_FLAGS = -s
else ifneq (,$(config))
$(warning Unknown configuration "$(config)")
endif

ifeq ($(WindowSystem),FB)
CPP_DEFINE_FLAG_NAMES+=\
  FSL_WINDOWSYSTEM_FRAMEBUFFER \
  EGL_API_FB

else ifeq ($(WindowSystem),Wayland)
CPP_DEFINE_FLAG_NAMES+=\
  FSL_WINDOWSYSTEM_WAYLAND \
  EGL_API_WL \
  EGL_API_FB

USER_EXTLIB_DEPS+=\
  wayland-cursor \
  wayland-client

else ifeq ($(WindowSystem),X11)
CPP_DEFINE_FLAG_NAMES+=\
  FSL_WINDOWSYSTEM_X11 \
  EGL_USE_X11

USER_EXTLIB_DEPS+=\
  X11 \
  Xrandr

else
$(error Variant WindowSystem not configured expected one of these FB, Wayland, X11)
endif


VIVANTE_PATH_INCLUDE = $(SYSROOT)/usr/include/vivante
TARGET_PATH_INCLUDE  = $(SYSROOT)/usr/include

PATH_USR_LIB            = $(SYSROOT)/usr/lib
PATH_LIB_ARM64          = $(SYSROOT)/lib/aarch64-linux-gnu
PATH_USR_LIB_ARM64      = $(PATH_USR_LIB)/aarch64-linux-gnu
PATH_USR_LIB_ARM64_VIV  = $(PATH_USR_LIB_ARM64)/vivante

OBJ_PATH=build/Yocto/obj_$(WindowSystem)/$(config)
VARIANT_NAME=_$(WindowSystem)

TARGET=$(TARGET_NAME)$(TARGET_POSTFIX)
OBJECTS = $(patsubst %.cpp,$(OBJ_PATH)/%.o,$(SOURCES)) 
OBJECTS_DEPS = $(OBJECTS:.o=.d)
INCLUDE_DIR_PARAMS=$(foreach d,$(INCLUDE_DIRS),-I$d)
CPP_DEFINE_FLAG_PARAMS=$(foreach d,$(CPP_DEFINE_FLAG_NAMES),-D$d)
USER_EXTLIB_DEPS_PARAMS=$(foreach d,$(USER_EXTLIB_DEPS),-l$d)
USER_EXTLIB_PATHS_PARAMS=$(foreach d,$(USER_EXTLIB_PATHS),-Wl,--library-path=$d)
 
REQUIRED_CXX_FLAGS = -Wall -Wtype-limits -Wuninitialized -fPIC -DPIC -std=c++11 -g $(CPP_DEFINE_FLAG_PARAMS) -pthread -DFSL_PLATFORM_UBUNTU
#REQUIRED_CXX_FLAGS += -mfpu=vfpv3-d16
REQUIRED_CXX_FLAGS += -fno-strict-aliasing -fno-optimize-sibling-calls
REQUIRED_CXX_FLAGS += $(CFLAGS_EGL)
REQUIRED_CXX_FLAGS += -DLINUX
REQUIRED_CXX_FLAGS += \
	-I$(VIVANTE_PATH_INCLUDE) \
	-I$(TARGET_PATH_INCLUDE) \
	-I$(COMMON_DIR)/inc

USER_EXTLIB_DEPS_PARAMS += -lm -ldl \
	-Wl,-L$(PATH_USR_LIB_ARM64_VIV),-rpath-link=$(PATH_USR_LIB_ARM64_VIV) \
	-Wl,-L$(PATH_USR_LIB_ARM64),-rpath-link=$(PATH_USR_LIB_ARM64) \
	-Wl,-L$(PATH_USR_LIB),-rpath-link=$(PATH_USR_LIB) \
	-Wl,-L$(PATH_LIB_ARM64),-rpath-link=$(PATH_LIB_ARM64)

DESTDIR ?= $(FSL_GRAPHICS_SDK)
INSTALL_DIR ?= $(DESTDIR)/$(TARGET_INSTALL_PATH)/$(TARGET_NAME)
INSTALL_TARGET = $(INSTALL_DIR)/$(TARGET)

all: $(TARGET)

# $@ for the pattern-matched target
$(TARGET): $(OBJECTS) $(USER_LIB_DEPS)
	$(CXX) $(REQUIRED_LINK_FLAGS) -o $@ $(LDFLAGS) -pthread $(OBJECTS) $(USER_LIB_DEPS) $(USER_EXTLIB_DEPS_PARAMS) $(USER_EXTLIB_PATHS_PARAMS)

  
# Simple rule used for "cleaning" the build environment.
clean:
	@-rm -f $(OBJECTS)
	@-rm -f $(OBJECTS_DEPS)
	@-rm -f $(TARGET)
	@-rm -f $(INSTALL_TARGET)
	@-rm -f gmon.out
	@echo Cleaned

install: all
	@mkdir -p $(INSTALL_DIR)
	@cp $(TARGET) $(INSTALL_TARGET)
	@$(FSL_GRAPHICS_SDK)/.Config/FslContentSync.py Content $(INSTALL_DIR)/Content --create --cache --ifExist
	@echo Installed to: $(INSTALL_DIR)

# Pattern Rule
# $@ for the pattern-matched target
# $< for the pattern-matched dependency
$(OBJ_PATH)/%.o : %.cpp
	@mkdir -p $(@D)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(REQUIRED_CXX_FLAGS) $(INCLUDE_DIR_PARAMS) -o $@ -c $<

# All this is apparently needed for proper Autodependencies with GNU make
$(OBJ_PATH)/%.d: %.cpp
	@mkdir -p $(@D)
	@rm -f $@;
	@$(CXX) -M $(CPPFLAGS) $(CXXFLAGS) $(REQUIRED_CXX_FLAGS) $(INCLUDE_DIR_PARAMS) $< > $@
	@mv -f $@ $@.tmp
	@sed -e 's|.*:|$(@D)/$(*F).o:|' < $@.tmp > $@
	@sed -e 's/.*://' -e 's/\\$$//' < $@.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@
	@rm -f $@.tmp
	
# pull in dependency info for *existing* .o files
-include $(OBJECTS_DEPS)
	
.PHONY : all clean
