diff --git a/prototypes/stdlib/Makefile b/prototypes/stdlib/Makefile new file mode 100644 index 0000000..95cf718 --- /dev/null +++ b/prototypes/stdlib/Makefile @@ -0,0 +1,42 @@ + +AS=gcc +CC=gcc +CXX=g++ +LD=ld +AR=ar + +FLAGS = -mno-sse -ffreestanding -m32 -Werror -Wall -iquote include -O3 -g +ASFLAGS = $(FLAGS) +CFLAGS = $(FLAGS) +CXXFLAGS = $(FLAGS) -std=c++14 -fno-rtti -fno-exceptions -fno-leading-underscore -fno-use-cxa-atexit -nostdlib -fno-builtin + +ARTIFACT = libstd.a + +SRCS = $(shell find -regextype egrep -regex '.*/.*\.(cpp|S|c)') +OBJS = $(addsuffix .o, $(notdir $(basename $(SRCS)))) + +all: $(ARTIFACT) + +$(ARTIFACT): $(OBJS) + $(AR) rcs $(ARTIFACT) $(addprefix obj/, $^) + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c -o obj/$@ $< + +%.o: %.c + $(CC) $(ASFLAGS) -c -o obj/$@ $< + +%.o: %.S + $(AS) $(CFLAGS) -c -o obj/$@ $< + +%.o: src/%.cpp + $(CXX) $(CXXFLAGS) -c -o obj/$@ $< + +%.o: src/%.c + $(CC) $(ASFLAGS) -c -o obj/$@ $< + +%.o: src/%.S + $(AS) $(CFLAGS) -c -o obj/$@ $< + +deploy: $(ARTIFACT) + cp $(ARTIFACT) /srv/tftp/$(ARTIFACT) \ No newline at end of file diff --git a/prototypes/stdlib/include/string.h b/prototypes/stdlib/include/string.h new file mode 100644 index 0000000..809da61 --- /dev/null +++ b/prototypes/stdlib/include/string.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +void * memcpy ( void * destination, const void * source, size_t num ); + +void * memset ( void * ptr, int value, size_t num ); \ No newline at end of file diff --git a/prototypes/stdlib/src/string.c b/prototypes/stdlib/src/string.c new file mode 100644 index 0000000..b1a1e93 --- /dev/null +++ b/prototypes/stdlib/src/string.c @@ -0,0 +1,20 @@ +#include "string.h" + +void * memcpy ( void * destination, const void * source, size_t num ) +{ + char *d = destination; + char const * s = source; + for(size_t i = 0; i < num; i++) { + d[i] = s[i]; + } + return destination; +} + +void * memset ( void * ptr, int value, size_t num ) +{ + char *p = ptr; + for(size_t i = 0; i < num; i++) { + p[i] = value; + } + return ptr; +} \ No newline at end of file