--- /dev/null
+OUTPUT = klibc.a
+OBJECTS = string.o
+PHONY = clean
+INCLUDES = -I../include -I../../include
+CFLAGS = -m32 -Wall -nostdlib -nodefaultlibs -nostartfiles -ffreestanding $(INCLUDES)
+ASFLAGS = $(CFLAGS)
+
+all: $(OUTPUT)
+
+$(OUTPUT): $(OBJECTS)
+ ar -rc $@ $^
+
+clean:
+ rm -rf $(OUTPUT) $(OBJECTS)
+
+.PHONY: $(PHONY)
--- /dev/null
+#include <sys/types.h>
+#include <corax/types.h>
+
+size_t strlen(const char *s)
+{
+ size_t ret_val;
+
+ for(ret_val = 0; s[ret_val]; ret_val++);
+
+ return(ret_val);
+}
+
+void* memcpy(void *dst, const void *src, size_t n)
+{
+ u32_t *d;
+ const u32_t *s;
+
+ d = (u32_t*)dst;
+ s = (const u32_t*)src;
+
+ while(n > 4) {
+ *d++ = *s++;
+ n -= 4;
+ }
+
+ if(n >= 2) {
+ *((u16_t*)d) = *((u16_t*)s);
+ d = (u32_t*)(((void*)d) + 2);
+ s = (u32_t*)(((void*)s) + 2);
+ n -= 2;
+ }
+
+ if(n >= 1) {
+ *((u8_t*)d) = *((u8_t*)s);
+ }
+
+ return(dst);
+}