59 lines
1.4 KiB
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)
|
|
|