# # # 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. # # Authors: Miran Grca, # Fred N. van Kempen, # # Various compile-time options. ifndef STUFF STUFF := endif # Add feature selections here. ifndef EXTRAS EXTRAS := endif ifndef DEV_BUILD DEV_BUILD := n endif ifeq ($(DEV_BUILD), y) ifndef DEBUG DEBUG := y endif ifndef GDBSTUB GDBSTUB := n endif ifndef DEV_BRANCH DEV_BRANCH := y endif ifndef AMD_K5 AMD_K5 := y endif ifndef AN430TX AN430TX := y endif ifndef CYRIX_6X86 CYRIX_6X86 := y endif ifndef DESKPRO386 DESKPRO386 := y endif ifndef GUSMAX GUSMAX := y endif ifndef ISAMEM_RAMPAGE ISAMEM_RAMPAGE := y endif ifndef ISAMEM_IAB ISAMEM_IAB := y endif ifndef ISAMEM_BRAT ISAMEM_BRAT := y endif ifndef LASERXT LASERXT := y endif ifndef MGA MGA := y endif ifndef OLIVETTI OLIVETTI := y endif ifndef OPEN_AT OPEN_AT := y endif ifndef PAS16 PAS16 := y endif ifndef PCI_DUMMY PCI_DUMMY := y endif ifndef SIO_DETECT SIO_DETECT := y endif ifndef VGAWONDER VGAWONDER := y endif ifndef XL24 XL24 := y endif ifndef NEW_KBC NEW_KBC := n endif else ifndef DEBUG DEBUG := n endif ifndef GDBSTUB GDBSTUB := n endif ifndef DEV_BRANCH DEV_BRANCH := n endif ifndef AMD_K5 AMD_K5 := n endif ifndef AN430TX AN430TX := n endif ifndef CYRIX_6X86 CYRIX_6X86 := n endif ifndef DESKPRO386 DESKPRO386 := n endif ifndef GUSMAX GUSMAX := n endif ifndef ISAMEM_RAMPAGE ISAMEM_RAMPAGE := n endif ifndef ISAMEM_IAB ISAMEM_IAB := n endif ifndef ISAMEM_BRAT ISAMEM_BRAT := n endif ifndef LASERXT LASERXT := n endif ifndef MGA MGA := n endif ifndef OLIVETTI OLIVETTI := n endif ifndef OPEN_AT OPEN_AT := n endif ifndef PAS16 PAS16 := n endif ifndef PCI_DUMMY PCI_DUMMY := n endif ifndef SIO_DETECT SIO_DETECT := n endif ifndef VGAWONDER VGAWONDER := n endif ifndef XL24 XL24 := n endif ifndef NEW_KBC NEW_KBC := n endif endif # Defaults for several build options (possibly defined in a chained file.) ifndef AUTODEP AUTODEP := n endif ifndef OPTIM OPTIM := n endif ifndef RELEASE RELEASE := n endif ifndef X64 X64 := n endif ifndef ARM ARM := n endif ifndef ARM64 ARM64 := n endif ifndef DINPUT DINPUT := n endif ifndef FAUDIO FAUDIO := n endif ifndef OPENAL OPENAL := y endif ifndef FLUIDSYNTH FLUIDSYNTH := y endif ifndef MUNT MUNT := y endif ifndef VNC VNC := n endif ifndef NEW_DYNAREC NEW_DYNAREC := n endif ifndef DYNAREC DYNAREC := y endif ifndef CPPTHREADS CPPTHREADS := y endif ifndef RTMIDI RTMIDI := y endif ifndef MINITRACE MINITRACE := n endif ifndef AVX AVX := n endif ifeq ($(DYNAREC), y) ifeq ($(ARM), y) ifeq ($(NEW_DYNAREC), n) DYNAREC := n endif endif ifeq ($(ARM64), y) ifeq ($(NEW_DYNAREC), n) DYNAREC := n endif endif endif # Path to the dynamic recompiler code. ifeq ($(NEW_DYNAREC), y) CODEGEN := codegen_new else CODEGEN := codegen endif # Name of the executable. PROG := 86Box ######################################################################### # Nothing should need changing from here on.. # ######################################################################### VPATH := $(EXPATH) . $(CODEGEN) minitrace cpu cpu/softfloat \ cpu/808x cdrom chipset device disk disk/minivhd floppy \ game machine mem printer \ sio sound \ sound/munt sound/munt/c_interface sound/munt/sha1 \ sound/munt/srchelper sound/munt/srchelper/srctools/src \ sound/resid-fp sound/ymfm \ scsi video network win WINDRES := windres STRIP := strip ifeq ($(X64), y) TOOL_PREFIX := x86_64-w64-mingw32- else ifeq ($(ARM64), y) TOOL_PREFIX := aarch64-w64-mingw32- WINDRES := ${TOOL_PREFIX}windres STRIP := ${TOOL_PREFIX}strip endif ifeq ($(ARM), y) TOOL_PREFIX := armv7-w64-mingw32- WINDRES := ${TOOL_PREFIX}windres STRIP := ${TOOL_PREFIX}strip endif TOOL_PREFIX := i686-w64-mingw32- endif ifeq ($(CLANG), y) CPP := clang++ CC := clang else CPP := ${TOOL_PREFIX}g++ CC := ${TOOL_PREFIX}gcc endif DEPS = -MMD -MF $*.d -c $< DEPFILE := win/.depends # Set up the correct toolchain flags. OPTS := $(EXTRAS) $(STUFF) OPTS += -Iinclude -Iinclude_make \ -iquote $(CODEGEN) -iquote cpu ifdef EXFLAGS OPTS += $(EXFLAGS) endif ifdef EXINC OPTS += -I$(EXINC) endif ifeq ($(OPTIM), y) DFLAGS := -march=native else ifeq ($(X64), y) DFLAGS := else DFLAGS := -march=i686 endif endif ifeq ($(DEBUG), y) DFLAGS += -ggdb -DDEBUG AOPTIM := ifndef COPTIM COPTIM := -Og endif ifndef CXXOPTIM ifeq ($(CLANG), y) CXXOPTIM := -Os else CXXOPTIM := -Og endif endif else DFLAGS += -g0 ifeq ($(OPTIM), y) AOPTIM := -mtune=native ifndef COPTIM CXXOPTIM := -O3 -ffp-contract=fast -flto endif ifndef CXXOPTIM ifeq ($(CLANG), y) CXXOPTIM := -Os -ffp-contract=fast -flto else CXXOPTIM := -O3 -ffp-contract=fast -flto endif endif else ifndef COPTIM COPTIM := -O3 endif ifndef CXXOPTIM ifeq ($(CLANG), y) CXXOPTIM := -Os else CXXOPTIM := -O3 endif endif endif endif ifeq ($(AVX), y) AFLAGS := -msse2 -msse3 -mssse3 -msse4 -msse4a -mavx -mavx2 -mfpmath=sse else AFLAGS := -msse2 -mfpmath=sse endif ifeq ($(ARM), y) DFLAGS := -march=armv7-a AOPTIM := AFLAGS := -mfloat-abi=hard endif ifeq ($(ARM64), y) DFLAGS := -march=armv8-a AOPTIM := AFLAGS := -mfloat-abi=hard endif RFLAGS := --input-format=rc -O coff -Iinclude -Iinclude_make ifeq ($(RELEASE), y) OPTS += -DRELEASE_BUILD RFLAGS += -DRELEASE_BUILD endif # Optional modules. ifeq ($(DYNAREC), y) OPTS += -DUSE_DYNAREC RFLAGS += -DUSE_DYNAREC ifeq ($(NEW_DYNAREC), y) OPTS += -DUSE_NEW_DYNAREC RFLAGS += -DUSE_NEW_DYNAREC ifeq ($(X64), y) PLATCG := codegen_backend_x86-64.o codegen_backend_x86-64_ops.o codegen_backend_x86-64_ops_sse.o \ codegen_backend_x86-64_uops.o else ifeq ($(ARM64), y) PLATCG := codegen_backend_arm64.o codegen_backend_arm64_ops.o codegen_backend_arm64_uops.o \ codegen_backend_arm64_imm.o else ifeq ($(ARM), y) PLATCG := codegen_backend_arm.o codegen_backend_arm_ops.o codegen_backend_arm_uops.o else PLATCG := codegen_backend_x86.o codegen_backend_x86_ops.o codegen_backend_x86_ops_fpu.o \ codegen_backend_x86_ops_sse.o codegen_backend_x86_uops.o endif DYNARECOBJ := codegen.o codegen_accumulate.o codegen_allocator.o codegen_block.o codegen_ir.o codegen_ops.o \ codegen_ops_3dnow.o codegen_ops_branch.o codegen_ops_arith.o codegen_ops_fpu_arith.o \ codegen_ops_fpu_constant.o codegen_ops_fpu_loadstore.o codegen_ops_fpu_misc.o codegen_ops_helpers.o \ codegen_ops_jump.o codegen_ops_logic.o codegen_ops_misc.o codegen_ops_mmx_arith.o codegen_ops_mmx_cmp.o \ codegen_ops_mmx_loadstore.o codegen_ops_mmx_logic.o codegen_ops_mmx_pack.o codegen_ops_mmx_shift.o \ codegen_ops_mov.o codegen_ops_shift.o codegen_ops_stack.o codegen_reg.o $(PLATCG) else ifeq ($(X64), y) PLATCG := codegen_x86-64.o codegen_accumulate_x86-64.o else PLATCG := codegen_x86.o codegen_accumulate_x86.o endif DYNARECOBJ := codegen.o \ codegen_ops.o $(PLATCG) endif CGTOBJ := codegen_timing_486.o \ codegen_timing_686.o codegen_timing_common.o codegen_timing_k6.o codegen_timing_pentium.o \ codegen_timing_p6.o codegen_timing_winchip.o codegen_timing_winchip2.o else ifeq ($(NEW_DYNAREC), y) OPTS += -DUSE_NEW_DYNAREC RFLAGS += -DUSE_NEW_DYNAREC endif 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 Display.o File.o FileStream.o LA32Ramp.o \ LA32FloatWaveGenerator.o LA32WaveGenerator.o \ MidiStreamParser.o Part.o Partial.o PartialManager.o \ Poly.o ROMInfo.o SampleRateConverter.o \ FIRResampler.o IIR2xResampler.o LinearResampler.o ResamplerModel.o \ SincResampler.o InternalResampler.o \ Synth.o Tables.o TVA.o TVF.o TVP.o sha1.o c_interface.o endif ifeq ($(CPPTHREADS), y) THREADOBJ := thread.o else THREADOBJ := win_thread.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.dll VNCOBJ := vnc.o vnc_keymap.o endif ifeq ($(MINITRACE), y) OPTS += -DMTR_ENABLED RFLAGS += -DMTR_ENABLED MINITRACEOBJ := minitrace.o endif ifeq ($(FAUDIO), y) OPTS += -DUSE_FAUDIO endif # Options for the DEV branch. ifeq ($(DEV_BRANCH), y) OPTS += -DDEV_BRANCH RFLAGS += -DDEV_BRANCH DEVBROBJ := ifeq ($(AMD_K5), y) OPTS += -DUSE_AMD_K5 endif ifeq ($(AN430TX), y) OPTS += -DUSE_AN430TX endif ifeq ($(CYRIX_6X86), y) OPTS += -DUSE_CYRIX_6X86 endif ifeq ($(DESKPRO386), y) OPTS += -DUSE_DESKPRO386 endif ifeq ($(GUSMAX), y) OPTS += -DUSE_GUSMAX endif ifeq ($(ISAMEM_RAMPAGE), y) OPTS += -DUSE_ISAMEM_RAMPAGE endif ifeq ($(ISAMEM_IAB), y) OPTS += -DUSE_ISAMEM_IAB endif ifeq ($(ISAMEM_BRAT), y) OPTS += -DUSE_ISAMEM_BRAT endif ifeq ($(LASERXT), y) OPTS += -DUSE_LASERXT DEVBROBJ += m_xt_laserxt.o endif ifeq ($(MGA), y) OPTS += -DUSE_MGA DEVBROBJ += vid_mga.o endif ifeq ($(OPEN_AT), y) OPTS += -DUSE_OPEN_AT endif ifeq ($(PAS16), y) OPTS += -DUSE_PAS16 DEVBROBJ += snd_pas16.o endif ifeq ($(PCI_DUMMY), y) OPTS += -DUSE_PCI_DUMMY DEVBROBJ += pci_dummy.o endif ifeq ($(SIO_DETECT), y) OPTS += -DUSE_SIO_DETECT DEVBROBJ += sio_detect.o endif ifeq ($(VGAWONDER), y) OPTS += -DUSE_VGAWONDER endif ifeq ($(XL24), y) OPTS += -DUSE_XL24 endif ifeq ($(OLIVETTI), y) OPTS += -DUSE_OLIVETTI DEVBROBJ += olivetti_eva.o endif ifeq ($(GDBSTUB), y) OPTS += -DUSE_GDBSTUB DEVBROBJ += gdbstub.o endif endif ifeq ($(RTMIDI), y) OPTS += -DUSE_RTMIDI endif # Final versions of the toolchain flags. CFLAGS := $(OPTS) $(DFLAGS) $(COPTIM) $(AOPTIM) \ $(AFLAGS) -fomit-frame-pointer -mstackrealign -Wall \ -fno-strict-aliasing # Add freetyp2 references through pkgconfig CFLAGS := $(CFLAGS) `pkg-config --cflags freetype2` CXXFLAGS := $(OPTS) $(DFLAGS) $(CXXOPTIM) $(AOPTIM) \ $(AFLAGS) -fomit-frame-pointer -mstackrealign -Wall \ -fno-strict-aliasing CFLAGS += -Werror=implicit-int -Werror=implicit-function-declaration \ -Werror=int-conversion -Werror=strict-prototypes -Werror=old-style-definition ######################################################################### # Create the (final) list of objects to build. # ######################################################################### MAINOBJ := 86box.o config.o log.o random.o timer.o io.o acpi.o apm.o dma.o ddma.o \ nmi.o pic.o pit.o pit_fast.o port_6x.o port_92.o ppi.o pci.o mca.o fifo8.o \ usb.o device.o nvr.o nvr_at.o nvr_ps2.o machine_status.o ini.o \ $(VNCOBJ) MEMOBJ := catalyst_flash.o i2c_eeprom.o intel_flash.o mem.o rom.o row.o smram.o spd.o sst_flash.o CPU808XOBJ := queue.o CPUOBJ := $(DYNARECOBJ) \ $(CGTOBJ) \ cpu.o cpu_table.o fpu.o x86.o \ 8080.o 808x.o 386.o 386_common.o 386_dynarec.o 386_dynarec_ops.o \ x86_ops_mmx.o x86seg.o x87.o x87_timings.o \ f2xm1.o fpatan.o fprem.o fsincos.o fyl2x.o softfloat_poly.o softfloat.o softfloat16.o \ softfloat-muladd.o softfloat-round-pack.o softfloat-specialize.o softfloatx80.o CHIPSETOBJ := 82c100.o acc2168.o \ contaq_82c59x.o \ cs4031.o cs8230.o \ ali1429.o ali1435.o ali1489.o ali1531.o ali1541.o ali1543.o ali1621.o ali6117.o \ gc100.o headland.o \ ims8848.o intel_82335.o intel_420ex.o intel_4x0.o intel_i450kx.o intel_sio.o intel_piix.o \ ioapic.o \ neat.o \ opti283.o opti291.o opti391.o opti495.o opti822.o opti895.o opti5x7.o \ scamp.o scat.o \ stpc.o \ wd76c10.o vl82c480.o \ umc_8886.o umc_hb4.o \ via_vt82c49x.o via_vt82c505.o via_apollo.o via_pipc.o \ sis_85c310.o sis_85c4xx.o sis_85c496.o sis_85c50x.o sis_5511.o sis_5571.o MCHOBJ := machine.o machine_table.o \ m_xt.o m_xt_compaq.o \ m_xt_philips.o \ m_xt_t1000.o m_xt_t1000_vid.o \ m_xt_xi8088.o m_xt_zenith.o \ m_pcjr.o \ m_amstrad.o m_europc.o \ m_elt.o \ m_xt_olivetti.o m_tandy.o m_v86p.o \ m_at.o m_at_commodore.o \ m_at_t3100e.o m_at_t3100e_vid.o \ m_ps1.o m_ps1_hdc.o \ m_ps2_isa.o m_ps2_mca.o \ m_at_compaq.o \ m_at_286_386sx.o m_at_386dx_486.o \ m_at_socket4.o m_at_socket5.o m_at_socket7_3v.o m_at_socket7.o m_at_sockets7.o \ m_at_socket8.o m_at_slot1.o m_at_slot2.o m_at_socket370.o \ m_at_misc.o KBCOBJ := kbc_at.o kbc_at_dev.o \ keyboard_at.o DEVOBJ := bugger.o cartridge.o cassette.o hasp.o hwm.o hwm_lm75.o hwm_lm78.o hwm_gl518sm.o hwm_vt82c686.o \ ibm_5161.o isamem.o isartc.o lpt.o pci_bridge.o postcard.o serial.o \ clock_ics9xxx.o isapnp.o \ i2c.o i2c_gpio.o smbus_ali7101.o smbus_piix4.o \ keyboard.o \ keyboard_xt.o $(KBCOBJ) \ mouse.o \ mouse_bus.o \ mouse_serial.o mouse_ps2.o \ mouse_wacom_tablet.o \ phoenix_486_jumper.o serial_passthrough.o SIOOBJ := sio_acc3221.o sio_ali5123.o \ sio_f82c710.o sio_82091aa.o sio_fdc37c6xx.o \ sio_fdc37c67x.o sio_fdc37c669.o sio_fdc37c93x.o sio_fdc37m60x.o \ sio_it8661f.o \ sio_pc87306.o sio_pc87307.o sio_pc87309.o sio_pc87310.o sio_pc87311.o sio_pc87332.o \ sio_prime3b.o sio_prime3c.o \ sio_w83787f.o \ sio_w83877f.o sio_w83977f.o \ sio_um8669f.o \ sio_vt82c686.o FDDOBJ := fdd.o fdc.o fdc_magitronic.o fdc_monster.o fdc_pii15xb.o \ fdi2raw.o \ fdd_common.o fdd_86f.o \ fdd_fdi.o fdd_imd.o fdd_img.o fdd_json.o \ fdd_mfm.o fdd_td0.o GAMEOBJ := gameport.o \ joystick_standard.o joystick_ch_flightstick_pro.o \ joystick_sw_pad.o joystick_tm_fcs.o HDDOBJ := hdd.o \ hdd_image.o hdd_table.o \ hdc.o \ hdc_st506_xt.o hdc_st506_at.o \ hdc_xta.o \ hdc_esdi_at.o hdc_esdi_mca.o \ hdc_xtide.o hdc_ide.o \ hdc_ide_opti611.o \ hdc_ide_cmd640.o hdc_ide_cmd646.o \ hdc_ide_sff8038i.o MINIVHDOBJ := cwalk.o xml2_encoding.o convert.o \ create.o minivhd_io.o manage.o struct_rw.o minivhd_util.o CDROMOBJ := cdrom.o \ cdrom_image_backend.o cdrom_image_viso.o cdrom_image.o cdrom_mitsumi.o ZIPOBJ := zip.o MOOBJ := mo.o SCSIOBJ := scsi.o scsi_device.o \ scsi_cdrom.o scsi_disk.o \ scsi_x54x.o \ scsi_aha154x.o scsi_buslogic.o \ scsi_ncr5380.o scsi_ncr53c8xx.o \ scsi_pcscsi.o scsi_spock.o NETOBJ := network.o \ net_pcap.o \ net_slirp.o \ net_dp8390.o net_3c501.o \ net_3c503.o net_ne2000.o \ net_pcnet.o net_wd8003.o \ net_plip.o net_event.o \ net_null.o PRINTOBJ := png.o prt_cpmap.o \ prt_escp.o prt_text.o prt_ps.o SNDOBJ := sound.o \ snd_opl.o snd_opl_nuked.o snd_opl_ymfm.o \ ymfm_adpcm.o ymfm_misc.o ymfm_opl.o ymfm_opm.o \ ymfm_opn.o ymfm_opq.o ymfm_opz.o ymfm_pcm.o ymfm_ssg.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 \ snd_speaker.o \ snd_pssj.o \ snd_ps1.o \ snd_lpt_dac.o snd_lpt_dss.o \ snd_adlib.o snd_adlibgold.o snd_ad1848.o snd_audiopci.o \ snd_ac97_codec.o snd_ac97_via.o \ snd_azt2316a.o snd_cs423x.o \ snd_optimc.o snd_cmi8x38.o \ snd_cms.o \ snd_gus.o \ snd_sb.o snd_sb_dsp.o \ snd_emu8k.o snd_mpu401.o \ snd_sn76489.o snd_ssi2001.o \ snd_wss.o \ snd_ym7128.o VIDOBJ := agpgart.o video.o \ vid_table.o \ vid_cga.o vid_cga_comp.o \ vid_compaq_cga.o \ vid_mda.o \ vid_hercules.o vid_herculesplus.o vid_incolor.o \ vid_colorplus.o \ vid_genius.o \ vid_pgc.o vid_im1024.o \ vid_sigma.o \ vid_wy700.o \ vid_ega.o vid_ega_render.o \ vid_svga.o vid_svga_render.o \ vid_8514a.o \ vid_ddc.o \ vid_vga.o \ vid_ati_eeprom.o \ vid_ati18800.o vid_ati28800.o \ vid_ati_mach8.o \ vid_ati_mach64.o vid_ati68860_ramdac.o \ vid_bt48x_ramdac.o \ vid_av9194.o vid_icd2061.o vid_ics2494.o vid_ics2595.o \ vid_cl54xx.o \ vid_et3000.o \ vid_et4000.o vid_sc1148x_ramdac.o \ vid_sc1502x_ramdac.o \ vid_et4000w32.o vid_stg_ramdac.o \ vid_ht216.o \ vid_oak_oti.o \ vid_paradise.o \ vid_rtg310x.o \ vid_ti_cf62011.o \ vid_f82c425.o \ vid_tvga.o \ vid_tgui9440.o vid_tkd8001_ramdac.o \ vid_att20c49x_ramdac.o \ vid_att2xc498_ramdac.o \ vid_s3.o vid_s3_virge.o \ vid_ibm_rgb528_ramdac.o vid_sdac_ramdac.o \ vid_ogc.o \ vid_nga.o \ vid_tvp3026_ramdac.o \ vid_xga.o VOODOOOBJ := vid_voodoo.o vid_voodoo_banshee.o \ vid_voodoo_banshee_blitter.o \ vid_voodoo_blitter.o \ vid_voodoo_display.o vid_voodoo_fb.o \ vid_voodoo_fifo.o vid_voodoo_reg.o \ vid_voodoo_render.o vid_voodoo_setup.o \ vid_voodoo_texture.o PLATOBJ := win.o \ win_dynld.o \ win_cdrom.o win_keyboard.o \ win_mouse.o win_serial_passthrough.o UIOBJ := win_ui.o win_icon.o win_stbar.o discord.o \ win_sdl.o win_opengl.o win_opengl_glslp.o glad.o \ win_dialog.o win_about.o \ win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_preferences.o \ win_new_floppy.o win_jsconf.o \ win_media_menu.o win_toolbar.o ifeq ($(DINPUT), y) PLATOBJ += win_joystick.o else PLATOBJ += win_joystick_rawinput.o endif ifeq ($(OPENAL), y) SNDOBJ += openal.o else SNDOBJ += xaudio2.o endif ifeq ($(RTMIDI), y) SNDOBJ += midi_rtmidi.o endif OBJ := $(MAINOBJ) $(CPU808XOBJ) $(CPUOBJ) $(CHIPSETOBJ) $(MCHOBJ) $(DEVOBJ) $(MEMOBJ) \ $(FDDOBJ) $(GAMEOBJ) $(CDROMOBJ) $(ZIPOBJ) $(MOOBJ) $(HDDOBJ) $(MINIVHDOBJ) \ $(NETOBJ) $(PRINTOBJ) $(SCSIOBJ) $(SIOOBJ) $(SNDOBJ) $(VIDOBJ) $(VOODOOOBJ) \ $(PLATOBJ) $(UIOBJ) $(FSYNTHOBJ) $(MUNTOBJ) $(DEVBROBJ) $(MINITRACEOBJ) $(THREADOBJ) ifdef EXOBJ OBJ += $(EXOBJ) endif ifeq ($(LOG), y) MWIN := -lcomdlg32 else MWIN := -mwindows endif LIBS := -lfreetype -lfluidsynth -lslirp -lbz2 -lharfbuzz -lgraphite2 -lbrotlidec \ -lbrotlicommon -lusp10 -lrpcrt4 -lgomp -lsndfile -lflac -lmp3lame -lmpg123 \ -lopus -lvorbis -lvorbisenc -logg -ldsound -lshlwapi -lksuser -lreadline \ -ltermcap -lportaudio -lgmodule-2.0 -lglib-2.0 -lintl -liconv ifeq ($(OPENAL), y) LIBS += $(MWIN) -lopenal -lcomctl32 -lSDL2 -limagehlp -ldinput8 -ldxguid -ldxerr8 \ -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion \ -luuid -lws2_32 else ifeq ($(FAUDIO), y) LIBS += $(MWIN) -lfaudio -lcomctl32 -lSDL2 -limagehlp -ldinput8 -ldxguid -ldxerr8 \ -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion \ -luuid -lws2_32 else LIBS += $(MWIN) -lcomctl32 -lSDL2 -limagehlp -ldinput8 -ldxguid -ldxerr8 -luser32 \ -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid \ -lws2_32 endif endif ifeq ($(RTMIDI), y) ifeq ($(CLANG), y) LIBS += -lrtmidi.dll -lwinmm else LIBS += -lrtmidi -lwinmm endif endif ifeq ($(VNC), y) LIBS += $(VNCLIB) -lws2_32 endif ifeq ($(CLANG), y) LIBS += -lpng -lz -lwsock32 -liphlpapi -lpsapi -lhid -lsetupapi -luxtheme -static -lstdc++.dll else LIBS += -lpng -lz -lwsock32 -liphlpapi -lpsapi -lhid -lsetupapi -luxtheme -static -lstdc++ endif ifneq ($(X64), y) ifneq ($(ARM64), y) LIBS += -Wl,--large-address-aware endif endif ifeq ($(ARM64), y) LIBS += -lgcc endif ifeq ($(DINPUT), y) LIBS += -ldinput8 endif LIBS += -static # 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 $< >/dev/null %.d: %.cc $(wildcard $*.d) @echo $< @$(CPP) $(CXXFLAGS) $(DEPS) -E $< >/dev/null %.d: %.cpp $(wildcard $*.d) @echo $< @$(CPP) $(CXXFLAGS) $(DEPS) -E $< >/dev/null endif # Suppress false positive warnings in vid_voodoo_codegen_x86[-64].h # that cause ~3000 lines to be output into the logs each time. ifneq ($(CLANG), y) $(VOODOOOBJ): CFLAGS += -Wstringop-overflow=0 endif all: $(PROG).exe 86Box.res: 86Box.rc @echo Processing $< @$(WINDRES) -v $(RFLAGS) $(EXTRAS) -i $< -o 86Box.res $(PROG).exe: $(OBJ) 86Box.res @echo Linking $(PROG).exe .. @$(CC) $(LDFLAGS) -o $(PROG).exe $(OBJ) 86Box.res $(LIBS) -pipe 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) $(LDFLAGS) -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 $(LIBS) ifneq ($(DEBUG), y) @$(STRIP) hello.exe endif clean: @echo Cleaning objects.. @-rm -f *.o 2>/dev/null @-rm -f *.res 2>/dev/null clobber: clean @echo Cleaning executables.. @-rm -f *.d 2>/dev/null @-rm -f *.exe 2>/dev/null # @-rm -f $(DEPFILE) 2>/dev/null ifneq ($(AUTODEP), y) depclean: @-rm -f $(DEPFILE) 2>/dev/null @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.