### Makefile to build the FreeRTOS library ###

# Build target (options: sim, board)

TARGET      = sim
SMALL       =

# Tools

CC          = xt-xcc
AS          = xt-xcc
AR          = xt-ar
XT_CORE     = $(patsubst %-params,%,$(notdir $(shell xt-xcc --show-config=core)))
CONFIGDIR   = $(shell xt-xcc --show-config=config)

# For platform-specific commands

include $(CONFIGDIR)/misc/hostenv.mk

# Source code and build locations

SRCROOT     = $(subst /,$(S),$(CURDIR))
TSTROOT     = $(abspath $(SRCROOT)$(S)..$(S)..$(S)..$(S)..$(S)..$(S)demos$(S)cadence$(S)sim$(SMALL))
BLDROOT     = $(TSTROOT)$(S)build
BLDDIR      = $(BLDROOT)$(S)$(XT_CORE)

FR_SRCDIR   = $(abspath $(SRCROOT)$(S)..$(S)..$(S)..)
FR_SRCDIR2  = $(FR_SRCDIR)$(S)portable$(S)MemMang
XT_SRCDIR   = $(SRCROOT)

vpath %.c $(FR_SRCDIR) $(FR_SRCDIR2) $(XT_SRCDIR)
vpath %.S $(XT_SRCDIR)

# File lists

FR_C_FILES  = $(notdir $(wildcard $(FR_SRCDIR)/*.c)) $(notdir $(wildcard $(FR_SRCDIR2)/*.c))
XT_C_FILES  = $(notdir $(wildcard $(XT_SRCDIR)/*.c))
XT_S_FILES  = $(notdir $(wildcard $(XT_SRCDIR)/*.S))

# List of all .o files that will go into the library

LIB_C_O     = $(patsubst %.c,%.o,$(XT_C_FILES) $(FR_C_FILES))
LIB_S_O     = $(patsubst %.S,%.o,$(XT_S_FILES))
LIB_O_LIST  = $(addprefix $(BLDDIR)/,$(LIB_C_O) $(LIB_S_O))

# Output files

OSLIB       = $(BLDDIR)$(S)libfreertos.a

# Build options

ifeq ($(TARGET),sim)
DFLAGS      = -DXT_SIMULATOR
endif
ifeq ($(TARGET),board)
DFLAGS      = -DXT_BOARD
endif

IFLAGS      = \
  -I$(FR_SRCDIR)$(S)..$(S)include -I$(FR_SRCDIR)$(S)..$(S)include$(S)private \
  -I$(XT_SRCDIR) -I$(TSTROOT)$(S)common$(S)config_files -I$(BLDDIR)

CFLAGS      = -O2 -g
CCFLAGS     = $(CFLAGS) -Wall -mno-coproc -mlongcalls -ffunction-sections -mno-l32r-flix $(DFLAGS)
ASFLAGS     = $(CCFLAGS)

# Include dependency rules (generated using -MD)

-include $(wildcard $(BLDDIR)/*.d)

# Targets

all : mkdir $(OSLIB)

mkdir : $(BLDDIR)/.mkdir

$(BLDDIR)/.mkdir :
	@$(MKPATH) $(BLDDIR)
	@echo "" > $@
	-$(CP) $(CONFIGDIR)/xtensa-elf/include/sys/reent.h $(BLDDIR)/reent.h

$(OSLIB) : $(LIB_O_LIST)
	$(AR) -rs $@ $^

$(BLDDIR)/%.o : %.c
	$(CC) $(CCFLAGS) $(IFLAGS) -MD -MF $(subst .o,.d,$@) -c -o $@ $<

$(BLDDIR)/%.o : %.S
	$(CC) $(ASFLAGS) $(IFLAGS) -MD -MF $(subst .o,.d,$@) -c -o $@ $<

clean :
	$(RM_R) $(BLDDIR)

clean_all :
	$(RM_R) $(BLDROOT)

.PHONY : all mkdir clean clean_all
