#
#    Copyright (c) 2014 Nest Labs, Inc.
#    All rights reserved.
#
#    This document is the property of Nest. It is considered
#    confidential and proprietary information.
#
#    This document may not be reproduced or transmitted in any form,
#    in whole or in part, without the express written permission of
#    Nest.
#
#    Description:
#     This file is the .mak to install GPU Vendor libraries.
#

include pre.mak

GpuTop       = fsl/gc400
GpuLibsVer   = 1.0
GpuLibsDir   = $(GpuLibsVer)/lib
GpuIncDir    = $(GpuLibsVer)/include
ResultLibDir = $(subst $(GpuTop),usr/lib,$(ResultDirectory))
ResultIncDir = $(subst $(GpuTop),usr/include,$(ResultDirectory))

SOURCEDIRS                = $(GpuLibsDir) $(GpuIncDir)
$(GpuLibsDir)_RULE_TARGET = $(BuildDirectory)/stage
$(GpuIncDir)_RULE_TARGET  = $(BuildDirectory)/stage

all: $(PackageDefaultGoal)

$(BuildDirectory)/stage: | $(BuildDirectory)
	$(Verbose)install -d						$(ResultLibDir)
	$(Verbose)install $(GpuLibsDir)/libGAL-fb.so			$(ResultLibDir)/libGAL-fb.$(GpuLibsVer).so
	$(Verbose)ln -sf libGAL-fb.$(GpuLibsVer).so			$(ResultLibDir)/libGAL.so
	$(Verbose)install $(GpuLibsDir)/libEGL-fb.so			$(ResultLibDir)/libEGL-fb.$(GpuLibsVer).so
	$(Verbose)ln -sf libEGL-fb.$(GpuLibsVer).so			$(ResultLibDir)/libEGL.so
	$(Verbose)ln -sf libEGL-fb.$(GpuLibsVer).so			$(ResultLibDir)/libEGL.so.1
	$(Verbose)ln -sf libEGL-fb.$(GpuLibsVer).so			$(ResultLibDir)/libEGL.so.1.0
	$(Verbose)install $(GpuLibsDir)/libGLESv2-fb.so			$(ResultLibDir)/libGLESv2-fb.$(GpuLibsVer).so
	$(Verbose)ln -sf libGLESv2-fb.$(GpuLibsVer).so			$(ResultLibDir)/libGLESv2.so
	$(Verbose)ln -sf libGLESv2-fb.$(GpuLibsVer).so			$(ResultLibDir)/libGLESv2.so.2
	$(Verbose)ln -sf libGLESv2-fb.$(GpuLibsVer).so			$(ResultLibDir)/libGLESv2.so.2.0.0
	$(Verbose)install $(GpuLibsDir)/libGAL_egl.fb.so		$(ResultLibDir)/libGAL_egl.fb.$(GpuLibsVer).so
	$(Verbose)ln -sf libGAL_egl.fb.$(GpuLibsVer).so			$(ResultLibDir)/libGAL_egl.so
	$(Verbose)install $(GpuLibsDir)/libVSC.so			$(ResultLibDir)/libVSC.$(GpuLibsVer).so
	$(Verbose)ln -sf libVSC.$(GpuLibsVer).so			$(ResultLibDir)/libVSC.so
	$(Verbose)install $(GpuLibsDir)/libGLSLC.so			$(ResultLibDir)/libGLSLC.$(GpuLibsVer).so
	$(Verbose)ln -sf libGLSLC.$(GpuLibsVer).so			$(ResultLibDir)/libGLSLC.so
	$(Verbose)install $(GpuLibsDir)/libVDK.so			$(ResultLibDir)/libVDK.$(GpuLibsVer).so
	$(Verbose)ln -sf libVDK.$(GpuLibsVer).so			$(ResultLibDir)/libVDK.so
	$(Verbose)install -d						$(ResultIncDir)
	$(Verbose)install $(GpuIncDir)/*.h				$(ResultIncDir)
	$(Verbose)install -d						$(ResultIncDir)/EGL
	$(Verbose)install $(GpuIncDir)/EGL/*.h				$(ResultIncDir)/EGL
	$(Verbose)install -d						$(ResultIncDir)/GLES2
	$(Verbose)install $(GpuIncDir)/GLES2/*.h			$(ResultIncDir)/GLES2
	$(Verbose)install -d						$(ResultIncDir)/KHR
	$(Verbose)install $(GpuIncDir)/KHR/*.h				$(ResultIncDir)/KHR
	$(Verbose)install -d						$(ResultIncDir)/HAL
	$(Verbose)install $(GpuIncDir)/HAL/*.h				$(ResultIncDir)/HAL
	$(Verbose)touch $@

.PHONY: stage
stage: $(BuildDirectory)/stage

clean:
	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultLibDir)
	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultIncDir)

include post.mak
