diff --git a/Makefile b/Makefile
index d7ae0dc..02e1fd7 100644
--- a/Makefile
+++ b/Makefile
@@ -22,120 +22,179 @@
# along with OS/K. If not, see . #
#=----------------------------------------------------------------------------=#
-.PHONY: all
+## VARIABLES ----------------------------------------------------------------- #
#Programs
ASM=nasm
LD=ld
+CCNAME=x86_64-elf-gcc
+
ASMFLAGS=-f elf64
LDFLAGS=-melf_x86_64
+COPTIM=-O2
+CWARNS=-Wall -Wextra # -Werror=implicit-function-declaration
+CINCLUDES=-Ikaleid/include
+CFLAGS1=-nostdlib -ffreestanding -mcmodel=large # -std=gnu11
+CFLAGS2= -c -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -fno-strict-aliasing
+CFLAGS=$(CFLAGS1) $(CFLAGS2) -DNDEBUG
+KCC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES) -D_OSK_SOURCE -D_KALEID_KERNEL
#Folders
MBRDIR=boot/grub
LOADERDIR=boot/loader
+KERNELDIR=kaleid
OBJDIR=build/obj
BINDIR=build/bin
-# Object to link (temp)
-l_objects=./build/obj/kaleid/crtlib/memory.o \
- ./build/obj/kaleid/crtlib/rand.o \
- ./build/obj/kaleid/crtlib/string.o \
- ./build/obj/kaleid/crtlib/ultoa.o \
- ./build/obj/kaleid/crtlib/utoa.o \
- ./build/obj/kaleid/crtlib/ctype.o \
- ./build/obj/kaleid/crtlib/itoa.o \
- ./build/obj/kaleid/crtlib/ltoa.o \
- ./build/obj/kaleid/crtlib/sprintf.o \
- ./build/obj/kaleid/extras/prog.o \
- ./build/obj/kaleid/extras/argv.o \
- ./build/obj/kaleid/kernel/init/table.o \
- ./build/obj/kaleid/kernel/init/init.o \
- ./build/obj/kaleid/kernel/io/vga.o \
- ./build/obj/kaleid/kernel/io/cursor.o \
- ./build/obj/kaleid/kernel/io/term.o \
- ./build/obj/kaleid/kernel/ke/panic.o \
- ./build/obj/boot/loader.o
-
#Color codes
CL='\033[0;32m'
CL2='\033[1;36m'
CL3='\033[0m'
NC='\033[1;37m'
-kernel:
- cpp ./Makefile.in > build/Makefile.out
- python build/idttool.py
- make kernel -f build/Makefile.out.2
- rm build/Makefile.out build/Makefile.out.2
-kernel-asm:
- cpp -D_TO_ASM ./Makefile.in > build/Makefile.out
- python build/idttool.py
- make kernel -f build/Makefile.out.2
- rm build/Makefile.out build/Makefile.out.2
+.PHONY: all
+all : OS/K
-tests:
- cpp -D_TESTS ./Makefile.in > build/Makefile.out
- python build/idttool.py
- make tests -f build/Makefile.out.2
- rm build/Makefile.out build/Makefile.out.2
+## KALEID MAKEFILE ----------------------------------------------------------- #
-boot.mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg
- @mkdir -p $(BINDIR)/disk
- @echo ${CL2}[boot.mbr]${NC} Installing MBR on image...${CL3}
- @$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg
- @echo ${CL2}[boot.mbr]${CL} OK${CL3}
- @rmdir $(BINDIR)/disk
+# Common objects
+kal_com_obj= $(OBJDIR)/kaleid/atoi.o $(OBJDIR)/kaleid/ctype.o \
+ $(OBJDIR)/kaleid/itoa.o $(OBJDIR)/kaleid/memory.o \
+ $(OBJDIR)/kaleid/rand.o $(OBJDIR)/kaleid/sprintf.o \
+ $(OBJDIR)/kaleid/status.o $(OBJDIR)/kaleid/string.o \
+ $(OBJDIR)/kaleid/strtol.o $(OBJDIR)/kaleid/argv.o \
+ $(OBJDIR)/kaleid/prog.o $(OBJDIR)/kaleid/atol.o \
+ $(OBJDIR)/kaleid/atou.o $(OBJDIR)/kaleid/atoul.o \
+ $(OBJDIR)/kaleid/utoa.o $(OBJDIR)/kaleid/ltoa.o \
+ $(OBJDIR)/kaleid/ultoa.o
-boot.loader.asm: $(LOADERDIR)/loader.asm
- @echo ${CL2}[boot.loader.asm]${NC} Making loader...${CL3}
- @$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(OBJDIR)/boot/loader.o > /dev/null
- @echo ${CL2}[boot.loader.asm]${CL} OK${CL3}
+$(OBJDIR)/kaleid/atoi.o: $(KERNELDIR)/crtlib/atoi.c
+ @$(KCC) -D_NEED_ATOI $< -o $@
+$(OBJDIR)/kaleid/atol.o: $(KERNELDIR)/crtlib/atoi.c
+ @$(KCC) -D_NEED_ATOL $< -o $@
+$(OBJDIR)/kaleid/atou.o: $(KERNELDIR)/crtlib/atoi.c
+ @$(KCC) -D_NEED_ATOU $< -o $@
+$(OBJDIR)/kaleid/atoul.o: $(KERNELDIR)/crtlib/atoi.c
+ @$(KCC) -D_NEED_ATOUL $< -o $@
+$(OBJDIR)/kaleid/ctype.o: $(KERNELDIR)/crtlib/ctype.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/itoa.o: $(KERNELDIR)/crtlib/itoa.c
+ @$(KCC) -D_NEED_ITOA $< -o $@
+$(OBJDIR)/kaleid/ltoa.o: $(KERNELDIR)/crtlib/itoa.c
+ @$(KCC) -D_NEED_LTOA $< -o $@
+$(OBJDIR)/kaleid/utoa.o: $(KERNELDIR)/crtlib/itoa.c
+ @$(KCC) -D_NEED_UTOA $< -o $@
+$(OBJDIR)/kaleid/ultoa.o: $(KERNELDIR)/crtlib/itoa.c
+ @$(KCC) -D_NEED_ULTOA $< -o $@
+$(OBJDIR)/kaleid/memory.o: $(KERNELDIR)/crtlib/memory.c
+ @$(KCC) -fno-strict-aliasing $< -o $@
+$(OBJDIR)/kaleid/rand.o: $(KERNELDIR)/crtlib/rand.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/sprintf.o: $(KERNELDIR)/crtlib/sprintf.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/status.o: $(KERNELDIR)/crtlib/status.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/string.o: $(KERNELDIR)/crtlib/string.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/strtol.o: $(KERNELDIR)/crtlib/strtol.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/argv.o: $(KERNELDIR)/extras/argv.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/prog.o: $(KERNELDIR)/extras/prog.c
+ @$(KCC) $< -o $@
-loader: boot.loader.asm link copykernel
+# Kernel objects
+kal_kern_obj= $(OBJDIR)/kaleid/kernel/cpuid.o $(OBJDIR)/kaleid/kernel/init.o \
+ $(OBJDIR)/kaleid/kernel/table.o $(OBJDIR)/kaleid/kernel/cursor.o \
+ $(OBJDIR)/kaleid/kernel/term.o $(OBJDIR)/kaleid/kernel/vga.o \
+ $(OBJDIR)/kaleid/kernel/panic.o
-copykernel:
- @mkdir -p $(BINDIR)/disk
- @echo ${CL2}[disk]${NC} Integrating kernel...${CL3}
- @$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk
- @cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid
- @$(MBRDIR)/umount.sh $(BINDIR)/disk
- @echo ${CL2}[disk]${CL} OK${CL3}
- @rmdir $(BINDIR)/disk
+$(OBJDIR)/kaleid/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/kernel/init.o: $(KERNELDIR)/kernel/init/init.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/kernel/table.o: $(KERNELDIR)/kernel/init/table.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/kernel/cursor.o: $(KERNELDIR)/kernel/io/cursor.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/kernel/term.o: $(KERNELDIR)/kernel/io/term.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c
+ @$(KCC) $< -o $@
+$(OBJDIR)/kaleid/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c
+ @$(KCC) $< -o $@
-make_disk:
- @echo ${CL2}[make_disk]${NC} Constructing disk image...${CL3}
- @$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img
- @echo ${CL2}[make_disk]${CL} OK${CL3}
+## MAIN MAKEFILE ------------------------------------------------------------- #
-
-kaleid: kernel loader
-
-test: kaleid
+.PHONY: test
+test: all
@qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log &
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm
-
-test32: kaleid
+.PHONY: test32
+test32: all
@qemu-system-i386 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -enable-kvm 2> qemu.log &
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm
-debug: kaleid
+.PHONY: debug
+debug: all
@qemu-system-x86_64 -hda build/bin/disk.img -d cpu_reset,guest_errors,pcall,int -s -S -enable-kvm 2> qemu.log &
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 64 > loader_disasm64.asm
@ndisasm $(BINDIR)/kaleid -o 0x00100000 -b 32 > loader_disasm32.asm
-boot: make_disk boot.mbr
- @echo ${CL2}[[boot]]${CL} Terminated without error.${CL3}
+.PHONY:OS/K
+OS/K: $(BINDIR)/kaleid $(BINDIR)/disk.img
+ @mkdir -p $(BINDIR)/disk
+ @echo ${CL2}[[$@]] ${NC}Integrating kernel...${CL3}
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ @$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk
+ @cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid
+ @$(MBRDIR)/umount.sh $(BINDIR)/disk
+ @echo ${CL2}[[$@]] ${CL}Success.${CL3}
+ @rmdir $(BINDIR)/disk
-all: boot kaleid
- @echo ${CL2}[[all]]${CL} Terminated without error.${CL3}
-
-link:
- @$(LD) $(LDFLAGS) -T build/kernel.ld $(l_objects) -o $(OBJDIR)/boot/kaleid.x86_64
- @x86_64-elf-objcopy -I elf64-x86-64 -O elf32-i386 $(OBJDIR)/boot/kaleid.x86_64 $(BINDIR)/kaleid
+.PHONY: install_mbr
+install_mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg
+ @mkdir -p $(BINDIR)/disk
+ @echo ${CL2}[$@] ${NC}Installing MBR on image...${CL3}
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ @$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg
+ @tail -1 grub.log | head -1 | grep "Installation terminée, sans erreur."
+ @rmdir $(BINDIR)/disk
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+.PHONY: clean
clean:
- @rm -Rf $(BINDIR)/*
- @rm -Rf $(OBJDIR)/*/*/*/*.o
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ @rm -Rvf $(BINDIR)/*.*
+ @rm -Rvf $(OBJDIR)/*.o
+ @rm -Rvf $(OBJDIR)/*/*.o
+ @rm -Rvf $(OBJDIR)/*/*/*.o
+
+$(BINDIR)/kaleid: $(OBJDIR)/boot/kaleid.x86_64
+ @echo ${CL2}[$@] ${NC}Objcopy...${CL3}
+ @x86_64-elf-objcopy -I elf64-x86-64 -O elf32-i386 $(OBJDIR)/boot/kaleid.x86_64 $(BINDIR)/kaleid
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+
+$(OBJDIR)/boot/kaleid.x86_64: $(kal_kern_obj) $(kal_com_obj) $(OBJDIR)/boot/loader.o
+ @echo ${CL2}[$@] ${NC}Linking kernel objects...${CL3}
+ @$(LD) $(LDFLAGS) -T build/kernel.ld \
+ $(OBJDIR)/boot/loader.o \
+ $(OBJDIR)/kaleid/*.o \
+ $(OBJDIR)/kaleid/kernel/*.o \
+ -o $(OBJDIR)/boot/kaleid.x86_64
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+
+$(OBJDIR)/boot/loader.o: $(LOADERDIR)/loader.asm
+ @echo ${CL2}[$@] ${NC}Making loader...${CL3}
+ @$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(OBJDIR)/boot/loader.o > /dev/null
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+
+$(BINDIR)/disk.img: $(MBRDIR)/create_disk.sh
+ @echo ${CL2}[$@]${NC} Constructing disk image...${CL3}
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ @$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img
+ @make install_mbr
+ @echo ${CL2}[$@]${NC} Constructing disk image...${CL3}
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index eec9b98..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,104 +0,0 @@
-// -*- Mode: Makefile -*-
-
-//----------------------------------------------------------------------------//
-// GNU GPL OS/K //
-// //
-// Desc: Project Makefile //
-// //
-// //
-// Copyright © 2018-2019 The OS/K Team //
-// //
-// This file is part of OS/K. //
-// //
-// OS/K is free software: you can redistribute it and/or modify //
-// it under the terms of the GNU General Public License as published by //
-// the Free Software Foundation, either version 3 of the License, or //
-// any later version. //
-// //
-// OS/K is distributed in the hope that it will be useful, //
-// but WITHOUT ANY WARRANTY//without even the implied warranty of //
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
-// GNU General Public License for more details. //
-// //
-// You should have received a copy of the GNU General Public License //
-// along with OS/K. If not, see . //
-//----------------------------------------------------------------------------//
-
-// The madman's Makefile
-#include "build/preproc.h"
-
-CCNAME=x86_64-elf-gcc
-CC2NAME=gcc
-COPTIM=-O2
-CWARNS=-Wall -Wextra // -Werror=implicit-function-declaration
-CINCLUDES=-Ikaleid/include
-
-CFLAGS1=-nostdlib -ffreestanding -mcmodel=large // -std=gnu11
-CFLAGS2=_ASMTYPE -mno-red-zone -mno-mmx -mno-sse -mno-sse2
-CFLAGS=$(CFLAGS1) $(CFLAGS2) -DNDEBUG
-
-CC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES)
-
-BINDIR=build/bin
-OBJDIR=build/obj
-
-BOOTDIR=boot
-COMMDIR=kaleid/crtlib
-KERNDIR=kaleid/kernel
-SYSTDIR=kaleid/system
-LINXDIR=kaleid/test
-
-
-// COMMON MAKEFILE
-
-COBJDIR=$(OBJDIR)/$(COMMDIR)
-LOBJDIR=$(OBJDIR)/$(LINXDIR)
-
-COMMOBJS=COBJ6(string, status, rand, memory, strtol, sprintf) COBJ4(itoa, ltoa, utoa, ultoa) COBJ4(atoi, atol, atou, atoul) COBJ3(../extras/prog, ../extras/argv, ctype)
-
-TCC=$(CC2NAME) $(COPTIM) $(CWARNS) $(CINCLUDES)
-KCC=$(CC) -D_OSK_SOURCE -D_KALEID_KERNEL
-
-comm-convert:
- @COMPILE_CONVRT1(itoa) -D_NEED_ITOA
- @COMPILE_CONVRT1(ltoa) -D_NEED_LTOA
- @COMPILE_CONVRT1(utoa) -D_NEED_UTOA
- @COMPILE_CONVRT1(ultoa) -D_NEED_ULTOA
- @COMPILE_CONVRT2(atoi) -D_NEED_ATOI
- @COMPILE_CONVRT2(atol) -D_NEED_ATOL
- @COMPILE_CONVRT2(atou) -D_NEED_ATOU
- @COMPILE_CONVRT2(atoul) -D_NEED_ATOUL
-
-common: comm-convert
- @COMPILE_COMMON(rand)
- @COMPILE_COMMON(ctype)
- @COMPILE_COMMON(string)
- @COMPILE_COMMON(status)
- @COMPILE_COMMON(memory) -fno-strict-aliasing
- @COMPILE_COMMON(strtol)
- @COMPILE_COMMON(sprintf)
- @COMPILE_COMMON(../extras/prog)
- @COMPILE_COMMON(../extras/argv)
-
-tests: common
- $(TCC) -c $(LINXDIR)/test-common.c -o $(LOBJDIR)/test-common.o
- $(TCC) $(COMMOBJS) $(LOBJDIR)/test-common.o -o $(BINDIR)/comm-test
-
-//----------------------------------------------------------------------------#
-// KERNEL MAKEFILE
-
-KOBJDIR=$(OBJDIR)/$(KERNDIR)
-
-KERNOBJS=KOBJ6(init/init, init/table, ke/panic, io/term, io/cursor, io/vga)
-
-kernel: common
- @COMPILE_KERNEL(init/init)
- @COMPILE_KERNEL(init/table)
- @COMPILE_KERNEL(ke/panic)
- @COMPILE_KERNEL(io/cursor)
- @COMPILE_KERNEL(io/term)
- @COMPILE_KERNEL(io/vga)
- //LINK_KERNEL(kaleid-kernel.elf)
-
-//----------------------------------------------------------------------------#
-
diff --git a/Readme.md b/Readme.md
index 566c708..3133e29 100644
--- a/Readme.md
+++ b/Readme.md
@@ -20,19 +20,17 @@ To compile this project from sources, you must first install the dependencies
```
apt update && apt upgrade
-apt install grub-pc dosfstools make nasm
+apt install grub-pc dosfstools make nasm qemu
```
You also need to have the [x86-64 ELF gcc cross-compiler](https://www.os-k.eu/build-tools/cross-cc.tar.xz) in `/opt/cross-cc`.
-To compile for the first time, you must compile the whole project, in order to build the loop disk image :
-
+To compile, simply use at the root of this project :
```
-make all
+make
```
-After that, you can use this to compile the kernel only :
-
+To compile and test, simply use at the root of this project :
```
-make kaleid
+make test
```
diff --git a/boot/grub/grub-install.sh b/boot/grub/grub-install.sh
index cd76028..d89d6eb 100755
--- a/boot/grub/grub-install.sh
+++ b/boot/grub/grub-install.sh
@@ -61,4 +61,4 @@ sudo umount /dev/loop1 > /dev/null
echo ${CL2}[grub-install.sh]${NC} Unmounting image... \(losetup\)${CL3}
sudo losetup -D > /dev/null
-echo ${CL2}[grub-install.sh]${CL} Terminated without error. See grub.log for more informations.${CL3}
+echo ${CL2}[grub-install.sh]${CL} See grub.log for more informations.${CL3}
diff --git a/build/idttool.py b/build/idttool.py
deleted file mode 100644
index 200d19d..0000000
--- a/build/idttool.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# don't mind this file
-
-f1 = open("build/Makefile.out", "r+")
-f2 = open("build/Makefile.out.2", "w+")
-
-fl = f1.readlines()
-for ln in fl:
- if ln[0] == ' ' and ln[1] != ' ':
- f2.write('\t')
- f2.write(ln)
-
-f1.close()
-f2.close()
-
diff --git a/build/obj/kaleid/extras/.placeholder b/build/obj/kaleid/extras/.placeholder
deleted file mode 100644
index e69de29..0000000
diff --git a/build/obj/kaleid/common/test/.placeholder b/build/obj/kaleid/kernel/.placeholder
similarity index 100%
rename from build/obj/kaleid/common/test/.placeholder
rename to build/obj/kaleid/kernel/.placeholder
diff --git a/build/obj/kaleid/kernel/init/.placeholder b/build/obj/kaleid/kernel/init/.placeholder
deleted file mode 100644
index e69de29..0000000
diff --git a/build/obj/kaleid/kernel/io/.placeholder b/build/obj/kaleid/kernel/io/.placeholder
deleted file mode 100644
index e69de29..0000000
diff --git a/build/obj/kaleid/kernel/ke/.placeholder b/build/obj/kaleid/kernel/ke/.placeholder
deleted file mode 100644
index e69de29..0000000
diff --git a/build/obj/kaleid/test/.placeholder b/build/obj/kaleid/test/.placeholder
deleted file mode 100644
index e69de29..0000000
diff --git a/build/preproc.h b/build/preproc.h
deleted file mode 100644
index 746bd2c..0000000
--- a/build/preproc.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// be careful with this file
-
-#ifdef _TESTS
-# define CCC TCC
-#else
-# define CCC KCC
-#endif
-
-#ifdef _TO_ASM
-# define _CSPREF -S
-# define _OUTFIX S
-# define _ASMTYPE -masm=intel
-# define LINK_KERNEL(out)
-#else
-# define _CSPREF -c
-# define _OUTFIX o
-# define _ASMTYPE
-# define LINK_KERNEL(out) $(KCC) -T ./build/kernel.ld $(CLDSCR) $(COMMOBJS) $(KERNOBJS) -o $(BINDIR)/out
-#endif
-
-#define COMPILE_CONVRT1(file) $(CCC) _CSPREF $(COMMDIR)/itoa.c -o $(COBJDIR)/file._OUTFIX
-#define COMPILE_CONVRT2(file) $(CCC) _CSPREF $(COMMDIR)/atoi.c -o $(COBJDIR)/file._OUTFIX
-
-#define COMPILE_COMMON(file) $(CCC) _CSPREF $(COMMDIR)/file.c -o $(COBJDIR)/file._OUTFIX
-#define COMPILE_KERNEL(file) $(KCC) _CSPREF $(KERNDIR)/file.c -o $(KOBJDIR)/file._OUTFIX
-
-#define COBJ1(x1) $(COBJDIR)/x1.o
-#define COBJ2(x1,x2) COBJ1(x1) $(COBJDIR)/x2.o
-#define COBJ3(x1,x2,x3) COBJ2(x1,x2) $(COBJDIR)/x3.o
-#define COBJ4(x1,x2,x3,x4) COBJ3(x1,x2,x3) $(COBJDIR)/x4.o
-#define COBJ5(x1,x2,x3,x4,x5) COBJ4(x1,x2,x3,x4) $(COBJDIR)/x5.o
-#define COBJ6(x1,x2,x3,x4,x5,x6) COBJ5(x1,x2,x3,x4,x5) $(COBJDIR)/x6.o
-#define COBJ7(x1,x2,x3,x4,x5,x6,x7) COBJ6(x1,x2,x3,x4,x5,x6) $(COBJDIR)/x7.o
-#define COBJ8(x1,x2,x3,x4,x5,x6,x7,x8) COBJ7(x1,x2,x3,x4,x5,x6,x7) $(COBJDIR)/x8.o
-
-#define KOBJ1(x1) $(KOBJDIR)/x1.o
-#define KOBJ2(x1,x2) KOBJ1(x1) $(KOBJDIR)/x2.o
-#define KOBJ3(x1,x2,x3) KOBJ2(x1,x2) $(KOBJDIR)/x3.o
-#define KOBJ4(x1,x2,x3,x4) KOBJ3(x1,x2,x3) $(KOBJDIR)/x4.o
-#define KOBJ5(x1,x2,x3,x4,x5) KOBJ4(x1,x2,x3,x4) $(KOBJDIR)/x5.o
-#define KOBJ6(x1,x2,x3,x4,x5,x6) KOBJ5(x1,x2,x3,x4,x5) $(KOBJDIR)/x6.o
-#define KOBJ7(x1,x2,x3,x4,x5,x6,x7) KOBJ6(x1,x2,x3,x4,x5,x6) $(KOBJDIR)/x7.o
-#define KOBJ8(x1,x2,x3,x4,x5,x6,x7,x8) KOBJ7(x1,x2,x3,x4,x5,x6,x7) $(KOBJDIR)/x8.o
-
diff --git a/kaleid/include/kernel/cpu.h b/kaleid/include/kernel/cpu.h
new file mode 100644
index 0000000..f347d99
--- /dev/null
+++ b/kaleid/include/kernel/cpu.h
@@ -0,0 +1,29 @@
+//----------------------------------------------------------------------------//
+// GNU GPL OS/K //
+// //
+// Desc: CPU related functions //
+// //
+// //
+// Copyright © 2018-2019 The OS/K Team //
+// //
+// This file is part of OS/K. //
+// //
+// OS/K is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// any later version. //
+// //
+// OS/K is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY//without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with OS/K. If not, see . //
+//----------------------------------------------------------------------------//
+
+#define cpuid(in, a, b, c, d) asm("cpuid" \
+ : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
+ : "a" (in) \
+ );
+
diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h
new file mode 100644
index 0000000..95971fe
--- /dev/null
+++ b/kaleid/include/kernel/mm.h
@@ -0,0 +1,23 @@
+//----------------------------------------------------------------------------//
+// GNU GPL OS/K //
+// //
+// Desc: Memory related functions //
+// //
+// //
+// Copyright © 2018-2019 The OS/K Team //
+// //
+// This file is part of OS/K. //
+// //
+// OS/K is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// any later version. //
+// //
+// OS/K is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY//without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with OS/K. If not, see . //
+//----------------------------------------------------------------------------//
diff --git a/kaleid/kernel/cpu/cpuid.c b/kaleid/kernel/cpu/cpuid.c
new file mode 100644
index 0000000..ef8b36a
--- /dev/null
+++ b/kaleid/kernel/cpu/cpuid.c
@@ -0,0 +1,25 @@
+//----------------------------------------------------------------------------//
+// GNU GPL OS/K //
+// //
+// Desc: CPU detection //
+// //
+// //
+// Copyright © 2018-2019 The OS/K Team //
+// //
+// This file is part of OS/K. //
+// //
+// OS/K is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// any later version. //
+// //
+// OS/K is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY//without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with OS/K. If not, see . //
+//----------------------------------------------------------------------------//
+
+int stub;
diff --git a/build/obj/kaleid/crtlib/test/.placeholder b/kaleid/kernel/mm/.placeholder
similarity index 100%
rename from build/obj/kaleid/crtlib/test/.placeholder
rename to kaleid/kernel/mm/.placeholder