#
# (C) Copyright 2004-2006
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
#
# See file CREDITS for list of people who contributed to this
# project.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#

include $(TOPDIR)/config.mk

LIB	= $(obj)libcommon.a

AOBJS	=

COBJS-y += main.o
COBJS-y += ACEX1K.o
COBJS-y += altera.o
COBJS-y += bedbug.o
COBJS-y += circbuf.o
COBJS-y += cmd_autoscript.o
COBJS-y += cmd_bdinfo.o
COBJS-y += cmd_bedbug.o
COBJS-y += cmd_bmp.o
COBJS-y += cmd_boot.o
COBJS-y += cmd_bootm.o
COBJS-y += cmd_cache.o
COBJS-y += cmd_console.o
COBJS-y += cmd_date.o
COBJS-y += cmd_dcr.o
COBJS-y += cmd_diag.o
COBJS-y += cmd_display.o
COBJS-y += cmd_doc.o
COBJS-y += cmd_dtt.o
COBJS-y += cmd_eeprom.o
COBJS-y += cmd_elf.o
COBJS-y += cmd_ext2.o
COBJS-y += cmd_fat.o
COBJS-y += cmd_fdc.o
COBJS-y += cmd_fdt.o
COBJS-y += cmd_fdos.o
COBJS-y += cmd_flash.o
COBJS-y += cmd_fpga.o
COBJS-y += cmd_i2c.o
COBJS-y += cmd_ide.o
COBJS-y += cmd_immap.o
COBJS-y += cmd_itest.o
COBJS-y += cmd_jffs2.o
COBJS-y += cmd_load.o
COBJS-y += cmd_log.o
COBJS-y += cmd_mem.o
COBJS-y += cmd_mii.o
COBJS-y += cmd_misc.o
COBJS-y += cmd_mmc.o
COBJS-y += cmd_nand.o
COBJS-y += cmd_net.o
COBJS-y += cmd_nvedit.o
COBJS-y += cmd_onenand.o
COBJS-y += cmd_pci.o
COBJS-y += cmd_pcmcia.o
COBJS-y += cmd_portio.o
COBJS-y += cmd_reginfo.o
COBJS-y += cmd_reiser.o
COBJS-y += cmd_sata.o
COBJS-y += cmd_scsi.o
COBJS-y += cmd_spi.o
COBJS-y += cmd_universe.o
COBJS-y += cmd_usb.o
COBJS-y += cmd_vfd.o
COBJS-y += command.o
COBJS-y += console.o
COBJS-y += cyclon2.o
COBJS-y += devices.o
COBJS-y += dlmalloc.o
COBJS-y += docecc.o
COBJS-y += environment.o
COBJS-y += env_common.o
COBJS-y += env_nand.o
COBJS-y += env_dataflash.o
COBJS-y += env_flash.o
COBJS-y += env_eeprom.o
COBJS-y += env_onenand.o
COBJS-y += env_nvram.o
COBJS-y += env_nowhere.o
COBJS-y += exports.o
COBJS-y += fdt_support.o
COBJS-y += flash.o
COBJS-y += fpga.o
COBJS-y += ft_build.o
COBJS-y += hush.o
COBJS-y += kgdb.o
COBJS-y += lcd.o
COBJS-y += lists.o
COBJS-y += lynxkdi.o
COBJS-y += memsize.o
COBJS-y += miiphybb.o
COBJS-y += miiphyutil.o
COBJS-y += s_record.o
COBJS-y += serial.o
COBJS-y += soft_i2c.o
COBJS-y += soft_spi.o
COBJS-y += spartan2.o
COBJS-y += spartan3.o
COBJS-y += usb.o
COBJS-y += usb_kbd.o
COBJS-y += usb_storage.o
COBJS-y += virtex2.o
COBJS-y += xilinx.o
COBJS-y += crc16.o
COBJS-y += xyzModem.o
COBJS-y += cmd_mac.o
COBJS-y += cmd_mfsl.o

COBJS	:= $(COBJS-y)
SRCS	:= $(AOBJS:.o=.S) $(COBJS:.o=.c)
OBJS	:= $(addprefix $(obj),$(AOBJS) $(COBJS))

CPPFLAGS += -I..

all:	$(LIB) $(AOBJS)

$(LIB): $(obj).depend $(OBJS)
	$(AR) $(ARFLAGS) $@ $(OBJS)

$(obj)environment.o: $(src)environment.c $(obj)../tools/envcrc
	$(CC) $(AFLAGS) -Wa,--no-warn \
		-DENV_CRC=$(shell $(obj)../tools/envcrc) \
		-c -o $@ $(src)environment.c

$(obj)../tools/envcrc:
	$(MAKE) -C ../tools

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

# defines $(obj).depend target
include $(SRCTREE)/rules.mk

sinclude $(obj).depend

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