diff options
author | Danny Holman <dholman@gymli.org> | 2025-08-28 08:36:42 -0500 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2025-08-28 08:36:42 -0500 |
commit | a3085f5b9309c659c58282b4e50d955dcb0c0b7f (patch) | |
tree | 0b41f921d7d4e40b96392149be291542648e1f68 /bootstrap | |
parent | bootstrap: create build files (diff) | |
download | box-a3085f5b9309c659c58282b4e50d955dcb0c0b7f.tar.gz box-a3085f5b9309c659c58282b4e50d955dcb0c0b7f.tar.zst box-a3085f5b9309c659c58282b4e50d955dcb0c0b7f.zip |
Update the build configuration files for the included bootloader to
match the formatting requirements of the main build configs.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'bootstrap')
-rw-r--r-- | bootstrap/Makefile | 34 | ||||
-rw-r--r-- | bootstrap/stage1/Makefile | 59 | ||||
-rw-r--r-- | bootstrap/stage1/arch/x86_64/efi/entry.s | 25 | ||||
-rw-r--r-- | bootstrap/stage1/arch/x86_64/efi/make.config | 5 | ||||
-rw-r--r-- | bootstrap/stage1/arch/x86_64/make.conf | 27 | ||||
-rw-r--r-- | bootstrap/stage1/efi/Makefile | 49 | ||||
-rw-r--r-- | bootstrap/stage1/firmware/efi/make.conf | 14 | ||||
-rw-r--r-- | bootstrap/stage2/Makefile | 82 | ||||
-rw-r--r-- | bootstrap/stage2/arch/x86_64/linker.ld | 2 | ||||
-rw-r--r-- | bootstrap/stage2/arch/x86_64/make.conf | 5 | ||||
-rw-r--r-- | bootstrap/stage2/arch/x86_64/make.config | 6 |
11 files changed, 159 insertions, 149 deletions
diff --git a/bootstrap/Makefile b/bootstrap/Makefile index 92f4c3e..665a26d 100644 --- a/bootstrap/Makefile +++ b/bootstrap/Makefile @@ -1,16 +1,38 @@ +# Copyright (C) 2025 Danny Holman <dholman@gymli.org> +# +# This file is part of BoxOS, a free and open-source Unix-like operating +# system. +# +# BoxOS is free software; you can redistribute it and/or modify under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# BoxOS is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# BoxOS; if not, see <https://www.gnu.org/licenses/>. + +include $(ROOTDIR)/build.conf + +ifeq ($(BS_DEBUG),YES) + AFLAGS+=-g + CFLAGS+=-g +endif + +export VERSION ROOTDIR DESTDIR AFLAGS CFLAGS + SUBDIRS:=stage1 \ stage2 \ -export ARCH VERSION DESTDIR SYS_INCLUDE - -.PHONY: all clean $(SUBDIRS) +.PHONY: all clean install $(SUBDIRS) all: $(SUBDIRS) -subdirs: $(SUBDIRS) - $(SUBDIRS): - $(MAKE) $(MAKECMDGOALS) -C $@ + $(MAKE) -j $(JOBS) $(MAKECMDGOALS) -C $@ clean: $(SUBDIRS) diff --git a/bootstrap/stage1/Makefile b/bootstrap/stage1/Makefile index b09f1ad..7c3bf81 100644 --- a/bootstrap/stage1/Makefile +++ b/bootstrap/stage1/Makefile @@ -1,16 +1,57 @@ -SUBDIRS:=efi \ +# Copyright (C) 2025 Danny Holman <dholman@gymli.org> +# +# This file is part of BoxOS, a free and open-source Unix-like operating +# system. +# +# BoxOS is free software; you can redistribute it and/or modify under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# BoxOS is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# BoxOS; if not, see <https://www.gnu.org/licenses/>. -export ARCH VERSION DESTDIR SYS_INCLUDE +include $(ROOTDIR)/common.mk -.PHONY: all clean $(SUBDIRS) +INCLUDE+=-I$(ARCHDIR)/include -Iinclude -I$(ROOTDIR)kernel/include -I$(ROOTDIR)kernel/arch/$(ARCH)/include +CFLAGS+=-ffreestanding -fno-stack-protector $(BS_OPLVL) -all: $(SUBDIRS) +BINARY=bootstrap-stage1 -subdirs: $(SUBDIRS) +include $(ARCHDIR)/make.conf +FIRMWARE_DIR=firmware/$(FIRMWARE) +include $(FIRMWARE_DIR)/make.conf +COMMON_DIR=firmware/common -$(SUBDIRS): - $(MAKE) $(MAKECMDGOALS) -C $@ +COMMON_OBJS=$(COMMON_DIR)/bprintf.o \ + $(COMMON_DIR)/elf_load.o \ + $(COMMON_DIR)/exception.o \ + $(COMMON_DIR)/rescue.o \ + $(COMMON_DIR)/string.o \ -clean: $(SUBDIRS) +OBJS=$(ARCH_OBJS) \ + $(COMMON_OBJS) \ + $(FIRMWARE_OBJS) \ -install: $(SUBDIRS) +.PHONY: all clean install + +all: $(BINARY) + +$(BINARY): $(OBJS) + @$(LD) $(LDFLAGS) $^ + +%.o: %.c + @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) + @echo [CC] $@ + +%.o: %.s + @$(CC) -c $< -o $@ $(AFLAGS) $(INCLUDE) + +clean: + $(RM) $(BINARY) $(OBJS) $(OBJS:.o=.d) + +-include $(OBJS:.o=.d) diff --git a/bootstrap/stage1/arch/x86_64/efi/entry.s b/bootstrap/stage1/arch/x86_64/efi/entry.s deleted file mode 100644 index 411a9b2..0000000 --- a/bootstrap/stage1/arch/x86_64/efi/entry.s +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2025 Danny Holman <dholman@gymli.org> - * - * This file is part of BoxOS, a free and open-source Unix-like operating - * system. - * - * BoxOS is free software; you can redistribute it and/or modify under the - * terms of the GNU General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * BoxOS is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * BoxOS; if not, see <https://www.gnu.org/licenses/>. - */ - -.section .text - -.global _uefi_start -_uefi_start: - call efi_main - ret diff --git a/bootstrap/stage1/arch/x86_64/efi/make.config b/bootstrap/stage1/arch/x86_64/efi/make.config deleted file mode 100644 index eea15d2..0000000 --- a/bootstrap/stage1/arch/x86_64/efi/make.config +++ /dev/null @@ -1,5 +0,0 @@ -STAGE1_ARCH_INCLUDE=-I$(ARCHDIR)/include -STAGE1_ARCH_CFLAGS=-target x86_64-pc-win32-coff -STAGE1_ARCH_LDFLAGS= - -STAGE1_ARCH_OBJS=$(ARCHDIR)/entry.o \ diff --git a/bootstrap/stage1/arch/x86_64/make.conf b/bootstrap/stage1/arch/x86_64/make.conf new file mode 100644 index 0000000..ec364c7 --- /dev/null +++ b/bootstrap/stage1/arch/x86_64/make.conf @@ -0,0 +1,27 @@ +# Copyright (C) 2025 Danny Holman <dholman@gymli.org> +# +# This file is part of BoxOS, a free and open-source Unix-like operating +# system. +# +# BoxOS is free software; you can redistribute it and/or modify under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# BoxOS is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# BoxOS; if not, see <https://www.gnu.org/licenses/>. + +INCLUDE+=-I$(ARCHDIR)/include +AFLAGS+=-target $(ARCH)-pc-win32-coff +CFLAGS+=-mno-red-zone -mno-mmx -mno-sse -mno-sse2 -target $(ARCH)-pc-win32-coff +LDFLAGS+=-entry:_start + +ARCH_OBJS=$(ARCHDIR)/asm/entry.o \ + $(ARCHDIR)/asm/__chkstk.o \ + $(ARCHDIR)/asm/paging.o \ + $(ARCHDIR)/paging.o \ + $(ARCHDIR)/serial.o \ diff --git a/bootstrap/stage1/efi/Makefile b/bootstrap/stage1/efi/Makefile deleted file mode 100644 index b1a96ef..0000000 --- a/bootstrap/stage1/efi/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -INCLUDE?=-I$(ROOTDIR)kernel/arch/$(ARCH)/include -CFLAGS?=-O0 -fno-stack-protector -ffreestanding -fno-builtin -nostdinc -nostdlib -LDFLAGS?=-subsystem:efi_application -entry:_uefi_start - -# -- Do not edit below this line -- - -LD:=lld-link -INCLUDE:=$(INCLUDE) $(SYS_INCLUDE) -CFLAGS:=$(CFLAGS) -Wall -Wextra -DVERSION=\"$(VERSION)\" -DARCH=\"$(ARCH)\" -g -LDFLAGS:=$(LDFLAGS) -ARCH:=$(ARCH) -EFI:=boot-stage1.efi - -ARCHDIR=../arch/$(ARCH)/efi - -include $(ARCHDIR)/make.config - -INCLUDE:=$(INCLUDE) $(STAGE1_ARCH_INCLUDE) -CFLAGS:=$(CFLAGS) $(STAGE1_ARCH_CFLAGS) -LDFLAGS:=$(LDFLAGS) $(STAGE1_ARCH_LDFLAGS) - -OBJS=$(STAGE1_ARCH_OBJS) \ - efi.o \ - -.PHONY: all clean install -.SUFFIXES: .o .c .s - -all: $(EFI) - -$(EFI): $(OBJS) - @$(LD) $(LDFLAGS) -out:$@ $^ - @echo [LD] $@ - -.c.o: - @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) -DVERSION=\"$(VERSION)\" - @echo [CC] $@ - -.s.o: - @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) -DVERSION=\"$(VERSION)\" - @echo [AS] $@ - -clean: - $(RM) $(EFI) $(EFI:.efi=.lib) $(OBJS) $(OBJS:.o=.d) - -install: $(EFI) - mkdir -p $(DESTDIR)$(BOOTDIR) - install -m 0755 $(EFI) $(DESTDIR)$(BOOTDIR)/$(EFI) - --include $(OBJS:.o=.d) diff --git a/bootstrap/stage1/firmware/efi/make.conf b/bootstrap/stage1/firmware/efi/make.conf new file mode 100644 index 0000000..3b1615e --- /dev/null +++ b/bootstrap/stage1/firmware/efi/make.conf @@ -0,0 +1,14 @@ +LD:=lld-link + +ifeq (BS_DEBUG,YES) + AFLAGS+=-gcodeview + CFLAGS+=-gcodeview +endif + +CFLAGS+=-fshort-wchar +LDFLAGS+=-subsystem:efi_application -out:$(BINARY) + +FIRMWARE_OBJS=$(FIRMWARE_DIR)/efi.o \ + $(FIRMWARE_DIR)/bs_alloc.o \ + $(FIRMWARE_DIR)/tty.o \ + $(FIRMWARE_DIR)/util.o \ diff --git a/bootstrap/stage2/Makefile b/bootstrap/stage2/Makefile index 938b5e8..2b3951d 100644 --- a/bootstrap/stage2/Makefile +++ b/bootstrap/stage2/Makefile @@ -1,48 +1,34 @@ -INCLUDE?=-Iinclude -I$(ROOTDIR)kernel/arch/$(ARCH)/include -CFLAGS?=-O0 -ffreestanding -std=gnu11 -fno-stack-protector -LDFLAGS?=-nostdlib - -# -- Do not edit below this line -- - -INCLUDE:=$(INCLUDE) $(SYS_INCLUDE) -CFLAGS:=$(CFLAGS) -Wall -Wextra -DVERSION=\"$(VERSION)\" -DARCH=\"$(ARCH)\" -g -LDFLAGS:=$(LDFLAGS) -ARCH:=$(ARCH) -ELF:=boot-stage2 - -ARCHDIR=arch/$(ARCH) - -include $(ARCHDIR)/make.config - -INCLUDE:=$(INCLUDE) $(STAGE2_ARCH_INCLUDE) -CFLAGS:=$(CFLAGS) $(STAGE2_ARCH_CFLAGS) -LDFLAGS:=$(LDFLAGS) $(STAGE2_ARCH_LDFLAGS) - -OBJS=$(STAGE2_ARCH_OBJS) \ - init/init.o \ - drivers/sata/sata.o \ - -.PHONY: all clean install -.SUFFIXES: .o .c .s - -all: $(ELF) - -$(ELF): $(OBJS) - @$(LD) --script=$(ARCHDIR)/linker.ld $(LDFLAGS) -o $@ $^ - @echo [LD] $@ - -.c.o: - @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) - @echo [CC] $@ - -.s.o: - @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) - @echo [AS] $@ - -clean: - $(RM) $(ELF) $(OBJS) $(OBJS:.o=.d) - -install: $(ELF) - install -m 0644 $(ELF) $(DESTDIR)$(BOOTDIR) - --include $(OBJS:.o=.d) +# Copyright (C) 2025 Danny Holman <dholman@gymli.org> +# +# This file is part of BoxOS, a free and open-source Unix-like operating +# system. +# +# BoxOS is free software; you can redistribute it and/or modify under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# BoxOS is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# BoxOS; if not, see <https://www.gnu.org/licenses/>. + +include $(ROOTDIR)/common.mk + +ifeq (BS_DEBUG,YES) + AFLAGS+=-g + CFLAGS+=-g +endif + +INCLUDE+=-Iinclude -I$(ROOTDIR)kernel/include +CFLAGS+=-ffreestanding -fno-stack-protector $(BS_OPLVL) + +BINARY=bootstrap-stage2 + +include $(ARCHDIR)/make.conf + +OBJS=$(ARCH_OBJS) \ + +include $(ROOTDIR)/patterns.mk diff --git a/bootstrap/stage2/arch/x86_64/linker.ld b/bootstrap/stage2/arch/x86_64/linker.ld index 04b6148..7bd0460 100644 --- a/bootstrap/stage2/arch/x86_64/linker.ld +++ b/bootstrap/stage2/arch/x86_64/linker.ld @@ -1,4 +1,4 @@ -ENTRY(bootstrap_main) +ENTRY(_start) SECTIONS { . = 0x2000; diff --git a/bootstrap/stage2/arch/x86_64/make.conf b/bootstrap/stage2/arch/x86_64/make.conf new file mode 100644 index 0000000..930b95e --- /dev/null +++ b/bootstrap/stage2/arch/x86_64/make.conf @@ -0,0 +1,5 @@ +AFLAGS+=-target $(ARCH)-none-elf +CFLAGS+=-target $(ARCH)-none-elf -mno-red-zone -mno-mmx -mno-sse -mno-sse2 +LDFLAGS+=--script=$(ARCHDIR)/linker.ld + +ARCH_OBJS=$(ARCHDIR)/asm/entry.o \ diff --git a/bootstrap/stage2/arch/x86_64/make.config b/bootstrap/stage2/arch/x86_64/make.config deleted file mode 100644 index 3c73a35..0000000 --- a/bootstrap/stage2/arch/x86_64/make.config +++ /dev/null @@ -1,6 +0,0 @@ -STAGE2_ARCH_INCLUDE=-I$(ARCHDIR)/include -STAGE2_ARCH_CFLAGS=-target x86_64-pc-none-elf -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -STAGE2_ARCH_LDFLAGS= -STAGE2_ARCH_LIBS= - -STAGE2_ARCH_OBJS= |