summaryrefslogtreecommitdiff
path: root/efi.mk
diff options
context:
space:
mode:
Diffstat (limited to 'efi.mk')
-rw-r--r--efi.mk52
1 files changed, 52 insertions, 0 deletions
diff --git a/efi.mk b/efi.mk
new file mode 100644
index 0000000..530a372
--- /dev/null
+++ b/efi.mk
@@ -0,0 +1,52 @@
+# vim: ft=make:nowrap:ts=4:sw=4
+
+ifeq ($(ARCH),x86_64)
+ GNUEFIARCH := x86_64
+endif
+ifeq ($(ARCH),i686)
+ GNUEFIARCH := ia32
+endif
+
+ifndef EFIAPIDIR
+EFIAPIDIR := /usr/local/include/efi
+endif
+
+ifndef EFILIBDIR
+EFILIBDIR := /usr/local/$(TARGET)/lib
+endif
+
+EFICRT := $(EFILIBDIR)/crt0-efi-$(GNUEFIARCH).o
+EFILDSCRIPT := $(EFILIBDIR)/elf_$(GNUEFIARCH)_efi.lds
+
+CPPFLAGS += -I$(EFIAPIDIR) -I$(EFIAPIDIR)/protocol -I$(EFIAPIDIR)/$(GNUEFIARCH) \
+ -DGNU_EFI_USE_MS_ABI -DEFI_CALL_WRAPPER -DEFI_DEBUG
+
+CFLAGS += -fPIC -fshort-wchar -maccumulate-outgoing-args -mno-avx -mno-sse \
+ -mno-mmx
+
+OBJCOPY.efi = $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic \
+ -j .dynsm -j .rel -j .rela -j .reloc \
+ --target=efi-app-$(GNUEFIARCH) $< $@
+
+OBJCOPY.debug.efi = $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic \
+ -j .dynsym -j .rel -j .rela -j .reloc -j .debug_info \
+ -j .debug_abbrev -j .debug_loc -j .debug_aranges \
+ -j .debug_line -j .debug_macinfo -j .debug_str \
+ --target=efi-app-$(GNUEFIARCH) $< $@
+
+LINK._efi.so = $(LD) $(LDFLAGS) -znocombreloc -Bsymbolic -shared --no-undefined \
+ $(LIBDIRS) -L$(EFILIBDIR) -T $(EFILDSCRIPT) \
+ $(filter %.o, $^) -lgnuefi -lefi $(LOADLIBES) -o $@
+
+%.efi: %_efi.so
+ $(OBJCOPY.info)
+ $(OBJCOPY.efi)
+
+%.debug.efi: %_efi.so
+ $(OBJCOPY.info)
+ @$(OBJCOPY.debug.efi)
+
+%_efi.so: $(EFILDSCRIPT) $(EFICRT)
+ $(LINK.info)
+ $(LINK._efi.so)
+