#
# Makefile for Vim on RISC OS - Andy Wingate
#

GCC         = gcc -mthrowback
CFLAGS     = -DRISCOS -DFEAT_GUI
CC         = $(GCC) $(CFLAGS) -O2
# -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c

TERMFLAG   = -DUP_BC_PC_EXTERN

ASMFLAGS   = -throwback -objasm -gcc

OBJS =  o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2  \
	o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar o.hashtable o.main o.mark o.mbyte  \
	o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move     \
	o.normal o.ops o.option o.quickfix o.regexp o.screen o.search   \
	o.syntax o.tag o.term o.termlib o.ui o.undo o.version o.window  \
	o.os_riscos o.swis o.gui o.gui_riscos

Vim: $(OBJS)
	$(GCC) -o Vim $(OBJS)

install: Vim
	squeeze -v Vim @.!Vim.Vim

clean:	
	create o.!fake! 0
	wipe o.* ~cf
	remove Vim

o.swis: s.swis
	as $(ASMFLAGS) -o o.swis s.swis

# Rules for object files

o.%:	c.%
	$(CC) -c $< -o $@

o.buffer:	c.buffer

o.charset:	c.charset

o.digraph:	c.digraph

o.diff:		c.diff

o.edit:		c.edit

o.eval:		c.eval

o.ex_cmds:	c.ex_cmds

o.ex_cmds2:	c.ex_cmds2

o.ex_docmd:	c.ex_docmd

o.ex_eval:	c.ex_eval

o.ex_getln:	c.ex_getln

o.fileio:	c.fileio

o.fold:		c.fold

o.getchar:	c.getchar

o.hashtable:	c.hashtable

o.gui:		c.gui

o.gui_riscos:	c.gui_riscos

o.main:		c.main

o.mark:		c.mark

o.mbyte:	c.mbyte

o.memfile:	c.memfile

o.memline:	c.memline

o.menu:		c.menu

o.message:	c.message

o.misc1:	c.misc1

o.misc2:	c.misc2

o.move:		c.move

o.normal:	c.normal

o.ops:		c.ops

o.option:	c.option

o.os_riscos:	c.os_riscos

o.pty:		c.pty

o.quickfix:	c.quickfix

o.regexp:	c.regexp

o.screen:	c.screen

o.search:	c.search

o.syntax:	c.syntax

o.tag:		c.tag

o.term:		c.term
	$(CC) $(TERMFLAG) -c c.term -o o.term

o.termlib:	c.termlib

o.ui:		c.ui

o.undo:		c.undo

o.version:	c.version

o.window:	c.window
