From 054dd7fba3562edba728f7b2a600bf54c6c8c933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Quei=C3=9Fner?= Date: Sat, 7 May 2016 19:43:41 +0200 Subject: [PATCH] Adds simple stdlib compilation. --- prototypes/stdlib/Makefile | 42 ++++++++++++++++++++++++++++++ prototypes/stdlib/include/string.h | 7 +++++ prototypes/stdlib/src/string.c | 20 ++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 prototypes/stdlib/Makefile create mode 100644 prototypes/stdlib/include/string.h create mode 100644 prototypes/stdlib/src/string.c 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