ARCH		= x86_64
EFIROOT 	= /usr
HDDRROOT	= $(EFIROOT)/include/efi
INCLUDES	= -I. -I$(HDDRROOT) -I$(HDDRROOT)/$(ARCH)	-I$(HDDRROOT)/protocol

CRTOBJS		= $(EFIROOT)/lib/crt0-efi-$(ARCH).o
CFLAGS		= -O2 -fPIC -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -mno-red-zone
ifeq ($(ARCH),x86_64)
	CFLAGS += -DEFI_FUNCTION_WRAPPER
endif

CPPFLAGS	= -DCONFIG_$(ARCH)
FORMAT		= efi-app-$(ARCH)
INSTALL		= install
LDFLAGS		= -nostdlib
LDSCRIPT	= $(EFIROOT)/lib/elf_$(ARCH)_efi.lds
LDFLAGS	   += -T $(LDSCRIPT) -shared -Bsymbolic -L$(EFIROOT)/lib $(CRTOBJS)
LOADLIBS	= -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name)

prefix		=
CC			= $(prefix)gcc
AS			= $(prefix)as
LD			= $(prefix)ld
AR			= $(prefix)ar
RANLIB		= $(prefix)ranlib
OBJCOPY		= $(prefix)objcopy

%.efi: %.so
	$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
			   -j .rela -j .reloc --target=$(FORMAT) $*.so $@

%.so: %.o
	$(LD) $(LDFLAGS) $^ -o $@ $(LOADLIBS)

%.o: %.c
	$(CC) $(INCLUDES) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

TARGETS = hello.efi

all: $(TARGETS)

clean:
	rm -f $(TARGETS)