build: Simplify BIOS stage1 decompressor build system
It is now a single assembly file so it can be simplified.
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -31,7 +31,6 @@
|
||||
/common/lib/stb_image.h
|
||||
/common/cc-runtime.s2.c
|
||||
/cc-runtime
|
||||
/decompressor/cc-runtime.c
|
||||
/libfdt
|
||||
/edk2-ovmf
|
||||
/bochsout.txt
|
||||
@@ -55,6 +54,7 @@
|
||||
/common-uefi-riscv64
|
||||
/common-uefi-loongarch64
|
||||
/decompressor-build
|
||||
/tools-build
|
||||
/stage1.stamp
|
||||
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ limine:
|
||||
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine'
|
||||
|
||||
.PHONY: clean
|
||||
clean: limine-bios-clean limine-uefi-ia32-clean limine-uefi-x86-64-clean limine-uefi-aarch64-clean limine-uefi-riscv64-clean limine-uefi-loongarch64-clean
|
||||
clean: tools-clean limine-bios-clean limine-uefi-ia32-clean limine-uefi-x86-64-clean limine-uefi-aarch64-clean limine-uefi-riscv64-clean limine-uefi-loongarch64-clean
|
||||
rm -rf '$(call SHESCAPE,$(BINDIR))' '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
||||
|
||||
.PHONY: install
|
||||
@@ -187,7 +187,9 @@ uninstall:
|
||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine'
|
||||
rm -rf '$(call SHESCAPE,$(DESTDIR)$(datarootdir))/limine'
|
||||
|
||||
$(call MKESCAPE,$(BUILDDIR))/stage1.stamp: $(STAGE1_FILES) $(call MKESCAPE,$(BUILDDIR))/decompressor-build/decompressor.bin $(call MKESCAPE,$(BUILDDIR))/common-bios/stage2.bin.limlz
|
||||
$(call MKESCAPE,$(BUILDDIR))/stage1.stamp: $(STAGE1_FILES) $(call MKESCAPE,$(BUILDDIR))/common-bios/stage2.bin.limlz
|
||||
$(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))/decompressor-build'
|
||||
cd '$(call SHESCAPE,$(SRCDIR))/stage1' && nasm decompressor.asm -Wall -w-unknown-warning -w-reloc $(WERROR_FLAG) -fbin -o '$(call SHESCAPE,$(BUILDDIR))/decompressor-build/decompressor.bin'
|
||||
$(MKDIR_P) '$(call SHESCAPE,$(BINDIR))'
|
||||
cd '$(call SHESCAPE,$(SRCDIR))/stage1/hdd' && nasm bootsect.asm -Wall -w-unknown-warning -w-reloc $(WERROR_FLAG) -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-bios-hdd.bin'
|
||||
ifneq ($(BUILD_BIOS_CD),no)
|
||||
@@ -200,7 +202,7 @@ endif
|
||||
touch '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
||||
|
||||
.PHONY: limine-bios
|
||||
limine-bios: common-bios decompressor
|
||||
limine-bios: common-bios
|
||||
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
||||
|
||||
$(call MKESCAPE,$(BINDIR))/limine-uefi-cd.bin: $(if $(BUILD_UEFI_IA32),$(call MKESCAPE,$(BUILDDIR))/common-uefi-ia32/BOOTIA32.EFI) $(if $(BUILD_UEFI_X86_64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-x86-64/BOOTX64.EFI) $(if $(BUILD_UEFI_AARCH64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-aarch64/BOOTAA64.EFI) $(if $(BUILD_UEFI_RISCV64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-riscv64/BOOTRISCV64.EFI) $(if $(BUILD_UEFI_LOONGARCH64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-loongarch64/BOOTLOONGARCH64.EFI)
|
||||
@@ -328,7 +330,7 @@ distclean: clean
|
||||
|
||||
.PHONY: maintainer-clean
|
||||
maintainer-clean: distclean
|
||||
cd '$(call SHESCAPE,$(SRCDIR))' && rm -rf flanterm common/lib/stb_image.h.nopatch common/lib/stb_image.h libfdt freestnd-c-hdrs cc-runtime common/cc-runtime.s2.c decompressor/cc-runtime.c limine-protocol picoefi configure timestamps build-aux *'~' autom4te.cache aclocal.m4 *.tar*
|
||||
cd '$(call SHESCAPE,$(SRCDIR))' && rm -rf flanterm common/lib/stb_image.h.nopatch common/lib/stb_image.h libfdt freestnd-c-hdrs cc-runtime common/cc-runtime.s2.c limine-protocol picoefi configure timestamps build-aux *'~' autom4te.cache aclocal.m4 *.tar*
|
||||
|
||||
.PHONY: common-uefi-x86-64
|
||||
common-uefi-x86-64:
|
||||
@@ -381,27 +383,26 @@ common-uefi-ia32-clean:
|
||||
rm -rf '$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32'
|
||||
|
||||
.PHONY: common-bios
|
||||
common-bios: $(call MKESCAPE,$(BINDIR))/limlzpack
|
||||
common-bios: $(call MKESCAPE,$(BUILDDIR))/tools-build/limlzpack
|
||||
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk \
|
||||
TARGET=bios \
|
||||
BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-bios' \
|
||||
LIMLZPACK='$(call SHESCAPE,$(BINDIR))/limlzpack'
|
||||
LIMLZPACK='$(call SHESCAPE,$(BUILDDIR))/tools-build/limlzpack'
|
||||
|
||||
.PHONY: common-bios-clean
|
||||
common-bios-clean:
|
||||
rm -rf '$(call SHESCAPE,$(BUILDDIR))/common-bios'
|
||||
|
||||
$(call MKESCAPE,$(BINDIR))/limlzpack: $(call MKESCAPE,$(SRCDIR))/tools/limlzpack.c
|
||||
$(MKDIR_P) '$(call SHESCAPE,$(BINDIR))'
|
||||
$(call MKESCAPE,$(BUILDDIR))/tools-build/limlzpack: $(call MKESCAPE,$(SRCDIR))/tools/limlzpack.c
|
||||
$(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))/tools-build'
|
||||
$(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) -std=c99 -Wall -Wextra $(WERROR_FLAG) '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@)'
|
||||
|
||||
.PHONY: decompressor
|
||||
decompressor:
|
||||
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/decompressor' -f decompressor.mk \
|
||||
BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor-build'
|
||||
|
||||
.PHONY: decompressor-clean
|
||||
decompressor-clean:
|
||||
rm -rf '$(call SHESCAPE,$(BUILDDIR))/decompressor-build'
|
||||
|
||||
.PHONY: tools-clean
|
||||
tools-clean:
|
||||
rm -rf '$(call SHESCAPE,$(BUILDDIR))/tools-build'
|
||||
|
||||
-include test.mk
|
||||
|
||||
@@ -80,7 +80,6 @@ if ! test -f version; then
|
||||
cc-runtime \
|
||||
dae79833b57a01b9fd3e359ee31def69f5ae899b
|
||||
cp cc-runtime/src/cc-runtime.c common/cc-runtime.s2.c
|
||||
cp cc-runtime/src/cc-runtime.c decompressor/cc-runtime.c
|
||||
|
||||
clone_repo_commit \
|
||||
https://github.com/Limine-Bootloader/limine-protocol.git \
|
||||
|
||||
@@ -324,7 +324,7 @@ endif
|
||||
|
||||
ifeq ($(TARGET),bios)
|
||||
|
||||
$(call MKESCAPE,$(BUILDDIR))/stage2.bin.limlz: $(call MKESCAPE,$(BUILDDIR))/stage2.bin $(LIMLZPACK)
|
||||
$(call MKESCAPE,$(BUILDDIR))/stage2.bin.limlz: $(call MKESCAPE,$(BUILDDIR))/stage2.bin
|
||||
'$(call SHESCAPE,$(LIMLZPACK))' '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)'
|
||||
|
||||
$(call MKESCAPE,$(BUILDDIR))/stage2.bin: $(call MKESCAPE,$(BUILDDIR))/limine-bios.sys
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
.SUFFIXES:
|
||||
|
||||
override SPACE := $(subst ,, )
|
||||
|
||||
override MKESCAPE = $(subst $(SPACE),\ ,$(1))
|
||||
override SHESCAPE = $(subst ','\'',$(1))
|
||||
override OBJESCAPE = $(subst .a ,.a' ',$(subst .o ,.o' ',$(call SHESCAPE,$(1))))
|
||||
|
||||
override CC_FOR_TARGET_IS_CLANG := $(shell ! $(CC_FOR_TARGET) --version 2>/dev/null | $(GREP) -q '^Target: '; echo $$?)
|
||||
|
||||
ifeq ($(CC_FOR_TARGET_IS_CLANG),1)
|
||||
override CC_FOR_TARGET += \
|
||||
-target i686-unknown-none-elf
|
||||
endif
|
||||
|
||||
override CFLAGS_FOR_TARGET += \
|
||||
-Os \
|
||||
-Wall \
|
||||
-Wextra \
|
||||
-Wshadow \
|
||||
-Wvla \
|
||||
$(WERROR_FLAG) \
|
||||
-std=gnu11 \
|
||||
-nostdinc \
|
||||
-ffreestanding \
|
||||
-ffunction-sections \
|
||||
-fdata-sections \
|
||||
-fno-stack-protector \
|
||||
-fno-stack-check \
|
||||
-fomit-frame-pointer \
|
||||
-fno-strict-aliasing \
|
||||
-fno-lto \
|
||||
-fno-PIC \
|
||||
-m32 \
|
||||
-march=i686 \
|
||||
-mabi=sysv \
|
||||
-mno-80387 \
|
||||
-mno-mmx
|
||||
|
||||
override CPPFLAGS_FOR_TARGET := \
|
||||
-I . \
|
||||
-isystem ../freestnd-c-hdrs/include \
|
||||
$(CPPFLAGS_FOR_TARGET) \
|
||||
-MMD \
|
||||
-MP
|
||||
|
||||
override LDFLAGS_FOR_TARGET += \
|
||||
-m elf_i386 \
|
||||
-nostdlib \
|
||||
-z max-page-size=0x1000 \
|
||||
--gc-sections \
|
||||
-static \
|
||||
-T linker.ld
|
||||
|
||||
override NASMFLAGS_FOR_TARGET := \
|
||||
-f elf32 \
|
||||
$(patsubst -g,-g -F dwarf,$(NASMFLAGS_FOR_TARGET)) \
|
||||
-Wall \
|
||||
-w-unknown-warning \
|
||||
-w-reloc \
|
||||
$(WERROR_FLAG)
|
||||
|
||||
override C_FILES := $(shell find . -type f -name '*.c' | LC_ALL=C sort)
|
||||
override ASM_FILES := $(shell find . -type f -name '*.asm' | LC_ALL=C sort)
|
||||
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM_FILES:.asm=.o) $(C_FILES:.c=.o))
|
||||
override HEADER_DEPS := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(C_FILES:.c=.d))
|
||||
|
||||
.PHONY: all
|
||||
all: $(call MKESCAPE,$(BUILDDIR))/decompressor.bin
|
||||
|
||||
$(call MKESCAPE,$(BUILDDIR))/decompressor.bin: $(OBJ)
|
||||
$(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$(BUILDDIR))/decompressor.elf'
|
||||
$(OBJCOPY_FOR_TARGET) -O binary '$(call SHESCAPE,$(BUILDDIR))/decompressor.elf' '$(call SHESCAPE,$@)'
|
||||
|
||||
-include $(HEADER_DEPS)
|
||||
|
||||
$(call MKESCAPE,$(BUILDDIR))/%.o: %.c
|
||||
$(MKDIR_P) "$$(dirname '$(call SHESCAPE,$@)')"
|
||||
$(CC_FOR_TARGET) $(CFLAGS_FOR_TARGET) $(CPPFLAGS_FOR_TARGET) -c '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@)'
|
||||
|
||||
$(call MKESCAPE,$(BUILDDIR))/%.o: %.asm
|
||||
$(MKDIR_P) "$$(dirname '$(call SHESCAPE,$@)')"
|
||||
nasm '$(call SHESCAPE,$<)' $(NASMFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)'
|
||||
@@ -1,39 +0,0 @@
|
||||
OUTPUT_FORMAT(elf32-i386)
|
||||
ENTRY(_start)
|
||||
|
||||
PHDRS
|
||||
{
|
||||
text PT_LOAD FLAGS(0x05);
|
||||
rodata PT_LOAD FLAGS(0x04);
|
||||
data PT_LOAD FLAGS(0x06);
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x70000;
|
||||
|
||||
.text : {
|
||||
*(.entry)
|
||||
*(.text .text.*)
|
||||
} :text
|
||||
|
||||
.rodata : {
|
||||
*(.rodata .rodata.*)
|
||||
} :rodata
|
||||
|
||||
.data : {
|
||||
*(.data .data.*)
|
||||
} :data
|
||||
|
||||
.bss : {
|
||||
bss_begin = .;
|
||||
*(.bss .bss.*)
|
||||
*(COMMON)
|
||||
bss_end = .;
|
||||
} :data
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.eh_frame*)
|
||||
*(.note .note.*)
|
||||
}
|
||||
}
|
||||
@@ -22,10 +22,9 @@
|
||||
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
org 0x70000
|
||||
bits 32
|
||||
|
||||
section .entry progbits alloc exec nowrite align=16
|
||||
|
||||
global _start
|
||||
_start:
|
||||
cld
|
||||
@@ -131,9 +130,5 @@ _start:
|
||||
cli
|
||||
hlt
|
||||
|
||||
section .rodata progbits alloc noexec nowrite align=1
|
||||
|
||||
errmsg: db "limine integrity error"
|
||||
.len: equ $ - errmsg
|
||||
|
||||
section .note.GNU-stack noalloc noexec nowrite progbits
|
||||
Reference in New Issue
Block a user