#!/usr/bin/make -f
# -*- makefile -*- -*- indent-tabs-mode: t; tab-width: 3 -*-

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

#usage: $(call message,<text>,<tabs>,<color>,<inverse>)
#message colors
COLOR_BLACK=30
COLOR_RED=31
COLOR_GREEN=32
COLOR_YELLOW=33
COLOR_BLUE=34
COLOR_MAGENTA=35
COLOR_CYAN=36
COLOR_WHITE=97
COLOR_DEFAULT=39
MSG_INVERSE=1
MSG_NONINVERSE=0

define message
	( if [ -z $(NOCOLOR) ] ; then echo -ne "\e[$(3)m" ; fi ; \
	if [ "$(4)" = "$(MSG_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)" = "$(MSG_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

##########################

DEB_HOST_GNU_CPU  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
DEB_HOST_ARCH     ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_GNU_TYPE  = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
SHELL = /bin/bash

ifeq ($(DEB_HOST_GNU_TYPE),arm-linux-gnueabihf)
BUILD_HARD_VFP = 1
else ifeq ($(DEB_HOST_GNU_TYPE),arm-linux-gnueabi)
BUILD_HARD_VFP =
else
#$(error DEB_HOST_GNU_TYPE=$(DEB_HOST_GNU_TYPE))
endif

PF          := -9t
FSL_APLUG   := fsl-alsa-plugins
IMX_LIB     := imx-lib
IMX_VPU     := imx-vpu
LFSL_CODC   := libfslcodec
LFSL_PARS   := libfslparser
LFSL_VPUW   := libfslvpuwrap
GFSL_PLUG   := gst-fsl-plugins
IMX_TEST    := imx-test
FIRM_IMX    := firmware-imx

TOP_DIR            := ${PWD}
export STAGING_DIR := ${PWD}/staging


CONFIG_OPTS = --prefix=/usr --build $(DEB_BUILD_GNU_TYPE)

ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
IMX_LIB_BUILD_OPTS	+= CC=$(DEB_HOST_GNU_TYPE)-gcc AR=$(DEB_HOST_GNU_TYPE)-ar
IMX_VPU_BUILD_OPTS	+= CC=$(DEB_HOST_GNU_TYPE)-gcc AR=$(DEB_HOST_GNU_TYPE)-ar
IMX_TEST_BUILD_OPTS	+= CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)- V=1
CONFIG_OPTS				+= --host $(DEB_HOST_GNU_TYPE)
endif

##

FSL_APLUG_CONFIG_OPTS = $(CONFIG_OPTS) \
	CFLAGS="$(CFLAGS) -I${STAGING_KERNEL_DIR}/include/uapi -I${STAGING_KERNEL_DIR}/include"

LFSL_CODC_CONFIG_OPTS = $(CONFIG_OPTS) \
	--enable-vpu --enable-fhw

LFSL_PARS_CONFIG_OPTS = $(CONFIG_OPTS) \
	--enable-fhw

LFSL_VPUW_CONFIG_OPTS = $(CONFIG_OPTS) \
	CFLAGS="$(CFLAGS) -I$(STAGING_DIR)/usr/include" \
	LDFLAGS="-L$(STAGING_DIR)/usr/lib"

GFSL_PLUG_CONFIG_OPTS = $(CONFIG_OPTS) \
	PLATFORM=MX6 \
	CFLAGS="$(CFLAGS) -I${STAGING_KERNEL_DIR}/include/uapi -I${STAGING_KERNEL_DIR}/include $(CFLAGS) -I$(STAGING_DIR)/usr/include" \
	PKG_CONFIG_PATH="/usr/lib/$(DEB_HOST_GNU_TYPE)/pkgconfig:$(STAGING_DIR)/usr/lib/pkgconfig:/usr/lib/pkgconfig"

##

IMX_LIB_BUILD_OPTS += \
	INCLUDE="-I${STAGING_KERNEL_DIR}/include/uapi -I${STAGING_KERNEL_DIR}/include \
				-I${STAGING_KERNEL_DIR}/drivers/mxc/security/rng/include \
				-I${STAGING_KERNEL_DIR}/drivers/mxc/security/sahara2/include" \
	PLATFORM="IMX6Q"

IMX_VPU_BUILD_OPTS += \
	INCLUDE_DIR="-I${STAGING_KERNEL_DIR}/include/uapi -I${STAGING_KERNEL_DIR}/include" \
	PLATFORM="IMX6Q"


IMX_TEST_BUILD_OPTS += \
	INC="-I${STAGING_DIR}/usr/include \
		  -I${TOP_DIR}/$(IMX_TEST).source/include \
		  -I${STAGING_KERNEL_DIR}/include/uapi \
		  -I${STAGING_KERNEL_DIR}/include \
		  -I${STAGING_KERNEL_DIR}/arch/arm/include \
		  -I${STAGING_KERNEL_DIR}/drivers/mxc/security/rng/include \
		  -I${STAGING_KERNEL_DIR}/drivers/mxc/security/sahara2/include" \
	PLATFORM="IMX6Q" \
	LINUXPATH=${STAGING_KERNEL_DIR} KBUILD_OUTPUT=${STAGING_KERNEL_DIR} \
	STAGING_LIBS="-L${STAGING_DIR}/usr/lib"

##

%:
	dh $@ --with python2

#override_dh_auto_configure:
#	dh_testdir
#	dh_auto_configure --list
#	exit 2

build_staging:
	mkdir -p $(STAGING_DIR)
	#
	# imx-lib
	@$(call message,"building imx-lib for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	dh_auto_build		-v --buildsystem=makefile -pimx-lib$(PF)												-- $(IMX_LIB_BUILD_OPTS) -C $(IMX_LIB).source all
	dh_auto_install	-v --buildsystem=makefile -pimx-lib$(PF)			--destdir=$(STAGING_DIR)	-- -C $(IMX_LIB).source PLATFORM=IMX6Q DEST_DIR=\$${DESTDIR}
	#
	# imx-vpu
	@$(call message,"building imx-vpu for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	dh_auto_build		-v --buildsystem=makefile -pimx-vpu$(PF)												-- $(IMX_VPU_BUILD_OPTS) -C $(IMX_VPU).source all
	dh_auto_install	-v --buildsystem=makefile -pimx-vpu$(PF)			--destdir=$(STAGING_DIR)	-- -C $(IMX_VPU).source PLATFORM=IMX6Q DEST_DIR=\$${DESTDIR}
	#
	# libfslcodec
	@$(call message,"configuring libfslcodec for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	(cd $(LFSL_CODC).source && ./autogen.sh $(LFSL_CODC_CONFIG_OPTS))
	@$(call message,"building libfslcodec for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	dh_auto_build		-v --buildsystem=makefile -plibfslcodec$(PF)										-- -C $(LFSL_CODC).source all
	dh_auto_install	-v --buildsystem=makefile -plibfslcodec$(PF)	--destdir=$(STAGING_DIR)	-- -C $(LFSL_CODC).source
	#
	# libfslparser
	@$(call message,"configuring libfslparser for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	(cd $(LFSL_PARS).source && ./autogen.sh $(LFSL_PARS_CONFIG_OPTS))
	@$(call message,"building libfslparser for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	dh_auto_build		-v --buildsystem=makefile -plibfslparser$(PF)										-- -C $(LFSL_PARS).source all
	dh_auto_install	-v --buildsystem=makefile -plibfslparser$(PF)	--destdir=$(STAGING_DIR)	-- -C $(LFSL_PARS).source
	#
	# libfslvpuwrap
	@$(call message,"configuring libfslvpuwrap for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	(cd $(LFSL_VPUW).source && ./autogen.sh $(LFSL_VPUW_CONFIG_OPTS))
	@$(call message,"building libfslvpuwrap for staging...",0,$(COLOR_MAGENTA),$(MSG_INVERSE))
	dh_auto_build		-v --buildsystem=makefile -plibfslvpuwrap$(PF)										-- -C $(LFSL_VPUW).source all
	dh_auto_install	-v --buildsystem=makefile -plibfslvpuwrap$(PF)	--destdir=$(STAGING_DIR)	-- -C $(LFSL_VPUW).source
	#
	# adjusting pkconfig files
	(pcfiles=`find $(STAGING_DIR)/usr/lib/pkgconfig -type f -name '*.pc'` ; \
		for file in $${pcfiles} ; do \
			sudo sed -e s,"prefix=/usr","prefix=$(STAGING_DIR)/usr",g -i $${file} ; \
		done \
	)


override_dh_auto_build: build_staging
	#
	# fsl-alsa-plugins
	@$(call message,"configuring fsl-alsa-plugins for release...",0,$(COLOR_CYAN),$(MSG_INVERSE))
	(cd $(FSL_APLUG).source && aclocal && autoconf && automake --add-missing && ./configure $(FSL_APLUG_CONFIG_OPTS))
	dh_auto_build -v --buildsystem=makefile -pfsl-alsa-plugins$(PF)	-- -C $(FSL_APLUG).source all
	#
	# libfslcodec
	@$(call message,"configuring libfslcodec for release...",0,$(COLOR_CYAN),$(MSG_INVERSE))
	(cd $(LFSL_CODC).source && ./autogen.sh $(LFSL_CODC_CONFIG_OPTS))
	dh_auto_build -v --buildsystem=makefile -plibfslcodec$(PF)			-- -C $(LFSL_CODC).source all
	#
	# libfslparser
	@$(call message,"configuring libfslparser for release...",0,$(COLOR_CYAN),$(MSG_INVERSE))
	(cd $(LFSL_PARS).source && ./autogen.sh $(LFSL_PARS_CONFIG_OPTS))
	dh_auto_build -v --buildsystem=makefile -plibfslparser$(PF)			-- -C $(LFSL_PARS).source all
	#
	# libfslvpuwrap
	@$(call message,"configuring libfslvpuwrap for release...",0,$(COLOR_CYAN),$(MSG_INVERSE))
	(cd $(LFSL_VPUW).source && ./autogen.sh $(LFSL_VPUW_CONFIG_OPTS))
	dh_auto_build -v --buildsystem=makefile -plibfslvpuwrap$(PF)		-- -C $(LFSL_VPUW).source all
	#
	# gst-fsl-plugins
	@$(call message,"configuring gst-fsl-plugins for release...",0,$(COLOR_CYAN),$(MSG_INVERSE))
	(cd $(GFSL_PLUG).source && ./autogen.sh $(GFSL_PLUG_CONFIG_OPTS))
	dh_auto_build -v --buildsystem=makefile -pgst-fsl-plugins$(PF)		-- -C $(GFSL_PLUG).source all
	# imx-test
	@$(call message,"building imx-test for release...",0,$(COLOR_CYAN),$(MSG_INVERSE))
	dh_auto_build -v --buildsystem=makefile -pimx-test$(PF)				-- $(IMX_TEST_BUILD_OPTS) -C $(IMX_TEST).source test
	# firmware-imx


override_dh_auto_install:
	dh_auto_install -v --buildsystem=makefile -pfsl-alsa-plugins$(PF)	--destdir=$(FSL_APLUG).release	-- -C $(FSL_APLUG).source
	dh_auto_install -v --buildsystem=makefile -pimx-lib$(PF)				--destdir=$(IMX_LIB).release		-- -C $(IMX_LIB).source PLATFORM=IMX6Q DEST_DIR=\$${DESTDIR}
	dh_auto_install -v --buildsystem=makefile -pimx-vpu$(PF)				--destdir=$(IMX_VPU).release		-- -C $(IMX_VPU).source PLATFORM=IMX6Q DEST_DIR=\$${DESTDIR}
	dh_auto_install -v --buildsystem=makefile -plibfslcodec$(PF)		--destdir=$(LFSL_CODC).release	-- -C $(LFSL_CODC).source
	dh_auto_install -v --buildsystem=makefile -plibfslparser$(PF)		--destdir=$(LFSL_PARS).release	-- -C $(LFSL_PARS).source
	dh_auto_install -v --buildsystem=makefile -plibfslvpuwrap$(PF)		--destdir=$(LFSL_VPUW).release	-- -C $(LFSL_VPUW).source
	dh_auto_install -v --buildsystem=makefile -pgst-fsl-plugins$(PF)	--destdir=$(GFSL_PLUG).release	-- -C $(GFSL_PLUG).source
	dh_auto_install -v --buildsystem=makefile -pimx-test$(PF)			--destdir=$(IMX_TEST).release		-- -C $(IMX_TEST).source

#override_dh_makeshlibs:
#	dh_makeshlibs -a

override_dh_shlibdeps:
	dh_shlibdeps -pfsl-alsa-plugins$(PF)
	dh_shlibdeps -pimx-lib$(PF)
	dh_shlibdeps -pimx-vpu$(PF)
	dh_shlibdeps -plibfslcodec$(PF) 		-X/share/imx-mm -X/lib/imx-mm/
	dh_shlibdeps -plibfslparser$(PF)
	dh_shlibdeps -plibfslvpuwrap$(PF)
	dh_shlibdeps -pgst-fsl-plugins$(PF)	-l$(STAGING_DIR)/usr/lib/imx-mm/audio-codec	-X/libmfw_gst_h264dec -X/libmfw_gst_mpeg2dec -X/libmfw_gst_amrdec -X/libmfw_gst_mpeg4aspdec -X/libmfw_gst_mp3enc
	dh_shlibdeps -pimx-test$(PF)

#override_dh_auto_clean:
#	rm -rf $(UPSTREAM_DIR) $(PKGCONFIG_DIR) $(BACKEND_DIR) debian/tmp

