summaryrefslogtreecommitdiffstats
path: root/GNU_efi_HelloWorld/Makefile
blob: e3a595613f9d0c93ea88f22c97eded1679582e19 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
ARCH		= $(shell uname -m | sed s,i[3456789]86,ia32,)

OBJS		= hello.o
TARGET		= hello.efi

EFIINC		= /usr/include/efi
EFFINCS		= -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol
EFILIB		= /usr/lib
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 \
			-ggdb

ifeq ($(ARCH),x86_64)
	CFLAGS += -DEFI_FUNCTION_WRAPPER
endif

LDFLAGS		= -nostdlib -znocombreloc -T $(EFI_LDS) -shared \
			-Bsymbolic -L $(EFILIB) $(EFI_CRT_OBJS)

all: $(TARGET)
	cp hello.efi ../test_code/hda-contents/

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) $^ $@

clear:
	rm *.efi
	rm *.o
	rm *.so