From 4943183cb10d24b463aade33a5e220bcafa79252 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Tue, 27 Dec 2022 15:08:33 +0400 Subject: [PATCH] Use libclayer --- .gitmodules | 3 +++ Makefile | 28 ++++++++++++++++++++++++---- src/libc.c | 14 +++++++------- vendor/drivers | 2 +- vendor/libclayer | 1 + vendor/libkernaux | 2 +- 6 files changed, 37 insertions(+), 13 deletions(-) create mode 160000 vendor/libclayer diff --git a/.gitmodules b/.gitmodules index 87cb713..093f39b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "vendor/drivers"] path = vendor/drivers url = https://github.com/tailix/drivers.git +[submodule "vendor/libclayer"] + path = vendor/libclayer + url = https://github.com/tailix/libclayer.git diff --git a/Makefile b/Makefile index 3711b0d..dfadafd 100644 --- a/Makefile +++ b/Makefile @@ -35,6 +35,7 @@ ROOTFS_DIR = rootfs SRC_DIR = src # Basic paths (dependencies) +LIBCLAYER_DIR = vendor/libclayer LIBKERNAUX_DIR = vendor/libkernaux DRIVERS_DIR = vendor/drivers MRUBY_DIR = vendor/mruby @@ -42,12 +43,22 @@ MRUBY_DIR = vendor/mruby # Deeper paths INCLUDE_DIR = $(DEST_DIR)/include LIB_DIR = $(DEST_DIR)/lib +LIBCLAYER = $(LIB_DIR)/libc.a LIBDRIVERS = $(LIB_DIR)/libdrivers.a LIBKERNAUX = $(LIB_DIR)/libkernaux.a LIBMRUBY = $(LIB_DIR)/libmruby.a GRUBCFG = $(ROOTFS_DIR)/boot/grub/grub.cfg MRUBYVISOR = $(ROOTFS_DIR)/boot/mrubyvisor.multiboot2 +############# +# libclayer # +############# + +LIBCLAYER_ARGS = \ + --enable-libc \ + --disable-libclayer \ + --enable-freestanding + ############## # libkernaux # ############## @@ -57,7 +68,7 @@ LIBKERNAUX_ARGS = \ --enable-split-libc \ --enable-debug \ --disable-float \ - --with-libc + CFLAGS='-I$(ABS_REPO)/$(INCLUDE_DIR)' ########### # drivers # @@ -93,7 +104,7 @@ runc: $(IMAGE) runw: $(IMAGE) $(QEMU) -cdrom $< -serial stdio -clean: clean-src clean-dest clean-mruby clean-libkernaux +clean: clean-src clean-dest clean-mruby clean-libkernaux clean-libclayer clean-src: $(MAKE) -C $(SRC_DIR) clean @@ -110,6 +121,9 @@ clean-drivers: clean-libkernaux: $(MAKE) -C $(LIBKERNAUX_DIR) distclean || true +clean-libclayer: + $(MAKE) -C $(LIBCLAYER_DIR) distclean || true + ############## # File tasks # ############## @@ -117,11 +131,17 @@ clean-libkernaux: $(IMAGE): $(GRUBCFG) $(MRUBYVISOR) $(GRUB_MKRESCUE) $(ROOTFS_DIR) -o $@ -$(MRUBYVISOR): $(LIBKERNAUX) $(LIBDRIVERS) $(LIBMRUBY) +$(MRUBYVISOR): $(LIBCLAYER) $(LIBKERNAUX) $(LIBDRIVERS) $(LIBMRUBY) $(MAKE) -C $(SRC_DIR) mrubyvisor.multiboot2 CCPREFIX='$(CCPREFIX)' DEST='$(ABS_REPO)/$(DEST_DIR)' MRUBY_FLAGS='$(MRUBY_FLAGS)' $(CP) $(SRC_DIR)/mrubyvisor.multiboot2 $@ -$(LIBKERNAUX): +$(LIBCLAYER): + cd $(LIBCLAYER_DIR) && ./autogen.sh + cd $(LIBCLAYER_DIR) && ./configure --host='i386-elf' --prefix='$(ABS_REPO)/$(DEST_DIR)' $(LIBCLAYER_ARGS) AR='$(AR)' AS='$(AS)' CC='$(CC)' LD='$(LD)' RANLIB='$(RANLIB)' + cd $(LIBCLAYER_DIR) && $(MAKE) + cd $(LIBCLAYER_DIR) && $(MAKE) install + +$(LIBKERNAUX): $(LIBCLAYER) cd $(LIBKERNAUX_DIR) && ./autogen.sh cd $(LIBKERNAUX_DIR) && ./configure --host='i386-elf' --prefix='$(ABS_REPO)/$(DEST_DIR)' $(LIBKERNAUX_ARGS) AR='$(AR)' AS='$(AS)' CC='$(CC)' LD='$(LD)' RANLIB='$(RANLIB)' cd $(LIBKERNAUX_DIR) && $(MAKE) diff --git a/src/libc.c b/src/libc.c index ea5f2c4..b49af71 100644 --- a/src/libc.c +++ b/src/libc.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include static struct KernAux_FreeList allocator; static uint8_t memory[1024 * 128]; // 128 KiB @@ -26,13 +26,13 @@ void libc_init() KernAux_FreeList_init(&allocator, NULL); KernAux_FreeList_add_zone(&allocator, memory, sizeof(memory)); - kernaux_libc.abort = my_abort; - kernaux_libc.exit = my_exit; + libclayer.abort = my_abort; + libclayer.exit = my_exit; - kernaux_libc.calloc = my_calloc; - kernaux_libc.free = my_free; - kernaux_libc.malloc = my_malloc; - kernaux_libc.realloc = my_realloc; + libclayer.calloc = my_calloc; + libclayer.free = my_free; + libclayer.malloc = my_malloc; + libclayer.realloc = my_realloc; } void my_abort() diff --git a/vendor/drivers b/vendor/drivers index aad8133..38241b9 160000 --- a/vendor/drivers +++ b/vendor/drivers @@ -1 +1 @@ -Subproject commit aad813390ed6062f65ee89be47c214481e3ae5bd +Subproject commit 38241b9fd261d069a5277cf959c3cf574f34e7cd diff --git a/vendor/libclayer b/vendor/libclayer new file mode 160000 index 0000000..881f6ec --- /dev/null +++ b/vendor/libclayer @@ -0,0 +1 @@ +Subproject commit 881f6ecb5b5c74fc2823b860fd6b186452af5406 diff --git a/vendor/libkernaux b/vendor/libkernaux index b812b52..5ac4de4 160000 --- a/vendor/libkernaux +++ b/vendor/libkernaux @@ -1 +1 @@ -Subproject commit b812b52a9cbc4730c0719be288f0826583f69461 +Subproject commit 5ac4de42038a90bc22f9d7799acdfe6420ec6b07