olibc/src/Makefile

59 lines
1.4 KiB
Makefile

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)