:: commit ebbf8d7bed28c8787f1c2cf72c14195b1e7a9e76

mintsuki <mintsuki@protonmail.com> — 2022-09-05 00:17

parents: 86ebf0b453

misc: Better integration of aarch64 port and test mechanism

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d5867c7f..c9e520b9 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -93,7 +93,6 @@ jobs:
       - name: Release
         uses: softprops/action-gh-release@v1
         with:
-          prerelease: true
           body_path: rel_notes.txt
           files: |
             limine-*.tar.*
diff --git a/GNUmakefile.in b/GNUmakefile.in
index 710c2ef0..c8394751 100644
--- a/GNUmakefile.in
+++ b/GNUmakefile.in
@@ -152,7 +152,7 @@ ifneq ($(BUILD_LIMINE_DEPLOY),no)
 	$(MAKE) limine-deploy
 endif
 
-$(call MKESCAPE,$(BINDIR))/limine-cd-efi.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)
+$(call MKESCAPE,$(BINDIR))/limine-cd-efi.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)
 ifneq ($(BUILD_CD_EFI),no)
 	$(MKDIR_P) '$(call SHESCAPE,$(BINDIR))'
 	rm -f '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin'
@@ -160,6 +160,8 @@ ifneq ($(BUILD_CD_EFI),no)
 	( mformat -i '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin' -f 1440 :: && \
 	  mmd -D s -i '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin' ::/EFI && \
 	  mmd -D s -i '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin' ::/EFI/BOOT && \
+	  ( ( [ -f '$(call SHESCAPE,$(BUILDDIR))/common-uefi-aarch64/BOOTAA64.EFI' ] && \
+	      mcopy -D o -i '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin' '$(call SHESCAPE,$(BUILDDIR))/common-uefi-aarch64/BOOTAA64.EFI' ::/EFI/BOOT ) || true ) && \
 	  ( ( [ -f '$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64/BOOTX64.EFI' ] && \
 	      mcopy -D o -i '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin' '$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64/BOOTX64.EFI' ::/EFI/BOOT ) || true ) && \
 	  ( ( [ -f '$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32/BOOTIA32.EFI' ] && \
@@ -499,13 +501,13 @@ pxe-test:
 	sudo cp -rv test/* test_image/boot/
 	qemu-system-x86_64  -smp 4  -netdev user,id=n0,tftp=./test_image,bootfile=boot/limine-pxe.bin -device rtl8139,netdev=n0,mac=00:00:00:11:11:11 -debugcon stdio
 
-.PHONY: uefi-test
-uefi-test:
+.PHONY: uefi-x86-64-test
+uefi-x86-64-test:
 	$(MAKE) ovmf-x64
 	$(MAKE) test-clean
 	$(MAKE) test.hdd
 	$(MAKE) limine-uefi-x86-64
-	$(MAKE) -C test
+	$(MAKE) -C test CROSS_FILE='$(call SHESCAPE,$(BUILDDIR))/cross-files/x86_64-toolchain.mk'
 	rm -rf test_image/
 	mkdir test_image
 	sudo losetup -Pf --show test.hdd > loopback_dev
@@ -529,7 +531,7 @@ uefi-aa64-test:
 	$(MAKE) test-clean
 	$(MAKE) test.hdd
 	$(MAKE) limine-uefi-aarch64
-	$(MAKE) -C test
+	$(MAKE) -C test CROSS_FILE='$(call SHESCAPE,$(BUILDDIR))/cross-files/aarch64-toolchain.mk'
 	rm -rf test_image/
 	mkdir test_image
 	sudo losetup -Pf --show test.hdd > loopback_dev
@@ -553,7 +555,7 @@ uefi-ia32-test:
 	$(MAKE) test-clean
 	$(MAKE) test.hdd
 	$(MAKE) limine-uefi-ia32
-	$(MAKE) -C test
+	$(MAKE) -C test CROSS_FILE='$(call SHESCAPE,$(BUILDDIR))/cross-files/x86_64-toolchain.mk'
 	rm -rf test_image/
 	mkdir test_image
 	sudo losetup -Pf --show test.hdd > loopback_dev
diff --git a/test/GNUmakefile b/test/GNUmakefile
index 7e0dae45..406dcab6 100644
--- a/test/GNUmakefile
+++ b/test/GNUmakefile
@@ -1,11 +1,13 @@
-CC              = cc
-CFLAGS          = -O2 -g -Wall -Wextra -Wpedantic
-LDFLAGS         =
-LD              = ld
-QEMU            = qemu-system-x86_64
-QEMUFLAGS       = -m 1G -enable-kvm -cpu host
+include $(CROSS_FILE)
 
-INTERNALLDFLAGS :=         \
+override CC := $(CROSS_CC)
+CFLAGS = -O2 -g -Wall -Wextra
+LDFLAGS =
+override LD := $(CROSS_LD)
+override QEMU := qemu-system-x86_64
+QEMUFLAGS = -m 1G -enable-kvm -cpu host
+
+override INTERNALLDFLAGS :=         \
 	-Tlinker.ld            \
 	-nostdlib              \
 	-zmax-page-size=0x1000 \
@@ -14,51 +16,53 @@ INTERNALLDFLAGS :=         \
 	--no-dynamic-linker    \
 	-ztext
 
-INTERNAL_LD_FLAGS_MULTIBOOT2 := \
+override INTERNAL_LD_FLAGS_MULTIBOOT2 := \
+	-m elf_i386                 \
 	-Tmultiboot2.ld             \
 	-nostdlib                   \
 	-zmax-page-size=0x1000      \
 	-static
 
-INTERNAL_LD_FLAGS_MULTIBOOT1 := \
+override INTERNAL_LD_FLAGS_MULTIBOOT1 := \
+	-m elf_i386                 \
 	-Tmultiboot.ld              \
 	-nostdlib                   \
 	-zmax-page-size=0x1000      \
 	-static
 
-INTERNALCFLAGS  :=       \
-	-I.                  \
-	-I..                 \
+override INTERNALCFLAGS  :=       \
 	-std=c11             \
-	-g                   \
 	-ffreestanding       \
 	-fno-stack-protector \
+	-fno-stack-check     \
+	-fno-lto             \
 	-fpie                \
-	-mabi=sysv           \
-	-mno-80387           \
-	-mno-mmx             \
-	-mno-sse             \
-	-mno-sse2            \
-	-mno-red-zone
-
-INTERNALCFLAGS_MB  :=    \
+	-mgeneral-regs-only  \
+	-mno-red-zone        \
 	-I.                  \
-	-I..                 \
-	-I../common/protos   \
+	-I..
+
+override INTERNALCFLAGS_MB  :=    \
 	-std=c11             \
-	-m32                 \
-	-g                   \
 	-ffreestanding       \
 	-fno-stack-protector \
+	-fno-stack-check     \
+	-fno-lto             \
 	-fno-pie             \
 	-fno-pic             \
+	-m32                 \
+	-march=i686          \
 	-mabi=sysv           \
 	-mno-80387           \
-	-mno-mmx             \
-	-mno-sse             \
-	-mno-sse2
+	-I.                  \
+	-I..                 \
+	-I../common/protos
 
+ifneq ($(findstring 86,$(CROSS_CC)),)
 all: test.elf multiboot2.elf multiboot.elf
+else
+all: test.elf
+endif
 
 test.elf: limine.o e9print.o memory.o
 	$(LD) $^ $(LDFLAGS) $(INTERNALLDFLAGS) -o $@
diff --git a/test/e9print.c b/test/e9print.c
index 7e425a04..c77f1c03 100644
--- a/test/e9print.c
+++ b/test/e9print.c
@@ -9,7 +9,9 @@ static const char CONVERSION_TABLE[] = "0123456789abcdef";
 void e9_putc(char c) {
     if (limine_print != NULL)
         limine_print(&c, 1);
+#if defined (__x86_64__) || defined (__i386__)
     __asm__ __volatile__ ("outb %0, %1" :: "a" (c), "Nd" (0xe9) : "memory");
+#endif
 }
 
 void e9_print(const char *msg) {
diff --git a/test/multiboot.ld b/test/multiboot.ld
index 7bcdc517..c602227b 100644
--- a/test/multiboot.ld
+++ b/test/multiboot.ld
@@ -1,7 +1,7 @@
 ENTRY(_start)
 
 SECTIONS {
-    . = 0x10000;
+    . = 1M;
 
     .boot :
     {
@@ -18,7 +18,7 @@ SECTIONS {
     . = ALIGN(4K);
     .rodata :
     {
-        *(.rodata.*)
+        *(.rodata .rodata.*)
     }
 
     . = ALIGN(4K);
diff --git a/test/multiboot2.ld b/test/multiboot2.ld
index 22de8775..c602227b 100644
--- a/test/multiboot2.ld
+++ b/test/multiboot2.ld
@@ -18,7 +18,7 @@ SECTIONS {
     . = ALIGN(4K);
     .rodata :
     {
-        *(.rodata.*)
+        *(.rodata .rodata.*)
     }
 
     . = ALIGN(4K);
tab: 248 wrap: offon