Switched the makefile to use `clang` as the default compiler, enhancing portability and potentially optimizing the build process. New implementations of `abs`, `strcpy`, and `strcmp` provide foundational C library support. Enhanced text and line rendering in the graphics subsystem with the inclusion of STB's easy font printing library, facilitating on-screen debug message display. Memory management functions `malloc` and `free` have been introduced, paving the way for dynamic memory allocation. Accompanying test cases for memory operations validate basic functionality and robustness of the new implementations. The adjustment and enablement of compiler flags further tailor the compilation process to the system's requirements.
Introduced the STB (Sean Barrett's libraries) submodule to handle different utilities such as image loading and text rendering. The necessary makefile adjustments have been made to include this third-party library. Separated memory management functions into a new `memory.c` file to clean up `kernel.c`. Defined a basic `draw_text` function as a placeholder in `fonts.c` to set up the text rendering functionality. This change lays the groundwork for enhanced graphical capabilities in the console, utilizing STB for fonts and other graphical tasks.
Included are forward declarations and initial integration into the build system, as well as function stubs and associated header files. This refactor promotes modular code organization and paves the way for future graphical feature implementations, although the `draw_text` function is currently non-operative and serves as a template for future development.
Note: SSE and SSE2 optimizations have been re-commented out within the makefile, suggesting a decision to possibly defer or revisit this optimization approach.
Migrated Limine bootloader to a git submodule, ensuring consistent and easy updates alongside source versioning. Removed explicit bootloader files from version control in favor of submodule structure. Cleaned up makefile targets to integrate submodule initialization and limine build process, stepping towards better build reproducibility. In the build system, 'submodules' target is added to ensure submodules are properly initialized, which is now a prerequisite for 'bin/$(KERNEL)' target, as well as for ISO and HDD image creation.
Additionally, streamlined the gitignore file to retain the iso_root directory while excluding generated image files and the previously tracked 'limine' directory. Minor whitespace cleanup in GNUmakefile enhances readability and maintains consistency. Included fonts module directly in source files to support future graphics handling and replaced a placeholder hang function with a framebuffer write operation in the kernel startup code, setting the foundation for further development of graphics rendering.