# Makefile for imx-gpu-sdk
# -*- indent-tabs-mode: t; tab-width: 3 -*-

INVERSE=1
NONINVERSE=0
#usage: $(call message,<text>,<tabs>,<color>,<inverse>)
define message
	( if [ -z $(NOCOLOR) ] ; then echo -ne "\e[$(3)m" ; fi ; \
	if [ "$(4)" = "$(INVERSE)" ] ; then if [ -z $(NOCOLOR) ] ; then echo -ne "\e[7m" ; fi ; echo -n ">>>" ; fi ; \
	if [ "$(2)" -gt 0 ] && [ "$(2)" -lt 10 ] ; then for a in `seq "$(2)"` ; do echo -n "   " ; done ; fi ; \
 	echo -n " $(1) " ; \
	if [ "$(4)" = "$(INVERSE)" ] ; then echo -n "<<<" ; if [ -z $(NOCOLOR) ] ; then echo -ne "\e[27m" ; fi ; fi ; \
	echo ; \
	if [ -z $(NOCOLOR) ] ; then echo -ne "\e[39m" ; fi ; \
	)
endef

SHELL = /bin/bash
export FSL_GRAPHICS_SDK=$(shell pwd)

JOBS := $(shell echo $$((1 + `getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1`)))



## Framework

PROJECTS += DemoFramework/FslAssimp
PROJECTS += DemoFramework/FslBase
PROJECTS += DemoFramework/FslDemoApp
PROJECTS += DemoFramework/FslDemoAppConsole
#PROJECTS += DemoFramework/FslDemoAppG2D
PROJECTS += DemoFramework/FslDemoAppGLES2
PROJECTS += DemoFramework/FslDemoAppGLES3
PROJECTS += DemoFramework/FslDemoAppOpenCL
PROJECTS += DemoFramework/FslDemoAppStub
PROJECTS += DemoFramework/FslDemoAppVG
PROJECTS += DemoFramework/FslDemoAppWindow
PROJECTS += DemoFramework/FslDemoHost
PROJECTS += DemoFramework/FslDemoHostConsole
PROJECTS += DemoFramework/FslDemoHostEGL
PROJECTS += DemoFramework/FslDemoHostStub
PROJECTS += DemoFramework/FslDemoHostWindow
PROJECTS += DemoFramework/FslDemoPlatform
PROJECTS += DemoFramework/FslGraphics
PROJECTS += DemoFramework/FslGraphics3D
PROJECTS += DemoFramework/FslGraphics_Draft
PROJECTS += DemoFramework/FslGraphicsEGL
PROJECTS += DemoFramework/FslGraphicsGLES2
PROJECTS += DemoFramework/FslGraphicsGLES3
PROJECTS += DemoFramework/FslGraphicsVG
#PROJECTS += DemoFramework/FslNativeGraphicsG2D
PROJECTS += DemoFramework/FslNativeGraphicsGLES2
PROJECTS += DemoFramework/FslNativeGraphicsGLES3
PROJECTS += DemoFramework/FslNativeGraphicsStub
PROJECTS += DemoFramework/FslNativeGraphicsVG
PROJECTS += DemoFramework/FslNativeWindow
PROJECTS += DemoFramework/FslNativeWindowEGL
PROJECTS += DemoFramework/FslNativeWindowPlatform
PROJECTS += DemoFramework/FslSceneFormat
PROJECTS += DemoFramework/FslSimpleUI
PROJECTS += DemoFramework/FslSimpleUIApp
PROJECTS += DemoFramework/FslUtilOpenCL
PROJECTS += DemoFramework/FslUtilOpenCL1_1

#PROJECTS += DemoFramework/FslDemoAppOpenVX
#PROJECTS += DemoFramework/FslDemoAppVulkan
#PROJECTS += DemoFramework/FslDemoHostVulkan
#PROJECTS += DemoFramework/FslGraphicsGLES3_1
#PROJECTS += DemoFramework/FslGraphicsVulkan1_0
#PROJECTS += DemoFramework/FslNativeGraphicsVulkan
#PROJECTS += DemoFramework/FslNativeWindowVulkan
#PROJECTS += DemoFramework/FslUtilOpenCL1_2
#PROJECTS += DemoFramework/FslUtilOpenVX
#PROJECTS += DemoFramework/FslUtilOpenVX1_0_1
#PROJECTS += DemoFramework/FslUtilOpenVX1_1

## ThirdParty

PROJECTS += ThirdParty/Mmdc
#PROJECTS += ThirdParty/G2DEmulation

## Shared

PROJECTS += DemoApps/Shared/BloomShared
PROJECTS += DemoApps/Shared/DFGraphicsBasic2DShared
PROJECTS += DemoApps/Shared/DFNativeBatch2DShared
PROJECTS += DemoApps/Shared/DFSimpleUI101Shared
PROJECTS += DemoApps/Shared/EnvironmentMappingShared
PROJECTS += DemoApps/Shared/FractalShaderShared

#PROJECTS += DemoApps/Shared/VulkanExperimental
#PROJECTS += DemoApps/Shared/VulkanWillemsDemoAppExperimental
#PROJECTS += DemoApps/Shared/VulkanWillemsMeshDemoAppExperimental
#PROJECTS += DemoApps/Shared/VulkanWindowExperimental

## Console

PROJECTS += DemoApps/Console/Console101

## G2D

#PROJECTS += DemoApps/G2D/DFGraphicsBasic2D
#PROJECTS += DemoApps/G2D/EightLayers

## GLES2

PROJECTS += DemoApps/GLES2/Blur
PROJECTS += DemoApps/GLES2/DeBayer
PROJECTS += DemoApps/GLES2/DFGraphicsBasic2D
PROJECTS += DemoApps/GLES2/DFNativeBatch2D
PROJECTS += DemoApps/GLES2/DFSimpleUI100
PROJECTS += DemoApps/GLES2/DFSimpleUI101
PROJECTS += DemoApps/GLES2/EightLayerBlend
PROJECTS += DemoApps/GLES2/FractalShader
PROJECTS += DemoApps/GLES2/InputEvents
PROJECTS += DemoApps/GLES2/S01_SimpleTriangle
PROJECTS += DemoApps/GLES2/S02_ColoredTriangle
PROJECTS += DemoApps/GLES2/S03_Transform
PROJECTS += DemoApps/GLES2/S04_Projection
PROJECTS += DemoApps/GLES2/S06_Texturing
PROJECTS += DemoApps/GLES2/S07_EnvironmentMapping
PROJECTS += DemoApps/GLES2/S08_EnvironmentMappingRefraction
PROJECTS += DemoApps/GLES2/T3DStressTest
PROJECTS += DemoApps/GLES2/VIVDirectTextureMultiSampling

#PROJECTS += DemoApps/GLES2/OpenCV101
#PROJECTS += DemoApps/GLES2/S05_PrecompiledShader
#PROJECTS += DemoApps/GLES2/DirectMultiSamplingVideoYUV
#PROJECTS += DemoApps/GLES2/S09_VIV_direct_texture

## GLES3

PROJECTS += DemoApps/GLES3/D1_1_VBOs
PROJECTS += DemoApps/GLES3/D1_2_VAOs
PROJECTS += DemoApps/GLES3/DFGraphicsBasic2D
PROJECTS += DemoApps/GLES3/DFNativeBatch2D
PROJECTS += DemoApps/GLES3/DFSimpleUI100
PROJECTS += DemoApps/GLES3/DFSimpleUI101
PROJECTS += DemoApps/GLES3/E1_1_VBOs
PROJECTS += DemoApps/GLES3/E1_2_VAOs
PROJECTS += DemoApps/GLES3/E2_1_CopyBuffer
PROJECTS += DemoApps/GLES3/E3_0_InstancingSimple
PROJECTS += DemoApps/GLES3/E4_0_PRestart
PROJECTS += DemoApps/GLES3/E6_0_MultipleRenderTargets
PROJECTS += DemoApps/GLES3/E7_0_ParticleSystem
PROJECTS += DemoApps/GLES3/FractalShader
PROJECTS += DemoApps/GLES3/FurShellRendering
PROJECTS += DemoApps/GLES3/OpenCL101
PROJECTS += DemoApps/GLES3/OpenCLGaussianFilter
PROJECTS += DemoApps/GLES3/ParticleSystem
PROJECTS += DemoApps/GLES3/S01_SimpleTriangle
PROJECTS += DemoApps/GLES3/S02_ColoredTriangle
PROJECTS += DemoApps/GLES3/S03_Transform
PROJECTS += DemoApps/GLES3/S04_Projection
PROJECTS += DemoApps/GLES3/S06_Texturing
PROJECTS += DemoApps/GLES3/S07_EnvironmentMapping
PROJECTS += DemoApps/GLES3/S08_EnvironmentMappingRefraction
PROJECTS += DemoApps/GLES3/SpringBackground
PROJECTS += DemoApps/GLES3/T3DStressTest
PROJECTS += DemoApps/GLES3/VerletIntegration101

#PROJECTS += DemoApps/GLES3/OpenCV101
#PROJECTS += DemoApps/GLES3/OpenVX101
#PROJECTS += DemoApps/GLES3/S05_PrecompiledShader
#PROJECTS += DemoApps/GLES3/S09_VIV_direct_texture
#PROJECTS += DemoApps/GLES3/DirectMultiSamplingVideoYUV
#PROJECTS += DemoApps/GLES3/Tessellation101
#PROJECTS += DemoApps/GLES3/TessellationSample

## OpenCL

PROJECTS += DemoApps/OpenCL/FastFourierTransform
PROJECTS += DemoApps/OpenCL/Info

## OpenCV

#PROJECTS += DemoApps/OpenCV/OpenCV101_V2_4
#PROJECTS += DemoApps/OpenCV/OpenCV101_V3_1
#PROJECTS += DemoApps/OpenCV/OpenCV102_V3_1

## OpenVG

PROJECTS += DemoApps/OpenVG/BitmapFont
PROJECTS += DemoApps/OpenVG/CoverFlow
PROJECTS += DemoApps/OpenVG/DFGraphicsBasic2D
PROJECTS += DemoApps/OpenVG/Example1
PROJECTS += DemoApps/OpenVG/Example2
PROJECTS += DemoApps/OpenVG/Example3
PROJECTS += DemoApps/OpenVG/SimpleBench
PROJECTS += DemoApps/OpenVG/VGStressTest

## OpenVX

#PROJECTS += DemoApps/OpenVX/VxTutorial1

## Vulkan

#PROJECTS += DemoApps/Vulkan/ComputeParticles
#PROJECTS += DemoApps/Vulkan/DisplacementMapping
#PROJECTS += DemoApps/Vulkan/DynamicTerrainTessellation
#PROJECTS += DemoApps/Vulkan/Gears
#PROJECTS += DemoApps/Vulkan/MeshInstancing
#PROJECTS += DemoApps/Vulkan/TessellationPNTriangles
#PROJECTS += DemoApps/Vulkan/Texturing
#PROJECTS += DemoApps/Vulkan/TexturingArrays
#PROJECTS += DemoApps/Vulkan/TexturingCubeMap
#PROJECTS += DemoApps/Vulkan/Triangle
#PROJECTS += DemoApps/Vulkan/Vulkan101
#PROJECTS += DemoApps/Vulkan/VulkanComputeMandelbrot

## Window

PROJECTS += DemoApps/Window/InputEvents
#PROJECTS += DemoApps/Window/VulkanTriangle
PROJECTS += DemoApps/Window/Window101





all:
	@(for PROJECT in $(PROJECTS) ; do \
		$(call message,"building $${PROJECT} for Wayland",0,34,1) && \
		EGLBackend=Wayland WindowSystem=Wayland  $(MAKE) -j $(JOBS) -C $${PROJECT} all ; \
	done)


install:
	@(for PROJECT in $(PROJECTS) ; do \
		$(call message,"installing $${PROJECT} for Wayland",0,34,1) && \
		EGLBackend=Wayland WindowSystem=Wayland  $(MAKE) -j $(JOBS) -C $${PROJECT} install ; \
	done)
