# $Id: makefile.src,v 1.10 1997/08/12 07:40:28 digulla Exp $
TOP=../..
CURDIR=rom/exec

include $(TOP)/config/make.cfg

# Use OS's own includes over the ones from AROS
ifeq ("$(SHARED_EXEC)","yes")
SPECIAL_CFLAGS=$(SHARED_CFLAGS) -I/usr/include
else
SPECIAL_CFLAGS=-I/usr/include
endif

OBJDIR=$(OSGENDIR)/exec

# ***** Native ***************
ifeq ($(FLAVOUR),native)

LIB=$(LIBDIR)/libexec.a

# Main function for exec.strap. Need this apart as an anchor for the link:
INIT_FILE = execstrap_init

# Other support files:
FILES =

FUNCTIONS := \
	initcode initstruct makelibrary makefunctions findresident	    \
	initresident setintvector addintserver remintserver allocmem	    \
	freemem availmem allocentry freeentry typeofmem addmemlist	    \
	addmemhandler remmemhandler insert addhead addtail remove remhead   \
	remtail enqueue findname setsignal allocsignal freesignal addport   \
	remport waitport findport createmsgport deletemsgport putmsg getmsg \
	replymsg doio sendio checkio waitio abortio createiorequest	    \
	deleteiorequest addresource remresource openresource addlibrary     \
	remlibrary oldopenlibrary closelibrary setfunction sumlibrary	    \
	openlibrary taggedopenlibrary adddevice remdevice opendevice	    \
	closedevice findtask rawdofmt allocvec freevec initsemaphore	    \
	attemptsemaphore findsemaphore addsemaphore remsemaphore	    \
	obtainsemaphoreshared attemptsemaphoreshared createpool deletepool  \
	allocpooled freepooled \
	cacheclearu cachepredma cachepostdma \
	disable forbid coldreboot getcc

# ***** Not Native ***************
else

%prepare_shlib exec $(SHARED_EXEC)

FILES := init execfunctions traphandler

FUNCTIONS := \
	allocmem freemem addhead addtask remtask wait signal allocsignal    \
	freesignal alert freeentry remove remhead enqueue addmemhandler     \
	setexcept setsignal settaskpri findtask findname getmsg putmsg	    \
	replymsg addtail waitport allocate addport remport findport	    \
	addmemlist createmsgport deletemsgport createiorequest deallocate   \
	availmem deleteiorequest allocvec freevec allocabs allocentry	    \
	createpool deletepool allocpooled remmemhandler initstruct	    \
	initsemaphore attemptsemaphore obtainsemaphore			    \
	obtainsemaphoreshared attemptsemaphoreshared releasesemaphore	    \
	procure vacate addlibrary remlibrary makefunctions makelibrary	    \
	sumlibrary openlibrary closelibrary setfunction oldopenlibrary	    \
	copymemquick copymem freepooled remsemaphore addsemaphore	    \
	releasesemaphorelist obtainsemaphorelist typeofmem rawdofmt insert  \
	remtail findsemaphore addresource remresource openresource adddevice\
	remdevice opendevice closedevice doio sendio checkio abortio waitio \
	initresident addintserver remintserver setintvector alloctrap \
	childfree childorphan childstatus childwait coldreboot debug	    \
	findresident freetrap initcode sumkickdata obtainquickvector \
	supervisor superstate userstate stackswap \
	cachecleare cacheclearu cachecontrol cachepredma cachepostdma \
	cause disable dispatch enable forbid preparecontext permit switch \
	setsr getcc reschedule exception

# ***** END ***************
endif

# Do the magic required for function replacement.
# Keep this value for later
ALL_FILES := $(FILES)
ALL_FUNCTIONS := $(FUNCTIONS)

%prepare_replace rom/exec
%filter_replace FUNCTIONS
%filter_replace FILES

DEPS := $(foreach f,$(INIT_FILE) $(FILES) $(FUNCTIONS),$(OBJDIR)/$(f).d)

.PHONY: all clean setup

# ***** Native ***************
ifeq ($(FLAVOUR),native)

LIBS = -L$(LIBDIR) -lexec -larossupport -larosc
OBJS := $(foreach f,$(FILES) $(FUNCTIONS) $(ADDITIONAL_OBJS),$(OBJDIR)/$(f).o)
INITFUNC := $(OBJDIR)/$(INIT_FILE).o

all: setup $(LIB) $(OSMODDIR)/exec.strap

$(OSMODDIR)/exec.strap: $(LIB) $(INITFUNC) $(LIBDIR)/libarossupport.a $(LIBDIR)/libarosc.a
	@echo "Building $(notdir $@) ..."
	@$(CC) $(ILDFLAGS) -Xlinker -M $(INITFUNC) $(LIBS) -o $@ 2>&1|tee execstrap.map
	@if test ! -s execstrap.map; then rm execstrap.map ; else true ; fi
	@strip $@

# To study the assembler output for evaluation (can be helpful in tracking
# down bugs):
.PHONY: asm
asm: $(foreach f,$(ALL_FUNCTIONS) $(INIT_FILE) $(ALL_FILES),$(f).s) all

%.s: %.c
	@echo "Generating $@ ..."
	@$(CC) -S $(CFLAGS) $< -c -o $@

# Collect all (asm-)functions in a linklib for fast linking:
$(LIB): $(OBJS)
	@echo "Adding functions to $(notdir $@) ..."
	@$(AR) $@ $?
	@$(RANLIB) $@

# ***** Not Native ***************
else

OBJS := $(foreach f,$(FILES) $(FUNCTIONS) $(ADDITIONAL_OBJS),$(OBJDIR)/$(f).o)

all: setup $(LIB)

$(LIB): $(OBJS)
	%mklib_q
	@$(RM) $(RMLIB)

# ***** END ***************
endif

setup :
	@echo "CFLAGS=$(CFLAGS)"
	%mkdirs_q $(OBJDIR) $(OSMODDIR)

clean::
	$(RM) $(OBJDIR) *.err $(LIB)

%additional_objs_rule

$(OBJDIR)/%.o: %.c
	%compile_q

$(OBJDIR)/%.d: %.c
	%mkdepend_q

%common
%include_deps
