blob: a4fcf0cd7af328ce3918a477360f3ac0263684aa [file] [log] [blame]
# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
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 := third_party/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 -Ithird_party/edk2 -Ithird_party/lk/include
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 := -lutils -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, src/showmem.c)
$(call efi_app, fileio, src/fileio.c)
OSBOOT_FILES := src/osboot.c \
src/cmdline.c \
src/magenta.c \
src/netboot.c \
src/netifc.c \
src/inet6.c \
src/pci.c
$(call efi_app, osboot, $(OSBOOT_FILES))
$(call efi_app, usbtest, src/usbtest.c)
ifneq ($(APP),)
APP := out/$(APP).efi
else
APP := out/osboot.efi
endif
LIB_SRCS := \
lib/utils.c \
lib/loadfile.c \
lib/console-printf.c \
lib/ctype.c \
lib/stdlib.c \
lib/string.c
LIB_SRCS += third_party/lk/src/printf.c
LIB_OBJS := $(patsubst %.c,out/%.o,$(LIB_SRCS))
DEPS += $(patsubst %.c,out/%.d,$(LIB_SRCS))
out/libutils.a: $(LIB_OBJS)
@mkdir -p $(dir $@)
@echo archiving: $@
$(QUIET)rm -f $@
$(QUIET)ar rc $@ $^
out/BOOTx64.EFI: $(APP)
@mkdir -p $(dir $@)
$(QUIET)cp -f $^ $@
# generate a small IDE disk image for qemu
out/disk.img: $(APPS) out/BOOTx64.EFI
@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 ::
$(QUIET)mcopy -o -i out/disk.img@@1024K $(APPS) out/BOOTx64.EFI ::EFI/BOOT/
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 third_party/ovmf/OVMF.fd
QEMU_OPTS += -drive file=out/disk.img,format=raw,if=ide
QEMU_OPTS += -serial stdio
QEMU_OPTS += -m 256M
QEMU_OPTS += -usbdevice host:0b95:772b
qemu-e1000: QEMU_OPTS += -netdev type=tap,ifname=qemu,script=no,id=net0 -net nic,model=e1000,netdev=net0
qemu-e1000: all
qemu-system-x86_64 $(QEMU_OPTS)
qemu: QEMU_OPTS += -net none
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
all-clean: clean
make -C third_party/gnu-efi clean