diff options
| author | Aleksa Vučković <aleksav013@gmail.com> | 2022-05-01 15:22:15 +0200 |
|---|---|---|
| committer | Aleksa Vučković <aleksav013@gmail.com> | 2022-05-01 15:22:15 +0200 |
| commit | a5f0c5c71a5e50ddf418d58d8a3115bbcaca0538 (patch) | |
| tree | d681e6f882ec5a63da7fab987f0641fc2287b6bf | |
| parent | 149dac1314e474524af0494e4c74536b7bd76f9d (diff) | |
Added Makefile & aleksa-toolchain setup.sh
| -rw-r--r-- | include/00.build/Makefile | 98 | ||||
| -rwxr-xr-x | include/00.build/setup.sh | 142 | ||||
| -rwxr-xr-x | include/setup.sh | 7 | ||||
| -rw-r--r-- | kernel.pdf | bin | 461289 -> 466417 bytes | |||
| -rw-r--r-- | kernel.tex | 4 |
5 files changed, 249 insertions, 2 deletions
diff --git a/include/00.build/Makefile b/include/00.build/Makefile new file mode 100644 index 0000000..03b5c11 --- /dev/null +++ b/include/00.build/Makefile @@ -0,0 +1,98 @@ +# HOST ARCH +ARCH=i686-aleksa- + + +# GCC CROSS COMPILER +export CC=$(ARCH)gcc +export AS=$(ARCH)as + +WARNINGS := -Wall -Wextra -pedantic -Wshadow -Wpointer-arith -Wcast-align \ + -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations \ + -Wredundant-decls -Wnested-externs -Winline -Wno-long-long \ + -Wconversion -Wstrict-prototypes + +export CFLAGS=-std=gnu99 -O3 $(WARNINGS) -ffreestanding -fstack-protector-all + + +# TOOLS +export MKDIR=mkdir -p +export RM=rm -rf +export CP=cp -r +QEMU=qemu-system-i386 + + + +# DIRS + +## SOURCE +SOURCE_DIR=src + +## BUILD +ISO_DIR=isodir +BUILD_DIR=${CURDIR}/build +export AS_OBJECT_DIR=$(BUILD_DIR)/as +export C_OBJECT_DIR=$(BUILD_DIR)/c + +## GCC USR +GCC_USR_DIR=$(shell $(CC) -print-file-name=) + + + +# TARGET +TARGET=myos +BINARY=$(BUILD_DIR)/$(TARGET).bin +ISO=$(TARGET).iso + + + +# OBJECTS + +## AS OBJECTS +AS_OBJ=boot.o ioport.o gdt.o idt.o irq.o paging.o +export AS_OBJECTS=$(patsubst %,$(AS_OBJECT_DIR)/%,$(AS_OBJ)) + +## C OBJECTS +C_OBJ=gdt.o heap.o idt.o kernel.o keyboard.o keymap.o stdio.o string.o tty.o vga.o irq_handler.o stack_protector.o timer.o paging.o +export C_OBJECTS=$(patsubst %,$(C_OBJECT_DIR)/%,$(C_OBJ)) + +## ALL OBJECTS IN ORDER +OBJ=$(GCC_USR_DIR)crti.o $(GCC_USR_DIR)crtbegin.o $(AS_OBJECTS) $(C_OBJECTS) $(GCC_USR_DIR)crtend.o $(GCC_USR_DIR)crtn.o + + + +# OTHER FILES +LINKER=$(SOURCE_DIR)/linker.ld +GRUB.CFG=$(SOURCE_DIR)/grub.cfg + + +# RULES +.PHONY: all compile run run-iso clean install_headers +all: compile + +$(BINARY): $(OBJ) + $(CC) -T $(LINKER) -o $(BINARY) $(CFLAGS) -nostdlib -lgcc $(OBJ) + +install_headers: + ./scripts/install_headers.sh + +compile: + $(MAKE) install_headers + @$(MAKE) --directory $(SOURCE_DIR) + $(MAKE) $(BINARY) + +$(ISO): $(BINARY) + grub-file --is-x86-multiboot $(BINARY) + $(MKDIR) $(ISO_DIR)/boot/grub + $(CP) $(BINARY) $(ISO_DIR)/boot/$(TARGET).bin + $(CP) $(GRUB.CFG) $(ISO_DIR)/boot/grub/grub.cfg + grub-mkrescue -o $(ISO) $(ISO_DIR) + +run: compile + $(QEMU) -kernel $(BINARY) $(QEMU_DEBUG) + +run-iso: compile + $(MAKE) $(ISO) + $(QEMU) -cdrom $(ISO) + +clean: + $(RM) $(BUILD_DIR) $(ISO_DIR) $(ISO) diff --git a/include/00.build/setup.sh b/include/00.build/setup.sh new file mode 100755 index 0000000..86cf20f --- /dev/null +++ b/include/00.build/setup.sh @@ -0,0 +1,142 @@ +#!/bin/sh + +SYSROOT=/opt/aleksa + +BINUTILS=binutils-2.37 +GCC=gcc-11.2.0 + + +download() +{ + if [ ! -f "./$BINUTILS.tar.gz" ]; then + wget "https://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.gz" + fi + + if [ ! -f "./$GCC.tar.gz" ]; then + wget "https://ftp.gnu.org/gnu/gcc/$GCC/$GCC.tar.gz" + fi +} + +extract() +{ + if [ ! -d "$BINUTILS" ]; then + tar xzvf "$BINUTILS.tar.gz" + fi + + if [ ! -d "$GCC" ]; then + tar xzvf "$GCC.tar.gz" + fi +} + +patch_gnu() +{ + mkdir -p "mine" + cd "mine" || exit + + if [ ! -d "$BINUTILS" ]; then + cp -rv "../$BINUTILS" . + patch -p0 < "../files/aleksa-$BINUTILS.diff" + cd "$BINUTILS/ld" || exit + sed -i "s/2.69/2.71/" "Makefile.am" + aclocal + automake + cd "../.." + fi + + if [ ! -d "$GCC" ]; then + cp -rv "../$GCC" . + patch -p0 < "../files/aleksa-$GCC.diff" + cd "$GCC/libstdc++-v3" || exit + sed -i "s/2.69/2.71/" "../config/override.m4" + autoreconf + cd "../.." + fi + + cd ".." +} + +install_headers() +{ + if [ -d "mykernel" ]; then + cd "mykernel" || exit + git pull + cd ".." + else + git clone "https://github.com/aleksav013/mykernel" + fi + + cd "mykernel" || exit + ./scripts/install_headers.sh + cd ".." +} + +build_binutils() +{ + cd "./mine/$BINUTILS" || exit + + mkdir -p build + cd build || exit + + if [ ! -f Makefile ]; then + ../configure --target=i686-aleksa \ + --prefix="$SYSROOT/usr" \ + --with-sysroot="$SYSROOT" \ + --disable-nls + fi + + make -j4 + make install + + cd "../../.." +} + +build_gcc() +{ + cd "./mine/$GCC" || exit + + mkdir -p build + cd build || exit + + if [ ! -f Makefile ]; then + ../configure --target=i686-aleksa \ + --prefix="$SYSROOT/usr" \ + --with-sysroot="$SYSROOT" \ + --disable-nls \ + --disable-plugin \ + --enable-languages=c,c++ + fi + + make -j4 all-gcc all-target-libgcc + make -k check || true + make install-gcc install-target-libgcc + + cd "../../.." +} + +setup_compiler() +{ + if [ -d "mykernel" ]; then + cd "mykernel" || exit + git pull + cd ".." + else + git clone "https://github.com/aleksav013/mykernel" + fi + + cd "mykernel" || exit + ./scripts/setup_compiler.sh + cd ".." +} + +main() +{ + download + extract + patch_gnu + build_binutils + install_headers + build_gcc + setup_compiler +} + +main diff --git a/include/setup.sh b/include/setup.sh index 26c70dc..d3227df 100755 --- a/include/setup.sh +++ b/include/setup.sh @@ -1,8 +1,11 @@ #!/bin/sh -rm -rf "01.pocetak" "02.vga" "03.gdt" "04.idt" "05.irq" "06.keyboard" "07.pit" "08.heap" "09.paging" "10.libc" +rm -rf "00.build" "01.pocetak" "02.vga" "03.gdt" "04.idt" "05.irq" "06.keyboard" "07.pit" "08.heap" "09.paging" "10.libc" -mkdir "01.pocetak" "02.vga" "03.gdt" "04.idt" "05.irq" "06.keyboard" "07.pit" "08.heap" "09.paging" "10.libc" +mkdir "00.build" "01.pocetak" "02.vga" "03.gdt" "04.idt" "05.irq" "06.keyboard" "07.pit" "08.heap" "09.paging" "10.libc" + +cp ../../aleksa-toolchain/setup.sh 00.build +cp ../../mykernel/Makefile ./00.build cp ../../mykernel/src/as/boot.s ./01.pocetak cd 01.pocetak || exit Binary files differ@@ -683,9 +683,13 @@ mnogo lakshim za odrzhavanje, ali i mnogo sigurnijim. \section{{\eng aleksa-toolchain}}
\medskip
+\begin{minipage}{\textwidth}\eng\lstinputlisting[language=sh,linerange={131-140}]{include/00.build/setup.sh}\srb\end{minipage}
+
\section{{\eng Makefile}}
\medskip
+\begin{minipage}{\textwidth}\eng\lstinputlisting[language=make,linerange={70-98}]{include/00.build/Makefile}\srb\end{minipage}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
