EFI: Initial test EFI application
* Only set HAIKU_BOOT_PLATFORM to bios_ia32 if not defined * Add gnuefi build feature * Introduce BOOT_LDFLAGS, and move options for passing to linker into ArchitectureSetup * x86_64 compile fixes for warnings in boot loader * loader/elf.cpp: don't include ELF32 support when targeting EFI * relocation_func.cpp: copy of the relocation code from gnuefi to make _relocate extern "C", and avoid including <efilib.h> * boot_loader_efi.ld: copy of gnuefi's elf_x86_64_efi.lds, modified to include support for C++ constructors, etc. Keep in sync with the gnuefi package Signed-off-by: Jessica Hamilton <[email protected]>
This commit is contained in:
committed by
Jessica Hamilton
parent
20e11028aa
commit
211483cb51
+27
-12
@@ -279,7 +279,7 @@ rule KernelArchitectureSetup architecture
|
||||
HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 192 ; # in kB - unused yet
|
||||
|
||||
case x86 :
|
||||
HAIKU_BOOT_PLATFORM = bios_ia32 ;
|
||||
HAIKU_BOOT_PLATFORM ?= bios_ia32 ;
|
||||
HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 2880 ; # in kB
|
||||
# offset in floppy image (>= sizeof(haiku_loader))
|
||||
HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 320 ; # in kB
|
||||
@@ -291,7 +291,7 @@ rule KernelArchitectureSetup architecture
|
||||
|
||||
case x86_64 :
|
||||
# x86_64 completely shares the x86 bootloader.
|
||||
HAIKU_BOOT_PLATFORM = bios_ia32 ;
|
||||
HAIKU_BOOT_PLATFORM ?= bios_ia32 ;
|
||||
HAIKU_BOOT_FLOPPY_IMAGE_SIZE = 2880 ; # in kB
|
||||
# offset in floppy image (>= sizeof(haiku_loader))
|
||||
HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 320 ; # in kB
|
||||
@@ -326,12 +326,6 @@ rule KernelArchitectureSetup architecture
|
||||
Exit "Currently unsupported target CPU:" $(cpu) ;
|
||||
}
|
||||
|
||||
# Include embedded board-specific file.
|
||||
if $(HAIKU_BOOT_BOARD) {
|
||||
include [ FDirName $(HAIKU_BUILD_RULES_DIR) board $(HAIKU_BOOT_BOARD)
|
||||
BoardSetup ] ;
|
||||
}
|
||||
|
||||
# private kernel headers to be used when compiling kernel code
|
||||
HAIKU_PRIVATE_KERNEL_HEADERS =
|
||||
[ PrivateHeaders $(DOT) kernel libroot shared
|
||||
@@ -361,6 +355,7 @@ rule KernelArchitectureSetup architecture
|
||||
HAIKU_BOOT_CCFLAGS = $(HAIKU_CCFLAGS_$(architecture)) $(gccBaseFlags) ;
|
||||
HAIKU_BOOT_C++FLAGS = $(HAIKU_C++FLAGS_$(architecture)) $(g++BaseFlags) ;
|
||||
HAIKU_BOOT_LINKFLAGS = ;
|
||||
HAIKU_BOOT_LDFLAGS = -Bstatic ;
|
||||
|
||||
if $(gccVersion[1]) >= 4 {
|
||||
HAIKU_KERNEL_C++FLAGS += -std=gnu++11 ;
|
||||
@@ -370,6 +365,16 @@ rule KernelArchitectureSetup architecture
|
||||
HAIKU_KERNEL_PIC_LINKFLAGS = ;
|
||||
HAIKU_KERNEL_ADDON_LINKFLAGS = ;
|
||||
|
||||
# Include embedded board-specific file.
|
||||
if $(HAIKU_BOOT_BOARD) {
|
||||
include [ FDirName $(HAIKU_BUILD_RULES_DIR) board $(HAIKU_BOOT_BOARD)
|
||||
BoardSetup ] ;
|
||||
if $(HAIKU_BOARD_LOADER_BASE) {
|
||||
HAIKU_BOOT_LDFLAGS +=
|
||||
--defsym BOARD_LOADER_BASE=$(HAIKU_BOARD_LOADER_BASE) ;
|
||||
}
|
||||
}
|
||||
|
||||
switch $(cpu) {
|
||||
case ppc :
|
||||
# Build a position independent PPC kernel. We need to be able to
|
||||
@@ -401,10 +406,20 @@ rule KernelArchitectureSetup architecture
|
||||
HAIKU_KERNEL_PIC_LINKFLAGS += -z max-page-size=0x1000 ;
|
||||
HAIKU_KERNEL_ADDON_LINKFLAGS += -z max-page-size=0x1000 ;
|
||||
|
||||
# Bootloader is 32-bit.
|
||||
HAIKU_BOOT_LINKFLAGS += -m elf_i386_haiku ;
|
||||
HAIKU_BOOT_CCFLAGS += -m32 -march=pentium ;
|
||||
HAIKU_BOOT_C++FLAGS += -m32 -march=pentium ;
|
||||
# BIOS Bootloader is 32-bit.
|
||||
if $(HAIKU_BOOT_PLATFORM) = bios_ia32 {
|
||||
HAIKU_BOOT_LINKFLAGS += -m elf_i386_haiku ;
|
||||
HAIKU_BOOT_CCFLAGS += -m32 -march=pentium ;
|
||||
HAIKU_BOOT_C++FLAGS += -m32 -march=pentium ;
|
||||
}
|
||||
}
|
||||
|
||||
if $(HAIKU_BOOT_PLATFORM) = efi {
|
||||
HAIKU_BOOT_CCFLAGS += -fpic -fno-stack-protector -fPIC -fshort-wchar -mno-red-zone
|
||||
-maccumulate-outgoing-args -Wno-error=unused-variable ;
|
||||
HAIKU_BOOT_C++FLAGS += -fpic -fno-stack-protector -fPIC -fshort-wchar -mno-red-zone
|
||||
-maccumulate-outgoing-args -Wno-error=unused-variable ;
|
||||
HAIKU_BOOT_LDFLAGS = -Bstatic -Bsymbolic -shared -nostdlib -znocombreloc -nostartfiles ;
|
||||
}
|
||||
|
||||
# warning flags
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ rule BootLd
|
||||
|
||||
LINK on $(1) = $(TARGET_LD_$(TARGET_PACKAGING_ARCH)) ;
|
||||
|
||||
LINKFLAGS on $(1) = $(4) ;
|
||||
LINKFLAGS on $(1) = $(TARGET_BOOT_LINKFLAGS) $(4) ;
|
||||
if $(3) { LINKFLAGS on $(1) += --script=$(3) ; }
|
||||
|
||||
# Remove any preset LINKLIBS, but link against libgcc.a. Linking against
|
||||
|
||||
@@ -571,6 +571,23 @@ if [ IsPackageAvailable expat_devel ] {
|
||||
}
|
||||
|
||||
|
||||
# gnu-efi
|
||||
if $(TARGET_PACKAGING_ARCH) = x86_64 {
|
||||
if [ IsPackageAvailable gnuefi ] {
|
||||
ExtractBuildFeatureArchives gnuefi :
|
||||
file: base gnuefi
|
||||
headers: $(developHeadersDir)/gnuefi
|
||||
headersProtocol: $(developHeadersDir)/gnuefi/protocol
|
||||
headersArch: $(developHeadersDir)/gnuefi/$(TARGET_ARCH)
|
||||
libdir: $(libDir)/gnuefi
|
||||
;
|
||||
|
||||
EnableBuildFeatures gnuefi ;
|
||||
} else {
|
||||
Echo "gnuefi support not available on $(TARGET_PACKAGING_ARCH)" ;
|
||||
}
|
||||
}
|
||||
|
||||
# GPL add-ons
|
||||
if $(HAIKU_INCLUDE_GPL_ADDONS) = 1 {
|
||||
EnableBuildFeatures gpl ;
|
||||
|
||||
@@ -649,7 +649,7 @@ local buildVars =
|
||||
|
||||
KERNEL_CCFLAGS KERNEL_C++FLAGS
|
||||
KERNEL_PIC_CCFLAGS KERNEL_PIC_LINKFLAGS KERNEL_ADDON_LINKFLAGS
|
||||
BOOT_CCFLAGS BOOT_C++FLAGS BOOT_LINKFLAGS
|
||||
BOOT_CCFLAGS BOOT_C++FLAGS BOOT_LINKFLAGS BOOT_LDFLAGS
|
||||
|
||||
KERNEL_WARNING_CCFLAGS KERNEL_WARNING_C++FLAGS
|
||||
|
||||
|
||||
Executable → Regular
Reference in New Issue
Block a user