# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
#
# Generate a baremetal application for the microcontroller

LIB_NAME     = cryptoc
DIF_SRCS     = sha256.c
ARCH         = rv32imc
# ARCH = rv32im # to disable compressed instructions

RV_TOOLS    ?= /tools/riscv/bin/

CC          := ${RV_TOOLS}/riscv32-unknown-elf-gcc
CFLAGS      ?= -Wall -g -Os -march=$(ARCH) -mabi=ilp32 -static -mcmodel=medany \
	       -fvisibility=hidden -nostdlib -nostartfiles

ifeq ($(SIM),1)
  CFLAGS    += -DSIMULATION
endif

AR          := $(subst gcc,ar,$(wordlist 1,1,$(CC)))
ARFLAGS     ?= -cvr

OBJS        := ${DIF_SRCS:.c=.o}
DEPS         = $(OBJS:%.o=%.d)

OUTFILES     = lib$(LIB_NAME).a

$(OUTFILES): $(OBJS)
	     $(AR) $(ARFLAGS) $@ $(OBJS)

all: $(OUTFILES)

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

-include $(DEPS)

clean:
	$(RM) *.o *.d $(OUTFILES)
