# Project:   SFColours

# 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))
LibFileFlags = -rcs $@

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 CBdbg SFColEd
ReleaseLibs = Flex CBUtil GKey Stream CBOS CB
DebugObjects = Main.debug $(DebugList)

# Final targets:
all: !RunImage !RunImageD Tests

!RunImage: Main.o $(ReleaseList)
	gcc -o $@ $(LinkFlags) Main.o $(ReleaseList)

libSFColEd/a: $(DebugList)
	ar $(LibFileFlags) $(DebugList)

!RunImageD: Main.debug
	gcc -o $@ $(LinkDebugFlags) Main.debug

# 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))
