# Builds the C bootstrap compiler.

CC      := clang
CFLAGS  := -fvisibility=hidden -std=c99 -Os \
           -Wall -Wextra -Wpedantic \
           -Wformat=2 -Wformat-security \
           -Wnull-dereference \
           -Wno-format-nonliteral \
           -Wcast-align \
           -Wunused -Wuninitialized \
           -Wmissing-field-initializers \
           -fno-common -fstack-protector-all \
           -mcmodel=medium
LDFLAGS := -fuse-ld=lld -Wl,-z,stack-size=33554432

SRC := $(wildcard *.c) $(wildcard gen/*.c)
HDR := $(wildcard *.h) $(wildcard gen/*.h)
OBJ := $(SRC:.c=.o)
BIN := bin/radiance.s0

default: $(BIN)

$(BIN): $(OBJ)
	@echo "ld   $^ => $@"
	@mkdir -p bin
	@$(CC) $(LDFLAGS) $(OBJ) -o $@
	@echo "ok   $@"

%.o: %.c $(HDR)
	@echo "cc   $< => $@"
	@$(CC) $(CFLAGS) -c $< -o $@

clean:
	@rm -f $(OBJ) $(BIN)

fmt:
	git ls-files "*.c" "*.h" | xargs clang-format -i

.PHONY: default clean fmt
