Project restructure and rewrote Makefile

This commit is contained in:
g1n 2022-07-11 09:42:48 +03:00
parent ee9197d681
commit c7830193cd
Signed by: g1n
GPG Key ID: 8D352193D65D4E2C
25 changed files with 58 additions and 54 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
*~
builds
build

View File

@ -1,7 +0,0 @@
#include <stdio.h>
#include <string.h>
int main() {
printf("%s\n", "Hello, World!");
return 0;
}

View File

@ -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)

6
src/examples/hello.c Normal file
View File

@ -0,0 +1,6 @@
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}

View File

@ -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)" == "" ]