summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--GNU_efi_HelloWorld/Makefile31
-rw-r--r--GNU_efi_HelloWorld/hello.c11
-rw-r--r--GNU_efi_HelloWorld/hello.obin0 -> 1696 bytes
3 files changed, 42 insertions, 0 deletions
diff --git a/GNU_efi_HelloWorld/Makefile b/GNU_efi_HelloWorld/Makefile
new file mode 100644
index 0000000..4f00d4a
--- /dev/null
+++ b/GNU_efi_HelloWorld/Makefile
@@ -0,0 +1,31 @@
+ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,)
+
+OBJS = main.o
+TARGET = hello.efi
+
+EFIINC = /usr/include/efi
+EFFINCS = -I$(EFFINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol
+LIB = /usr/lib64
+EFILIB = /usr/lib64/gnuefi
+EFI_CRT_OBJS = $(EFILIB)/crt0-efi-$(ARCH).o
+EFI_LDS = $(EFILIB)/elf_$(ARCH)_efi.lds
+
+CFLAGS = $(EFFINCS) -fno-stack-protector -fpic \
+ -fshort-wchar -mno-red-zone -Wall
+
+ifeq ($(ARCH),x86_64)
+ CFLAGS += -DEFI_FUNCTION_WRAPPER
+endif
+
+LDFLAGS = -nostdlib -znocombreloc -T $(EFI_LDS) -shared \
+ -Bsymbolic -L $(EFILIB) -L $(LIB) $(EFI_CRT_OBJS)
+
+all: $(TARGET)
+
+hello.so: $(OBJS)
+ ld $(LDFLAGS) $(OBJS) -o $@ -lefi -lgnuefi
+
+%.efi: %.so
+ objcopy -j .text -j .sdata -j .data -j .dynamic \
+ -j .dynsym -j .rel -j .rela -j .reloc \
+ --target=efi-app-$(ARCH) $^ $@
diff --git a/GNU_efi_HelloWorld/hello.c b/GNU_efi_HelloWorld/hello.c
new file mode 100644
index 0000000..26cbd42
--- /dev/null
+++ b/GNU_efi_HelloWorld/hello.c
@@ -0,0 +1,11 @@
+#include <efi.h>
+#include <efilib.h>
+
+EFI_STATUS
+EFIAPI
+efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
+ InitializeLib(ImageHandle, SystemTable);
+ Print(L"Hello, world!\n");
+
+ return EFI_SUCCESS;
+}
diff --git a/GNU_efi_HelloWorld/hello.o b/GNU_efi_HelloWorld/hello.o
new file mode 100644
index 0000000..6e14a71
--- /dev/null
+++ b/GNU_efi_HelloWorld/hello.o
Binary files differ