COMPILER_RT_BUILD_DIR ?= build
DESTDIR ?= $(COMPILER_RT_BUILD_DIR)/sysroot

ifneq ($(TOOLCHAIN_FILE),)
	include $(TOOLCHAIN_FILE)
endif

CC ?= clang
CFLAGS ?= -target riscv32-unknow-elf -march=rv32i -mabi=ilp32 -O2
AR ?= llvm-ar

# This option is necessary for software long double support
CFLAGS += -fforce-enable-int128

COMPILER_RT_SRCS := $(wildcard src/*.c)
COMPILER_RT_OBJS := $(patsubst src/%.c,$(COMPILER_RT_BUILD_DIR)/objs/%.o,$(COMPILER_RT_SRCS))

all: $(COMPILER_RT_BUILD_DIR)/libclang_rt.builtins.a

install: $(COMPILER_RT_BUILD_DIR)/libclang_rt.builtins.a
	@mkdir -p $(DESTDIR)/lib
	cp -f $(COMPILER_RT_BUILD_DIR)/libclang_rt.builtins.a $(DESTDIR)/lib/

clean:
	rm -rf $(COMPILER_RT_BUILD_DIR)/libclang_rt.builtins.a $(COMPILER_RT_BUILD_DIR)/objs

$(COMPILER_RT_BUILD_DIR)/objs/%.o: src/%.c
	@mkdir -p $(dir $@)
	$(CC) $(CFLAGS) -c -o $@ $<

$(COMPILER_RT_BUILD_DIR)/libclang_rt.builtins.a: $(COMPILER_RT_OBJS)
	@rm -f $@
	$(AR) rcs $@ $(COMPILER_RT_OBJS)

.PHONY: all install clean
