# Project:   SFToSpr

# Make cannot understand rules which contain RISC OS path names such as /C:Macros.h as prerequisites, so strip them from the dynamic dependencies
StripBadPre = sed -r 's@/[A-Za-z]+:[^ ]*@@g' < $*T.d
DeleteTempDep = delete d.$*T

# Toolflags:
CCCommonFlags =  -c -IC: -mlibscl -mthrowback -Wall -Wextra -Wsign-compare -pedantic -std=c99 -MMD -MP -MF $*T.d
CCFlags = $(CCCommonFlags) -DNDEBUG -O3
CCDebugFlags = $(CCCommonFlags) -g -DDEBUG_OUTPUT -DFORTIFY
LinkCommonFlags = -LC: -mlibscl
LinkFlags = $(LinkCommonFlags) $(addprefix -l,$(ReleaseLibs))
LinkDebugFlags = $(LinkCommonFlags) $(addprefix -l,$(DebugLibs))

include MakeCommon

DebugList = $(addsuffix .debug,$(ObjectList))
ReleaseList = $(addsuffix .o,$(ObjectList))
LibList = C:o.toolboxlib C:o.eventlib C:o.wimplib
DebugLibs = Fortify CBDebug CBUtildbg GKeydbg Streamdbg CBOSdbg SF3Kdbg CBdbg
ReleaseLibs = flex CBUtil GKey Stream CBOS SF3K CB
TestObjects = Tests.debug $(DebugList)
DebugObjects = Main.debug $(DebugList)
ReleaseObjects = Main.o $(ReleaseList)

# Final targets:
all: !RunImage !RunImageD Tests

!RunImage: $(ReleaseObjects)
	gcc -o $@ $(LinkFlags) $(ReleaseObjects)

!RunImageD: $(DebugObjects)
	gcc -o $@ $(LinkDebugFlags) $(DebugObjects)

Tests: $(TestObjects)
	gcc -o $@ $(LinkDebugFlags) $(TestObjects)

# User-editable dependencies:
.SUFFIXES: .o .c .debug
.c.debug:
	gcc $(CCDebugFlags) -o $@ $<
	$(StripBadPre) > $*D.d
	$(DeleteTempDep)
.c.o:
	gcc $(CCFlags) -o $@ $<
	$(StripBadPre) > $*.d
	$(DeleteTempDep)

# Static dependencies:

# Dynamic dependencies:
# These files are generated during compilation to track C header #includes.
# It's not an error if they don't exist.
-include $(addsuffix .d,$(ObjectList))
-include $(addsuffix D.d,$(ObjectList))
