# 
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk

PKG_NAME:=linux-spu
PKG_VERSION:=1.04
RELEASE_VERSION:=2

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).$(RELEASE_VERSION).tar.gz
PKG_CAT:=zcat

PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).$(RELEASE_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install

PKG_SOURCE_FILE:=$(TOPDIR)/dl/$(PKG_SOURCE)
PKG_BUILD_FROM_SOURCE:=$(shell if [ -e $(PKG_SOURCE_FILE) ]; then echo y; fi)
ifeq ($(CONFIG_DEV_LINUX_SPU), y)
  PKG_BUILD_FROM_SOURCE:=y
endif
ifeq ($(CONFIG_ASIC_SQV),y)
  PROFILE1:=$(PROFILE)-sqv
else
  PROFILE1:=$(PROFILE)
endif
ifeq ($(CONFIG_BOOT_NAND),y)
  BIN_PROFILE:=$(PROFILE1)-nand
else
  BIN_PROFILE:=$(PROFILE1)
endif
ifeq ($(word 1,$(subst ., ,$(GCC_VERSION))),4)
  BIN_PROFILE_BUILD:=$(BIN_PROFILE)-gcc-4.1_glibc_eabi
else
  BIN_PROFILE_BUILD:=$(BIN_PROFILE)
endif

include $(INCLUDE_DIR)/package.mk

################ OpenWRT definition ########################
define KernelPackage/linux-spu
  CATEGORY:=Mindspeed Packages
  DEFAULT:=n
  TITLE:=Voice under Linux
  DESCRIPTION:= This package contains a driver and a user-space daemon for Voice under Linux on Mindspeed boards.
  URL:=http://www.mindspeed.com/
  MAINTAINER:=Mindspeed Technologies
  FILES:= $(PKG_BUILD_DIR)/driver/spdrv.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,39,spdrv)
endef

V_DEBUG = n
#If Development, we should downlaod the version from our CVS instead of doing the generic process

ifeq ($(PKG_BUILD_FROM_SOURCE), y)
ifeq ($(CONFIG_DEV_LINUX_SPU), y)
ifeq ($(CONFIG_DEV_LINUX_SPU_CVSBRANCH), "")
define Build/Prepare
	pushd "$(KERNEL_BUILD_DIR)" && \
	cvs -z9 -d:pserver:$(CONFIG_ACTIVEDEV_CVSUSERNAME)@$(CONFIG_ACTIVEDEV_CVSROOTPATH):/prj/msacvs/enterprise checkout -d $(PKG_NAME)-$(PKG_VERSION).$(RELEASE_VERSION) $(CONFIG_DEV_LINUX_SPU_MODULENAME) && \
	popd
	@if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \
		$(PATCH) $(PKG_BUILD_DIR) ./patches; \
	fi
endef
else
define Build/Prepare
	pushd "$(KERNEL_BUILD_DIR)" && \
	cvs -z9 -d:pserver:$(CONFIG_ACTIVEDEV_CVSUSERNAME)@$(CONFIG_ACTIVEDEV_CVSROOTPATH):/prj/msacvs/enterprise checkout -d $(PKG_NAME)-$(PKG_VERSION).$(RELEASE_VERSION) -r $(CONFIG_DEV_LINUX_SPU_CVSBRANCH) $(CONFIG_DEV_LINUX_SPU_MODULENAME) &&\
	popd
	@if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \
		$(PATCH) $(PKG_BUILD_DIR) ./patches; \
	fi
endef
endif
else
define Build/Prepare
	$(TAR) xfz $(PKG_SOURCE_FILE) -C $(KERNEL_BUILD_DIR)

	@if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \
		$(PATCH) $(PKG_BUILD_DIR) ./patches; \
	fi
endef 
endif

define Build/Compile
	rm -rf $(PKG_INSTALL_DIR)
	mkdir -p $(PKG_INSTALL_DIR)
	$(MAKE) -C $(LINUX_DIR) \
		ARCH="$(LINUX_KARCH)" \
		CROSS_COMPILE="$(TARGET_CROSS)" \
		SUBDIRS="$(PKG_BUILD_DIR)/driver" \
		modules
	$(MAKE) -C $(LINUX_DIR) \
		ARCH="$(LINUX_KARCH)" \
		CROSS_COMPILE="$(TARGET_CROSS)" \
		SUBDIRS="$(PKG_BUILD_DIR)/driver" \
		INSTALL_MOD_PATH="$(PKG_INSTALL_DIR)" \
		modules_install

	$(TARGET_CONFIGURE_OPTS) \
        CFLAGS="$(TARGET_CFLAGS)" \
        CPPFLAGS="-I$(STAGING_DIR)/usr/include" \
        LDFLAGS="-L$(STAGING_DIR)/usr/lib" \
	$(MAKE) -C $(PKG_BUILD_DIR)/lib 

	$(TARGET_CONFIGURE_OPTS) \
        CFLAGS="$(TARGET_CFLAGS)" \
        CPPFLAGS="-I$(STAGING_DIR)/usr/include" \
        LDFLAGS="-L$(STAGING_DIR)/usr/lib" \
	$(MAKE) -C $(PKG_BUILD_DIR) daemon
endef
else

define Build/Prepare
	echo BUILD PREPARE
endef

define Build/Compile
	mkdir -p $(PKG_BUILD_DIR)/lib
	$(CP) ./files/dsp $(PKG_BUILD_DIR)/lib/
	$(CP) ./files/$(BIN_PROFILE_BUILD)/spu_daemon $(PKG_BUILD_DIR)/spu_daemon
	mkdir -p $(PKG_BUILD_DIR)/driver
	$(CP) ./files/$(BIN_PROFILE_BUILD)/spdrv.ko $(PKG_BUILD_DIR)/driver/spdrv.ko
endef

endif

define Clean
	$(MAKE) -C $(PKG_BUILD_DIR) clean
endef

define Build/InstallDev
endef

define Build/UninstallDev
endef

define KernelPackage/linux-spu/install
	mkdir -p $(1)/lib/modules/$(LINUX_VERSION)
#	$(CP) -a $(PKG_INSTALL_DIR)/lib/modules/$(LINUX_VERSION)/extra/* \
#		$(1)/lib/modules/$(LINUX_VERSION)/
	mkdir -p $(1)/etc/init.d/
	mkdir -p $(1)/bin/
	mkdir -p $(1)/lib/
	install -m0755 $(PKG_BUILD_DIR)/spu_daemon $(1)/bin/
	install -m0644 $(PKG_BUILD_DIR)/lib/dsp $(1)/lib/dsp
	install -m0755  ./files/linux_spu.init $(1)/etc/init.d/linux_spu
endef

$(eval $(call KernelPackage,linux-spu))
