# 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,v 1.2 2006/04/17 14:42:28 kthacker Exp $
#

all: contiki

include Makefile.common

CFLAGS:=$(CFLAGSCOMMON) --compile-only \
        -DWITH_ASCII \
	-DWITH_LOADER_ARCH \
	-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 \
	./lib/strcasecmp.o \
	$(UIP)


contiki: $(CONTIKI_OBJ)
	$(LD) -f arch/contiki.lnk
	#./bin/make_labels -a _CODE -a _DATA -x _main -x __clock -x _exit contiki.map arch/contiki_labels.s
	makebin -p -s 65535 < contiki.ihx > contiki.raw
	dd if=contiki.raw of=contiki.bin bs=256 skip=1
	cpcfs contiki.dsk f
	cpcfs contiki.dsk p contiki.bin,256,256 -b -e

