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 OBJCOPY= /code/binutils-gdb/binutils/objcopy 24 OBJDUMP= /code/binutils-gdb/binutils/objdump 25 26 PROG= boot1.sym 27 MACHINE=$(MACH64) 28 29 # need to update this to trigger installboot updates. 30 BUILDDATE :sh = TZ=UTC date +%Y%m%dT%H%M%SZ 31 BOOT1_VERSION= 1.1:$(BUILDDATE) 32 33 # architecture-specific loader code 34 SRCS= boot1.c self_reloc.c start.S ufs_module.c zfs_module.c devopen.c 35 OBJS= boot1.o self_reloc.o start.o ufs_module.o zfs_module.o devopen.o 36 37 ASFLAGS=-m64 -fPIC 38 CFLAGS= -O2 39 CPPFLAGS= -nostdinc 40 CPPFLAGS += -I. 41 CPPFLAGS += -I./../include 42 CPPFLAGS += -I./../include/${MACHINE} 43 CPPFLAGS += -I./../../../contrib/dev/acpica/include 44 CPPFLAGS += -I./../../../../include 45 CPPFLAGS += -I./../../../sys 46 CPPFLAGS += -I./../../.. 47 CPPFLAGS += -I../../../../lib/libstand 48 CPPFLAGS += -DEFI_UFS_BOOT 49 # CPPFLAGS += -DEFI_DEBUG 50 51 CPPFLAGS += -I./../../zfs/ 52 CPPFLAGS += -I./../../../cddl/boot/zfs/ 53 CPPFLAGS += -DEFI_ZFS_BOOT 54 55 # Always add MI sources and REGULAR efi loader bits 56 CPPFLAGS += -I./../../common 57 58 include ../Makefile.inc 59 60 FILES= boot1.efi 61 FILEMODE= 0555 62 ROOT_BOOT= $(ROOT)/boot 63 ROOTBOOTFILES=$(FILES:%=$(ROOT_BOOT)/%) 64 65 LDSCRIPT= ./../loader/arch/${MACHINE}/ldscript.${MACHINE} 66 LDFLAGS= -nostdlib --eh-frame-hdr -znocombreloc 67 LDFLAGS += -shared --hash-style=both --enable-new-dtags 68 LDFLAGS += -T${LDSCRIPT} -Bsymbolic 69 70 all: boot1.efi 71 72 boot1.efi: machine x86 73 74 install: all $(ROOTBOOTFILES) 75 76 # 77 # Add libstand for the runtime functions used by the compiler - for example 78 # __aeabi_* (arm) or __divdi3 (i386). 79 # as well as required string and memory functions for all platforms. 80 # 81 LIBSTAND= ../../libstand/$(MACH64)/libstand.a 82 LIBZFSBOOT= ../../zfs/$(MACH64)/libzfsboot.a 83 DPADD= ${LIBSTAND} ${LIBZFSBOOT} 84 LDADD= -L../../zfs/$(MACH64) -lzfsboot -L../../libstand/$(MACH64) -lstand 85 86 DPADD += ${LDSCRIPT} 87 88 EFI_TARGET= pei-x86-64 89 90 boot1.efi: ${PROG} 91 if [ `${OBJDUMP} -t ${PROG} | fgrep '*UND*' | wc -l` != 0 ]; then \ 92 ${OBJDUMP} -t ${PROG} | fgrep '*UND*'; \ 93 exit 1; \ 94 fi 95 ${OBJCOPY} --readonly-text -j .peheader -j .text -j .sdata -j .data \ 96 -j .dynamic -j .dynsym -j .rel.dyn \ 97 -j .rela.dyn -j .reloc -j .eh_frame \ 98 --output-target=${EFI_TARGET} --subsystem efi-app ${PROG} $@ 99 100 boot1.o: ./../../common/ufsread.c 101 102 CLEANFILES= boot1.efi ${PROG} 103 104 ${PROG}: $(OBJS) $(DPADD) 105 $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LDADD) 106 107 CLEANFILES += machine x86 108 109 machine: 110 $(RM) machine 111 $(SYMLINK) ./../../../${MACHINE}/include machine 112 113 x86: 114 $(RM) x86 115 $(SYMLINK) ./../../../x86/include x86 116 117 clean clobber: 118 $(RM) $(CLEANFILES) $(OBJS) 119 120 %.o: ../loader/arch/${MACHINE}/%.S 121 $(COMPILE.S) $< 122 123 %.o: ../loader/%.c 124 $(COMPILE.c) $< 125 126 %.o: ../../common/%.c 127 $(COMPILE.c) $< 128 129 $(ROOT_BOOT)/%: % 130 $(INS.file)