blob: 364dd013c1e62df8d7e72154fa4389b0e9785c34 [file] [log] [blame]
ARCH := x86_64
EFI_TOOLCHAIN :=
EFI_CC := $(EFI_TOOLCHAIN)gcc
EFI_LD := $(EFI_TOOLCHAIN)ld
EFI_OBJCOPY := $(EFI_TOOLCHAIN)objcopy
EFI_AR := $(EFI_TOOLCHAIN)ar
EFI_PATH := external/gnu-efi
EFI_LIB_PATHS := $(EFI_PATH)/$(ARCH)/lib $(EFI_PATH)/$(ARCH)/gnuefi out
EFI_INC_PATHS := $(EFI_PATH)/inc $(EFI_PATH)/inc/$(ARCH) $(EFI_PATH)/inc/protocol
EFI_CRT0 := $(EFI_PATH)/$(ARCH)/gnuefi/crt0-efi-$(ARCH).o
EFI_LINKSCRIPT := $(EFI_PATH)/gnuefi/elf_$(ARCH)_efi.lds
EFI_CFLAGS := -fpic -fshort-wchar -fno-stack-protector -mno-red-zone
EFI_CFLAGS += -Wall
EFI_CFLAGS += -std=c99
EFI_CFLAGS += -ffreestanding -nostdinc -Iinclude -Isrc -Iexternal/edk2
EFI_CFLAGS += $(patsubst %,-I%,$(EFI_INC_PATHS))
EFI_CFLAGS += -DHAVE_USE_MS_ABI=1
EFI_CFLAGS += -ggdb
EFI_LDFLAGS := -nostdlib -znocombreloc -T $(EFI_LINKSCRIPT)
EFI_LDFLAGS += -shared -Bsymbolic
EFI_LDFLAGS += $(patsubst %,-L%,$(EFI_LIB_PATHS))
EFI_LIBS := -lstuff -lefi -lgnuefi
what_to_build:: all
# build rules and macros
include build/build.mk
# declare applications here
$(call efi_app, hello, hello.c)
$(call efi_app, showmem, showmem.c)
$(call efi_app, fileio, fileio.c)
$(call efi_app, osboot, osboot.c netboot.c netifc.c inet6.c)
$(call efi_app, usbtest, usbtest.c)
LIB_SRCS := lib/goodies.c lib/loadfile.c lib/console-printf.c lib/printf.c lib/string.c
LIB_OBJS := $(patsubst %.c,out/%.o,$(LIB_SRCS))
DEPS += $(patsubst %.c,out/%.d,$(LIB_SRCS))
out/libstuff.a: $(LIB_OBJS)
@mkdir -p $(dir $@)
@echo archiving: $@
$(QUIET)rm -f $@
$(QUIET)ar rc $@ $^
# generate a small IDE disk image for qemu
out/disk.img: $(APPS)
@mkdir -p $(dir $@)
$(QUIET)./build/mkdiskimg.sh $@
@echo copying: $(APPS) README.txt to disk.img
$(QUIET)mcopy -o -i out/disk.img@@1024K $(APPS) README.txt ::
ALL += out/disk.img
-include $(DEPS)
# ensure gnu-efi gets built
$(EFI_CRT0):
@echo building: gnu-efi
$(QUIET)$(MAKE) -C $(EFI_PATH)
QEMU_OPTS := -cpu qemu64
QEMU_OPTS += -bios external/ovmf/OVMF.fd
QEMU_OPTS += -drive file=out/disk.img,format=raw,if=ide
qemu:: all
qemu-system-x86_64 $(QEMU_OPTS)
out/nbserver: src/nbserver.c
@mkdir -p out
@echo building nbserver
$(QUIET)gcc -o out/nbserver -Isrc -Wall src/nbserver.c
all: $(ALL) out/nbserver
clean::
rm -rf out