# $Id: Makefile,v 1.13 2003/06/18 21:58:41 sleeper Exp $

#---------------------------------------------------------------------------
#
# Makefile
#
# Makefile for ADI USB ADSL driver for Linux
#
# Requirements:
#       Kernel source (or symbolic link) must be at /usr/src/linux
# and configured for target platform.
#
#---------------------------------------------------------------------------

#---------------------------------------------------------------------------
# Configuration options
#---------------------------------------------------------------------------

# Enable the next line to build the debug version:
# DEBUG = 1

# Enable this next line to use bulk transfer mode instead of isochronous
# for read operations:
# BULK = 1


#---------------------------------------------------------------------------
# Variables used in the makefile:
#---------------------------------------------------------------------------

VERSION=1.0.4


# Programs:
INSTALLER = $(shell which install)
LD = ld
CC = gcc

# Directories:
MODULESDIR = /lib/modules/$(shell uname -r)
KERNELSRC = /usr/src/linux
CONFDIR  = /etc/analog
FIRMWARE = ./firmware
ADIUSER = ./user
MODULE  = adiusbadsl
MACHINE=$(shell uname -m)


ifeq ($(shell if test -d $(MODULESDIR)/kernel; then echo yes; fi),yes)
INSTALLDIR=$(MODULESDIR)/kernel/drivers/usb
else
INSTALLDIR=$(MODULESDIR)/usb
endif

# Import Kernel options:
#include $(KERNELSRC)/.config

# Define common build options:
CFLAGS = -DLINUX -D__KERNEL__ -DMODULE -I$(KERNELSRC)/include \
	 '-DADIDRIVERVERSION="$(VERSION)"' -Wall \
          -Wstrict-prototypes -fomit-frame-pointer \
	  -fno-strict-aliasing -pipe 

ifneq ($(MACHINE),ppc)
CFLAGS += -mpreferred-stack-boundary=2
endif

# Enable BULK USB transfers
ifdef BULK
CFLAGS += -DUSEBULK
endif

# Enable SMP builds:
ifdef CONFIG_SMP
CFLAGS += -D__SMP__ -DSMP
endif

# Add debug option:
ifdef DEBUG
# Keep optimizations even for debug builds for correct inlining:
CFLAGS  += -O -g
else
CFLAGS  += -O2
endif

OBJS = AdiUsbAdslDriver.o \
       Boot.o  \
       Util.o  \
       Pipes.o \
       Me.o    \
       Sm.o    \
       Msg.o   \
       Dsp.o   \
       Mpoa.o  \
       Uni.o   \
       Sar.o   \
       Crc.o   \
       Oam.o  

#---------------------------------------------------------------------------
# Targets
#---------------------------------------------------------------------------

all: driver binaryfirmware adiuser

install: driver installfirmware installuser
	mkdir -p $(INSTALLDIR) && \
	mkdir -p $(CONFDIR)    && \
	$(INSTALLER) -m 0664 -o root -g root $(MODULE).o $(INSTALLDIR)/$(MODULE).o && \
	/sbin/depmod -a

uninstall:
	./unloadModule && \
	echo "Module dcharg!" && \
	$(MAKE) -C $(FIRMWARE) uninstall && \
	$(MAKE) -C $(ADIUSER) uninstall && \
	if [ -f $(INSTALLDIR)/$(MODULE).o ]; then \
		rm -f $(INSTALLDIR)/$(MODULE).o ;  \
		/sbin/depmod -a ;                  \
	fi


driver: checkdep $(MODULE).o

binaryfirmware:
	$(MAKE) -C $(FIRMWARE)

adiuser:
	$(MAKE) -C $(ADIUSER)

installuser: adiuser
	$(MAKE) -C $(ADIUSER) install

installfirmware : binaryfirmware
	$(MAKE) -C $(FIRMWARE) install

$(MODULE).o: $(OBJS)
	$(LD) -r -o $(MODULE).o $(OBJS)

checkdep:
	@if [ ! -f .depend ]; then make dep ; exit 0; fi

clean:
	rm -f error.log .depend $(OBJS) $(MODULE).o *~ core
	$(MAKE) -C $(ADIUSER) clean
	$(MAKE) -C $(FIRMWARE) clean

dep:
	$(CC) $(CFLAGS) -M *.c > .depend

ifneq ($(wildcard .depend),)
 include .depend
endif

