########################################################################### # # windows.mak # # Windows-specific makefile # # Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team. # Visit http://mamedev.org for licensing and usage restrictions. # ########################################################################### ########################################################################### ################# BEGIN USER-CONFIGURABLE OPTIONS ##################### ########################################################################### #------------------------------------------------- # specify build options; see each option below # for details #------------------------------------------------- # uncomment next line to enable a build using Microsoft tools # MSVC_BUILD = 1 # uncomment next line to use cygwin compiler # CYGWIN_BUILD = 1 # uncomment next line to enable multi-monitor stubs on Windows 95/NT # you will need to find multimon.h and put it into your include # path in order to make this work # WIN95_MULTIMON = 1 # uncomment next line to enable a Unicode build # UNICODE = 1 ########################################################################### ################## END USER-CONFIGURABLE OPTIONS ###################### ########################################################################### #------------------------------------------------- # object and source roots #------------------------------------------------- WINSRC = $(SRC)/osd/$(OSD) WINOBJ = $(OBJ)/osd/$(OSD) OBJDIRS += $(WINOBJ) #------------------------------------------------- # configure the resource compiler #------------------------------------------------- RC = @windres --use-temp-file RCDEFS = -DNDEBUG -D_WIN32_IE=0x0400 RCFLAGS = -O coff -I $(WINSRC) -I $(WINOBJ) #------------------------------------------------- # overrides for the CYGWIN compiler #------------------------------------------------- ifdef CYGWIN_BUILD CFLAGS += -mno-cygwin LDFLAGS += -mno-cygwin endif #------------------------------------------------- # overrides for the MSVC compiler #------------------------------------------------- ifdef MSVC_BUILD VCONV = $(WINOBJ)/vconv$(EXE) # replace the various compilers with vconv.exe prefixes CC = @$(VCONV) gcc -I. LD = @$(VCONV) ld /profile AR = @$(VCONV) ar RC = @$(VCONV) windres # make sure we use the multithreaded runtime ifdef DEBUG CC += /MTd else CC += /MT endif # turn on link-time codegen if the MAXOPT flag is also set ifdef MAXOPT CC += /GL LD += /LTCG endif ifdef PTR64 CC += /wd4267 /wd4312 /Wp64 endif # add some VC++-specific defines DEFS += -D_CRT_SECURE_NO_DEPRECATE -DXML_STATIC -D__inline__=__inline -Dsnprintf=_snprintf -Dvsnprintf=_vsnprintf # make msvcprep into a pre-build step # OSPREBUILD = $(VCONV) # add VCONV to the build tools BUILD += $(VCONV) $(VCONV): $(WINOBJ)/vconv.o @echo Linking $@... ifdef PTR64 @link.exe /nologo $^ version.lib bufferoverflowu.lib /out:$@ else @link.exe /nologo $^ version.lib /out:$@ endif $(WINOBJ)/vconv.o: $(WINSRC)/vconv.c @echo Compiling $<... @cl.exe /nologo /O1 -D_CRT_SECURE_NO_DEPRECATE -c $< /Fo$@ endif #------------------------------------------------- # due to quirks of using /bin/sh, we need to # explicitly specify the current path #------------------------------------------------- CURPATH = ./ #------------------------------------------------- # Windows-specific debug objects and flags #------------------------------------------------- # define the x64 ABI to be Windows DEFS += -DX64_WINDOWS_ABI # map all instances of "main" to "utf8_main" DEFS += -Dmain=utf8_main # debug build: enable guard pages on all memory allocations ifdef DEBUG ifndef WINUI DEFS += -DMALLOC_DEBUG LDFLAGS += -Wl,--allow-multiple-definition endif endif # enable UNICODE flags for unicode builds ifdef UNICODE DEFS += -DUNICODE -D_UNICODE endif #------------------------------------------------- # Windows-specific flags and libraries #------------------------------------------------- # add our prefix files to the mix CFLAGS += -include $(WINSRC)/winprefix.h ifdef WIN95_MULTIMON CFLAGS += -DWIN95_MULTIMON endif # add the windows libaries LIBS += -luser32 -lgdi32 -lddraw -ldsound -ldinput -ldxguid -lwinmm -ladvapi32 -lcomctl32 -lshlwapi ifdef PTR64 LIBS += -lbufferoverflowu endif #------------------------------------------------- # OSD core library #------------------------------------------------- OSDCOREOBJS = \ $(WINOBJ)/main.o \ $(WINOBJ)/strconv.o \ $(WINOBJ)/windir.o \ $(WINOBJ)/winfile.o \ $(WINOBJ)/winmisc.o \ $(WINOBJ)/winsync.o \ $(WINOBJ)/wintime.o \ $(WINOBJ)/winutf8.o \ $(WINOBJ)/winutil.o \ $(WINOBJ)/winwork.o \ # if malloc debugging is enabled, include the necessary code ifneq ($(findstring MALLOC_DEBUG,$(DEFS)),) OSDCOREOBJS += \ $(WINOBJ)/winalloc.o endif #------------------------------------------------- # OSD Windows library #------------------------------------------------- OSDOBJS = \ $(WINOBJ)/d3d8intf.o \ $(WINOBJ)/d3d9intf.o \ $(WINOBJ)/drawd3d.o \ $(WINOBJ)/drawdd.o \ $(WINOBJ)/drawgdi.o \ $(WINOBJ)/drawnone.o \ $(WINOBJ)/input.o \ $(WINOBJ)/output.o \ $(WINOBJ)/sound.o \ $(WINOBJ)/video.o \ $(WINOBJ)/window.o \ $(WINOBJ)/winmain.o # extra dependencies $(WINOBJ)/drawdd.o : $(SRC)/emu/rendersw.c $(WINOBJ)/drawgdi.o : $(SRC)/emu/rendersw.c # add debug-specific files ifdef DEBUG OSDOBJS += \ $(WINOBJ)/debugwin.o endif # add a stub resource file ifdef PTR64 RESFILE = $(WINOBJ)/mamex64.res else RESFILE = $(WINOBJ)/mame.res endif #------------------------------------------------- # if building with a UI, include the ui.mak #------------------------------------------------- ifdef WINUI include $(SRC)/osd/winui/ui.mak endif #------------------------------------------------- # rules for building the libaries #------------------------------------------------- $(LIBOCORE): $(OSDCOREOBJS) $(LIBOSD): $(OSDOBJS) #------------------------------------------------- # rule for making the ledutil sample #------------------------------------------------- ledutil$(EXE): $(WINOBJ)/ledutil.o $(LIBOCORE) @echo Linking $@... $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ TOOLS += ledutil$(EXE) #------------------------------------------------- # rule for making the verinfo tool #------------------------------------------------- VERINFO = $(WINOBJ)/verinfo$(EXE) $(VERINFO): $(WINOBJ)/verinfo.o $(LIBOCORE) @echo Linking $@... $(LD) $(LDFLAGS) $^ $(LIBS) -o $@ BUILD += $(VERINFO) #------------------------------------------------- # generic rule for the resource compiler #------------------------------------------------- $(WINOBJ)/%.res: $(WINSRC)/%.rc | $(OSPREBUILD) @echo Compiling resources $<... $(RC) $(RCDEFS) $(RCFLAGS) -o $@ -i $< #------------------------------------------------- # rules for resource file #------------------------------------------------- $(RESFILE): $(WINSRC)/mame.rc $(WINOBJ)/mamevers.rc $(WINOBJ)/mamevers.rc: $(VERINFO) $(SRC)/version.c @echo Emitting $@... @$(VERINFO) $(SRC)/version.c > $@