1 # For test target.
   2 TESTS = size_test
   3 noinst_SCRIPTS = $(TESTS)
   4 
   5 # For dist target.
   6 noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \
   7         fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
   8         imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
   9         nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
  10         terminfo.h tparm.h nbi.h ufs.h ufs2.h vstafs.h xfs.h graphics.h \
  11         fsys_zfs.h
  12 EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
  13 
  14 # For <stage1.h>.
  15 INCLUDES = -I$(top_srcdir)/stage1
  16 
  17 # The library for /sbin/grub.
  18 noinst_LIBRARIES = libgrub.a
  19 libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \
  20         disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
  21         fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs.c fsys_ufs2.c \
  22         fsys_zfs.c zfs_fletcher.c zfs_lzjb.c zfs_lz4.c zfs_sha256.c \
  23         zfs_edonr.c fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c \
  24         stage2.c terminfo.c tparm.c graphics.c
  25 libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
  26         -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
  27         -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
  28         -DFSYS_UFS=1 -DFSYS_UFS2=1 -DFSYS_ZFS=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \
  29         -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 \
  30 
  31 # Stage 2 and Stage 1.5's.
  32 pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
  33 
  34 EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
  35 
  36 if DISKLESS_SUPPORT
  37 pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
  38         ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
  39         reiserfs_stage1_5 ufs_stage1_5 ufs2_stage1_5 zfs_stage1_5 vstafs_stage1_5 \
  40         xfs_stage1_5 nbgrub pxegrub
  41 noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless
  42 noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
  43         e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
  44         iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
  45         reiserfs_stage1_5.exec ufs_stage1_5.exec ufs2_stage1_5.exec \
  46         zfs_stage1_5.exec \
  47         vstafs_stage1_5.exec xfs_stage1_5.exec \
  48         nbloader.exec pxeloader.exec diskless.exec
  49 else
  50 pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
  51         ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
  52         reiserfs_stage1_5 ufs_stage1_5 ufs2_stage1_5 zfs_stage1_5 vstafs_stage1_5 \
  53         xfs_stage1_5
  54 noinst_DATA = pre_stage2 start start_eltorito
  55 noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
  56         e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
  57         iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
  58         reiserfs_stage1_5.exec ufs_stage1_5.exec ufs2_stage1_5.exec \
  59         zfs_stage1_5.exec vstafs_stage1_5.exec xfs_stage1_5.exec
  60 endif
  61 MOSTLYCLEANFILES = $(noinst_PROGRAMS)
  62 
  63 PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200
  64 START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
  65 NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0
  66 PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
  67 START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
  68 
  69 if NETBOOT_SUPPORT
  70 NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
  71 else
  72 NETBOOT_FLAGS =
  73 endif
  74 
  75 if SERIAL_SUPPORT
  76 SERIAL_FLAGS = -DSUPPORT_SERIAL=1
  77 else
  78 SERIAL_FLAGS =
  79 endif
  80 
  81 if HERCULES_SUPPORT
  82 HERCULES_FLAGS = -DSUPPORT_HERCULES=1
  83 else
  84 HERCULES_FLAGS =
  85 endif
  86 
  87 if GRAPHICS_SUPPORT
  88 GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1
  89 else
  90 GRAPHICS_FLAGS =
  91 endif
  92 
  93 STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
  94         $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS)
  95 
  96 STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
  97 STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
  98 
  99 # For stage2 target.
 100 pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \
 101         cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
 102         fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
 103         fsys_reiserfs.c fsys_ufs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c \
 104         fsys_zfs.c zfs_fletcher.c zfs_lzjb.c zfs_lz4.c zfs_sha256.c \
 105         zfs_edonr.c gunzip.c hercules.c md5.c serial.c smp-imps.c stage2.c \
 106         terminfo.c tparm.c graphics.c
 107 pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
 108 pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
 109 pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
 110 
 111 if NETBOOT_SUPPORT
 112 pre_stage2_exec_LDADD = ../netboot/libdrivers.a
 113 endif
 114 
 115 if DISKLESS_SUPPORT
 116 BUILT_SOURCES = stage2_size.h diskless_size.h
 117 else
 118 BUILT_SOURCES = stage2_size.h
 119 endif
 120 
 121 CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES)
 122 
 123 stage2_size.h: pre_stage2
 124         -rm -f stage2_size.h
 125         set dummy `ls -l pre_stage2`; \
 126         echo "#define STAGE2_SIZE $$6" > stage2_size.h
 127 
 128 start_exec_SOURCES = start.S
 129 start_exec_CCASFLAGS = $(STAGE2_COMPILE)
 130 start_exec_LDFLAGS = $(START_LINK)
 131 
 132 # XXX: automake doesn't provide a way to specify dependencies for object
 133 # files explicitly, so we must write this by a general Makefile scheme.
 134 # If automake change the naming scheme for per-executable objects, this
 135 # will be broken.
 136 start_exec-start.$(OBJEXT): stage2_size.h
 137 
 138 stage2: pre_stage2 start
 139         -rm -f stage2
 140         cat start pre_stage2 > stage2
 141 
 142 start_eltorito_exec_SOURCES = start_eltorito.S
 143 start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE)
 144 start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK)
 145 
 146 start_eltorito_exec-start.$(OBJEXT): stage2_size.h
 147 
 148 stage2_eltorito: pre_stage2 start_eltorito
 149         -rm -f stage2_eltorito
 150         cat start_eltorito pre_stage2 > stage2_eltorito
 151 
 152 # For e2fs_stage1_5 target.
 153 e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
 154         stage1_5.c fsys_ext2fs.c bios.c
 155 e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
 156         -DNO_BLOCK_FILES=1
 157 e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
 158         -DNO_BLOCK_FILES=1
 159 e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 160 
 161 # For fat_stage1_5 target.
 162 fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
 163         stage1_5.c fsys_fat.c bios.c
 164 fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
 165         -DNO_BLOCK_FILES=1
 166 fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
 167         -DNO_BLOCK_FILES=1
 168 fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 169 
 170 # For ffs_stage1_5 target.
 171 ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
 172         stage1_5.c fsys_ffs.c bios.c
 173 ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
 174         -DNO_BLOCK_FILES=1
 175 ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
 176         -DNO_BLOCK_FILES=1
 177 ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 178 
 179 # For ufs_stage1_5 target.
 180 ufs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
 181         stage1_5.c fsys_ufs.c bios.c
 182 ufs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS=1 \
 183         -DNO_BLOCK_FILES=1
 184 ufs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS=1 \
 185         -DNO_BLOCK_FILES=1
 186 ufs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 187 
 188 # For ufs2_stage1_5 target.
 189 ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
 190         stage1_5.c fsys_ufs2.c bios.c
 191 ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
 192         -DNO_BLOCK_FILES=1
 193 ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
 194         -DNO_BLOCK_FILES=1
 195 ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 196 
 197 # For zfs_stage1_5 target.
 198 zfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
 199         stage1_5.c fsys_zfs.c zfs_fletcher.c zfs_lzjb.c zfs_lz4.c \
 200         zfs_sha256.c zfs_edonr.c bios.c
 201 zfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ZFS=1 \
 202         -DNO_BLOCK_FILES=1
 203 zfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ZFS=1 \
 204         -DNO_BLOCK_FILES=1
 205 zfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 206 
 207 # For minix_stage1_5 target.
 208 minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
 209         stage1_5.c fsys_minix.c bios.c
 210 minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
 211         -DNO_BLOCK_FILES=1
 212 minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
 213         -DNO_BLOCK_FILES=1
 214 minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 215 
 216 # For reiserfs_stage1_5 target.
 217 reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
 218         disk_io.c stage1_5.c fsys_reiserfs.c bios.c
 219 reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
 220         -DNO_BLOCK_FILES=1
 221 reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
 222         -DNO_BLOCK_FILES=1
 223 reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 224 
 225 # For vstafs_stage1_5 target.
 226 vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
 227         disk_io.c stage1_5.c fsys_vstafs.c bios.c
 228 vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
 229         -DNO_BLOCK_FILES=1
 230 vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
 231         -DNO_BLOCK_FILES=1
 232 vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 233 
 234 # For jfs_stage1_5 target.
 235 jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
 236         disk_io.c stage1_5.c fsys_jfs.c bios.c
 237 jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
 238         -DNO_BLOCK_FILES=1
 239 jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
 240         -DNO_BLOCK_FILES=1
 241 jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 242 
 243 # For xfs_stage1_5 target.
 244 xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
 245         disk_io.c stage1_5.c fsys_xfs.c bios.c
 246 xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
 247         -DNO_BLOCK_FILES=1
 248 xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
 249         -DNO_BLOCK_FILES=1
 250 xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 251 
 252 # For iso9660_stage1_5 target.
 253 iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \
 254         disk_io.c stage1_5.c fsys_iso9660.c bios.c
 255 iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
 256         -DNO_BLOCK_FILES=1
 257 iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
 258         -DNO_BLOCK_FILES=1
 259 iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
 260 
 261 # For diskless target.
 262 diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
 263 diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
 264         -DSUPPORT_DISKLESS=1
 265 diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
 266         -DSUPPORT_DISKLESS=1
 267 diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK)
 268 diskless_exec_LDADD = ../netboot/libdrivers.a
 269 
 270 diskless_size.h: diskless
 271         -rm -f $@
 272         set dummy `ls -l $^`; \
 273         echo "#define DISKLESS_SIZE $$6" > $@
 274 
 275 # For nbloader target.
 276 nbloader_exec_SOURCES = nbloader.S
 277 nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
 278 nbloader_exec_LDFLAGS = $(NBLOADER_LINK)
 279 
 280 # XXX: See the comment for start_exec-start.o.
 281 nbloader_exec-nbloader.$(OBJEXT): diskless_size.h
 282 
 283 # For nbgrub target.
 284 nbgrub: nbloader diskless
 285         -rm -f $@
 286         cat $^ > $@
 287 
 288 # For pxeloader target.
 289 pxeloader_exec_SOURCES = pxeloader.S
 290 pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
 291 pxeloader_exec_LDFLAGS = $(PXELOADER_LINK)
 292 
 293 # XXX: See the comment for start_exec-start.o.
 294 pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h
 295 
 296 # For pxegrub target.
 297 pxegrub: pxeloader diskless
 298         -rm -f $@
 299         cat $^ > $@
 300 
 301 # General rule for making a raw binary.
 302 SUFFIXES = .exec
 303 .exec:
 304         $(OBJCOPY) -O binary $< $@