# Copyright (c) 2002, Adam Dunkels.
# All rights reserved. 
#
# Redistribution and use in source and binary forms, with or without 
# modification, are permitted provided that the following conditions 
# are met: 
# 1. Redistributions of source code must retain the above copyright 
#    notice, this list of conditions and the following disclaimer. 
# 2. Redistributions in binary form must reproduce the above copyright 
#    notice, this list of conditions and the following disclaimer in the 
#    documentation and/or other materials provided with the distribution. 
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#      This product includes software developed by Adam Dunkels.
# 4. The name of the author may not be used to endorse or promote
#    products derived from this software without specific prior
#    written permission.  
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
#
# This file is part of the Contiki desktop environment
#
# $Id: Makefile.cpc-net,v 1.2 2006/04/17 14:42:28 kthacker Exp $
#

all: contikin

include Makefile.common

CFLAGS:=$(CFLAGSCOMMON) --compile-only \
        -DWITH_ASCII \
	-DCTK_CONIO \
	-DWITH_LOADER_ARCH=1

UIP_OBJ = ../contiki/uip/dhcpc.o \
	../contiki/uip/resolv.o \
	../contiki/uip/slipdev.o \
	../contiki/uip/socket.o \
	../contiki/uip/tcpdump.o \
	../contiki/uip/tcpip.o \
	../contiki/uip/uip-fw.o \
	../contiki/uip/uip-fw-service.o \
	../contiki/uip/uip-split.o \
	../contiki/uip/uip.o \
	../contiki/uip/uip_arp.o \
	../contiki/uip/uiplib.o \
	./uip/uip_arch.o \
	./lib/lc-asm.o


CONTIKI_OBJ= ./arch/crt0.o \
	./loader/rel.o \
	./arch/key.o \
	./arch/mem.o \
	./arch/malloc.o \
	./arch/clock.o \
	./loader/dir.o \
	./loader/loader-arch-cpc.o \
	./arch/putchar.o \
	./arch/uip.o \
	./arch/conio.o \
	./apps/configedit.o \
	./apps/configedit-dsc.o \
	../contiki/apps/directory.o \
	./apps/directory-dsc.o \
	../contiki/apps/processes.o \
	../contiki/apps/processes-dsc.o \
	../contiki/apps/program-handler.o \
	../contiki/ctk/ctk.o \
	../contiki/ctk/ctk-conio-service.o \
	../contiki/ctk/ctk-draw.o \
	../contiki/ctk/ctk-term-in.o \
	../contiki/ctk/ctk-term-out.o \
	../contiki/ctk/ctk-term.o \
	../contiki/ctk/ctk-termtelnet.o \
	../contiki/ctk/ctk-vncfont.o \
	../contiki/ctk/vnc-server.o \
	../contiki/ek/ek-service.o \
	../contiki/ek/ek.o \
	../contiki/ek/arg.o \
	../contiki/ek/mt.o \
	../contiki/lib/cfs.o \
	../contiki/lib/ctk-filedialog.o \
	../contiki/lib/ctk-textedit.o \
	../contiki/lib/list.o \
	../contiki/lib/memb.o \
	../contiki/lib/timer.o \
	../contiki/lib/strncasecmp.o \
	./loader/cfs-cpc.o \
	./arch/main.o \
	./arch/arch.o \
	$(UIP)


contikin: $(CONTIKI_OBJ)
	$(LD) -f arch/contiki-uip.lnk
	./bin/make_labels -a _CODE -a _DATA -x _main -x __clock -x _exit contiki.map arch/contiki_labels.s
	./bin/makebin -p -b 256 -s 65535 < contiki.ihx > temp/contiki.bin
	./bin/addhead -s 256 -t "binary" -x 256 temp/contiki.bin temp/contiki_ams.bin
	./bin/cpcxfs contiki.dsk -f -b -p temp/contiki_ams.bin contiki.bin

