1 # 2 # This file and its contents are supplied under the terms of the 3 # Common Development and Distribution License ("CDDL"), version 1.0. 4 # You may only use this file in accordance with the terms of version 5 # 1.0 of the CDDL. 6 # 7 # A full copy of the text of the CDDL should have accompanied this 8 # source. A copy of the CDDL is also available via the Internet at 9 # http://www.illumos.org/license/CDDL. 10 # 11 12 # 13 # Copyright 2016 Toomas Soome <tsoome@me.com> 14 # Copyright 2016 RackTop Systems. 15 # 16 17 include $(SRC)/Makefile.master 18 19 CC= $(GCC_ROOT)/bin/gcc 20 LD= $(GNU_ROOT)/bin/gld 21 OBJCOPY= $(GNU_ROOT)/bin/gobjcopy 22 OBJDUMP= $(GNU_ROOT)/bin/gobjdump 23 24 PROG= loader.sym 25 MACHINE= $(MACH64) 26 27 # architecture-specific loader code 28 SRCS= autoload.c bootinfo.c conf.c copy.c devicename.c main.c self_reloc.c \ 29 smbios.c biosacpi.c vers.c 30 OBJS= autoload.o bootinfo.o conf.o copy.o devicename.o main.o self_reloc.o \ 31 smbios.o biosacpi.o vers.o 32 33 ASFLAGS=-m64 -fPIC 34 CFLAGS= -O2 35 CPPFLAGS= -nostdinc -I../../../../include -I../../.. 36 CPPFLAGS += -I../../../../lib/libstand 37 38 include ../Makefile.inc 39 40 include arch/${MACHINE}/Makefile.inc 41 42 CPPFLAGS += -I. 43 CPPFLAGS += -I./arch/${MACHINE} 44 CPPFLAGS += -I./../include 45 CPPFLAGS += -I./../include/${MACHINE} 46 CPPFLAGS += -I./../../../contrib/dev/acpica/include 47 CPPFLAGS += -I./../../.. 48 CPPFLAGS += -I./../../i386/libi386 49 CPPFLAGS += -I./../../zfs 50 CPPFLAGS += -I./../../../cddl/boot/zfs 51 CPPFLAGS += -DEFI_ZFS_BOOT 52 CPPFLAGS += -DNO_PCI -DEFI -DTERM_EMU 53 54 LIBSTAND= ../../libstand/${MACHINE}/libstand.a 55 56 BOOT_FORTH= yes 57 CPPFLAGS += -DBOOT_FORTH -DSTAND 58 CPPFLAGS += -I$(SRC)/common/ficl 59 CPPFLAGS += -I../../ficl 60 LIBFICL= ../../ficl/${MACHINE}/libficl.a 61 62 CPPFLAGS += -I../../zfs 63 LIBZFSBOOT= ../../zfs/${MACHINE}/libzfsboot.a 64 65 #LOADER_FDT_SUPPORT?= no 66 #.if ${MK_FDT} != "no" && ${LOADER_FDT_SUPPORT} != "no" 67 #CFLAGS+= -I${.CURDIR}/../../fdt 68 #CFLAGS+= -I${.OBJDIR}/../../fdt 69 #CFLAGS+= -DLOADER_FDT_SUPPORT 70 #LIBEFI_FDT= ${.OBJDIR}/../../efi/fdt/libefi_fdt.a 71 #LIBFDT= ${.OBJDIR}/../../fdt/libfdt.a 72 #.endif 73 74 # Always add MI sources 75 include ./Makefile.common 76 CPPFLAGS += -I../../common 77 78 FILES= loader.efi 79 FILEMODE= 0555 80 ROOT_BOOT= $(ROOT)/boot 81 ROOTBOOTFILES=$(FILES:%=$(ROOT_BOOT)/%) 82 83 LDSCRIPT= ./arch/${MACHINE}/ldscript.${MACHINE} 84 LDFLAGS = -nostdlib --eh-frame-hdr -znocombreloc 85 LDFLAGS += -shared --hash-style=both --enable-new-dtags 86 LDFLAGS += -T${LDSCRIPT} -Bsymbolic 87 88 CLEANFILES= vers.c loader.efi 89 90 NEWVERSWHAT= "EFI loader" ${MACHINE} 91 92 all: loader.efi 93 94 loader.efi: machine x86 95 96 install: all $(ROOTBOOTFILES) 97 98 vers.c: ../../common/newvers.sh ../../efi/loader/version 99 $(SH) ../../common/newvers.sh version ${NEWVERSWHAT} 100 101 EFI_TARGET= pei-x86-64 102 103 loader.efi: loader.sym 104 if [ `${OBJDUMP} -t loader.sym | fgrep '*UND*' | wc -l` != 0 ]; then \ 105 ${OBJDUMP} -t loader.sym | fgrep '*UND*'; \ 106 exit 1; \ 107 fi 108 ${OBJCOPY} --readonly-text -j .peheader -j .text -j .sdata -j .data \ 109 -j .dynamic -j .dynsym -j .rel.dyn \ 110 -j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \ 111 --output-target=${EFI_TARGET} --subsystem efi-app loader.sym $@ 112 113 LIBEFI= ../libefi/libefi.a 114 115 DPADD= ${LIBFICL} ${LIBZFSBOOT} ${LIBEFI} ${LIBFDT} ${LIBEFI_FDT} \ 116 ${LIBSTAND} ${LDSCRIPT} 117 LDADD= ${LIBFICL} ${LIBZFSBOOT} ${LIBEFI} ${LIBFDT} ${LIBEFI_FDT} \ 118 ${LIBSTAND} 119 120 121 loader.sym: $(OBJS) $(DPADD) 122 $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LDADD) 123 124 beforedepend ${OBJS}: machine 125 126 CLEANFILES += machine x86 127 128 machine: 129 $(RM) machine 130 $(SYMLINK) ../../../${MACHINE}/include machine 131 132 x86: 133 $(RM) x86 134 $(SYMLINK) ../../../x86/include x86 135 136 clean clobber: 137 $(RM) $(CLEANFILES) $(OBJS) loader.sym loader.efi 138 139 %.o: %.c 140 $(COMPILE.c) $< 141 142 %.o: ./arch/${MACHINE}/%.c 143 $(COMPILE.c) $< 144 145 %.o: ./arch/${MACHINE}/%.S 146 $(COMPILE.S) $< 147 148 %.o: ../../common/%.c 149 $(COMPILE.c) $< 150 151 %.o: ../../common/linenoise/%.c 152 $(COMPILE.c) $< 153 154 %.o: ../../i386/libi386/%.c 155 $(COMPILE.c) $< 156 157 $(ROOT_BOOT)/%: % 158 $(INS.file)