# # 86Box A hypervisor and IBM PC system emulator that specializes in # running old operating systems and software designed for IBM # PC systems and compatibles from 1981 through fairly recent # system designs based on the PCI bus. # # This file is part of the 86Box distribution. # # Makefile for Win32 (MinGW32) environment. # # Version: @(#)Makefile.mingw 1.0.94 2018/01/25 # # Authors: Miran Grca, # Fred N. van Kempen, # # Various compile-time options. ifndef STUFF STUFF := endif # Add feature selections here. ifndef EXTRAS EXTRAS := endif # Defaults for several build options (possibly defined in a chained file.) ifndef AUTODEP AUTODEP := n endif ifndef CRASHDUMP CRASHDUMP := n CRASHDUMPOBJ := win_crashdump.o endif ifndef DEBUG DEBUG := n endif ifndef OPTIM OPTIM := n endif ifndef RELEASE RELEASE := n endif ifndef X64 X64 := n endif ifndef WX WX := n endif ifndef USB USB := n endif ifndef VNC VNC := n endif ifndef RDP RDP := n endif ifndef DEV_BUILD DEV_BUILD := n endif ifndef DEV_BRANCH DEV_BRANCH := n endif ifndef CIRRUS CIRRUS := n endif ifndef GREENB GREENB := n endif ifndef I686 I686 := n endif ifndef NE1000 NE1000 := n endif ifndef NV_RIVA NV_RIVA := n endif ifndef OPENAL OPENAL := y endif ifndef PORTABLE3 PORTABLE3 := n endif ifndef FLUIDSYNTH FLUIDSYNTH := y endif ifndef MUNT MUNT := y endif ifndef PAS16 PAS16 := n endif ifndef STEALTH32 STEALTH32 := n endif ifndef DYNAREC DYNAREC := y endif # Name of the executable. ifndef PROG ifneq ($(WX), n) PROG := Wx86Box else PROG := 86Box endif endif ifeq ($(DEV_BUILD), y) DEBUG := y DEV_BRANCH := y CIRRUS := y GREENB := y I686 := y NE1000 := y NV_RIVA := y PAS16 := y PORTABLE3 := y STEALTH32 := y VNC := y endif # WxWidgets basic info. Extract using the config program. ifneq ($(WX), n) EXPATH += wx WX_CONFIG := wx-config.exe ifeq ($(WX), y) WX_PATH := C:/MinGW32/WxWidgets WX_FLAGS := -I$(WX_PATH)/lib/wx/include/msw-unicode-3.0 \ -I$(WX_PATH)/include/wx-3.0 \ -D__WXMSW__ -DWX_PRECOMP -D_FILE_OFFSET_BITS=64 -pthread # -lwx_mswu_gl-3.0 -lwxtiff-3.0 -llzma WX_LIBS := -mwindows -mthreads -L$(WX_PATH)/lib \ -lwx_mswu-3.0.dll \ -lrpcrt4 -loleaut32 -lole32 -luuid \ -lwinspool -lwinmm -lshell32 -lcomctl32 \ -lcomdlg32 -ladvapi32 -lwsock32 -lgdi32 endif ifeq ($(WX), static) WX_PATH := C:/MinGW32/WxWidgets WX_FLAGS := -I$(WX_PATH)/lib/wx/include/msw-unicode-3.0 \ -I$(WX_PATH)/include/wx-3.0 \ -D__WXMSW__ -DWX_PRECOMP -D_FILE_OFFSET_BITS=64 -pthread # -lwx_mswu_gl-3.0 -lwxtiff-3.0 -llzma WX_LIBS := -mwindows -mthreads -L$(WX_PATH)/lib \ -lwx_mswu-3.0 -lwxscintilla-3.0 \ -lwxjpeg-3.0 -lwxpng-3.0 -lwxzlib-3.0 \ -lwxregexu-3.0 -lwxexpat-3.0 \ -lrpcrt4 -loleaut32 -lole32 -luuid \ -lwinspool -lwinmm -lshell32 -lcomctl32 \ -lcomdlg32 -ladvapi32 -lwsock32 -lgdi32 endif endif ######################################################################### # Nothing should need changing from here on.. # ######################################################################### VPATH := $(EXPATH) . cpu \ cdrom disk floppy game machine \ sound \ sound/munt sound/munt/c_interface sound/munt/sha1 \ sound/munt/srchelper \ sound/resid-fp \ scsi video lzf network network/slirp win ifeq ($(X64), y) CPP := g++ -m64 CC := gcc -m64 else CPP := g++ -m32 CC := gcc -m32 endif WINDRES := windres DEPS = -MMD -MF $*.d -c $< DEPFILE := win/.depends # Set up the correct toolchain flags. OPTS := $(EXTRAS) $(STUFF) ifdef EXFLAGS OPTS += $(EXFLAGS) endif ifdef EXINC OPTS += -I$(EXINC) endif ifeq ($(X64), y) ifeq ($(OPTIM), y) DFLAGS := -march=native else DFLAGS := endif else ifeq ($(OPTIM), y) DFLAGS := -march=native else DFLAGS := -march=i686 endif endif ifeq ($(DEBUG), y) DFLAGS += -ggdb -DDEBUG AOPTIM := ifndef COPTIM COPTIM := -Og endif else ifeq ($(OPTIM), y) AOPTIM := -mtune=native ifndef COPTIM COPTIM := -O6 endif else ifndef COPTIM COPTIM := -O3 endif endif endif AFLAGS := -msse -msse2 -mfpmath=sse RFLAGS := --input-format=rc -O coff ifeq ($(CRASHDUMP), y) OPTS += -DUSE_CRASHDUMP endif ifeq ($(RELEASE), y) OPTS += -DRELEASE_BUILD RFLAGS += -DRELEASE_BUILD endif ifeq ($(VRAMDUMP), y) OPTS += -DENABLE_VRAM_DUMP RFLAGS += -DENABLE_VRAM_DUMP endif ifeq ($(X64), y) PLATCG := codegen_x86-64.o CGOPS := codegen_ops_x86-64.h VCG := vid_voodoo_codegen_x86-64.h else PLATCG := codegen_x86.o CGOPS := codegen_ops_x86.h VCG := vid_voodoo_codegen_x86.h endif # Optional modules. ifeq ($(DYNAREC), y) OPTS += -DUSE_DYNAREC RFLAGS += -DUSE_DYNAREC DYNARECOBJ := 386_dynarec_ops.o \ codegen.o \ codegen_ops.o \ codegen_timing_common.o codegen_timing_486.o \ codegen_timing_686.o codegen_timing_pentium.o \ codegen_timing_winchip.o $(PLATCG) endif ifneq ($(WX), n) OPTS += -DUSE_WX $(WX_FLAGS) LIBS += $(WX_LIBS) UIOBJ := wx_main.o wx_ui.o wx_stbar.o wx_render.o else UIOBJ := win_ui.o win_ddraw.o win_d3d.o win_png.o \ win_dialog.o win_about.o win_status.o win_stbar.o \ win_settings.o win_devconf.o win_snd_gain.o \ win_new_floppy.o win_jsconf.o endif ifeq ($(OPENAL), y) OPTS += -DUSE_OPENAL endif ifeq ($(FLUIDSYNTH), y) OPTS += -DUSE_FLUIDSYNTH FSYNTHOBJ := midi_fluidsynth.o endif ifeq ($(MUNT), y) OPTS += -DUSE_MUNT MUNTOBJ := midi_mt32.o \ Analog.o BReverbModel.o File.o FileStream.o LA32Ramp.o \ LA32FloatWaveGenerator.o LA32WaveGenerator.o \ MidiStreamParser.o Part.o Partial.o PartialManager.o \ Poly.o ROMInfo.o SampleRateConverter_dummy.o Synth.o \ Tables.o TVA.o TVF.o TVP.o sha1.o c_interface.o endif ifeq ($(VNC), y) OPTS += -DUSE_VNC RFLAGS += -DUSE_VNC ifneq ($(VNC_PATH), ) OPTS += -I$(VNC_PATH)\INCLUDE VNCLIB := -L$(VNC_PATH)\LIB endif VNCLIB += -lvncserver VNCOBJ := vnc.o vnc_keymap.o endif ifeq ($(RDP), y) OPTS += -DUSE_RDP RFLAGS += -DUSE_RDP ifneq ($(RDP_PATH), ) OPTS += -I$(RDP_PATH)\INCLUDE RDPLIB := -L$(RDP_PATH)\LIB endif RDPLIB += -lrdp RDPOBJ := rdp.o endif # Options for the DEV branch. ifeq ($(DEV_BRANCH), y) OPTS += -DDEV_BRANCH DEVBROBJ := ifeq ($(CIRRUS), y) OPTS += -DUSE_CIRRUS DEVBROBJ += vid_cl_gd.o vid_cl_gd_blit.o vid_cl_ramdac.o endif ifeq ($(GREENB), y) OPTS += -DUSE_GREENB DEVBROBJ += m_at_4gpv31.o endif ifeq ($(I686), y) OPTS += -DUSE_I686 DEVBROBJ += m_at_440fx.o endif ifeq ($(NE1000), y) OPTS += -DUSE_NE1000 endif ifeq ($(NV_RIVA), y) OPTS += -DUSE_RIVA DEVBROBJ += vid_nv_riva128.o endif ifeq ($(PAS16), y) OPTS += -DUSE_PAS16 DEVBROBJ += snd_pas16.o endif ifeq ($(PORTABLE3), y) OPTS += -DUSE_PORTABLE3 endif ifeq ($(STEALTH32), y) OPTS += -DUSE_STEALTH32 endif endif # Options for works-in-progress. ifndef SERIAL SERIAL := serial.o endif # Final versions of the toolchain flags. CFLAGS := $(WX_FLAGS) $(OPTS) $(DFLAGS) $(COPTIM) $(AOPTIM) \ $(AFLAGS) -fomit-frame-pointer -mstackrealign -Wall CXXFLAGS := $(WX_FLAGS) $(OPTS) $(DFLAGS) $(COPTIM) $(AOPTIM) \ $(AFLAGS) -fno-strict-aliasing -fvisibility=hidden \ -Wall -Wundef -fvisibility-inlines-hidden \ -Wunused-parameter -Wno-ctor-dtor-privacy \ -Woverloaded-virtual ######################################################################### # Create the (final) list of objects to build. # ######################################################################### MAINOBJ := pc.o config.o random.o timer.o io.o dma.o nmi.o pic.o \ pit.o ppi.o pci.o mca.o mcr.o mem.o memregs.o rom.o \ device.o nvr.o nvr_at.o nvr_ps2.o $(VNCOBJ) $(RDPOBJ) \ intel.o intel_flash.o intel_piix.o intel_piix4.o intel_sio.o CPUOBJ := cpu.o cpu_table.o \ 808x.o 386.o x86seg.o x87.o \ 386_dynarec.o $(DYNARECOBJ) MCHOBJ := machine.o machine_table.o \ m_amstrad.o m_europc.o m_europc_hdc.o \ m_olivetti_m24.o m_tandy.o \ m_xt.o m_xt_compaq.o m_xt_laserxt.o \ m_at.o m_at_ali1429.o m_at_commodore.o \ m_at_neat.o m_at_headland.o \ m_at_t3100e.o \ m_at_opti495.o m_at_scat.o \ m_at_compaq.o m_at_wd76c10.o \ m_at_sis_85c471.o m_at_sis_85c496.o \ m_at_430lx_nx.o m_at_430fx.o \ m_at_430hx.o m_at_430vx.o \ m_pcjr.o m_ps1.o m_ps2_isa.o m_ps2_mca.o DEVOBJ := bugger.o lpt.o $(SERIAL) \ sio_detect.o \ sio_fdc37c66x.o sio_fdc37c669.o sio_fdc37c93x.o \ sio_pc87306.o sio_w83877f.o sio_um8669f.o \ keyboard.o \ keyboard_xt.o keyboard_at.o \ gameport.o \ joystick_standard.o joystick_ch_flightstick_pro.o \ joystick_sw_pad.o joystick_tm_fcs.o \ mouse.o \ mouse_serial.o mouse_ps2.o mouse_bus.o \ zip.o FDDOBJ := fdd.o fdc.o fdi2raw.o \ fdd_common.o fdd_86f.o \ fdd_fdi.o fdd_imd.o fdd_img.o fdd_json.o \ fdd_td0.o HDDOBJ := hdd.o \ hdd_image.o hdd_table.o \ hdc.o \ hdc_esdi_at.o hdc_esdi_mca.o hdc_ide.o hdc_mfm_at.o \ hdc_mfm_xt.o hdc_xtide.o CDROMOBJ := cdrom.o \ cdrom_dosbox.o cdrom_image.o cdrom_null.o ifeq ($(USB), y) USBOBJ := usb.o endif SCSIOBJ := scsi.o \ scsi_bus.o scsi_device.o \ scsi_disk.o \ scsi_x54x.o \ scsi_aha154x.o scsi_buslogic.o \ scsi_ncr5380.o scsi_ncr53c810.o NETOBJ := network.o \ net_pcap.o \ net_slirp.o \ bootp.o ip_icmp.o misc.o socket.o tcp_timer.o cksum.o \ ip_input.o queue.o tcp_input.o debug.o ip_output.o \ sbuf.o tcp_output.o udp.o if.o mbuf.o slirp.o tcp_subr.o \ net_ne2000.o SNDOBJ := sound.o \ openal.o \ dbopl.o nukedopl.o \ snd_resid.o \ convolve.o convolve-sse.o envelope.o extfilt.o \ filter.o pot.o sid.o voice.o wave6581__ST.o \ wave6581_P_T.o wave6581_PS_.o wave6581_PST.o \ wave8580__ST.o wave8580_P_T.o wave8580_PS_.o \ wave8580_PST.o wave.o \ midi.o $(FSYNTHOBJ) $(MUNTOBJ) \ midi_system.o \ snd_speaker.o \ snd_pssj.o \ snd_lpt_dac.o snd_lpt_dss.o \ snd_adlib.o snd_adlibgold.o snd_ad1848.o snd_audiopci.o \ snd_sb.o snd_sb_dsp.o snd_cms.o snd_dbopl.o \ snd_emu8k.o snd_gus.o snd_opl.o \ snd_mpu401.o \ snd_sn76489.o snd_ssi2001.o snd_wss.o \ snd_ym7128.o VIDOBJ := video.o \ vid_table.o \ vid_cga.o vid_cga_comp.o \ vid_compaq_cga.o \ vid_mda.o \ vid_ega.o vid_ega_render.o \ vid_vga.o vid_svga.o vid_svga_render.o \ vid_hercules.o vid_herculesplus.o vid_incolor.o \ vid_colorplus.o \ vid_genius.o \ vid_t3100e.o \ vid_s3.o vid_s3_virge.o \ vid_et4000.o vid_et4000w32.o vid_icd2061.o \ vid_oti067.o \ vid_paradise.o \ vid_tvga.o vid_tgui9440.o vid_tkd8001_ramdac.o \ vid_ati_eeprom.o vid_ati18800.o vid_ati28800.o \ vid_ati68860_ramdac.o vid_ati_mach64.o \ vid_ics2595.o \ vid_sc1502x_ramdac.o \ vid_sdac_ramdac.o \ vid_stg_ramdac.o \ vid_ti_cf62011.o \ vid_wy700.o \ vid_voodoo.o PLATOBJ := win.o \ $(CRASHDUMPOBJ) win_dynld.o win_thread.o $(WSERIAL) \ win_cdrom.o win_cdrom_ioctl.o win_keyboard.o \ win_mouse.o win_joystick.o win_midi.o OBJ := $(MAINOBJ) $(CPUOBJ) $(MCHOBJ) $(DEVOBJ) \ $(FDDOBJ) $(CDROMOBJ) $(HDDOBJ) \ $(USBOBJ) $(NETOBJ) $(SCSIOBJ) $(SNDOBJ) $(VIDOBJ) \ $(PLATOBJ) $(UIOBJ) $(DEVBROBJ) ifdef EXOBJ OBJ += $(EXOBJ) endif LZFOBJ := lzf_c.o lzf_d.o LIBS := -mwindows \ -lopenal.dll \ -lddraw -ldinput8 -ldxguid -ld3d9 -ld3dx9 \ -lcomctl32 -lwinmm ifeq ($(VNC), y) LIBS += $(VNCLIB) -lws2_32 -lz endif ifeq ($(RDP), y) LIBS += $(RDPLIB) endif ifneq ($(WX), n) LIBS += $(WX_LIBS) -lz -lm endif LIBS += -lkernel32 -lwsock32 -liphlpapi -lpsapi LIBS += -lpthread -static -lstdc++ -lgcc ifneq ($(X64), y) LIBS += -Wl,--large-address-aware endif # Build module rules. ifeq ($(AUTODEP), y) %.o: %.c @echo $< @$(CC) $(CFLAGS) $(DEPS) -c $< %.o: %.cc @echo $< @$(CPP) $(CXXFLAGS) $(DEPS) -c $< %.o: %.cpp @echo $< @$(CPP) $(CXXFLAGS) $(DEPS) -c $< else %.o: %.c @echo $< @$(CC) $(CFLAGS) -c $< %.o: %.cc @echo $< @$(CPP) $(CXXFLAGS) -c $< %.o: %.cpp @echo $< @$(CPP) $(CXXFLAGS) -c $< %.d: %.c $(wildcard $*.d) @echo $< @$(CC) $(CFLAGS) $(DEPS) -E $< >NUL %.d: %.cc $(wildcard $*.d) @echo $< @$(CPP) $(CXXFLAGS) $(DEPS) -E $< >NUL %.d: %.cpp $(wildcard $*.d) @echo $< @$(CPP) $(CXXFLAGS) $(DEPS) -E $< >NUL endif all: $(PROG).exe pcap_if.exe 86Box.res: 86Box.rc @echo Processing $< @$(WINDRES) $(RFLAGS) $(EXTRAS) -i $< -o 86Box.res $(PROG).exe: $(OBJ) $(LZFOBJ) 86Box.res @echo Linking $(PROG).exe .. @$(CC) -o $(PROG).exe $(OBJ) $(LZFOBJ) 86Box.res $(LIBS) ifneq ($(DEBUG), y) @strip $(PROG).exe endif pcap_if.res: pcap_if.rc @echo Processing $< @$(WINDRES) $(RFLAGS) -i $< -o pcap_if.res pcap_if.exe: pcap_if.o win_dynld.o pcap_if.res @echo Linking pcap_if.exe .. @$(CC) -o pcap_if.exe pcap_if.o win_dynld.o pcap_if.res ifneq ($(DEBUG), y) @strip pcap_if.exe endif hello.exe: hello.o $(CXX) $(LDFLAGS) -o hello.exe hello.o $(WXLIBS) $(LIBS) ifneq ($(DEBUG), y) @strip hello.exe endif clean: @echo Cleaning objects.. @-rm -f *.o 2>NUL @-rm -f *.res 2>NUL clobber: clean @echo Cleaning executables.. @-rm -f *.d 2>NUL @-rm -f *.exe 2>NUL # @-rm -f $(DEPFILE) 2>NUL ifneq ($(AUTODEP), y) depclean: @-rm -f $(DEPFILE) 2>NUL @echo Creating dependencies.. @echo # Run "make depends" to re-create this file. >$(DEPFILE) depends: DEPOBJ=$(OBJ:%.o=%.d) depends: depclean $(OBJ:%.o=%.d) @-cat $(DEPOBJ) >>$(DEPFILE) @-rm -f $(DEPOBJ) $(DEPFILE): endif # Module dependencies. ifeq ($(AUTODEP), y) #-include $(OBJ:%.o=%.d) (better, but sloooowwwww) -include *.d else include $(wildcard $(DEPFILE)) endif # End of Makefile.mingw.