CONTIKI_CPU_DIRS = . dev

### Define the CPU directory of the AVR port
CONTIKI_CPU=$(CONTIKI)/cpu/pico-rv32

PICORV32_SOURCES = mtarch.c rtimer-arch.c clock.c watchdog.c
CONTIKI_TARGET_SOURCEFILES += $(PICORV32_SOURCES) $(SENSORS) $(SYSAPPS) \
    nullsec.c

CONTIKI_SOURCEFILES += $(CONTIKI_TARGET_SOURCEFILES)

### Compiler definitions
CC       = riscv32-unknown-elf-gcc
CXX      = riscv32-unknown-elf-g++
LD       = riscv32-unknown-elf-gcc
AS       = riscv32-unknown-elf-as
AR       = riscv32-unknown-elf-ar
ELF_SIZE = riscv32-unknown-elf-size
NM       = riscv32-unknown-elf-nm
OBJCOPY  = riscv32-unknown-elf-objcopy
STRIP    = riscv32-unknown-elf-strip
ifdef WERROR
CFLAGSWERROR=-Werror
endif
CFLAGSNO = -Wall -march=RV32IXcustom -g \
    -I$(CONTIKI)/platform/$(TARGET) \
    -I. -I$(CONTIKI)/core -I$(CONTIKI_CPU)
CFLAGS  += $(CFLAGSNO) -Os

ifeq ($(HOST_OS),Darwin)
AROPTS = -r
LDFLAGS += -Wl,-flat_namespace
CFLAGS += -DHAVE_SNPRINTF=1 -U__ASSERT_USE_STDERR
else
ifeq ($(HOST_OS),Linux)
LDFLAGS += -Wl,-Map=contiki-$(TARGET).map,-export-dynamic
endif
endif

### Setup directory search path for source files

CONTIKI_TARGET_DIRS_CONCAT = ${addprefix $(CONTIKI)/platform/$(TARGET)/, \
                               $(CONTIKI_TARGET_DIRS)}

### Compilation rules
# Vertical bar | symbol denotes an order-only dependency: Timestamp is
# ignored on the directory (otherwise everything would be rebuilt
# everytime)

$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR)
	$(CC) $(CFLAGS) -c $< -o $@

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

$(OBJECTDIR)/%.o: %.cpp | $(OBJECTDIR)
	$(CXX) $(CFLAGS) -c $< -o $@

%.o: %.cpp
	$(CXX) $(CFLAGS) -c $< -o $@

%.ko: %.o
	$(STRIP) -K _init -K _fini --strip-unneeded -g -x $< -o $@

%.elf:  %.co $(PROJECT_OBJECTFILES) contiki-$(TARGET).a symbols.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(filter-out %.a,$^) \
	    $(filter %.a,$^) $(LDLIBS)

%.hex: %.$(TARGET)
	$(OBJCOPY) $^ -j .text -j .data -O ihex $@

%.ihex: %.$(TARGET)
	$(OBJCOPY) $^ -O ihex $@

%-stripped.o: %.o
	$(STRIP) --strip-unneeded -g -x -o $@ $<