########################################################################### # # makefile # # Core makefile for building MAME and derivatives # # Copyright (c) Nicola Salmoria and the MAME Team. # Visit http://mamedev.org for licensing and usage restrictions. # ########################################################################### ########################################################################### ################# BEGIN USER-CONFIGURABLE OPTIONS ##################### ########################################################################### #------------------------------------------------- # specify core target: mame, mess, etc. # specify subtarget: mame, mess, tiny, etc. # build rules will be included from # src/$(TARGET)/$(SUBTARGET).mak #------------------------------------------------- ifndef TARGET TARGET = mame endif ifndef SUBTARGET SUBTARGET = $(TARGET) endif #------------------------------------------------- # specify OSD layer: windows, sdl, etc. # build rules will be included from # src/osd/$(OSD)/$(OSD).mak #------------------------------------------------- ifndef OSD ifeq ($(OS),Windows_NT) OSD = windows TARGETOS = win32 else OSD = sdl endif endif ifndef CROSS_BUILD_OSD CROSS_BUILD_OSD = $(OSD) endif #------------------------------------------------- # specify OS target, which further differentiates # the underlying OS; supported values are: # win32, unix, macosx, os2 #------------------------------------------------- ifndef TARGETOS ifeq ($(OS),Windows_NT) TARGETOS = win32 else ifneq ($(CROSSBUILD),1) ifneq ($(OS2_SHELL),) TARGETOS = os2 else UNAME = $(shell uname -a) ifeq ($(firstword $(filter Linux,$(UNAME))),Linux) TARGETOS = linux endif ifeq ($(firstword $(filter Solaris,$(UNAME))),Solaris) TARGETOS = solaris endif ifeq ($(firstword $(filter FreeBSD,$(UNAME))),FreeBSD) TARGETOS = freebsd endif ifeq ($(firstword $(filter GNU/kFreeBSD,$(UNAME))),GNU/kFreeBSD) TARGETOS = freebsd endif ifeq ($(firstword $(filter NetBSD,$(UNAME))),NetBSD) TARGETOS = netbsd endif ifeq ($(firstword $(filter OpenBSD,$(UNAME))),OpenBSD) TARGETOS = openbsd endif ifeq ($(firstword $(filter Darwin,$(UNAME))),Darwin) TARGETOS = macosx endif ifndef TARGETOS $(error Unable to detect TARGETOS from uname -a: $(UNAME)) endif # Autodetect PTR64 ifndef PTR64 ifeq ($(firstword $(filter x86_64,$(UNAME))),x86_64) PTR64 = 1 endif ifeq ($(firstword $(filter amd64,$(UNAME))),amd64) PTR64 = 1 endif ifeq ($(firstword $(filter ppc64,$(UNAME))),ppc64) PTR64 = 1 endif endif # Autodetect BIGENDIAN # MacOSX ifndef BIGENDIAN ifneq (,$(findstring Power,$(UNAME))) BIGENDIAN=1 endif # Linux ifneq (,$(findstring ppc,$(UNAME))) BIGENDIAN=1 endif endif # BIGENDIAN endif # OS/2 endif # CROSS_BUILD endif # Windows_NT endif # TARGET_OS ifeq ($(TARGETOS),win32) # Autodetect PTR64 ifndef PTR64 ifneq (,$(findstring mingw64-w64,$(PATH))) PTR64=1 endif endif endif #------------------------------------------------- # configure name of final executable #------------------------------------------------- # uncomment and specify prefix to be added to the name # PREFIX = # uncomment and specify suffix to be added to the name # SUFFIX = #------------------------------------------------- # specify architecture-specific optimizations #------------------------------------------------- # uncomment and specify architecture-specific optimizations here # some examples: # optimize for I686: ARCHOPTS = -march=pentiumpro # optimize for Core 2: ARCHOPTS = -march=core2 # optimize for G4: ARCHOPTS = -mcpu=G4 # note that we leave this commented by default so that you can # configure this in your environment and never have to think about it # ARCHOPTS = #------------------------------------------------- # specify program options; see each option below # for details #------------------------------------------------- # uncomment next line to build a debug version # DEBUG = 1 # uncomment next line to include the internal profiler # PROFILER = 1 # uncomment the force the universal DRC to always use the C backend # you may need to do this if your target architecture does not have # a native backend # FORCE_DRC_C_BACKEND = 1 # uncomment next line to build using unix-style libsdl on Mac OS X # (vs. the native framework port). Normal users should not enable this. # MACOSX_USE_LIBSDL = 1 #------------------------------------------------- # specify build options; see each option below # for details #------------------------------------------------- # uncomment next line if you are building for a 64-bit target # PTR64 = 1 # uncomment next line if you are building for a big-endian target # BIGENDIAN = 1 # uncomment next line to build expat as part of MAME build BUILD_EXPAT = 1 # uncomment next line to build zlib as part of MAME build BUILD_ZLIB = 1 # uncomment next line to include the symbols # SYMBOLS = 1 # specify symbols level or leave commented to use the default # (default is SYMLEVEL = 2 normally; use 1 if you only need backtrace) # SYMLEVEL = 2 # uncomment next line to dump the symbols to a .sym file # DUMPSYM = 1 # uncomment next line to include profiling information from the compiler # PROFILE = 1 # uncomment next line to generate a link map for exception handling in windows # MAP = 1 # uncomment next line to generate verbose build information # VERBOSE = 1 # specify optimization level or leave commented to use the default # (default is OPTIMIZE = 3 normally, or OPTIMIZE = 0 with symbols) # OPTIMIZE = 3 ########################################################################### ################## END USER-CONFIGURABLE OPTIONS ###################### ########################################################################### #------------------------------------------------- # sanity check the configuration #------------------------------------------------- # specify a default optimization level if none explicitly stated ifndef OPTIMIZE ifndef SYMBOLS OPTIMIZE = 3 else OPTIMIZE = 0 endif endif # profiler defaults to on for DEBUG builds ifdef DEBUG ifndef PROFILER PROFILER = 1 endif endif # allow gprof profiling as well, which overrides the internal PROFILER # also enable symbols as it is useless without them ifdef PROFILE PROFILER = SYMBOLS = 1 ifndef SYMLEVEL SYMLEVEL = 1 endif endif # set the symbols level ifdef SYMBOLS ifndef SYMLEVEL SYMLEVEL = 2 endif endif #------------------------------------------------- # platform-specific definitions #------------------------------------------------- # extension for executables EXE = ifeq ($(TARGETOS),win32) EXE = .exe endif ifeq ($(TARGETOS),os2) EXE = .exe endif ifndef BUILD_EXE BUILD_EXE = $(EXE) endif # compiler, linker and utilities AR = @ar CC = @gcc LD = @g++ MD = -mkdir$(EXE) RM = @rm -f OBJDUMP = @objdump #------------------------------------------------- # form the name of the executable #------------------------------------------------- # reset all internal prefixes/suffixes PREFIXSDL = SUFFIX64 = SUFFIXDEBUG = SUFFIXPROFILE = # Windows SDL builds get an SDL prefix ifeq ($(OSD),sdl) ifeq ($(TARGETOS),win32) PREFIXSDL = sdl endif endif # 64-bit builds get a '64' suffix ifeq ($(PTR64),1) SUFFIX64 = 64 endif # debug builds just get the 'd' suffix and nothing more ifdef DEBUG SUFFIXDEBUG = d endif # gprof builds get an addition 'p' suffix ifdef PROFILE SUFFIXPROFILE = p endif # the name is just 'target' if no subtarget; otherwise it is # the concatenation of the two (e.g., mametiny) ifeq ($(TARGET),$(SUBTARGET)) NAME = $(TARGET) else NAME = $(TARGET)$(SUBTARGET) endif # fullname is prefix+name+suffix+suffix64+suffixdebug FULLNAME = $(PREFIX)$(PREFIXSDL)$(NAME)$(SUFFIX)$(SUFFIX64)$(SUFFIXDEBUG)$(SUFFIXPROFILE) # add an EXE suffix to get the final emulator name EMULATOR = $(FULLNAME)$(EXE) #------------------------------------------------- # source and object locations #------------------------------------------------- # all sources are under the src/ directory SRC = src # build the targets in different object dirs, so they can co-exist OBJ = obj/$(PREFIX)$(OSD)$(SUFFIX)$(SUFFIX64)$(SUFFIXDEBUG)$(SUFFIXPROFILE) #------------------------------------------------- # compile-time definitions #------------------------------------------------- # CR/LF setup: use both on win32/os2, CR only on everything else DEFS = -DCRLF=2 ifeq ($(TARGETOS),win32) DEFS = -DCRLF=3 endif ifeq ($(TARGETOS),os2) DEFS = -DCRLF=3 endif # map the INLINE to something digestible by GCC DEFS += -DINLINE="static inline" # define LSB_FIRST if we are a little-endian target ifndef BIGENDIAN DEFS += -DLSB_FIRST endif # define PTR64 if we are a 64-bit target ifeq ($(PTR64),1) DEFS += -DPTR64 endif # define MAME_DEBUG if we are a debugging build ifdef DEBUG DEFS += -DMAME_DEBUG else DEFS += -DNDEBUG endif # define MAME_PROFILER if we are a profiling build ifdef PROFILER DEFS += -DMAME_PROFILER endif # define USE_NETWORK if we are a making network enabled build ifdef USE_NETWORK DEFS += -DUSE_NETWORK endif #------------------------------------------------- # compile flags # CCOMFLAGS are common flags # CONLYFLAGS are flags only used when compiling for C # CPPONLYFLAGS are flags only used when compiling for C++ # COBJFLAGS are flags only used when compiling for Objective-C(++) #------------------------------------------------- # start with empties for everything CCOMFLAGS = CONLYFLAGS = COBJFLAGS = CPPONLYFLAGS = # CFLAGS is defined based on C or C++ targets # (remember, expansion only happens when used, so doing it here is ok) CFLAGS = $(CCOMFLAGS) $(CPPONLYFLAGS) # we compile C-only to C89 standard with GNU extensions # we compile C++ code to C++98 standard with GNU extensions CONLYFLAGS += -std=gnu89 CPPONLYFLAGS += -x c++ -std=gnu++98 COBJFLAGS += -x objective-c++ # this speeds it up a bit by piping between the preprocessor/compiler/assembler CCOMFLAGS += -pipe # add -g if we need symbols, and ensure we have frame pointers ifdef SYMBOLS CCOMFLAGS += -g$(SYMLEVEL) -fno-omit-frame-pointer endif # add -v if we need verbose build information ifdef VERBOSE CCOMFLAGS += -v endif # add profiling information for the compiler ifdef PROFILE CCOMFLAGS += -pg endif # add the optimization flag CCOMFLAGS += -O$(OPTIMIZE) # if we are optimizing, include optimization options # and make all errors into warnings i
<mameconfig version="10">
	<system name="default">

		<!-- X-Arcade Version 1.0 input configuration file -->

		<input>
			<remap origcode="KEYCODE_UP" newcode="KEYCODE_8PAD" />
			<remap origcode="KEYCODE_DOWN" newcode="KEYCODE_2PAD" />
			<remap origcode="KEYCODE_LEFT" newcode="KEYCODE_4PAD" />
			<remap origcode="KEYCODE_RIGHT" newcode="KEYCODE_6PAD" />

			<port type="UI_UP">
				<newseq type="standard">KEYCODE_UP OR KEYCODE_8PAD</newseq>
			</port>
			<port type="UI_DOWN">
				<newseq type="standard">KEYCODE_DOWN OR KEYCODE_2PAD</newseq>
			</port>
			<port type="UI_LEFT">
				<newseq type="standard">KEYCODE_LEFT OR KEYCODE_4PAD</newseq>
			</port>
			<port type="UI_RIGHT">
				<newseq type="standard">KEYCODE_RIGHT OR KEYCODE_6PAD</newseq>
			</port>
			<port type="UI_SELECT">
				<newseq type="standard">KEYCODE_ENTER OR KEYCODE_LCONTROL</newseq>
			</port>

			<port type="UI_CONFIGURE">
				<newseq type="standard">KEYCODE_TAB OR KEYCODE_1 KEYCODE_3</newseq>
			</port>
			<port type="UI_CANCEL">
				<newseq type="standard">KEYCODE_ESC OR KEYCODE_2 KEYCODE_4</newseq>
			</port>

			<port type="START1">
				<newseq type="standard">KEYCODE_1</newseq>
			</port>
			<port type="START2">
				<newseq type="standard">KEYCODE_2</newseq>
			</port>
			<port type="COIN1">
				<newseq type="standard">KEYCODE_3</newseq>
			</port>
			<port type="COIN2">
				<newseq type="standard">KEYCODE_4</newseq>
			</port>
			<port type="START3">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="START4">
				<newseq type="standard">NONE</newseq>
			</port>

			<port type="P1_JOYSTICK_UP">
				<newseq type="standard">KEYCODE_8PAD</newseq>
			</port>
			<port type="P1_JOYSTICK_DOWN">
				<newseq type="standard">KEYCODE_2PAD</newseq>
			</port>
			<port type="P1_JOYSTICK_LEFT">
				<newseq type="standard">KEYCODE_4PAD</newseq>
			</port>
			<port type="P1_JOYSTICK_RIGHT">
				<newseq type="standard">KEYCODE_6PAD</newseq>
			</port>
			<port type="P1_JOYSTICKRIGHT_UP">
				<newseq type="standard">KEYCODE_R</newseq>
			</port>
			<port type="P1_JOYSTICKRIGHT_DOWN">
				<newseq type="standard">KEYCODE_F</newseq>
			</port>
			<port type="P1_JOYSTICKRIGHT_LEFT">
				<newseq type="standard">KEYCODE_D</newseq>
			</port>
			<port type="P1_JOYSTICKRIGHT_RIGHT">
				<newseq type="standard">KEYCODE_G</newseq>
			</port>
			<port type="P1_JOYSTICKLEFT_UP">
				<newseq type="standard">KEYCODE_8PAD</newseq>
			</port>
			<port type="P1_JOYSTICKLEFT_DOWN">
				<newseq type="standard">KEYCODE_2PAD</newseq>
			</port>
			<port type="P1_JOYSTICKLEFT_LEFT">
				<newseq type="standard">KEYCODE_4PAD</newseq>
			</port>
			<port type="P1_JOYSTICKLEFT_RIGHT">
				<newseq type="standard">KEYCODE_6PAD</newseq>
			</port>

			<port type="P1_BUTTON1">
				<newseq type="standard">KEYCODE_LCONTROL   OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1</newseq>
			</port>
			<port type="P1_BUTTON2">
				<newseq type="standard">KEYCODE_LALT       OR JOYCODE_1_BUTTON2 OR MOUSECODE_1_BUTTON3</newseq>
			</port>
			<port type="P1_BUTTON3">
				<newseq type="standard">KEYCODE_SPACE      OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2</newseq>
			</port>
			<port type="P1_BUTTON4">
				<newseq type="standard">KEYCODE_LSHIFT     OR JOYCODE_1_BUTTON4</newseq>
			</port>
			<port type="P1_BUTTON5">
				<newseq type="standard">KEYCODE_Z          OR JOYCODE_1_BUTTON5</newseq>
			</port>
			<port type="P1_BUTTON6">
				<newseq type="standard">KEYCODE_X          OR JOYCODE_1_BUTTON6</newseq>
			</port>
			<port type="P2_BUTTON1">
				<newseq type="standard">KEYCODE_A          OR JOYCODE_2_BUTTON1</newseq>
			</port>
			<port type="P2_BUTTON2">
				<newseq type="standard">KEYCODE_S          OR JOYCODE_2_BUTTON2</newseq>
			</port>
			<port type="P2_BUTTON3">
				<newseq type="standard">KEYCODE_Q          OR JOYCODE_2_BUTTON3</newseq>
			</port>
			<port type="P2_BUTTON4">
				<newseq type="standard">KEYCODE_W          OR JOYCODE_2_BUTTON4</newseq>
			</port>
			<port type="P2_BUTTON5">
				<newseq type="standard">KEYCODE_E          OR JOYCODE_2_BUTTON5</newseq>
			</port>
			<port type="P2_BUTTON6">
				<newseq type="standard">KEYCODE_OPENBRACE  OR JOYCODE_2_BUTTON6</newseq>
			</port>
		</input>
	</system>

	<system name="neogeo">
		<input>
			<port type="P1_BUTTON1">
				<newseq type="standard">KEYCODE_C          OR JOYCODE_1_BUTTON1</newseq>
			</port>
			<port type="P1_BUTTON2">
				<newseq type="standard">KEYCODE_LSHIFT     OR JOYCODE_1_BUTTON2</newseq>
			</port>
			<port type="P1_BUTTON3">
				<newseq type="standard">KEYCODE_Z          OR JOYCODE_1_BUTTON3</newseq>
			</port>
			<port type="P1_BUTTON4">
				<newseq type="standard">KEYCODE_X          OR JOYCODE_1_BUTTON4</newseq>
			</port>
			<port type="P1_BUTTON5">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="P1_BUTTON6">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="P1_BUTTON7">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="P1_BUTTON8">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="P2_BUTTON1">
				<newseq type="standard">KEYCODE_CLOSEBRACE OR JOYCODE_2_BUTTON1</newseq>
			</port>
			<port type="P2_BUTTON2">
				<newseq type="standard">KEYCODE_W          OR JOYCODE_2_BUTTON2</newseq>
			</port>
			<port type="P2_BUTTON3">
				<newseq type="standard">KEYCODE_E          OR JOYCODE_2_BUTTON3</newseq>
			</port>
			<port type="P2_BUTTON4">
				<newseq type="standard">KEYCODE_OPENBRACE  OR JOYCODE_2_BUTTON4</newseq>
			</port>
			<port type="P2_BUTTON5">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="P2_BUTTON6">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="P2_BUTTON7">
				<newseq type="standard">NONE</newseq>
			</port>
			<port type="P2_BUTTON8">
				<newseq type="standard">NONE</newseq>
			</port>
		</input>
	</system>

</mameconfig>