diff --git a/.gitignore b/.gitignore index e77f6d4..bdc5af0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ *~ -builds +build diff --git a/examples/hello.c b/examples/hello.c deleted file mode 100644 index 952b26b..0000000 --- a/examples/hello.c +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include - -int main() { - printf("%s\n", "Hello, World!"); - return 0; -} diff --git a/src/Makefile b/src/Makefile index edbf6ca..93d7d71 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,53 +1,58 @@ CC=cc + LIBLINUXHEADERS= LIBLINUXDIR= LIBLINUXFILE=liblinux.a -CFILES=stdio.c string.c -OBJFILES=../builds/olibc/stdio.o ../builds/olibc/stdlib.o ../builds/olibc/string.o ../builds/olibc/ctype.o -LIBFILE=../builds/olibc.a -OLIBCHEADERS=include/ -OLIBCDIR=../builds + +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 -LIBFLAGS=-l:$(LIBLINUXFILE) -CFLAGS=--std=c11 -ffreestanding -fno-stack-protector -nostdlib -pedantic -Wall -Wextra -I$(LIBLINUXHEADERS) -I$(OLIBCHEADERS) -L$(LIBLINUXDIR) -L$(OLIBCDIR) +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) -lib: - mkdir -p ../builds/olibc - $(CC) -c stdio.c $(CFLAGS) -o ../builds/olibc/stdio.o $(LIBFLAGS) -g - $(CC) -c stdlib.c $(CFLAGS) -o ../builds/olibc/stdlib.o $(LIBFLAGS) -g - $(CC) -c string.c $(CFLAGS) -o ../builds/olibc/string.o $(LIBFLAGS) -g - $(CC) -c ctype.c $(CFLAGS) -o ../builds/olibc/ctype.o $(LIBFLAGS) -g - ar ruv $(LIBFILE) $(OBJFILES) - ranlib $(LIBFILE) +.PHONY: all lib examples test clean +.SUFFIXES: .o .c -examples: - mkdir -p ../builds/examples - $(CC) ../examples/hello.c $(CFLAGS) -o ../builds/examples/hello -l:olibc.a $(LIBFLAGS) +all: lib -tests: - mkdir -p ../builds/tests/string/ - $(CC) ../tests/string/strlen.c $(CFLAGS) -o ../builds/tests/string/strlen -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strcmp.c $(CFLAGS) -o ../builds/tests/string/strcmp -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strncmp.c $(CFLAGS) -o ../builds/tests/string/strncmp -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/memcmp.c $(CFLAGS) -o ../builds/tests/string/memcmp -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strcpy.c $(CFLAGS) -o ../builds/tests/string/strcpy -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strncpy.c $(CFLAGS) -o ../builds/tests/string/strncpy -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/memcpy.c $(CFLAGS) -o ../builds/tests/string/memcpy -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strchr.c $(CFLAGS) -o ../builds/tests/string/strchr -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strrchr.c $(CFLAGS) -o ../builds/tests/string/strrchr -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/memchr.c $(CFLAGS) -o ../builds/tests/string/memchr -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strcat.c $(CFLAGS) -o ../builds/tests/string/strcat -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strncat.c $(CFLAGS) -o ../builds/tests/string/strncat -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/memmove.c $(CFLAGS) -o ../builds/tests/string/memmove -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strstr.c $(CFLAGS) -o ../builds/tests/string/strstr -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strspn.c $(CFLAGS) -o ../builds/tests/string/strspn -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strcspn.c $(CFLAGS) -o ../builds/tests/string/strcspn -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/memset.c $(CFLAGS) -o ../builds/tests/string/memset -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strpbrk.c $(CFLAGS) -o ../builds/tests/string/strpbrk -l:olibc.a $(LIBFLAGS) - $(CC) ../tests/string/strtok.c $(CFLAGS) -o ../builds/tests/string/strtok -l:olibc.a $(LIBFLAGS) - # stdio - mkdir -p ../builds/tests/stdio/ - $(CC) ../tests/stdio/printf.c $(CFLAGS) -o ../builds/tests/stdio/printf -l:olibc.a $(LIBFLAGS) - ../tests/test.sh string - ../tests/test.sh stdio +$(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) diff --git a/src/examples/hello.c b/src/examples/hello.c new file mode 100644 index 0000000..0923337 --- /dev/null +++ b/src/examples/hello.c @@ -0,0 +1,6 @@ +#include + +int main() { + printf("Hello, World!\n"); + return 0; +} diff --git a/tests/stdio/printf.c b/src/tests/stdio/printf.c similarity index 100% rename from tests/stdio/printf.c rename to src/tests/stdio/printf.c diff --git a/tests/string/memchr.c b/src/tests/string/memchr.c similarity index 100% rename from tests/string/memchr.c rename to src/tests/string/memchr.c diff --git a/tests/string/memcmp.c b/src/tests/string/memcmp.c similarity index 100% rename from tests/string/memcmp.c rename to src/tests/string/memcmp.c diff --git a/tests/string/memcpy.c b/src/tests/string/memcpy.c similarity index 100% rename from tests/string/memcpy.c rename to src/tests/string/memcpy.c diff --git a/tests/string/memmove.c b/src/tests/string/memmove.c similarity index 100% rename from tests/string/memmove.c rename to src/tests/string/memmove.c diff --git a/tests/string/memset.c b/src/tests/string/memset.c similarity index 100% rename from tests/string/memset.c rename to src/tests/string/memset.c diff --git a/tests/string/strcat.c b/src/tests/string/strcat.c similarity index 100% rename from tests/string/strcat.c rename to src/tests/string/strcat.c diff --git a/tests/string/strchr.c b/src/tests/string/strchr.c similarity index 100% rename from tests/string/strchr.c rename to src/tests/string/strchr.c diff --git a/tests/string/strcmp.c b/src/tests/string/strcmp.c similarity index 100% rename from tests/string/strcmp.c rename to src/tests/string/strcmp.c diff --git a/tests/string/strcpy.c b/src/tests/string/strcpy.c similarity index 100% rename from tests/string/strcpy.c rename to src/tests/string/strcpy.c diff --git a/tests/string/strcspn.c b/src/tests/string/strcspn.c similarity index 100% rename from tests/string/strcspn.c rename to src/tests/string/strcspn.c diff --git a/tests/string/strlen.c b/src/tests/string/strlen.c similarity index 100% rename from tests/string/strlen.c rename to src/tests/string/strlen.c diff --git a/tests/string/strncat.c b/src/tests/string/strncat.c similarity index 100% rename from tests/string/strncat.c rename to src/tests/string/strncat.c diff --git a/tests/string/strncmp.c b/src/tests/string/strncmp.c similarity index 100% rename from tests/string/strncmp.c rename to src/tests/string/strncmp.c diff --git a/tests/string/strncpy.c b/src/tests/string/strncpy.c similarity index 100% rename from tests/string/strncpy.c rename to src/tests/string/strncpy.c diff --git a/tests/string/strpbrk.c b/src/tests/string/strpbrk.c similarity index 100% rename from tests/string/strpbrk.c rename to src/tests/string/strpbrk.c diff --git a/tests/string/strrchr.c b/src/tests/string/strrchr.c similarity index 100% rename from tests/string/strrchr.c rename to src/tests/string/strrchr.c diff --git a/tests/string/strspn.c b/src/tests/string/strspn.c similarity index 100% rename from tests/string/strspn.c rename to src/tests/string/strspn.c diff --git a/tests/string/strstr.c b/src/tests/string/strstr.c similarity index 100% rename from tests/string/strstr.c rename to src/tests/string/strstr.c diff --git a/tests/string/strtok.c b/src/tests/string/strtok.c similarity index 100% rename from tests/string/strtok.c rename to src/tests/string/strtok.c diff --git a/tests/test.sh b/src/tests/test.sh similarity index 93% rename from tests/test.sh rename to src/tests/test.sh index 9ad2db6..f00e73f 100755 --- a/tests/test.sh +++ b/src/tests/test.sh @@ -5,7 +5,7 @@ CC=cc -cd ../builds/tests +cd ../build/tests if [[ -z $@ ]] then @@ -70,7 +70,7 @@ for i in $headerslist; do for j in $(ls); do if [ -x $j ] && [[ $j != *"-cc"* ]] then - cat $(cd ../../../tests/$i ; pwd)/$j.c | sed 's/put_int(/printf("%d\\n",/' | cc -x c -o $j-cc - + cat $(echo ../../../src/tests/$i/$j | sed 's/\.o/\.c/g') | cc -x c -o $j-cc - ./$j > tmp ./$j-cc > tmp-cc if [ "$(diff tmp tmp-cc)" == "" ]