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