From 907949305dd75e2b66e0e7ee96365a2b4fd1de7c Mon Sep 17 00:00:00 2001 From: xamidev Date: Wed, 7 Aug 2024 22:52:44 +0200 Subject: [PATCH] Switch to cross-compiling (to enable using other libs like va_args and maybe fix the printf %f specifier so the math interpreter could work??) --- .gitignore | 1 + README.md | 6 ++++++ iso/boot/kernel.elf | Bin 31112 -> 30312 bytes makefile | 4 ++-- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 5266f2b..41b32c3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ kernel.elf os.iso blankos.iso real/ +i386-elf-7.5.0-Linux-x86_64/ diff --git a/README.md b/README.md index fca460d..d4b8286 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,12 @@ git clone https://aur.archlinux.org/bochs.git Then follow [these](https://bbs.archlinux.org/viewtopic.php?id=178479) instructions to compile Bochs with X support. Alternatively you can use Bochs with SDL but you'll have to change the `bochsrc.txt` file accordingly. +### Cross Compiler + +A cross-compiler is needed to build the system. More info on why [here](https://wiki.osdev.org/GCC_Cross-Compiler). In order for the build to work, you will need to download the i386-elf toolchain from [here](https://newos.org/toolchains/i386-elf-7.5.0-Linux-x86_64.tar.xz) and extract the root folder into the BlankOS root folder, or build it by youself if you're not lazy like me. + +Why didn't I use one sooner? Can't tell. Maybe I was too lazy. This is actually problematic because I wasn't able to use some libraries and I had to put in a bunch of weird compilation flags. It's better like this. + ## Building and running ``` diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 51c05f1b61cdf3f335a9bffb5daa2a9d4cb30188..ef91c7e0f6ef6730be5a95475c0756bfb93e1e71 100755 GIT binary patch literal 30312 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 IxEXT)8&3#K^Z)<= literal 31112 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