# Fennix Project

#### Operating System from scratch made in C and C++

# About

Hello!
This is my Operating System from scratch, my goal is to make a fully functional Operating System with a GUI and a lot of features.
I'm working on this project alone, but I'm open to any kind of help, if you want to help me, you can contribute to the project on GitHub.
I have a Discord server too →

# Compiling Instructions

## Requirements

First of all, you need to install the required packages to build the cross-compiler, bootloader, OS, etc.

• Ubuntu 22.04
For cross-compiler:
`sudo apt install build-essential bison flex libgmp3-dev libmpc-dev libmpfr-dev texinfo libzstd-dev libisl-dev autoconf m4 automake gettext gperf dejagnu guile-3.0 guile-3.0-dev expect tcl autogen tex-common sphinx-common git ssh diffutils patch`
For bootloader:
`sudo apt-get install make gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 mingw-w64`
For QEMU you'll have to follow this page here
For OS:
`sudo apt-get install xorriso mtools genisoimage ovmf nasm doxygen`

## Building The Cross-Compiler

The cross-compiler is used to compile the OS, the bootloader and the kernel.

All you have to do is to write this command in the terminal:
`make tools`
You'll have to wait a while, but when it's done, you can jump to the next step.

## Configuring your kernel

If you want to build different architecture, use other QEMU binary or change kernel name you can find in `Makefile.conf` file.

`DEBUG` • If it's set to `1`, the kernel will be compiled in debug mode.
`OSNAME` • The name of the kernel. This can be anything.
`OSARCH` • The architecture of the kernel. Supported values are: `amd64` `i686` `aarch64`.
`KERNEL_VERSION` • The version of the kernel. This can be anything.
`BOOTLOADER` • The bootloader to be used. If set to `other`, the bootloader will be Limine for 64-bit, or with GRUB if 32-bit. `lynx` it's still under development.
`COMPILER_PATH` • The path of the cross compiler. If you want to use your own cross compiler, change it to the path of the compiler.
`LIMINE_FOLDER` • The path of the Limine bootloader.
`QEMU_PATH` • Qemu path. If you want to use the one you have installed in your system, change it to /usr/bin/qemu-system- (do not include x86_64 or i386, it will be added automatically)
`UNIT_TESTS` • Enable unit testing.
That's all you can change in this file.

## Building The Operating System

The fun part!

Now that you have the cross-compiler, you can build the OS.
There are a few commands that you can use to compile the OS:
`make build` • Builds the entire OS and creates an ISO image.
`make run` • Same as `make build` but runs the QEMU too.
`make clean` • Clean all files (object files, ISO, etc...).
`make doxygen` • Generate the documentation in directory `doxygen-doc`.

# Running With Other Virtual Machines

• On VirtualBox and VMware, you can use the ISO image to run the OS.
• HDD/SSD are not required.
• The minimum RAM required is 4G. You can run with lower memory, but sometimes can cause issues (I don't know why).
• UEFI required. BIOS sometimes doesn't work properly.
• Serial Port (COM1) is recommended.

# Reporting Issues

You can report bugs or crash issues to Issues tab.