DESCRIPTION = "DSP Link for TI ARM/DSP processors"

DEPENDS = "virtual/kernel perl-native"
RDEPENDS_${PN}-module = "update-modules"
RRECOMMENDS_${PN} = "${PN}-module"

inherit module

S = "${WORKDIR}/dsplink_1_50/dsplink"

# Needed for buildscripts
export DSPLINK = "${S}"

# Path to the dir where the TI tools are unpacked
TITOOLSDIR ?= "/OE/TI"
# Path under TITOOLSDIR where dspbios is unpacked 
TIBIOSDIR ?= "bios_5_32_03"
# Path under TITOOLSDIR where the dsp toolchain is unpacked
TICGTOOLSDIR ?= "cg6x_6_1_2"

DSPLINKPLATFORM ?= "Davinci"

DSPLINKPLATFORM_omap5912osk = "OMAP"
DSPLINKPLATFORM_beagleboard = "OMAP"
DSPLINKPLATFORM_davinci-sffsdr = "Davinci"
DSPLINKPLATFORM_davinci-dvevm = "Davinci"

DSPLINKDSP ?= "C64XX"
DSPLINKSOC ?= "DM6446"

DSPLINKSOC_beagleboard = "3530"


USERARMFLAGS = "${TARGET_CC_ARCH}"
KERNELARMFLAGS = "-include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall  -Wstrict-prototypes \
                   -Wno-trigraphs -fno-strict-aliasing -fno-common             \
                   -fno-omit-frame-pointer -mapcs -mno-sched-prolog            \
                   -mlittle-endian \
                   -D__LINUX_ARM_ARCH__=5 -march=armv5t -mtune=arm9tdmi \
                   -msoft-float -Uarm -mapcs                  \
                   -Wdeclaration-after-statement -Os -marm  -mabi=aapcs-linux"
KERNELARMFLAGS_armv6 = "-include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall  -Wstrict-prototypes \
                   -Wno-trigraphs -fno-strict-aliasing -fno-common             \
                   -fno-omit-frame-pointer -mapcs -mno-sched-prolog            \
                   -mlittle-endian \
                   -D__LINUX_ARM_ARCH__=6 -march=armv6j -mtune=arm1136jf-s \
                   -msoft-float -Uarm -mapcs                  \                   
                   -Wdeclaration-after-statement -Os -marm  -mabi=aapcs-linux"
KERNELARMFLAGS_armv7a = "-c -nostdinc -include $(BASE_OSINC)/linux/autoconf.h -isystem $(OSINC_PLATFORM)  -iwithprefix include -Iinclude -Wall  -Wstrict-prototypes \
                   -Wno-trigraphs -fno-strict-aliasing -fno-common             \
                   -fno-omit-frame-pointer -mapcs -mno-sched-prolog            \                                      
                   -mlittle-endian \
                   -D__LINUX_ARM_ARCH__=7 -march=armv7-a -mtune=cortex-a8 \
                   -msoft-float -Uarm -mapcs                  \ 
                   -Wdeclaration-after-statement -Os -marm  -mabi=aapcs-linux \
                   -D__KERNEL__ -mno-thumb-interwork   -msoft-float -fno-optimize-sibling-calls -g  -fno-stack-protector -Wno-pointer-sign -g -DUSE_UDEV=1 -DOS_LINUX -DLINUX_KERNEL"

DSPFLAGS = "-q -pdr -pdv -pden -ml3 -mv64+ "

export DSPLINKPLATFORM 
export DSPLINKDSP

do_configure () {
	cp ${WORKDIR}/CURRENTCFG.MK ${S}/config
	cp ${WORKDIR}/openembedded.mk ${S}/make/Linux
	cp ${WORKDIR}/c64xx_5.xx_linux.mk ${S}/make/DspBios

	sed -i 	-e s:SED_ME_SOURCEDIR:${S}:g \
		-e s:SED_ME_GPPDISTRO:openembedded:g \
		-e s:SED_ME_KERNELVERSION:${KERNEL_VERSION}:g \
		-e s:SED_ME_DSPDISTRO:c64xx_5.xx_linux:g \
		-e s:SED_ME_PLATFORM:${DSPLINKPLATFORM}:g \
		-e s:SED_ME_DSP:${DSPLINKDSP}:g \
		-e s:SED_ME_SOC:${DSPLINKSOC}:g \	
    	${S}/config/CURRENTCFG.MK	

	sed -i	-e s:SED_ME_CROSS:${STAGING_INCDIR}:g \
		-e s:SED_ME_STAGINGDIR:${STAGING_DIR_TARGET}:g \
		-e s:SED_ME_TARGET_PREFIX:${TARGET_PREFIX}:g \
		-e s:SED_ME_KERNELDIR:${STAGING_KERNEL_DIR}:g \
		-e 's:SEDME_KERNEL_ARMFLAGS:${KERNELARMFLAGS}:g' \
		-e 's:SEDME_USER_ARMFLAGS:${USERARMFLAGS}:g' \
		${S}/make/Linux/openembedded.mk 

	sed -i -e s:SEDME_TITOOLS_BASEPATH:${TITOOLSDIR}:g \
		-e s:SEDME_BIOSUNPACKDIR:${TIBIOSDIR}:g \	
		-e s:SEDME_CGTOOLSDIR:${TICGTOOLSDIR}:g \	
		-e 's:SEDME_DSPFLAGS:${DSPFLAGS}:g' \
		${S}/make/DspBios/c64xx_5.xx_linux.mk
}

PARALLEL_MAKE = ""

do_compile () {
	ln -sf ${S}/gpp/src/api/*h ${S}/gpp/inc/
	ln -sf ${S}/gpp/src/pmgr/Linux/2.6.18 ${S}/gpp/src/pmgr/Linux/${KERNEL_VERSION}
	ln -sf ${S}/gpp/src/api/Linux/2.6.18 ${S}/gpp/src/api/Linux/${KERNEL_VERSION}
	ln -sf ${S}/gpp/src/osal/Linux/2.6.18 ${S}/gpp/src/osal/Linux/${KERNEL_VERSION}
	ln -sf ${S}/gpp/src/pmgr/Linux/drv_pmgr.h ${S}/gpp/inc/drv_pmgr.h
	ln -sf ${S}/gpp/src/pmgr/pmgr_proc.h ${S}/gpp/inc/pmgr_proc.h

	unset DISPLAY
	
	sed -i -e 's:gcc:gcc${KERNEL_CCSUFFIX}:' ${S}/make/Linux/openembedded.mk
	oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" -C ${S}/gpp/src all targets
	
	sed -i -e 's:gcc${KERNEL_CCSUFFIX}:gcc:' ${S}/make/Linux/openembedded.mk
	oe_runmake -C ${S}/gpp/src/samples

	oe_runmake -C ${S}/dsp/src
	oe_runmake -C ${S}/dsp/src/samples
}

do_install () {
	install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
	cp ${S}/gpp/BUILD/EXPORT/RELEASE/dsplinkk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/

	install -d ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/loopgpp           ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/messagegpp        ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/messagemultigpp   ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/mpcsxfergpp       ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/mplistgpp         ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/readwritegpp      ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/ringiogpp         ${D}/${bindir}
	install ${S}/gpp/BUILD/EXPORT/RELEASE/scalegpp          ${D}/${bindir}

	install -d ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/loop.out          ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/messagemulti.out  ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/message.out       ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/mpcsxfer.out      ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/mplist.out        ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/readwrite.out     ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/ringio.out        ${D}/${datadir}/dsplink
	install ${S}/dsp/BUILD/EXPORT/RELEASE/scale.out         ${D}/${datadir}/dsplink

	install -d ${D}/${libdir}
	install -m 0755 ${S}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib  ${D}/${libdir}
}


do_stage() {
	install -d ${STAGING_LIBDIR}
	install -m 0755 ${S}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib ${STAGING_LIBDIR}/
}

pkg_postinst_${PN}-module () {
        if [ -n "$D" ]; then
                exit 1
        fi
        depmod -a
        update-modules || true
}

pkg_postrm_${PN}-module () {
        update-modules || true
}

PACKAGES =+ "${PN}-module"
FILES_${PN}-module  = "${sysconfdir} /lib/modules"
FILES_${PN} = "${bindir}/* ${datadir}/dsplink/*"

INHIBIT_PACKAGE_STRIP = "1"

PACKAGE_ARCH = "${MACHINE_ARCH}"