Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Zealbooter to Limine 8.x and backport template changes #160

Merged
merged 2 commits into from
Aug 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build/build-iso.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ umount_tempdisk
echo "Rebuilding kernel headers, kernel, OS, and building Distro ISO ..."
$QEMU_BIN_PATH/qemu-system-x86_64 -machine q35 $KVM -drive format=raw,file=$TMPDISK -m 1G -rtc base=localtime -smp 4 -device isa-debug-exit $QEMU_HEADLESS

LIMINE_BINARY_BRANCH="v6.x-branch-binary"
LIMINE_BINARY_BRANCH="v8.x-binary"

if [ -d "limine" ]
then
Expand Down Expand Up @@ -110,7 +110,7 @@ sudo cp limine/limine-uefi-cd.bin $TMPISODIR/Boot/Limine-UEFI-CD.BIN
sudo cp limine/limine-bios-cd.bin $TMPISODIR/Boot/Limine-BIOS-CD.BIN
sudo cp limine/limine-bios.sys $TMPISODIR/Boot/Limine-BIOS.SYS
sudo cp ../zealbooter/bin/kernel $TMPISODIR/Boot/ZealBooter.ELF
sudo cp ../zealbooter/Limine.CFG $TMPISODIR/Boot/Limine.CFG
sudo cp ../zealbooter/limine.conf $TMPISODIR/Boot/Limine.CONF
echo "Copying DVDKernel.ZXE over ISO Boot/Kernel.ZXE ..."
sudo mv $TMPMOUNT/Tmp/DVDKernel.ZXE $TMPISODIR/Boot/Kernel.ZXE
sudo rm $TMPISODIR/Tmp/DVDKernel.ZXE 2> /dev/null
Expand Down
2 changes: 1 addition & 1 deletion src/Kernel/KGlobals.ZC
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ U8 *rev_bits_table; //Table with U8 bits reversed
CDate local_time_offset;
F64 *pow10_I64,
sys_os_version = 2.03;
U64 sys_os_version_sub = 117;
U64 sys_os_version_sub = 118;
U8 *sys_os_version_str;
U8 *sys_os_version_full;
U8 *sys_os_version_nice;
Expand Down
2 changes: 1 addition & 1 deletion src/Kernel/KernelA.HH
Original file line number Diff line number Diff line change
Expand Up @@ -3026,7 +3026,7 @@ class CAtapiModeWriteList
#define FILEMASK_AOT "*.ZC*;*.HH*;*.PRJ*"
#define FILEMASK_SRC "*.ZC*;*.HH*;*.IN*;*.PRJ*"
#define FILEMASK_DD FILEMASK_SRC ";*.DD*"
#define FILEMASK_TXT FILEMASK_DD ";*.TXT*;*.CFG*"
#define FILEMASK_TXT FILEMASK_DD ";*.TXT*;*.CFG*;*.CONF*"
#define FILEMASK_GR "*.GR*"

#help_index "File/Low Level"
Expand Down
14 changes: 7 additions & 7 deletions src/Misc/OSInstall.ZC
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ U0 OSMerge(U8 dst_drv, U8 src_drv=':')
Del("B:/Misc/Bible.TXT"); // Deleting from B:/ prevents causing hang when merging large .TXT files,
Del("B:/Misc/Clementine.TXT"); // they will instead be copied over from boot drive in OSMergeInner

Del("B:/Boot/Limine.CFG"); // Delete to make merge output ignore (copy) this, since it gets regenerated later
Del("B:/Boot/Limine.CONF"); // Delete to make merge output ignore (copy) this, since it gets regenerated later

DocMax;

Expand All @@ -129,7 +129,7 @@ U0 OSMerge(U8 dst_drv, U8 src_drv=':')

ExePrint("Del(\"%C:/Boot/Limine-BIOS-CD.BIN\");", dst_drv);
ExePrint("Del(\"%C:/Boot/Limine-UEFI-CD.BIN\");", dst_drv);
ExePrint("Del(\"%C:/Boot/Limine.CFG\");", dst_drv);
ExePrint("Del(\"%C:/Boot/Limine.CONF\");", dst_drv);
ExePrint("Del(\"%C:/boot.catalog\");", dst_drv);

}
Expand Down Expand Up @@ -208,7 +208,7 @@ U0 OSUpgrade()
if (ch == 'Z')
{
BootMHDIns(drv_let);
"\n(Generating optional UEFI-mode Limine.CFG...)\n";
"\n(Generating optional UEFI-mode Limine.CONF...)\n";
LimineCFGMake(drv_let);
}
else
Expand Down Expand Up @@ -247,7 +247,7 @@ U0 InstallDrive(U8 drv_let)

ExePrint("Del(\"%C:/Boot/Limine-BIOS-CD.BIN\");", drv_let);
ExePrint("Del(\"%C:/Boot/Limine-UEFI-CD.BIN\");", drv_let);
ExePrint("Del(\"%C:/Boot/Limine.CFG\");", drv_let);
ExePrint("Del(\"%C:/Boot/Limine.CONF\");", drv_let);
ExePrint("Del(\"%C:/boot.catalog\");", drv_let);

ExePrint("DirMake(\"%C:/Tmp\");", drv_let);
Expand Down Expand Up @@ -351,7 +351,7 @@ U0 VMInstallWiz()
if (ch == 'Z')
{
BootMHDIns('C');
"\n(Generating optional UEFI-mode Limine.CFG...)\n";
"\n(Generating optional UEFI-mode Limine.CONF...)\n";
LimineCFGMake('C');
}
else
Expand Down Expand Up @@ -467,8 +467,8 @@ U0 RegularInstallWiz()
if (ch == 'Z')
{
BootMHDIns(drv_let);
"\n(Generating optional UEFI-mode Limine.CFG...)\n";
LimineCFGMake(drv_let); // ensures we don't leave the LiveCD's Limine.CFG on the HDD
"\n(Generating optional UEFI-mode Limine.CONF...)\n";
LimineCFGMake(drv_let); // ensures we don't leave the LiveCD's Limine.CONF on the HDD
}
else
{
Expand Down
26 changes: 13 additions & 13 deletions src/System/Boot/LimineMHDIns.ZC
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@ U8 binary_limine_hdd_bin_data[0];

Bool LimineCFGMake(U8 drv_let)
{
U8 *filename_cfg = MStrPrint("%C:/Boot/Limine.CFG", drv_let);
U8 *filename_cfg = MStrPrint("%C:/Boot/Limine.CONF", drv_let);
CDoc *doc = DocNew(filename_cfg);
CDrive *drive;
CBlkDev *bd;
I64 i;
U8 *filename_sys, *filename_elf, *filename_zxe, *st;

"\nGenerating Limine.CFG ...\n";
"\nGenerating Limine.CONF ...\n";

DocPrint(doc,
"TIMEOUT=2\n"
"INTERFACE_RESOLUTION=1024x768\n\n");
"timeout: 2\n"
"interface_resolution: 1024x768\n\n");

"Searching drives for Limine bootloader files ...\n";
for (i = 0, drive = blkdev.drvs; i < DRIVES_NUM; i++, drive++)
Expand All @@ -39,15 +39,15 @@ Bool LimineCFGMake(U8 drv_let)
filename_zxe = MStrPrint("%C:/Boot/Kernel.ZXE", drv_let);
if (FileFind(filename_sys) && FileFind(filename_elf) && FileFind(filename_zxe))
{
st = MStrPrint(":ZealOS %C:/\n"
"PROTOCOL=limine\n"
"RESOLUTION=1024x768\n"
"KERNEL_PATH=boot://%d/Boot/ZealBooter.ELF\n"
"MODULE_PATH=boot://%d/Boot/Kernel.ZXE\n"
st = MStrPrint("/ZealOS %C:/\n"
"protocol: limine\n"
"resolution: 1024x768\n"
"kernel_path: boot(%d):/Boot/ZealBooter.ELF\n"
"module_path: boot(%d):/Boot/Kernel.ZXE\n"
"\n", drv_let, drive->prt_num + 1, drive->prt_num + 1);

DocPrint(doc, st);
"%C:/ drive added as a Limine.CFG menu entry.\n", drv_let;
"%C:/ drive added as a Limine.CONF menu entry.\n", drv_let;
}
else
"%C:/ drive is missing Limine bootloader files.\n", drv_let;
Expand All @@ -56,17 +56,17 @@ Bool LimineCFGMake(U8 drv_let)
DocWrite(doc);
DocDel(doc);

"/Boot/Limine.CFG generated.\n";
"/Boot/Limine.CONF generated.\n";

"Copying Limine.CFG to all other drives ...\n";
"Copying Limine.CONF to all other drives ...\n";
for (i = 0, drive = blkdev.drvs; i < DRIVES_NUM; i++, drive++)
{
if (drive->drive_signature == DRIVE_SIGNATURE_VAL && drive->fs_type == FSt_FAT32 && DriveIsWritable(drive->drv_let))
{
drv_let = Drive2Letter(drive);
if (FileFind(filename_sys) && FileFind(filename_elf) && FileFind(filename_zxe))
{
st = MStrPrint("%C:/Boot/Limine.CFG", drv_let);
st = MStrPrint("%C:/Boot/Limine.CONF", drv_let);
Copy(filename_cfg, st);
}
}
Expand Down
81 changes: 38 additions & 43 deletions zealbooter/GNUmakefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Nuke built-in rules and variables.
override MAKEFLAGS += -rR

# This is the name that our final kernel executable will have.
# This is the name that our final executable will have.
# Change as needed.
override KERNEL := kernel
override OUTPUT := kernel

# Convenience macro to reliably declare user overridable variables.
define DEFAULT_VAR =
Expand All @@ -15,43 +15,42 @@ define DEFAULT_VAR =
endif
endef

# It is suggested to use a custom built cross toolchain to build a kernel.
# We are using the standard "cc" here, it may work by using
# the host system's toolchain, but this is not guaranteed.
override DEFAULT_CC := cc
$(eval $(call DEFAULT_VAR,CC,$(DEFAULT_CC)))
# User controllable C compiler command.
override DEFAULT_KCC := cc
$(eval $(call DEFAULT_VAR,KCC,$(DEFAULT_KCC)))

# Same thing for "ld" (the linker).
override DEFAULT_LD := ld
$(eval $(call DEFAULT_VAR,LD,$(DEFAULT_LD)))
# User controllable linker command.
override DEFAULT_KLD := ld
$(eval $(call DEFAULT_VAR,KLD,$(DEFAULT_KLD)))

# User controllable C flags.
override DEFAULT_CFLAGS := -g -O2 -pipe
$(eval $(call DEFAULT_VAR,CFLAGS,$(DEFAULT_CFLAGS)))
override DEFAULT_KCFLAGS := -g -O2 -pipe
$(eval $(call DEFAULT_VAR,KCFLAGS,$(DEFAULT_KCFLAGS)))

# User controllable C preprocessor flags. We set none by default.
override DEFAULT_CPPFLAGS :=
$(eval $(call DEFAULT_VAR,CPPFLAGS,$(DEFAULT_CPPFLAGS)))
override DEFAULT_KCPPFLAGS :=
$(eval $(call DEFAULT_VAR,KCPPFLAGS,$(DEFAULT_KCPPFLAGS)))

# User controllable nasm flags.
override DEFAULT_NASMFLAGS := -F dwarf -g
$(eval $(call DEFAULT_VAR,NASMFLAGS,$(DEFAULT_NASMFLAGS)))
override DEFAULT_KNASMFLAGS := -F dwarf -g
$(eval $(call DEFAULT_VAR,KNASMFLAGS,$(DEFAULT_KNASMFLAGS)))

# User controllable linker flags. We set none by default.
override DEFAULT_LDFLAGS :=
$(eval $(call DEFAULT_VAR,LDFLAGS,$(DEFAULT_LDFLAGS)))
override DEFAULT_KLDFLAGS :=
$(eval $(call DEFAULT_VAR,KLDFLAGS,$(DEFAULT_KLDFLAGS)))

# Internal C flags that should not be changed by the user.
override CFLAGS += \
override KCFLAGS += \
-Wall \
-Wextra \
-std=gnu11 \
-ffreestanding \
-fno-stack-protector \
-fno-stack-check \
-fno-lto \
-fno-PIE \
-fno-PIC \
-ffunction-sections \
-fdata-sections \
-m64 \
-march=x86-64 \
-mno-80387 \
Expand All @@ -62,68 +61,64 @@ override CFLAGS += \
-mcmodel=kernel

# Internal C preprocessor flags that should not be changed by the user.
override CPPFLAGS := \
override KCPPFLAGS := \
-I src \
-I src/lib \
$(CPPFLAGS) \
$(KCPPFLAGS) \
-MMD \
-MP

# Internal nasm flags that should not be changed by the user.
override KNASMFLAGS += \
-Wall \
-f elf64

# Internal linker flags that should not be changed by the user.
override LDFLAGS += \
override KLDFLAGS += \
-m elf_x86_64 \
-nostdlib \
-static \
-z max-page-size=0x1000 \
-gc-sections \
-T linker.ld

# Check if the linker supports -no-pie and enable it if it does.
ifeq ($(shell $(LD) --help 2>&1 | grep 'no-pie' >/dev/null 2>&1; echo $$?),0)
override LDFLAGS += -no-pie
endif

# Internal nasm flags that should not be changed by the user.
override NASMFLAGS += \
-Wall \
-f elf64

# Use "find" to glob all *.c, *.S, and *.asm files in the tree and obtain the
# object and header dependency file names.
override CFILES := $(shell cd src && find -L . -type f -name '*.c')
override ASFILES := $(shell cd src && find -L . -type f -name '*.S')
override NASMFILES := $(shell cd src && find -L . -type f -name '*.asm')
override CFILES := $(shell cd src && find -L * -type f -name '*.c' | LC_ALL=C sort)
override ASFILES := $(shell cd src && find -L * -type f -name '*.S' | LC_ALL=C sort)
override NASMFILES := $(shell cd src && find -L * -type f -name '*.asm' | LC_ALL=C sort)
override OBJ := $(addprefix obj/,$(CFILES:.c=.c.o) $(ASFILES:.S=.S.o) $(NASMFILES:.asm=.asm.o))
override HEADER_DEPS := $(addprefix obj/,$(CFILES:.c=.c.d) $(ASFILES:.S=.S.d))

# Default target.
.PHONY: all
all: bin/$(KERNEL)
all: bin/$(OUTPUT)

src/limine.h:
curl -Lo $@ https://github.com/limine-bootloader/limine/raw/trunk/limine.h || cp ../build/limine/limine.h src/limine.h || echo "ERROR"

# Link rules for the final kernel executable.
bin/$(KERNEL): GNUmakefile linker.ld $(OBJ)
# Link rules for the final executable.
bin/$(OUTPUT): GNUmakefile linker.ld $(OBJ)
mkdir -p "$$(dirname $@)"
$(LD) $(OBJ) $(LDFLAGS) -o $@
$(KLD) $(OBJ) $(KLDFLAGS) -o $@

# Include header dependencies.
-include $(HEADER_DEPS)

# Compilation rules for *.c files.
obj/%.c.o: src/%.c GNUmakefile src/limine.h
mkdir -p "$$(dirname $@)"
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
$(KCC) $(KCFLAGS) $(KCPPFLAGS) -c $< -o $@

# Compilation rules for *.S files.
obj/%.S.o: src/%.S GNUmakefile src/limine.h
mkdir -p "$$(dirname $@)"
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
$(KCC) $(KCFLAGS) $(KCPPFLAGS) -c $< -o $@

# Compilation rules for *.asm (nasm) files.
obj/%.asm.o: src/%.asm GNUmakefile
mkdir -p "$$(dirname $@)"
nasm $(NASMFLAGS) $< -o $@
nasm $(KNASMFLAGS) $< -o $@

# Remove object files and the final executable.
.PHONY: clean
Expand Down
8 changes: 0 additions & 8 deletions zealbooter/Limine.CFG

This file was deleted.

8 changes: 8 additions & 0 deletions zealbooter/limine.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
timeout: 2
interface_resolution: 1024x768

/ZealOS LiveCD
protocol: limine
resolution: 1024x768
kernel_path: boot():/Boot/ZealBooter.ELF
module_path: boot():/Boot/Kernel.ZXE
Loading
Loading