AutoGen definitions Makefile.tpl;

script = {
  installdir = noinst;
  name = gensyminfo.sh;
  common = gensyminfo.sh.in;
};

script = {
  installdir = noinst;
  name = genmod.sh;
  common = genmod.sh.in;
};

script = {
  installdir = noinst;
  name = modinfo.sh;
  common = modinfo.sh.in;
};

script = {
  installdir = platform;
  name = gmodule.pl;
  common = gmodule.pl.in;
};

script = {
  installdir = platform;
  name = gdb_grub;
  common = gdb_grub.in;
};

kernel = {
  name = kernel;

  nostrip = emu;

  emu_ldflags              = '-Wl,-r,-d';
  i386_efi_ldflags         = '-Wl,-r,-d';
  i386_efi_stripflags      = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
  x86_64_efi_ldflags       = '-Wl,-r,-d';
  x86_64_efi_stripflags    = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';

  ia64_efi_cflags = '-fno-builtin -fpic -minline-int-divide-max-throughput';
  ia64_efi_ldflags = '-Wl,-r,-d';
  ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';

  i386_pc_ldflags          = '$(TARGET_IMG_LDFLAGS)';
  i386_pc_ldflags          = '$(TARGET_IMG_BASE_LDOPT),0x9000';

  i386_qemu_ldflags        = '$(TARGET_IMG_LDFLAGS)';
  i386_qemu_ldflags        = '$(TARGET_IMG_BASE_LDOPT),0x8200';

  ldadd = '$(LDADD_KERNEL)';

  i386_coreboot_ldflags    = '-Wl,-Ttext=0x8200';
  i386_multiboot_ldflags   = '-Wl,-Ttext=0x8200';
  i386_ieee1275_ldflags    = '-Wl,-Ttext=0x10000';
  mips_loongson_ldflags    = '-Wl,-Ttext,0x80200000';
  powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
  sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
  mips_arc_ldflags    = '-Wl,-Ttext,0x8bd00000';
  mips_qemu_mips_ldflags    = '-Wl,-Ttext,0x80200000';

  mips_loongson_cppflags = '-DUSE_ASCII_FAILBACK';
  i386_qemu_cppflags     = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
  emu_cflags = '$(CFLAGS_GNULIB)';
  emu_cppflags = '$(CPPFLAGS_GNULIB)';

  i386_pc_startup = kern/i386/pc/startup.S;
  i386_efi_startup = kern/i386/efi/startup.S;
  x86_64_efi_startup = kern/x86_64/efi/startup.S;
  i386_qemu_startup = kern/i386/qemu/startup.S;
  i386_ieee1275_startup = kern/i386/ieee1275/startup.S;
  i386_coreboot_startup = kern/i386/coreboot/startup.S;
  i386_multiboot_startup = kern/i386/coreboot/startup.S;
  mips_startup = kern/mips/startup.S;
  sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S;
  powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S;

  common = kern/command.c;
  common = kern/corecmd.c;
  common = kern/device.c;
  common = kern/disk.c;
  common = kern/dl.c;
  common = kern/env.c;
  common = kern/err.c;
  common = kern/file.c;
  common = kern/fs.c;
  common = kern/list.c;
  common = kern/main.c;
  common = kern/misc.c;
  common = kern/parser.c;
  common = kern/partition.c;
  common = kern/rescue_parser.c;
  common = kern/rescue_reader.c;
  common = kern/term.c;

  noemu = kern/mm.c;
  noemu = kern/time.c;
  noemu = kern/generic/millisleep.c;

  noemu_nodist = symlist.c;

  i386_pc = kern/generic/rtc_get_time_ms.c;
  mips = kern/generic/rtc_get_time_ms.c;

  ieee1275 = disk/ieee1275/ofdisk.c;
  ieee1275 = kern/ieee1275/cmain.c;
  ieee1275 = kern/ieee1275/ieee1275.c;
  ieee1275 = kern/ieee1275/mmap.c;
  ieee1275 = kern/ieee1275/openfw.c;
  ieee1275 = term/ieee1275/console.c;
  ieee1275 = kern/ieee1275/init.c;

  terminfoinkernel = term/terminfo.c;
  terminfoinkernel = term/tparm.c;
  terminfoinkernel = commands/extcmd.c;
  terminfoinkernel = lib/arg.c;

  i386 = kern/i386/dl.c;

  i386_coreboot_multiboot_qemu = kern/i386/coreboot/init.c;
  i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c;

  x86 = kern/i386/pit.c;

  efi = disk/efi/efidisk.c;
  efi = kern/efi/efi.c;
  efi = kern/efi/init.c;
  efi = kern/efi/mm.c;
  efi = term/efi/console.c;

  i386_efi = kern/i386/tsc.c;
  i386_efi = kern/i386/efi/init.c;
  i386_efi = bus/pci.c;

  x86_64_efi = kern/i386/tsc.c;
  x86_64_efi = kern/x86_64/dl.c;
  x86_64_efi = kern/x86_64/efi/callwrap.S;
  x86_64_efi = kern/i386/efi/init.c;
  x86_64_efi = bus/pci.c;

  ia64_efi = kern/ia64/efi/startup.S;
  ia64_efi = kern/ia64/efi/init.c;
  ia64_efi = kern/ia64/dl.c;
  ia64_efi = kern/ia64/dl_helper.c;

  i386_pc = kern/i386/pc/init.c;
  i386_pc = kern/i386/pc/mmap.c;
  i386_pc = kern/i386/tsc.c;
  i386_pc = term/i386/pc/console.c;

  i386_qemu = bus/pci.c;
  i386_qemu = kern/vga_init.c;
  i386_qemu = kern/i386/qemu/mmap.c;
  i386_qemu = kern/i386/tsc.c;

  i386_coreboot = kern/i386/coreboot/mmap.c;
  i386_coreboot = kern/i386/tsc.c;

  i386_multiboot = kern/i386/multiboot_mmap.c;
  i386_multiboot = kern/i386/tsc.c;

  mips = kern/mips/cache.S;
  mips = kern/mips/dl.c;
  mips = kern/mips/init.c;

  mips_qemu_mips = kern/mips/qemu_mips/init.c;
  mips_qemu_mips = term/ns8250.c;
  mips_qemu_mips = term/serial.c;
  mips_qemu_mips = term/at_keyboard.c;
  mips_qemu_mips = commands/keylayouts.c;
  mips_qemu_mips = term/i386/pc/vga_text.c;
  mips_qemu_mips = kern/vga_init.c;

  mips_arc = kern/mips/arc/init.c;
  mips_arc = term/arc/console.c;
  mips_arc = disk/arc/arcdisk.c;

  mips_loongson = term/ns8250.c;
  mips_loongson = bus/bonito.c;
  mips_loongson = bus/cs5536.c;
  mips_loongson = bus/pci.c;
  mips_loongson = kern/mips/loongson/init.c;
  mips_loongson = term/at_keyboard.c;
  mips_loongson = term/serial.c;
  mips_loongson = video/sm712.c;
  mips_loongson = video/sis315pro.c;
  mips_loongson = video/radeon_fuloong2e.c;
  extra_dist = video/sm712_init.c;
  extra_dist = video/sis315_init.c;
  mips_loongson = commands/keylayouts.c;

  powerpc_ieee1275 = kern/powerpc/cache.S;
  powerpc_ieee1275 = kern/powerpc/dl.c;

  sparc64_ieee1275 = kern/sparc64/cache.S;
  sparc64_ieee1275 = kern/sparc64/dl.c;
  sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c;

  emu = disk/host.c;
  emu = gnulib/progname.c;
  emu = gnulib/error.c;
  emu = kern/emu/cache_s.S;
  emu = kern/emu/hostdisk.c;
  emu = kern/emu/hostfs.c;
  emu = kern/emu/main.c;
  emu = kern/emu/argp_common.c;
  emu = kern/emu/misc.c;
  emu = kern/emu/mm.c;
  emu = kern/emu/time.c;
  emu = kern/emu/cache.c;
  emu = term/emu/console.c;

  videoinkernel = term/gfxterm.c;
  videoinkernel = font/font.c;
  videoinkernel = font/font_cmd.c;
  videoinkernel = io/bufio.c;
  videoinkernel = video/bitmap.c;
  videoinkernel = video/bitmap_scale.c;
  videoinkernel = video/colors.c;
  videoinkernel = video/fb/fbblit.c;
  videoinkernel = video/fb/fbfill.c;
  videoinkernel = video/fb/fbutil.c;
  videoinkernel = video/fb/video_fb.c;
  videoinkernel = video/video.c;

  videoinkernel = commands/boot.c;

  extra_dist = kern/i386/int.S;
  extra_dist = kern/i386/realmode.S;
  extra_dist = boot/i386/pc/lzma_decode.S;
  extra_dist = kern/mips/cache_flush.S;
};

program = {
  name = grub-emu;
  mansection = 1;

  emu = kern/emu/full.c;
  emu_nodist = grub_emu_init.c;

  ldadd = 'kernel.img$(EXEEXT)';
  ldadd = '$(MODULE_FILES)';
  ldadd = '$(LIBUTIL) $(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';

  enable = emu;
};

program = {
  name = grub-emu-lite;

  emu = kern/emu/lite.c;
  emu_nodist = symlist.c;

  ldadd = 'kernel.img$(EXEEXT)';
  ldadd = '$(LIBUTIL) $(LIBCURSES) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';

  enable = emu;
};

image = {
  name = boot;
  i386_pc = boot/i386/pc/boot.S;
  i386_qemu = boot/i386/qemu/boot.S;
  sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S;

  i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
  i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00';

  i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)';
  i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)';
  i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';

  sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big';
  sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000';

  objcopyflags = '-O binary';
  enable = i386_pc;
  enable = i386_qemu;
  enable = sparc64_ieee1275;
};

image = {
  name = cdboot;
  i386_pc = boot/i386/pc/cdboot.S;
  i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
  i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00';
  objcopyflags = '-O binary';
  enable = i386_pc;
};

image = {
  name = pxeboot;
  i386_pc = boot/i386/pc/pxeboot.S;

  i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
  i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00';

  objcopyflags = '-O binary';
  enable = i386_pc;
};

image = {
  name = diskboot;
  i386_pc = boot/i386/pc/diskboot.S;

  i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
  i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8000';

  sparc64_ieee1275 = boot/sparc64/ieee1275/diskboot.S;
  sparc64_ieee1275_ldflags = '-Wl,-Ttext=0x4200';

  objcopyflags = '-O binary';

  enable = i386_pc;
  enable = sparc64_ieee1275;
};

image = {
  name = lnxboot;
  i386_pc = boot/i386/pc/lnxboot.S;

  i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
  i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x6000';

  objcopyflags = '-O binary';
  enable = i386_pc;
};

image = {
  name = xz_decompress;
  mips = boot/mips/startup_raw.S;
  common = boot/decompressor/minilib.c;
  common = boot/decompressor/xz.c;
  common = lib/xzembed/xz_dec_bcj.c;
  common = lib/xzembed/xz_dec_lzma2.c;
  common = lib/xzembed/xz_dec_stream.c;

  cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1';

  objcopyflags = '-O binary';
  mips_loongson_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
  mips_qemu_mips_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
  mips_arc_ldflags = '-static-libgcc -Wl,-Ttext,0x8bc00000';
  ldadd = '-lgcc';
  cflags = '-Wno-unreachable-code -static-libgcc';
  enable = mips;
};

image = {
  name = none_decompress;
  mips = boot/mips/startup_raw.S;
  common = boot/decompressor/none.c;

  cppflags = '-DGRUB_EMBED_DECOMPRESSOR=1';

  objcopyflags = '-O binary';
  mips_loongson_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
  mips_qemu_mips_ldflags = '-static-libgcc -Wl,-Ttext,0x80100000';
  mips_arc_ldflags = '-static-libgcc -Wl,-Ttext,0x8bc00000';
  ldadd = '-lgcc';
  cflags = '-static-libgcc';
  enable = mips;
};

image = {
  name = lzma_decompress;
  i386_pc = boot/i386/pc/startup_raw.S;

  objcopyflags = '-O binary';
  ldflags = '$(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200';
  enable = i386_pc;
};

image = {
  name = fwstart;
  mips_loongson = boot/mips/loongson/fwstart.S;
  objcopyflags = '-O binary';
  ldflags = '-static-libgcc -lgcc -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
  enable = mips_loongson;
};

image = {
  name = fwstart_fuloong2f;
  mips_loongson = boot/mips/loongson/fuloong2f.S;
  objcopyflags = '-O binary';
  ldflags = '-static-libgcc -lgcc -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
  enable = mips_loongson;
};

module = {
  name = trig;
  common_nodist = trigtables.c;
  extra_dist = gentrigtables.c;
};

module = {
  name = cs5536;
  x86 = bus/cs5536.c;
  enable = x86;
};

module = {
  name = libusb;
  emu = bus/usb/emu/usb.c;
  enable = emu;
  condition = COND_GRUB_EMU_USB;
};

module = {
  name = lsspd;
  mips_loongson = commands/mips/loongson/lsspd.c;
  enable = mips_loongson;
};

module = {
  name = usb;
  common = bus/usb/usb.c;
  common = bus/usb/usbtrans.c;
  common = bus/usb/usbhub.c;
  enable = usb;
};

module = {
  name = emuusb;
  common = bus/usb/usb.c;
  condition = COND_GRUB_EMU_USB;
};

module = {
  name = usbserial_common;
  common = bus/usb/serial/common.c;
  enable = usb;
};

module = {
  name = usbserial_pl2303;
  common = bus/usb/serial/pl2303.c;
  enable = usb;
};

module = {
  name = usbserial_ftdi;
  common = bus/usb/serial/ftdi.c;
  enable = usb;
};

module = {
  name = uhci;
  common = bus/usb/uhci.c;
  enable = x86;
};

module = {
  name = ohci;
  common = bus/usb/ohci.c;
  enable = pci;
};

module = {
  name = ehci;
  common = bus/usb/ehci.c;
  enable = pci;
};

module = {
  name = pci;
  common = bus/pci.c;

  enable = i386_pc;
  enable = i386_ieee1275;
  enable = i386_coreboot;
  enable = i386_multiboot;
};

module = {
  name = emupci;
  common = bus/emu/pci.c;
  common = commands/lspci.c;

  condition = COND_GRUB_EMU_PCI;
};

module = {
  name = lsdev;
  common = commands/arc/lsdev.c;

  enable = mips_arc;
};

library = {
  name = libgnulib.a;
  common = gnulib/regex.c;
  cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
  cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
};

module = {
  name = cmostest;
  common = commands/i386/cmostest.c;
  enable = cmos;
};

module = {
  name = iorw;
  common = commands/iorw.c;
  enable = x86;
};

module = {
  name = regexp;
  common = commands/regexp.c;
  common = commands/wildcard.c;
  ldadd = libgnulib.a;
  cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
  cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
};

module = {
  name = acpi;

  common = commands/acpi.c;
  efi = commands/efi/acpi.c;
  i386_pc = commands/i386/pc/acpi.c;
  i386_coreboot = commands/i386/pc/acpi.c;
  i386_multiboot = commands/i386/pc/acpi.c;

  enable = efi;
  enable = i386_pc;
  enable = i386_coreboot;
  enable = i386_multiboot;
};

module = {
  name = lsacpi;

  common = commands/lsacpi.c;

  enable = efi;
  enable = i386_pc;
  enable = i386_coreboot;
  enable = i386_multiboot;
};

module = {
  name = lsefisystab;

  common = commands/efi/lsefisystab.c;

  enable = efi;
};

module = {
  name = lssal;

  common = commands/efi/lssal.c;

  enable = efi;
};

module = {
  name = lsefimmap;

  common = commands/efi/lsefimmap.c;

  enable = efi;
};

module = {
  name = lsefi;
  common = commands/efi/lsefi.c;
  enable = efi;
};

module = {
  name = efifwsetup;
  efi = commands/efi/efifwsetup.c;
  enable = efi;
};

module = {
  name = blocklist;
  common = commands/blocklist.c;
};

module = {
  name = boot;
  common = commands/boot.c;
  i386_pc = lib/i386/pc/biosnum.c;
  enable = videomodules;
};

module = {
  name = cat;
  common = commands/cat.c;
};

module = {
  name = cmp;
  common = commands/cmp.c;
};

module = {
  name = configfile;
  common = commands/configfile.c;
};

module = {
  name = cpuid;
  x86 = commands/i386/cpuid.c;
  enable = x86;
};

module = {
  name = date;
  common = commands/date.c;
};

module = {
  name = drivemap;

  i386_pc = commands/i386/pc/drivemap.c;
  i386_pc = commands/i386/pc/drivemap_int13h.S;
  enable = i386_pc;
};

module = {
  name = echo;
  common = commands/echo.c;
};

module = {
  name = extcmd;
  common = commands/extcmd.c;
  common = lib/arg.c;
  enable = terminfomodule;
};

module = {
  name = fixvideo;
  common = commands/efi/fixvideo.c;
  enable = i386_efi;
  enable = x86_64_efi;
};

module = {
  name = gptsync;
  common = commands/gptsync.c;
};

module = {
  name = halt;
  nopc = commands/halt.c;
  i386_pc = commands/i386/pc/halt.c;
  i386_pc = commands/acpihalt.c;
  i386_coreboot = commands/acpihalt.c;
  i386_multiboot = commands/acpihalt.c;
  i386_efi = commands/acpihalt.c;
  x86_64_efi = commands/acpihalt.c;
  i386_multiboot = lib/i386/halt.c;
  i386_coreboot = lib/i386/halt.c;
  i386_qemu = lib/i386/halt.c;
  efi = lib/efi/halt.c;
  ieee1275 = lib/ieee1275/halt.c;
  emu = lib/emu/halt.c;
};

module = {
  name = reboot;
  i386 = lib/i386/reboot.c;
  i386 = lib/i386/reboot_trampoline.S;
  ia64_efi = lib/efi/reboot.c;
  x86_64_efi = lib/efi/reboot.c;
  powerpc_ieee1275 = lib/ieee1275/reboot.c;
  sparc64_ieee1275 = lib/ieee1275/reboot.c;
  mips_arc = lib/mips/arc/reboot.c;
  mips_loongson = lib/mips/loongson/reboot.c;
  mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
  common = commands/reboot.c;
};

module = {
  name = hashsum;
  common = commands/hashsum.c;
};

module = {
  name = hdparm;
  common = commands/hdparm.c;
  common = lib/hexdump.c;
  enable = pci;
  enable = mips_qemu_mips;
};

module = {
  name = help;
  common = commands/help.c;
};

module = {
  name = hexdump;
  common = commands/hexdump.c;
  common = lib/hexdump.c;
};

module = {
  name = keystatus;
  common = commands/keystatus.c;
};

module = {
  name = loadbios;
  common = commands/efi/loadbios.c;
  enable = i386_efi;
  enable = x86_64_efi;
};

module = {
  name = loadenv;
  common = commands/loadenv.c;
  common = lib/envblk.c;
};

module = {
  name = ls;
  common = commands/ls.c;
};

module = {
  name = lsmmap;
  common = commands/lsmmap.c;
};

module = {
  name = lspci;
  common = commands/lspci.c;

  enable = pci;
};

module = {
  name = memrw;
  common = commands/memrw.c;
};

module = {
  name = minicmd;
  common = commands/minicmd.c;
};

module = {
  name = parttool;
  common = commands/parttool.c;
};

module = {
  name = password;
  common = commands/password.c;
};

module = {
  name = password_pbkdf2;
  common = commands/password_pbkdf2.c;
};

module = {
  name = play;
  x86 = commands/i386/pc/play.c;
  enable = x86;
};

module = {
  name = probe;
  common = commands/probe.c;
};

module = {
  name = read;
  common = commands/read.c;
};

module = {
  name = search;
  common = commands/search_wrap.c;
  extra_dist = commands/search.c;
};

module = {
  name = search_fs_file;
  common = commands/search_file.c;
};

module = {
  name = search_fs_uuid;
  common = commands/search_uuid.c;
};

module = {
  name = search_label;
  common = commands/search_label.c;
};

module = {
  name = setpci;
  common = commands/setpci.c;
  enable = pci;
};

module = {
  name = sleep;
  common = commands/sleep.c;
};

module = {
  name = suspend;
  ieee1275 = commands/ieee1275/suspend.c;
  enable = i386_ieee1275;
  enable = powerpc_ieee1275;
};

module = {
  name = escc;
  ieee1275 = term/ieee1275/escc.c;
  enable = powerpc_ieee1275;
};

module = {
  name = terminal;
  common = commands/terminal.c;
};

module = {
  name = test;
  common = commands/test.c;
};

module = {
  name = true;
  common = commands/true.c;
};

module = {
  name = usbtest;
  common = commands/usbtest.c;
  enable = usb;
};

module = {
  name = videoinfo;
  common = commands/videoinfo.c;
};

module = {
  name = videotest;
  common = commands/videotest.c;
};

module = {
  name = xnu_uuid;
  common = commands/xnu_uuid.c;
};

module = {
  name = dm_nv;
  common = disk/dmraid_nvidia.c;
};

module = {
  name = loopback;
  common = disk/loopback.c;
};

module = {
  name = cryptodisk;
  common = disk/cryptodisk.c;
};

module = {
  name = luks;
  common = disk/luks.c;
  common = disk/AFSplitter.c;
};

module = {
  name = geli;
  common = disk/geli.c;
};

module = {
  name = lvm;
  common = disk/lvm.c;
};

module = {
  name = ldm;
  common = disk/ldm.c;
};

module = {
  name = mdraid09;
  common = disk/mdraid_linux.c;
};

module = {
  name = mdraid09_be;
  common = disk/mdraid_linux_be.c;
};

module = {
  name = mdraid1x;
  common = disk/mdraid1x_linux.c;
};

module = {
  name = diskfilter;
  common = disk/diskfilter.c;
};

module = {
  name = raid5rec;
  common = disk/raid5_recover.c;
};

module = {
  name = raid6rec;
  common = disk/raid6_recover.c;
};

module = {
  name = scsi;
  common = disk/scsi.c;
};

module = {
  name = memdisk;
  common = disk/memdisk.c;
};

module = {
  name = ata;
  common = disk/ata.c;
  enable = pci;
  enable = mips_qemu_mips;
};

module = {
  name = ahci;
  common = disk/ahci.c;
  enable = pci;
};

module = {
  name = pata;
  common = disk/pata.c;
  enable = pci;
  enable = mips_qemu_mips;
};

module = {
  name = biosdisk;
  i386_pc = disk/i386/pc/biosdisk.c;
  enable = i386_pc;
};

module = {
  name = usbms;
  common = disk/usbms.c;
  enable = usb;
};

module = {
  name = nand;
  ieee1275 = disk/ieee1275/nand.c;
  enable = i386_ieee1275;
};

module = {
  name = efiemu;
  common = efiemu/main.c;
  common = efiemu/i386/loadcore32.c;
  common = efiemu/i386/loadcore64.c;
  i386_pc = efiemu/i386/pc/cfgtables.c;
  i386_coreboot = efiemu/i386/pc/cfgtables.c;
  i386_multiboot = efiemu/i386/pc/cfgtables.c;
  i386_ieee1275 = efiemu/i386/nocfgtables.c;
  i386_qemu = efiemu/i386/nocfgtables.c;
  common = efiemu/mm.c;
  common = efiemu/loadcore_common.c;
  common = efiemu/symbols.c;
  common = efiemu/loadcore32.c;
  common = efiemu/loadcore64.c;
  common = efiemu/prepare32.c;
  common = efiemu/prepare64.c;
  common = efiemu/pnvram.c;
  common = efiemu/i386/coredetect.c;

  extra_dist = efiemu/prepare.c;
  extra_dist = efiemu/loadcore.c;
  extra_dist = efiemu/runtime/efiemu.S;
  extra_dist = efiemu/runtime/efiemu.c;

  enable = i386_pc;
  enable = i386_coreboot;
  enable = i386_ieee1275;
  enable = i386_multiboot;
  enable = i386_qemu;
};

module = {
  name = font;
  common = font/font.c;
  common = font/font_cmd.c;
  enable = videomodules;
};

module = {
  name = affs;
  common = fs/affs.c;
};

module = {
  name = afs;
  common = fs/afs.c;
};

module = {
  name = bfs;
  common = fs/bfs.c;
};

module = {
  name = btrfs;
  common = fs/btrfs.c;
  common = lib/crc.c;
  cflags = '$(CFLAGS_POSIX) -Wno-undef';
  cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H';
};

module = {
  name = cpio;
  common = fs/cpio.c;
};

module = {
  name = cpio_be;
  common = fs/cpio_be.c;
};

module = {
  name = newc;
  common = fs/newc.c;
};

module = {
  name = odc;
  common = fs/odc.c;
};

module = {
  name = ext2;
  common = fs/ext2.c;
};

module = {
  name = fat;
  common = fs/fat.c;
};

module = {
  name = exfat;
  common = fs/exfat.c;
};

module = {
  name = fshelp;
  common = fs/fshelp.c;
};

module = {
  name = hfs;
  common = fs/hfs.c;
};

module = {
  name = hfsplus;
  common = fs/hfsplus.c;
};

module = {
  name = iso9660;
  common = fs/iso9660.c;
};

module = {
  name = jfs;
  common = fs/jfs.c;
};

module = {
  name = minix;
  common = fs/minix.c;
};

module = {
  name = minix2;
  common = fs/minix2.c;
};

module = {
  name = minix3;
  common = fs/minix3.c;
};

module = {
  name = minix_be;
  common = fs/minix_be.c;
};

module = {
  name = minix2_be;
  common = fs/minix2_be.c;
};

module = {
  name = minix3_be;
  common = fs/minix3_be.c;
};

module = {
  name = nilfs2;
  common = fs/nilfs2.c;
};

module = {
  name = ntfs;
  common = fs/ntfs.c;
};

module = {
  name = ntfscomp;
  common = fs/ntfscomp.c;
};

module = {
  name = reiserfs;
  common = fs/reiserfs.c;
};

module = {
  name = romfs;
  common = fs/romfs.c;
};

module = {
  name = sfs;
  common = fs/sfs.c;
};

module = {
  name = squash4;
  common = fs/squash4.c;
  cflags = '$(CFLAGS_POSIX) -Wno-undef';
  cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H';
};

module = {
  name = tar;
  common = fs/tar.c;
};

module = {
  name = udf;
  common = fs/udf.c;
};

module = {
  name = ufs1;
  common = fs/ufs.c;
};

module = {
  name = ufs1_be;
  common = fs/ufs_be.c;
};

module = {
  name = ufs2;
  common = fs/ufs2.c;
};

module = {
  name = xfs;
  common = fs/xfs.c;
};

module = {
  name = zfs;
  common = fs/zfs/zfs.c;
  common = fs/zfs/zfs_lzjb.c;
  common = fs/zfs/zfs_sha256.c;
  common = fs/zfs/zfs_fletcher.c;
};

module = {
  name = zfscrypt;
  common = fs/zfs/zfscrypt.c;
};

module = {
  name = zfsinfo;
  common = fs/zfs/zfsinfo.c;
};

module = {
  name = pxe;
  i386_pc = net/drivers/i386/pc/pxe.c;
  enable = i386_pc;
};

module = {
  name = gettext;
  common = gettext/gettext.c;
};

module = {
  name = gfxmenu;
  common = gfxmenu/gfxmenu.c;
  common = gfxmenu/model.c;
  common = gfxmenu/view.c;
  common = gfxmenu/font.c;
  common = gfxmenu/icon_manager.c;
  common = gfxmenu/theme_loader.c;
  common = gfxmenu/widget-box.c;
  common = gfxmenu/gui_canvas.c;
  common = gfxmenu/gui_circular_progress.c;
  common = gfxmenu/gui_box.c;
  common = gfxmenu/gui_label.c;
  common = gfxmenu/gui_list.c;
  common = gfxmenu/gui_image.c;
  common = gfxmenu/gui_progress_bar.c;
  common = gfxmenu/gui_util.c;
  common = gfxmenu/gui_string_util.c;
};

module = {
  name = hello;
  common = hello/hello.c;
};

module = {
  name = gzio;
  common = io/gzio.c;
};

module = {
  name = bufio;
  common = io/bufio.c;
  enable = videomodules;
};

module = {
  name = elf;
  common = kern/elf.c;
};

module = {
  name = crypto;
  common = lib/crypto.c;

  extra_dist = lib/libgcrypt-grub/cipher/crypto.lst;
};

module = {
  name = pbkdf2;
  common = lib/pbkdf2.c;
};

module = {
  name = relocator;
  common = lib/relocator.c;
  x86 = lib/i386/relocator16.S;
  x86 = lib/i386/relocator32.S;
  x86 = lib/i386/relocator64.S;
  i386 = lib/i386/relocator_asm.S;
  x86_64 = lib/x86_64/relocator_asm.S;
  x86 = lib/i386/relocator.c;
  ieee1275 = lib/ieee1275/relocator.c;
  efi = lib/efi/relocator.c;
  mips = lib/mips/relocator_asm.S;
  mips = lib/mips/relocator.c;
  powerpc = lib/powerpc/relocator_asm.S;
  powerpc = lib/powerpc/relocator.c;

  extra_dist = lib/i386/relocator_common.S;
  extra_dist = kern/powerpc/cache_flush.S;

  enable = mips;
  enable = powerpc;
  enable = x86;
};

module = {
  name = datetime;
  cmos = lib/cmos_datetime.c;
  efi = lib/efi/datetime.c;
  sparc64_ieee1275 = lib/ieee1275/datetime.c;
  powerpc_ieee1275 = lib/ieee1275/datetime.c;
  sparc64_ieee1275 = lib/ieee1275/cmos.c;
  powerpc_ieee1275 = lib/ieee1275/cmos.c;

  mips_arc = lib/arc/datetime.c;
  enable = noemu;
};

module = {
  name = setjmp;
  common = lib/setjmp.S;
  extra_dist = lib/i386/setjmp.S;
  extra_dist = lib/mips/setjmp.S;
  extra_dist = lib/x86_64/setjmp.S;
  extra_dist = lib/sparc64/setjmp.S;
  extra_dist = lib/powerpc/setjmp.S;
  extra_dist = lib/ia64/setjmp.S;
  extra_dist = lib/ia64/longjmp.S;
};

module = {
  name = aout;
  common = loader/aout.c;
  enable = x86;
};

module = {
  name = bsd;
  x86 = loader/i386/bsd.c;
  x86 = loader/i386/bsd32.c;
  x86 = loader/i386/bsd64.c;

  extra_dist = loader/i386/bsdXX.c;
  extra_dist = loader/i386/bsd_pagetable.c;

  enable = x86;
};

module = {
  name = plan9;
  i386_pc = loader/i386/pc/plan9.c;
  enable = i386_pc;
};


module = {
  name = linux16;
  i386_pc = loader/i386/pc/linux.c;
  i386_pc = lib/cmdline.c;
  enable = i386_pc;
};

module = {
  name = ntldr;
  i386_pc = loader/i386/pc/ntldr.c;
  enable = i386_pc;
};

module = {
  name = freedos;
  i386_pc = loader/i386/pc/freedos.c;
  enable = i386_pc;
};

module = {
  name = pxechain;
  i386_pc = loader/i386/pc/pxechainloader.c;
  enable = i386_pc;
};

module = {
  name = multiboot2;
  cppflags = "-DGRUB_USE_MULTIBOOT2";

  common = loader/multiboot.c;
  common = loader/multiboot_mbi2.c;
  enable = x86;
  enable = mips;
};

module = {
  name = multiboot;
  common = loader/multiboot.c;
  x86 = loader/i386/multiboot_mbi.c;
  extra_dist = loader/multiboot_elfxx.c;
  enable = x86;
};

module = {
  name = linux;
  x86 = loader/i386/linux.c;
  i386_pc = lib/i386/pc/vesa_modes_table.c;
  mips = loader/mips/linux.c;
  powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
  sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
  ia64_efi = loader/ia64/efi/linux.c;
  common = lib/cmdline.c;
  enable = noemu;
};

module = {
  name = xnu;
  x86 = loader/xnu_resume.c;
  x86 = loader/i386/xnu.c;
  x86 = loader/macho32.c;
  x86 = loader/macho64.c;
  x86 = loader/macho.c;
  x86 = loader/xnu.c;
  x86 = loader/lzss.c;

  extra_dist = loader/machoXX.c;
  enable = x86;
};

module = {
  name = appleldr;
  common = loader/efi/appleloader.c;
  enable = i386_efi;
  enable = x86_64_efi;
};

module = {
  name = chain;
  efi = loader/efi/chainloader.c;
  i386_pc = loader/i386/pc/chainloader.c;
  i386_coreboot = loader/i386/coreboot/chainloader.c;
  enable = i386_pc;
  enable = i386_coreboot;
  enable = efi;
};

module = {
  name = mmap;
  common = mmap/mmap.c;
  x86 = mmap/i386/uppermem.c;
  x86 = mmap/i386/mmap.c;

  i386_pc = mmap/i386/pc/mmap.c;
  i386_pc = mmap/i386/pc/mmap_helper.S;

  efi = mmap/efi/mmap.c;

  mips = mmap/mips/uppermem.c;

  enable = x86;
  enable = ia64_efi;
  enable = mips;
};

module = {
  name = normal;
  common = normal/main.c;
  common = normal/cmdline.c;
  common = normal/dyncmd.c;
  common = normal/auth.c;
  common = normal/autofs.c;
  common = normal/color.c;
  common = normal/completion.c;
  common = normal/datetime.c;
  common = normal/menu.c;
  common = normal/menu_entry.c;
  common = normal/menu_text.c;
  common = normal/misc.c;
  common = normal/crypto.c;
  common = normal/term.c;
  common = normal/context.c;
  common = normal/charset.c;

  common = script/main.c;
  common = script/script.c;
  common = script/execute.c;
  common = script/function.c;
  common = script/lexer.c;
  common = script/argv.c;

  common = commands/menuentry.c;

  common = unidata.c;
  common_nodist = grub_script.tab.c;
  common_nodist = grub_script.yy.c;
  common_nodist = grub_script.tab.h;
  common_nodist = grub_script.yy.h;

  extra_dist = script/yylex.l;
  extra_dist = script/parser.y;

  cflags = '$(CFLAGS_POSIX) -Wno-redundant-decls';
  cppflags = '$(CPPFLAGS_POSIX)';
};

module = {
  name = part_acorn;
  common = partmap/acorn.c;
};

module = {
  name = part_amiga;
  common = partmap/amiga.c;
};

module = {
  name = part_apple;
  common = partmap/apple.c;
};

module = {
  name = part_gpt;
  common = partmap/gpt.c;
};

module = {
  name = part_msdos;
  common = partmap/msdos.c;
};

module = {
  name = part_sun;
  common = partmap/sun.c;
};

module = {
  name = part_plan;
  common = partmap/plan.c;
};

module = {
  name = part_dvh;
  common = partmap/dvh.c;
};

module = {
  name = part_bsd;
  common = partmap/bsdlabel.c;
};

module = {
  name = part_sunpc;
  common = partmap/sunpc.c;
};

module = {
  name = msdospart;
  common = parttool/msdospart.c;
};

module = {
  name = at_keyboard;
  common = term/at_keyboard.c;
  enable = x86;
};

module = {
  name = gfxterm;
  common = term/gfxterm.c;
  enable = videomodules;
};

module = {
  name = serial;
  common = term/serial.c;
  x86 = term/ns8250.c;
  ieee1275 = term/ieee1275/serial.c;
  efi = term/efi/serial.c;

  enable = terminfomodule;
  enable = ieee1275;
};

module = {
  name = sendkey;
  i386_pc = commands/i386/pc/sendkey.c;
  enable = i386_pc;
};

module = {
  name = terminfo;
  common = term/terminfo.c;
  common = term/tparm.c;
  enable = terminfomodule;
};

module = {
  name = usb_keyboard;
  common = term/usb_keyboard.c;
  enable = usb;
};

module = {
  name = vga;
  common = video/i386/pc/vga.c;
  enable = i386_pc;
  enable = i386_coreboot;
  enable = i386_multiboot;
};

module = {
  name = vga_text;
  common = term/i386/pc/vga_text.c;
  enable = i386_pc;
};

module = {
  name = mda_text;
  common = term/i386/pc/mda_text.c;
  enable = i386_pc;
  enable = i386_coreboot_multiboot_qemu;
};

module = {
  name = video_cirrus;
  x86 = video/cirrus.c;
  enable = x86;
};

module = {
  name = video_bochs;
  x86 = video/bochs.c;
  enable = x86;
};

module = {
  name = functional_test;
  common = tests/lib/functional_test.c;
  common = tests/lib/test.c;
};

module = {
  name = exfctest;
  common = tests/example_functional_test.c;
};

module = {
  name = bitmap;
  common = video/bitmap.c;
  enable = videomodules;
};

module = {
  name = bitmap_scale;
  common = video/bitmap_scale.c;
  enable = videomodules;
};

module = {
  name = efi_gop;
  efi = video/efi_gop.c;
  enable = efi;
};

module = {
  name = efi_uga;
  efi = video/efi_uga.c;
  enable = i386_efi;
  enable = x86_64_efi;
};

module = {
  name = jpeg;
  common = video/readers/jpeg.c;
};

module = {
  name = png;
  common = video/readers/png.c;
};

module = {
  name = tga;
  common = video/readers/tga.c;
};

module = {
  name = vbe;
  common = video/i386/pc/vbe.c;
  enable = i386_pc;
  enable = i386_coreboot;
  enable = i386_multiboot;
};

module = {
  name = video_fb;
  common = video/fb/video_fb.c;
  common = video/fb/fbblit.c;
  common = video/fb/fbfill.c;
  common = video/fb/fbutil.c;
  enable = videomodules;
};

module = {
  name = video;
  common = video/video.c;
  common = video/colors.c;
  enable = videomodules;
};

module = {
  name = ieee1275_fb;
  ieee1275 = video/ieee1275.c;
  enable = powerpc_ieee1275;
};

module = {
  name = sdl;
  emu = video/emu/sdl.c;
  enable = emu;
  condition = COND_GRUB_EMU_SDL;
};

module = {
  name = datehook;
  common = hook/datehook.c;
};

module = {
  name = net;
  common = net/net.c;
  common = net/dns.c;
  common = net/bootp.c;
  common = net/ip.c;
  common = net/udp.c;
  common = net/tcp.c;
  common = net/icmp.c;
  common = net/icmp6.c;
  common = net/ethernet.c;
  common = net/arp.c;
  common = net/netbuff.c;
};

module = {
  name = tftp;
  common = net/tftp.c;
};

module = {
  name = http;
  common = net/http.c;
};

module = {
  name = ofnet;
  common = net/drivers/ieee1275/ofnet.c;
  enable = ieee1275;
};

module = {
  name = efinet;
  common = net/drivers/efi/efinet.c;
  enable = efi;
};

module = {
  name = emunet;
  emu = net/drivers/emu/emunet.c;
  enable = emu;
};

module = {
  name = legacycfg;
  common = commands/legacycfg.c;
  common = lib/legacy_parse.c;
  emu = lib/i386/pc/vesa_modes_table.c;
  enable = i386_pc;
  enable = emu;
};

module = {
  name = test_blockarg;
  common = tests/test_blockarg.c;
};

module = {
  name = xzio;
  common = io/xzio.c;
  common = lib/xzembed/xz_dec_bcj.c;
  common = lib/xzembed/xz_dec_lzma2.c;
  common = lib/xzembed/xz_dec_stream.c;
  cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed';
  cflags='-Wno-unreachable-code';
};

module = {
  name = lzopio;
  common = io/lzopio.c;
  common = lib/minilzo/minilzo.c;
  cflags = '$(CFLAGS_POSIX) -Wno-undef -Wno-redundant-decls -Wno-error';
  cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H';
};

module = {
  name = testload;
  common = commands/testload.c;
};

module = {
  name = backtrace;
  x86 = lib/i386/backtrace.c;
  common = lib/backtrace.c;
  enable = x86;
};

module = {
  name = lsapm;
  common = commands/i386/pc/lsapm.c;
  enable = i386_pc;
};

module = {
  name = keylayouts;
  common = commands/keylayouts.c;
  enable = videomodules;
};

module = {
  name = priority_queue;
  common = lib/priority_queue.c;
};

module = {
  name = time;
  common = commands/time.c;
};

module = {
  name = cacheinfo;
  common = commands/cacheinfo.c;
  condition = COND_ENABLE_CACHE_STATS;
};

module = {
  name = adler32;
  common = lib/adler32.c;
};

module = {
  name = crc64;
  common = lib/crc64.c;
};

module = {
  name = all_video;
  common = lib/fake_module.c;
};

module = {
  name = gdb;
  common = gdb/cstub.c;
  common = gdb/gdb.c;
  i386 = gdb/i386/idt.c;
  i386 = gdb/i386/machdep.S;
  i386 = gdb/i386/signal.c;
  enable = i386;
};