#
# (C) Copyright 2007 Semihalf
#
# 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 Foundatio; 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
#

ifeq ($(ARCH),ppc)
LOAD_ADDR = 0x40000
endif

#ifeq ($(ARCH),arm)
#LOAD_ADDR = 0xc100000
#endif

include $(TOPDIR)/config.mk

ELF	+= demo
BIN	+= demo.bin

#CFLAGS += -v

COBJS	:= $(ELF:=.o)
SOBJS	:= crt0.o
ifeq ($(ARCH),ppc)
SOBJS	+= ppcstring.o
endif

LIB	= $(obj)libglue.a
LIBCOBJS= glue.o crc32.o ctype.o string.o vsprintf.o libgenwrap.o

LIBOBJS	= $(addprefix $(obj),$(SOBJS) $(LIBCOBJS))

SRCS	:= $(COBJS:.o=.c) $(LIBCOBJS:.o=.c) $(SOBJS:.o=.S)
OBJS	:= $(addprefix $(obj),$(COBJS))
ELF	:= $(addprefix $(obj),$(ELF))
BIN	:= $(addprefix $(obj),$(BIN))

gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)

CPPFLAGS += -I..

all:	$(obj).depend $(OBJS) $(LIB) $(BIN) $(ELF)

#########################################################################
$(LIB):	$(obj).depend $(LIBOBJS)
		$(AR) $(ARFLAGS) $@ $(LIBOBJS)

$(ELF):
$(obj)%:	$(obj)%.o $(LIB)
		$(LD) $(obj)crt0.o -Ttext $(LOAD_ADDR) \
			-o $@ $< $(LIB) \
			-L$(gcclibdir) -lgcc

$(BIN):
$(obj)%.bin:	$(obj)%
		$(OBJCOPY) -O binary $< $@ 2>/dev/null

$(obj)crc32.c:
	@rm -f $(obj)crc32.c
	ln -s $(src)../lib_generic/crc32.c $(obj)crc32.c

$(obj)ctype.c:
	@rm -f $(obj)ctype.c
	ln -s $(src)../lib_generic/ctype.c $(obj)ctype.c

$(obj)string.c:
	@rm -f $(obj)string.c
	ln -s $(src)../lib_generic/string.c $(obj)string.c

$(obj)vsprintf.c:
	@rm -f $(obj)vsprintf.c
	ln -s $(src)../lib_generic/vsprintf.c $(obj)vsprintf.c

ifeq ($(ARCH),ppc)
$(obj)ppcstring.S:
	@rm -f $(obj)ppcstring.S
	ln -s $(src)../lib_ppc/ppcstring.S $(obj)ppcstring.S
endif

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

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

sinclude $(obj).depend

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