Makefile revision 199767f8919635c4928607450d9e0abb932109ce
#
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
# You may only use this file in accordance with the terms of version
# 1.0 of the CDDL.
#
# A full copy of the text of the CDDL should have accompanied this
# source. A copy of the CDDL is also available via the Internet at
# http://www.illumos.org/license/CDDL.
#
#
# Copyright 2016 Toomas Soome <tsoome@me.com>
#
include $(SRC)/Makefile.master
CC= $(GCC_ROOT)/bin/gcc
LD= $(GNU_ROOT)/bin/gld
OBJCOPY= $(GNU_ROOT)/bin/gobjcopy
OBJDUMP= $(GNU_ROOT)/bin/gobjdump
PROG= loader.sym
MACHINE= $(MACH64)
# architecture-specific loader code
SRCS= autoload.c bootinfo.c conf.c copy.c devicename.c main.c self_reloc.c \
smbios.c biosacpi.c vers.c
OBJS= autoload.o bootinfo.o conf.o copy.o devicename.o main.o self_reloc.o \
smbios.o biosacpi.o vers.o
ASFLAGS=-m64 -fPIC
CFLAGS= -O2
CPPFLAGS= -nostdinc -I../../../../include -I../../..
CPPFLAGS += -I../../../../lib/libstand
include ../Makefile.inc
include arch/${MACHINE}/Makefile.inc
CPPFLAGS += -I.
CPPFLAGS += -I./arch/${MACHINE}
CPPFLAGS += -I./../include
CPPFLAGS += -I./../include/${MACHINE}
CPPFLAGS += -I./../../../contrib/dev/acpica/include
CPPFLAGS += -I./../../..
CPPFLAGS += -I./../../i386/libi386
CPPFLAGS += -I./../../zfs
CPPFLAGS += -I./../../../cddl/boot/zfs
CPPFLAGS += -DEFI_ZFS_BOOT
CPPFLAGS += -DNO_PCI -DEFI -DTERM_EMU
LIBSTAND= ../../libstand/${MACHINE}/libstand.a
BOOT_FORTH= yes
CPPFLAGS += -DBOOT_FORTH -DSTAND
CPPFLAGS += -I$(SRC)/common/ficl
CPPFLAGS += -I../../ficl
LIBFICL= ../../ficl/${MACHINE}/libficl.a
CPPFLAGS += -I../../zfs
LIBZFSBOOT= ../../zfs/${MACHINE}/libzfsboot.a
#LOADER_FDT_SUPPORT?= no
#.if ${MK_FDT} != "no" && ${LOADER_FDT_SUPPORT} != "no"
#CFLAGS+= -I${.CURDIR}/../../fdt
#CFLAGS+= -I${.OBJDIR}/../../fdt
#CFLAGS+= -DLOADER_FDT_SUPPORT
#LIBEFI_FDT= ${.OBJDIR}/../../efi/fdt/libefi_fdt.a
#LIBFDT= ${.OBJDIR}/../../fdt/libfdt.a
#.endif
# Always add MI sources
include ./Makefile.common
CPPFLAGS += -I../../common
FILES= loader.efi
FILEMODE= 0555
ROOT_BOOT= $(ROOT)/boot
ROOTBOOTFILES=$(FILES:%=$(ROOT_BOOT)/%)
LDSCRIPT= ./arch/${MACHINE}/ldscript.${MACHINE}
LDFLAGS = -nostdlib --eh-frame-hdr -znocombreloc
LDFLAGS += -shared --hash-style=both --enable-new-dtags
LDFLAGS += -T${LDSCRIPT} -Bsymbolic
CLEANFILES= vers.c loader.efi
NEWVERSWHAT= "EFI loader" ${MACHINE}
all: machine x86 loader.efi
install: all $(ROOTBOOTFILES)
vers.c: ../../common/newvers.sh ../../efi/loader/version
$(SH) ../../common/newvers.sh version ${NEWVERSWHAT}
EFI_TARGET= pei-x86-64
loader.efi: loader.sym
if [ `${OBJDUMP} -t loader.sym | fgrep '*UND*' | wc -l` != 0 ]; then \
${OBJDUMP} -t loader.sym | fgrep '*UND*'; \
exit 1; \
fi
${OBJCOPY} --readonly-text -j .peheader -j .text -j .sdata -j .data \
-j .dynamic -j .dynsym -j .rel.dyn \
-j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \
--output-target=${EFI_TARGET} --subsystem efi-app loader.sym $@
LIBEFI= ../libefi/libefi.a
DPADD= ${LIBFICL} ${LIBZFSBOOT} ${LIBEFI} ${LIBFDT} ${LIBEFI_FDT} \
${LIBSTAND} ${LDSCRIPT}
LDADD= ${LIBFICL} ${LIBZFSBOOT} ${LIBEFI} ${LIBFDT} ${LIBEFI_FDT} \
${LIBSTAND}
loader.sym: $(OBJS) $(DPADD)
$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LDADD)
beforedepend ${OBJS}: machine
CLEANFILES += machine x86
machine:
$(RM) machine
$(SYMLINK) ../../../${MACHINE}/include machine
x86:
$(RM) x86
$(SYMLINK) ../../../x86/include x86
clean clobber:
$(RM) $(CLEANFILES) $(OBJS) loader.sym loader.efi
%.o: %.c
$(COMPILE.c) $<
%.o: ./arch/${MACHINE}/%.c
$(COMPILE.c) $<
%.o: ./arch/${MACHINE}/%.S
$(COMPILE.S) $<
%.o: ../../common/%.c
$(COMPILE.c) $<
%.o: ../../common/linenoise/%.c
$(COMPILE.c) $<
%.o: ../../i386/libi386/%.c
$(COMPILE.c) $<
$(ROOT_BOOT)/%: %
$(INS.file)