CC=cc LIBLINUXHEADERS= LIBLINUXDIR= LIBLINUXFILE=liblinux.a BUILDDIR=../build TESTDIR=tests OLIBCCFILES=$(wildcard *.c) OLIBCOFILES=$(patsubst %.c, $(BUILDDIR)/%.o, $(OLIBCCFILES)) EXAMPLESCFILES=$(wildcard examples/*.c) EXAMPLESOFILES=$(patsubst %.c, $(BUILDDIR)/%.o, $(EXAMPLESCFILES)) TESTCFILES=$(wildcard $(TESTDIR)/stdio/*.c $(TESTDIR)/string/*.c) TESTOFILES=$(patsubst %.c, $(BUILDDIR)/%.o, $(TESTCFILES)) LIBFILE=$(BUILDDIR)/olibc.a DEBUGFLAGS=-fsanitize=address -fsanitize=leak -fsanitize=undefined -fsanitize=pointer-compare -lasan DEBUGFLAGS=-g INCLUDEFLAGS=-I$(LIBLINUXHEADERS) -Iinclude LIBFLAGS=-l:olibc.a LINKFLAGS=-L$(LIBLINUXDIR) -L$(BUILDDIR) -l:$(LIBLINUXFILE) CFLAGS=--std=c11 -ffreestanding -fno-stack-protector -nostdlib -pedantic -Wall -Wextra $(INCLUDEFLAGS) .PHONY: all lib examples test clean .SUFFIXES: .o .c all: lib $(BUILDDIR)/%.o: %.c @mkdir -p $(@D) $(CC) $< $(CFLAGS) -o $@ $(LINKFLAGS) $(DEBUGFLAGS) $(OLIBCOFILES): CFLAGS += -c $(OLIBCOFILES): $(OLIBCCFILES) $(LIBFILE): $(OLIBCOFILES) ar ruv $@ $(OLIBCOFILES) ranlib $@ lib: $(LIBFILE) $(EXAMPLESOFILES): LINKFLAGS:=$(LIBFLAGS) $(LINKFLAGS) $(EXAMPLESOFILES): $(EXAMPLESCFILES) examples: lib $(EXAMPLESOFILES) $(TESTOFILES): LINKFLAGS:=$(LIBFLAGS) $(LINKFLAGS) $(TESTOFILES): $(TESTCFILES) test: lib $(TESTOFILES) $(TESTDIR)/test.sh string $(TESTDIR)/test.sh stdio clean: rm -rf $(BUILDDIR)