# Copyright (C) 2001  MandrakeSoft S.A.
#
#   MandrakeSoft S.A.
#   43, rue d'Aboukir
#   75002 Paris - France
#   http://www.linux-mandrake.com/
#   http://www.mandrakesoft.com/
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
####################################################
# NOTE: To be compatibile with nmake (microsoft vc++) please follow
# the following rules:
#   use $(VAR) not $(VAR)

prefix          = /usr/local
exec_prefix     = $(prefix)
bindir          = $(exec_prefix)/bin
mandir          = $(prefix)/man
man1dir         = $(mandir)/man1

DESTDIR =

VERSION=1.4.1
VER_STRING=1.4.1
REL_STRING=June 23, 2002
BOCHSDIR=$(prefix)/bochs
VERSIONDIR=$(BOCHSDIR)/$(VERSION)
MAN_PAGE_LIST=bochs bochsrc bximage bochs-dlx
INSTALL_LIST=bios/BIOS-* CHANGES COPYING README bios/VGABIOS* bochs bochsdbg bximage 
INSTALL_LIST_X11=install-x11-fonts test-x11-fonts
INSTALL_LIST_SED=DOC-linux.html
BOCHS_SCRIPTS=bochs-docs
CP=cp
CAT=cat
RM=rm
MV=mv
LN_S=ln -sf
DLXLINUX_TAR=dlxlinux3.tar.gz
DLXLINUX_TAR_URL=http://bochs.sourceforge.net/guestos/$(DLXLINUX_TAR)
DLXLINUX_ROMFILE=BIOS-bochs-latest
GUNZIP=gunzip
WGET=wget
SED=sed
MKDIR=mkdir
RMDIR=rmdir
TAR=tar
CHMOD=chmod
GZIP=gzip
GUNZIP=gunzip
ZIP=zip
UNIX2DOS=unix2dos

.SUFFIXES: .cpp

srcdir = .


SHELL = /bin/sh



CC = cl
CXX = cl
CFLAGS = /nologo /G6 /MT /W3 /GX /DNDEBUG /DWIN32 /D_WINDOWS /O2 $(MCH_CFLAGS) $(FLA_FLAGS)
CXXFLAGS = /nologo /G6 /MT /W3 /GX /DNDEBUG /DWIN32 /D_WINDOWS /O2 $(MCH_CFLAGS) $(FLA_FLAGS)

LDFLAGS = 
LIBS = 
# To compile with readline:
#   linux needs just -lreadline
#   solaris needs -lreadline -lcurses
X_LIBS = 
X_PRE_LIBS = 
GUI_LINK_OPTS_X = $(X_LIBS) $(X_PRE_LIBS) -lX11
GUI_LINK_OPTS_SDL = `sdl-config --cflags --libs`
GUI_LINK_OPTS_BEOS = -lbe
GUI_LINK_OPTS_RFB = 
GUI_LINK_OPTS_AMIGAOS = 
GUI_LINK_OPTS_WIN32 = -luser32 -lgdi32 -lwinmm -lcomdlg32 -lcomctl32
GUI_LINK_OPTS_WIN32_VCPP = user32.lib gdi32.lib winmm.lib \
  comdlg32.lib comctl32.lib wsock32.lib
GUI_LINK_OPTS_MACOS =
GUI_LINK_OPTS_CARBON = -framework Carbon
GUI_LINK_OPTS_NOGUI =
GUI_LINK_OPTS_TERM = 
GUI_LINK_OPTS = $(GUI_LINK_OPTS_WIN32_VCPP)
RANLIB = echo

BX_INCDIRS = -I. -I$(srcdir)/. -Iinstrument/stubs -I$(srcdir)/instrument/stubs

MDEFINES = CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" \
  LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)" \
  X_LIBS="$(X_LIBS)" X_PRE_LIBS="$(X_PRE_LIBS)" \
  prefix="$(prefix)" exec_prefix="$(exec_prefix)" \
  bindir="$(bindir)" infodir="$(infodir)"

#SUBDIRS = iodev debug

#all install uninstall: config.h#
#        for subdir in $(SUBDIRS); do #
#          echo making $@ in $$subdir; #
#          (cd $$subdir && $(MAKE) $(MDEFINES) $@) || exit 1; #
#        done#



# gnu flags for clean up
#CFLAGS  = -ansi -O -g -Wunused -Wuninitialized


NONINLINE_OBJS = \
	logio.o \
	main.o \
	load32bitOShack.o \
	state_file.o \
	pc_system.o \
	osdep.o

EXTERN_ENVIRONMENT_OBJS = \
	main.o \
	load32bitOShack.o \
	state_file.o \
	pc_system.o

DEBUGGER_LIB   = debug/libdebug.a
DISASM_LIB     = disasm/libdisasm.a
DYNAMIC_LIB    = dynamic/libdynamic.a
INSTRUMENT_LIB = instrument/stubs/libinstrument.a
FPU_LIB        = fpu/libfpu.a
READLINE_LIB   = 
EXTRA_LINK_OPTS = 

BX_OBJS = $(NONINLINE_OBJS)

BX_INCLUDES = bochs.h config.h osdep.h


.cpp.o:
	$(CXX) /c $(CXXFLAGS) $(BX_INCDIRS) /Tp$< /Fo$@
.c.o:
	$(CC) /c $(CFLAGS) $(FPU_FLAGS) $(BX_INCDIRS) $< /Fo$@


all: bochs.exe niclist.exe  bximage.exe




bochs.exe: iodev/libiodev.a  \
           cpu/libcpu.a memory/libmemory.a gui/libgui.a \
              $(BX_OBJS) \
           $(SIMX86_OBJS) \
           $(FPU_LIB)
	link  /nologo /subsystem:console /incremental:no /machine:I386 /out:$@ BINMODE.OBJ $(BX_OBJS) \
                $(SIMX86_OBJS) \
		iodev/libiodev.a \
		cpu/libcpu.a memory/libmemory.a gui/libgui.a \
		    \
		$(FPU_LIB) \
		$(GUI_LINK_OPTS) \
		$(MCH_LINK_FLAGS) \
	        $(SIMX86_LINK_FLAGS) \
		$(READLINE_LIB) \
		$(EXTRA_LINK_OPTS)

bximage.exe: misc/bximage.o
	link  /nologo /subsystem:console /incremental:no /machine:I386 /out:$@ BINMODE.OBJ misc/bximage.o

niclist.exe: misc/niclist.o
	link  /nologo /subsystem:console /incremental:no /machine:I386 /out:$@ BINMODE.OBJ misc/niclist.o

$(BX_OBJS): $(BX_INCLUDES)

bxversion.h:
	$(RM) -f bxversion.h
	echo '/////////////////////////////////////////////////////////////////////////' > bxversion.h
	echo '// $$Id: Makefile.in,v 1.67 2002/03/28 00:28:41 bdenney Exp $$' >> bxversion.h
	echo '/////////////////////////////////////////////////////////////////////////' >> bxversion.h
	echo '// This file is generated by "make bxversion.h"' >> bxversion.h
	echo "#define VER_STRING \"$(VER_STRING)\"" >> bxversion.h
	echo "#define REL_STRING \"$(REL_STRING)\"" >> bxversion.h

iodev/libiodev.a::
	cd iodev 
	$(MAKE) $(MDEFINES) libiodev.a
	cd ..

debug/libdebug.a::
	cd debug 
	$(MAKE) $(MDEFINES) libdebug.a
	cd ..

cpu/libcpu.a::
	cd cpu 
	$(MAKE) $(MDEFINES) libcpu.a
	cd ..

memory/libmemory.a::
	cd memory 
	$(MAKE) $(MDEFINES) libmemory.a
	cd ..

gui/libgui.a::
	cd gui 
	$(MAKE) $(MDEFINES) libgui.a
	cd ..

disasm/libdisasm.a::
	cd disasm 
	$(MAKE) $(MDEFINES) libdisasm.a
	cd ..

dynamic/libdynamic.a::
	cd dynamic 
	$(MAKE) $(MDEFINES) libdynamic.a
	cd ..

instrument/stubs/libinstrument.a::
	cd instrument/stubs 
	$(MAKE) $(MDEFINES) libinstrument.a
	cd ..\..

fpu/libfpu.a::
	cd fpu 
	$(MAKE) $(MDEFINES) libfpu.a
	cd ..

libbochs.a:
	-rm -f libbochs.a
	ar rv libbochs.a $(EXTERN_ENVIRONMENT_OBJS)
	$(RANLIB) libbochs.a

libbochs_cpu.a:  $(BX_OBJS)
	-rm -f libbochs_cpu.a
	ar rv libbochs_cpu.a $(BX_OBJS)
	$(RANLIB) libbochs_cpu.a

#####################################################################
# Install target for all platforms.
#####################################################################

install: all install_win32

#####################################################################
# Install target for win32
#
# This is intended to be run in cygwin, since it has better scripting
# tools.
#####################################################################

install_win32: download_dlx
	-mkdir -p $(prefix)
	cp obj-debug/*.exe .
	for i in $(INSTALL_LIST) niclist; do if test -f $$i; then cp $$i $(prefix); else cp $(srcdir)/$$i $(prefix); fi; done
	cp $(srcdir)/misc/sb16/sb16ctrl.example $(prefix)/sb16ctrl.txt
	cp $(srcdir)/misc/sb16/sb16ctrl.exe $(prefix)
	cat $(srcdir)/build/win32/DOC-win32.htm | $(SED) -e 's/1.4.1/$(VERSION)/g' > $(prefix)/DOC-win32.htm
	cp $(srcdir)/.bochsrc $(prefix)/bochsrc-sample.txt
	cp -r $(srcdir)/docs-html $(prefix)
	mkdir $(prefix)/keymaps
	cp $(srcdir)/gui/keymaps/*.map $(prefix)/keymaps
	cat $(DLXLINUX_TAR) | (cd $(prefix) && tar xzvf -)
	echo '..\bochs' > $(prefix)/dlxlinux/start.bat
	dlxrc=$(prefix)/dlxlinux/bochsrc.txt; mv $$dlxrc $$dlxrc.orig && sed < $$dlxrc.orig 's/\/usr\/local\/bochs\/latest/../' > $$dlxrc && rm -f $$dlxrc.orig
	mv $(prefix)/README $(prefix)/README.orig
	cat $(srcdir)/build/win32/README.win32-binary $(prefix)/README.orig > $(prefix)/README
	rm -f $(prefix)/README.orig
	for i in README CHANGES COPYING VGABIOS-elpin-LICENSE dlxlinux/README; do mv $(prefix)/$$i $(prefix)/$$i.txt; done
	cd $(prefix); $(UNIX2DOS) *.txt */*.txt
	cd $(prefix); NAME=`pwd|$(SED) 's/.*\///'`; (cd ..; $(ZIP) $$NAME.zip -r $$NAME); ls -l ../$$NAME.zip

#####################################################################
# install target for unix
#####################################################################

install_unix: install_bin install_man install_fonts unpack_dlx install_dlx

install_fonts::
	-srcdir=$(srcdir) $(VERSIONDIR)/install-x11-fonts

install_bin::
	-mkdir -p $(DESTDIR)$(BOCHSDIR)
	-mkdir -p $(DESTDIR)$(VERSIONDIR)
	-mkdir -p $(DESTDIR)$(bindir)
	test -d $(DESTDIR)$(VERSIONDIR)
	test -w $(DESTDIR)$(VERSIONDIR)
	for i in bochs-docs; do cp $(srcdir)/build/linux/$$i $(DESTDIR)$(bindir)/$$i; $(CHMOD) 755 $(DESTDIR)$(bindir)/$$i; done
	for i in $(INSTALL_LIST_SED); do cp $(srcdir)/build/linux/$$i $(DESTDIR)$(VERSIONDIR)/$$i; $(CHMOD) 644 $(DESTDIR)$(VERSIONDIR)/$$i; done
	$(CHMOD) a+x install-x11-fonts test-x11-fonts
	for i in $(INSTALL_LIST); do if test -f $$i; then cp $$i $(DESTDIR)$(VERSIONDIR); else cp $(srcdir)/$$i $(DESTDIR)$(VERSIONDIR); fi; done
	$(LN_S) $(VERSIONDIR)/bochs $(DESTDIR)$(bindir)/bochs
	$(LN_S) $(VERSIONDIR)/bximage $(DESTDIR)$(bindir)/bximage
	$(CP) -r $(srcdir)/docs-html $(DESTDIR)$(VERSIONDIR)
	$(CP) -r $(srcdir)/gui/keymaps $(DESTDIR)$(VERSIONDIR)
	$(RM) -f $(DESTDIR)$(VERSIONDIR)/README
	$(CAT) $(srcdir)/build/linux/README.linux-binary $(srcdir)/README > $(DESTDIR)$(VERSIONDIR)/README
	$(CP) $(srcdir)/font/vga.pcf $(DESTDIR)$(VERSIONDIR)
	$(CP) $(srcdir)/.bochsrc $(DESTDIR)$(VERSIONDIR)/bochsrc-sample.txt
	$(RM) -f $(DESTDIR)$(BOCHSDIR)/latest
	$(LN_S) $(VERSION) $(DESTDIR)$(BOCHSDIR)/latest

install_man::
	-mkdir -p $(DESTDIR)$(man1dir)
	for i in $(MAN_PAGE_LIST); do cat $(srcdir)/doc/man/$$i.1 | $(SED) -e 's/1.4.1/$(VERSION)/g' > $(DESTDIR)$(man1dir)/$$i.1; chmod 644 $(DESTDIR)$(man1dir)/$$i.1; done

download_dlx: $(DLXLINUX_TAR)

$(DLXLINUX_TAR):
	$(RM) -f $(DLXLINUX_TAR)
	$(WGET) $(DLXLINUX_TAR_URL)
	test -f $(DLXLINUX_TAR)

unpack_dlx: $(DLXLINUX_TAR)
	rm -rf dlxlinux
	$(GUNZIP) -c $(DLXLINUX_TAR) | $(TAR) -xvf -
	test -d dlxlinux
	(cd dlxlinux; $(MV) bochsrc.txt bochsrc.txt.orig; $(SED) -e "s/1\.1\.2/$(VERSION)/g"  -e 's,/usr/local,$(prefix),g' < bochsrc.txt.orig > bochsrc.txt; rm -f bochsrc.txt.orig)

install_dlx:
	$(RM) -rf $(BOCHSDIR)/dlxlinux
	cp -r dlxlinux $(BOCHSDIR)/dlxlinux
	$(CHMOD) 755 $(BOCHSDIR)/dlxlinux
	$(GZIP) $(BOCHSDIR)/dlxlinux/hd10meg.img
	$(CHMOD) 644 $(BOCHSDIR)/dlxlinux/*
	for i in bochs-dlx; do cp $(srcdir)/build/linux/$$i $(bindir)/$$i; $(CHMOD) 755 $(bindir)/$$i; done

uninstall::
	$(RM) -rf $(VERSIONDIR)
	$(RM) -rf $(BOCHSDIR)/dlxlinux
	$(RM) -rf $(BOCHSDIR)/latest
	-$(RMDIR) $(BOCHSDIR)
	for i in bochs bximage bochs-dlx $(BOCHS_SCRIPTS); do rm -f $(DESTDIR)$(bindir)/$$i; done
	for i in $(MAN_PAGE_LIST); do $(RM) -f $(man1dir)/$$i.1; done

V6WORKSPACE_ZIP=build/win32/workspace.zip
V6WORKSPACE_FILES=bochs.dsw bochs.dsp bochs.opt cpu/cpu.dsp \
	memory/memory.dsp iodev/iodev.dsp instrument/stubs/stubs.dsp \
	gui/gui.dsp fpu/fpu.dsp disasm/disasm.dsp debug/debug.dsp \
	misc/niclist.dsp bximage.dsp

v6workspace:
	zip $(V6WORKSPACE_ZIP) $(V6WORKSPACE_FILES)

########
# the win32_snap target is used to create a ZIP of bochs sources configured
# for VC++.  This ZIP is stuck on the website every once in a while to make
# it easier for VC++ users to compile bochs.  First, you should
# run "sh .conf.win32-vcpp" to configure the source code, then do
# "make win32_snap" to unzip the workspace files and create the ZIP.
########
win32_snap:
	unzip $(V6WORKSPACE_ZIP)
	make zip

tar:
	NAME=`pwd|$(SED) 's/.*\///'`; (cd ..; tar cf - $$NAME | $(GZIP) > $$NAME.tar.gz); ls -l ../$$NAME.tar.gz

zip:
	NAME=`pwd|$(SED) 's/.*\///'`; (cd ..; $(ZIP) $$NAME.zip -r $$NAME); ls -l ../$$NAME.zip

clean:
	-del *.o
	-del */*.o
	-del *.a
	-del */*.a
	-del bochs.exe
	-del bximage.exe
	-del bochs.out
	-del bochsout.txt

local-dist-clean: clean
	-del config.h config.status config.log config.cache
	-del .dummy `find . -name '*.dsp' -o -name '*.dsw' -o -name '*.opt'`
	-del bxversion.h install-x11-fonts build/linux/bochs-dlx build/linux/bochs-docs build/linux/DOC-linux.html

all-clean: clean
	cd iodev 
	$(MAKE) clean
	cd ..
	cd debug 
	$(MAKE) clean
	cd ..
	cd cpu 
	$(MAKE) clean
	cd ..
	cd memory 
	$(MAKE) clean
	cd ..
	cd gui 
	$(MAKE) clean
	cd ..
	cd disasm 
	$(MAKE) clean
	cd ..
	cd instrument/stubs 
	$(MAKE) clean
	cd ..\..
	cd misc 
	$(MAKE) clean
	cd ..
	cd dynamic 
	$(MAKE) clean
	cd ..
	cd fpu 
	$(MAKE) clean
	cd ..

dist-clean: local-dist-clean
	cd iodev 
	$(MAKE) dist-clean
	cd ..
	cd debug 
	$(MAKE) dist-clean
	cd ..
	cd bios 
	$(MAKE) dist-clean
	cd ..
	cd cpu 
	$(MAKE) dist-clean
	cd ..
	cd memory 
	$(MAKE) dist-clean
	cd ..
	cd gui 
	$(MAKE) dist-clean
	cd ..
	cd disasm 
	$(MAKE) dist-clean
	cd ..
	cd instrument/stubs 
	$(MAKE) dist-clean
	cd ..\..
	cd misc 
	$(MAKE) dist-clean
	cd ..
	cd dynamic 
	$(MAKE) dist-clean
	cd ..
	cd fpu 
	$(MAKE) dist-clean
	cd ..
	-del Makefile

###########################################
# Build app on MacOS X
###########################################
APP=bochs.app
MACOSX_STUFF=build/macosx
REZ=/Developer/Tools/Rez
RINCLUDES=/System/Library/Frameworks/Carbon.framework/Libraries/RIncludes
REZ_ARGS=-append -i $RINCLUDES -d SystemSevenOrLater=1 -useDF

$(APP)/.build: bochs
	rm -f $(APP)/.build
	$(MKDIR) -p $(APP)
	$(MKDIR) -p $(APP)/Contents
	$(CP) -f $(MACOSX_STUFF)/Info.plist $(APP)/Contents
	$(CP) -f $(MACOSX_STUFF)/pbdevelopment.plist $(APP)/Contents
	echo -n "APPL????"  > $(APP)/Contents/PkgInfo
	$(MKDIR) -p $(APP)/Contents/MacOS
	$(CP) bochs $(APP)/Contents/MacOS
	$(MKDIR) -p $(APP)/Contents/Resources
	$(REZ) $(REZ_ARGS) $(MACOSX_STUFF)/bochs.r -o $(APP)/Contents/Resources/bochs.rsrc
	ls -ld $(APP)
	touch $(APP)/.build

###########################################
# dependencies generated by
#  gcc -MM -I. -Iinstrument/stubs *.cc | sed 's/\.cc/.cpp/g'
###########################################
load32bitOShack.o: load32bitOShack.cpp bochs.h config.h osdep.h \
 debug/debug.h bxversion.h gui/siminterface.h state_file.h cpu/cpu.h \
 cpu/lazy_flags.h memory/memory.h pc_system.h gui/gui.h gui/control.h \
 iodev/iodev.h iodev/pci.h iodev/vga.h iodev/cmos.h iodev/dma.h \
 iodev/floppy.h iodev/harddrv.h iodev/keyboard.h iodev/parallel.h \
 iodev/pic.h iodev/pit.h iodev/pit_wrap.h iodev/pit82c54.h \
 iodev/serial.h iodev/unmapped.h iodev/eth.h iodev/ne2k.h \
 iodev/guest2host.h iodev/slowdown_timer.h \
 instrument/stubs/instrument.h
logio.o: logio.cpp bochs.h config.h osdep.h debug/debug.h bxversion.h \
 gui/siminterface.h state_file.h cpu/cpu.h cpu/lazy_flags.h \
 memory/memory.h pc_system.h gui/gui.h gui/control.h iodev/iodev.h \
 iodev/pci.h iodev/vga.h iodev/cmos.h iodev/dma.h iodev/floppy.h \
 iodev/harddrv.h iodev/keyboard.h iodev/parallel.h iodev/pic.h \
 iodev/pit.h iodev/pit_wrap.h iodev/pit82c54.h iodev/serial.h \
 iodev/unmapped.h iodev/eth.h iodev/ne2k.h iodev/guest2host.h \
 iodev/slowdown_timer.h instrument/stubs/instrument.h
main.o: main.cpp bochs.h config.h osdep.h debug/debug.h bxversion.h \
 gui/siminterface.h state_file.h cpu/cpu.h cpu/lazy_flags.h \
 memory/memory.h pc_system.h gui/gui.h gui/control.h iodev/iodev.h \
 iodev/pci.h iodev/vga.h iodev/cmos.h iodev/dma.h iodev/floppy.h \
 iodev/harddrv.h iodev/keyboard.h iodev/parallel.h iodev/pic.h \
 iodev/pit.h iodev/pit_wrap.h iodev/pit82c54.h iodev/serial.h \
 iodev/unmapped.h iodev/eth.h iodev/ne2k.h iodev/guest2host.h \
 iodev/slowdown_timer.h instrument/stubs/instrument.h
osdep.o: osdep.cpp bochs.h config.h osdep.h debug/debug.h bxversion.h \
 gui/siminterface.h state_file.h cpu/cpu.h cpu/lazy_flags.h \
 memory/memory.h pc_system.h gui/gui.h gui/control.h iodev/iodev.h \
 iodev/pci.h iodev/vga.h iodev/cmos.h iodev/dma.h iodev/floppy.h \
 iodev/harddrv.h iodev/keyboard.h iodev/parallel.h iodev/pic.h \
 iodev/pit.h iodev/pit_wrap.h iodev/pit82c54.h iodev/serial.h \
 iodev/unmapped.h iodev/eth.h iodev/ne2k.h iodev/guest2host.h \
 iodev/slowdown_timer.h instrument/stubs/instrument.h
pc_system.o: pc_system.cpp bochs.h config.h osdep.h debug/debug.h \
 bxversion.h gui/siminterface.h state_file.h cpu/cpu.h \
 cpu/lazy_flags.h memory/memory.h pc_system.h gui/gui.h gui/control.h \
 iodev/iodev.h iodev/pci.h iodev/vga.h iodev/cmos.h iodev/dma.h \
 iodev/floppy.h iodev/harddrv.h iodev/keyboard.h iodev/parallel.h \
 iodev/pic.h iodev/pit.h iodev/pit_wrap.h iodev/pit82c54.h \
 iodev/serial.h iodev/unmapped.h iodev/eth.h iodev/ne2k.h \
 iodev/guest2host.h iodev/slowdown_timer.h \
 instrument/stubs/instrument.h
state_file.o: state_file.cpp bochs.h config.h osdep.h debug/debug.h \
 bxversion.h gui/siminterface.h state_file.h cpu/cpu.h \
 cpu/lazy_flags.h memory/memory.h pc_system.h gui/gui.h gui/control.h \
 iodev/iodev.h iodev/pci.h iodev/vga.h iodev/cmos.h iodev/dma.h \
 iodev/floppy.h iodev/harddrv.h iodev/keyboard.h iodev/parallel.h \
 iodev/pic.h iodev/pit.h iodev/pit_wrap.h iodev/pit82c54.h \
 iodev/serial.h iodev/unmapped.h iodev/eth.h iodev/ne2k.h \
 iodev/guest2host.h iodev/slowdown_timer.h \
 instrument/stubs/instrument.h
