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 2015 Toomas Soome <tsoome@me.com>
  14 # Copyright 2016 RackTop Systems.
  15 #
  16 
  17 include $(SRC)/Makefile.master
  18 include $(SRC)/boot/Makefile.version
  19 
  20 CFLAGS=         -O2
  21 CPPFLAGS=       -D_STANDALONE -nostdinc -I../../../../include -I../../..
  22 CPPFLAGS +=     -I$(SRC)/uts/intel/sys/acpi
  23 LOADER=         zfsloader
  24 NEWVERSWHAT=    "ZFS enabled bootstrap loader" x86
  25 MAN=
  26 
  27 # Set by zfsloader Makefile
  28 CPPFLAGS +=     -DLOADER_ZFS_SUPPORT -I../../zfs
  29 CPPFLAGS +=     -I../libi386
  30 LIBZFSBOOT=     ../../zfs/i386/libzfsboot.a
  31 LIBI386=        ../libi386/libi386.a
  32 
  33 # loader.help build needs better awk
  34 AWK=            /usr/xpg4/bin/awk
  35 LD=             $(GNU_ROOT)/bin/gld
  36 CC=             $(GCC_ROOT)/bin/gcc
  37 OBJCOPY=        $(GNU_ROOT)/bin/gobjcopy
  38 GSTRIP=         $(GNU_ROOT)/bin/gstrip
  39 ROOT_BOOT=      $(ROOT)/boot
  40 ROOT_BOOT_DEFAULTS=     $(ROOT)/boot/defaults
  41 ROOT_BOOT_FORTH=        $(ROOT)/boot/forth
  42 ROOT_BOOT_CONF=         $(ROOT)/boot/conf.d
  43 ROOTBOOTFILES=$(FILES:%=$(ROOT_BOOT)/%)
  44 ROOTBOOTFORTH=$(FORTH:%=$(ROOT_BOOT_FORTH)/%)
  45 ROOTBOOTDEFAULTS=$(DEFFILES:%=$(ROOT_BOOT_DEFAULTS)/%)
  46 FILEMODE=0444
  47 
  48 all: ${LOADER} loader.help
  49 
  50 install: all $(ROOTBOOTLOADER)
  51 
  52 PROG=           ${LOADER}.sym
  53 INTERNALPROG=
  54 
  55 # architecture-specific loader code
  56 SRCS=           main.c conf.c vers.c chain.c
  57 
  58 CPPFLAGS +=     -DLOADER_GZIP_SUPPORT
  59 
  60 # Enable BootForth
  61 CPPFLAGS +=     -DBOOT_FORTH -I$(SRC)/common/ficl -I../../ficl
  62 LIBFICL=        ../../ficl/i386/libficl.a
  63 
  64 # Always add MI sources
  65 SRCS += boot.c commands.c console.c devopen.c interp.c
  66 SRCS += interp_backslash.c interp_parse.c ls.c misc.c
  67 SRCS += module.c panic.c linenoise.c multiboot2.c
  68 
  69 SRCS += load_elf32.c load_elf32_obj.c reloc_elf32.c
  70 SRCS += load_elf64.c load_elf64_obj.c reloc_elf64.c
  71 
  72 SRCS += dev_net.c
  73 
  74 SRCS += disk.c part.c
  75 CPPFLAGS += -DLOADER_DISK_SUPPORT
  76 SRCS += crc32.c
  77 CPPFLAGS += -DLOADER_GPT_SUPPORT
  78 CPPFLAGS += -DLOADER_MBR_SUPPORT
  79 
  80 SRCS +=  bcache.c
  81 
  82 SRCS += isapnp.c
  83 SRCS += pnp.c
  84 
  85 # Forth interpreter
  86 SRCS += interp_forth.c
  87 
  88 MAN +=  loader.8
  89 MAN +=  zfsloader.8
  90 CPPFLAGS +=     -I../../common
  91 CPPFLAGS +=     -I.
  92 
  93 CLEANFILES=     vers.c ${LOADER} ${LOADER}.sym ${LOADER}.bin loader.help
  94 
  95 CFLAGS +=       -Wall
  96 LDFLAGS=        -static -Ttext 0x0
  97 
  98 # i386 standalone support library
  99 CPPFLAGS +=     -I.. -I../../../../lib/libstand
 100 LIBSTAND=       ../../libstand/i386/libstand.a
 101 
 102 # BTX components
 103 CPPFLAGS +=     -I../btx/lib
 104 
 105 # Debug me!
 106 #CFLAGS+=       -g
 107 #LDFLAGS+=      -g
 108 
 109 include ../Makefile.inc
 110 
 111 # For multiboot2.h, must be last, to avoid conflicts
 112 CPPFLAGS +=     -I$(SRC)/uts/common
 113 
 114 vers.c: ../../common/newvers.sh $(SRC)/boot/Makefile.version
 115         $(SH) ../../common/newvers.sh ${LOADER_VERSION} ${NEWVERSWHAT}
 116 
 117 ${LOADER}: ${LOADER}.bin ${BTXLDR} ${BTXKERN}
 118         $(BTXLD) -f aout -e ${LOADER_ADDRESS} -o $@ -l ${BTXLDR} \
 119                 -b ${BTXKERN} ${LOADER}.bin
 120 
 121 ${LOADER}.bin: ${LOADER}.sym
 122         $(CP) $^ $@
 123         $(GSTRIP) -R .comment -R .note $@
 124 
 125 loader.help: ../../common/help.common help.i386
 126         $(CAT) $^ | $(AWK) -f ../../common/merge_help.awk > $@
 127 
 128 FILES=  ${LOADER} loader.help
 129 
 130 include ../../forth/Makefile.inc
 131 FORTH +=        pcibios.4th
 132 
 133 FILES +=        loader.rc
 134 FORTH +=        menu.rc
 135 
 136 # XXX crt0.o needs to be first for pxeboot(8) to work
 137 
 138 DPADD=  ${LIBFICL} ${LIBZFSBOOT} ${LIBI386} ${LIBSTAND}
 139 LDADD=  ${LIBFICL} ${LIBZFSBOOT} ${LIBI386} ${LIBSTAND}
 140 
 141 CLEANFILES +=   machine x86
 142 
 143 machine:
 144         $(RM) machine
 145         $(SYMLINK) ../../../i386/include machine
 146 
 147 x86:
 148         $(RM) x86
 149         $(SYMLINK) ../../../x86/include x86
 150 
 151 OBJS=           $(SRCS:%.c=%.o)
 152 
 153 ${OBJS}: machine x86
 154 
 155 ${PROG}: ${OBJS} $(LDADD)
 156         $(LD) $(LDFLAGS) -o $@ $(BTXCRT) $(OBJS) $(LDADD)
 157 
 158 clean: clobber
 159 clobber:
 160         $(RM) $(CLEANFILES) $(OBJS)
 161 
 162 install: all $(ROOT_BOOT_DEFAULTS) $(ROOT_BOOT_FORTH) \
 163         $(ROOTBOOTFILES) $(ROOTBOOTDEFAULTS) $(ROOT_BOOT_CONF) $(ROOTBOOTFORTH)
 164 
 165 %.o:    ../../common/%.c
 166         $(COMPILE.c) -o $@ $<
 167 
 168 %.o:    ../../common/linenoise/%.c
 169         $(COMPILE.c) -o $@ $<
 170 
 171 $(ROOT_BOOT)/%: ../../forth/%
 172         $(INS.file)
 173 
 174 $(ROOT_BOOT_DEFAULTS)/%: ../../forth/%
 175         $(INS.file)
 176 
 177 $(ROOT_BOOT_FORTH)/%: ../../forth/%
 178         $(INS.file)
 179 
 180 $(ROOT_BOOT_DEFAULTS) $(ROOT_BOOT_CONF) $(ROOT_BOOT_FORTH):
 181         $(INS.dir)