""" Script to build PyMAME, a library wrapping (hacked) MAME """ import os import sys import distutils.core import distutils.command.build import distutils.ccompiler import traceback #DIRECTX_INCLUDE_DIR = r"c:\dx\include" class LibClass: """ Represents a static library (.a file) which we'll build along the way to building PyMame.pyd """ def __init__(self, Name): self.Name = Name self.ExtraCompileArgs = [] self.SourceFiles = [] def GetInfo(self): BuildInfoDict = {} BuildInfoDict["sources"] = self.SourceFiles BuildInfoDict["macros"] = self.MacroList BuildInfoDict["include_dirs"] = self.IncludeDirectories BuildInfoDict["extra_compile_args"] = self.ExtraCompileArgs Tuple = (self.Name, BuildInfoDict) return Tuple class DistributionMaster(): def __init__(self): self.ExtraCompileArgs = [] self.BuildLHFlag = 1 self.BuildLibrariesFlag = 1 self.BuildBuildToolsFlag = 1 self.Build68KFlag = 0 self.SetIncludeDirectories() self.DebugFlag = 0 if sys.platform == "win32" or sys.platform == "cygwin": self.OS = "windows" else: self.OS = "UNKNOWN" self.IncludeDirectories.append(os.path.join("PyMAME/src/osd", self.OS)) # LinkLibraries has the NAMES of libraries we link against: self.LinkLibraries = [] # BuildLibraries DEFINES a series of static libraries which we build (and then link against): self.BuildLibraries = [] self.SourceFileNames = [] def SetIncludeDirectories(self): self.IncludeDirectories = ["PyMAME/src"] self.IncludeDirectories.append("PyMAME/src/NecroCore") self.IncludeDirectories.append(os.path.join("PyMAME", "src", "includes")) self.IncludeDirectories.append(os.path.join("PyMAME", "src", "osd")) self.IncludeDirectories.append(os.path.join("PyMAME", "src", "emu")) self.IncludeDirectories.append(os.path.join("PyMAME", "src", "mame", "includes")) self.IncludeDirectories.append(os.path.join("PyMAME", "src", "mame")) self.IncludeDirectories.append(os.path.join("PyMAME", "src", "mame", "layout")) self.IncludeDirectories.append(os.path.join("PyMAME", "src", "emu", "layout")) #self.IncludeDirectories.append(DIRECTX_INCLUDE_DIR) #self.IncludeDirectories.append("PyMAME/layout") def ListNecroSourceFiles(self): #################################### # Quest info - from NecroCore Directory = "PyMAME/src/NecroCore" FileNames = ["quest.c", "PyQuest.c"] for FileName in FileNames: FilePath = os.path.join(Directory, FileName) self.SourceFileNames.append(FilePath) Directory = "PyMAME/src" FileNames = ["PyMAME.c", "PyOSD.c", "mameq.c"] for FileName in FileNames: FilePath = os.path.join(Directory, FileName) self.SourceFileNames.append(FilePath) def ListEmuSourceFiles(self): self.SourceFileNames.append("PyMAME/src/version.c") File = open("PyMAME/CoreCode.txt", "rb") for FileLine in File.xreadlines(): Bits = FileLine.split("\t") DebugFlag = int(Bits[1]) if (not DebugFlag) or (self.DebugFlag): self.SourceFileNames.append(Bits[0]) def ListLibraries(self): self.LinkLibraries.append("expat") self.LinkLibraries.append("z") self.LinkLibraries.append("util") self.IncludeDirectories.append("PyMAME/src/lib/zlib") self.IncludeDirectories.append("PyMAME/src/lib/util") self.IncludeDirectories.append("PyMAME/src/lib/expat") if not self.BuildLibrariesFlag: return ############################## # UTIL LIBRARY: Directory = "PyMAME/src/lib/util" FileNames = ["astring.c", "avcomp.c", "aviio.c", "bitmap.c", "cdrom.c", "chd.c", "corefile.c", "corestr.c", "coreutil.c", "harddisk.c", "huffman.c", "jedparse.c", "md5.c", "options.c", "palette.c", "png.c", "pool.c", "sha1.c", "unicode.c", "unzip.c", "xmlfile.c"] UtilSources = [] for FileName in FileNames: UtilSources.append("%s/%s"%(Directory, FileName)) UtilOptions = {"macros": self.MacroList, "sources": UtilSources, "include_dirs": self.IncludeDirectories} UtilLibrary = ("util", UtilOptions) self.BuildLibraries.append(UtilLibrary) ############################## # EXPAT LIBRARY: Directory = "PyMAME/src/lib/expat" FileNames = ["xmlparse.c", "xmlrole.c", "xmltok.c"] #, "xmltok_impl.c", "xmltok_ns.c"] ExpatSources = [] for FileName in FileNames: ExpatSources.append("%s/%s"%(Directory, FileName)) ExpatOptions = {"macros": self.MacroList, "sources": ExpatSources, "include_dirs": self.IncludeDirectories} ExpatLibrary = ("expat", ExpatOptions) self.BuildLibraries.append(ExpatLibrary) ############################## # ZLIB LIBRARY: Directory = "PyMAME/src/lib/zlib" FileNames = ["adler32.c", "compress.c", "crc32.c", "deflate.c", "gzio.c", "inffast.c", "inflate.c", "infback.c", "inftrees.c", "trees.c", "uncompr.c", "zutil.c"] ZLibSources = [] for FileName in FileNames: ZLibSources.append("%s/%s"%(Directory, FileName)) ZLibOptions = {"macros": self.MacroList, "sources": ZLibSources, "include_dirs": self.IncludeDirectories} ZLibLibrary = ("z", ZLibOptions) self.BuildLibraries.append(ZLibLibrary) def SetupOSSpecific(self): if self.OS == "windows": ################################# # Add OS-specific precomplier directives: self.Macros["_CRT_SECURE_NO_DEPRECATE"] = None self.Macros["XML_STATIC"] = None self.Macros["__inline__"] = "__inline" self.Macros["snprintf"] = "_snprintf" self.Macros["vsnprintf"] = "_vsnprintf" self.Macros["DX64_WINDOWS_ABI"] = None self.Macros["main"] = "utf8_main" self.Macros["_WIN32_WINNT"] = "0x0501" #self.Macros["_MSC_VER"] = "1500" #self.ExtraCompileArgs = [r"/FIPyMAME/src/osd/windows/winprefix.h"] ################################# # Add OS-specific libraries: self.LinkLibraries.append("user32") self.LinkLibraries.append("gdi32") self.LinkLibraries.append("ddraw") self.LinkLibraries.append("dsound") self.LinkLibraries.append("dinput") self.LinkLibraries.append("dxguid") self.LinkLibraries.append("winmm") self.LinkLibraries.append("advapi32") self.LinkLibraries.append("comctl32") self.LinkLibraries.append("shlwapi") # We need MORE: self.LinkLibraries.append("kernel32") ################################# # Add OS-specific source files: Directory = "PyMAME/src/osd/windows" FileNames = [ #Core: "main.c", "strconv.c", "windir.c", "winfile.c", "winmisc.c", "winsync.c", "wintime.c", "winutf8.c", "winutil.c", "winwork.c", # OSDOBJS: "d3d8intf.c", "d3d9intf.c", "drawd3d.c", "drawdd.c", "drawgdi.c", "drawnone.c", "input.c", "output.c", "sound.c", "video.c", "window.c", "winmain.c" ] ## FileNames = ["config.c", "d3d8intf.c", "d3d9intf.c", ## "drawd3d.c", "drawdd.c", "drawgdi.c", "drawnone.c", ## "fileio.c", "fronthlp.c", "input.c", "output.c", ## "sound.c", "ticker.c", "video.c", "window.c", "winmain.c"] for FileName in FileNames: FilePath = os.path.join(Directory, FileName) self.SourceFileNames.append(FilePath) if self.DebugFlag: self.SourceFileNames.append("PyMAME/src/osd/windows/debugwin.c") def AddDrivers(self): self.SourceFileNames.append("PyMAME/src/mame/mamedriv.c") Drivers = {} File = open(os.path.join("PyMAME", "DriverDefinitions.txt"), "rb") # DriverDefintions lines - each line is tab-delimited. The first tab-piece # is a driver name, the second tab-piece is a source-file in the driver. for FileLine in File.xreadlines(): Bits = FileLine.strip().split("\t") if len(Bits) < 2: continue DriverName = Bits[0] if not Drivers.has_key(DriverName): Driver = LibClass(Bits[0]) Driver.MacroList = self.MacroList Driver.IncludeDirectories = self.IncludeDirectories Driver.ExtraCompileArgs = self.ExtraCompileArgs Drivers[DriverName] = Driver Driver.SourceFiles.append(Bits[1]) # Ensure that "shared" comes at the END of the list of libraries to link with. LastDrivers = {"shared":1} for Driver in Drivers.values(): #print Driver.Name if self.DriverFlags.get(Driver.Name) and not LastDrivers.has_key(Driver.Name): Info = Driver.GetInfo() self.BuildLibraries.append(Info) for Driver in Drivers.values(): if self.DriverFlags.get(Driver.Name) and LastDrivers.has_key(Driver.Name): Info = Driver.GetInfo() self.BuildLibraries.append(Info) def AddSoundChips(self): # Set preprocessor macros: for Flag in self.SoundFlags.keys(): if self.SoundFlags[Flag]: self.Macros["HAS_%s"%Flag] = None File = open(os.path.join("PyMAME", "SoundCode.txt"), "rb") for FileLine in File.xreadlines(): if FileLine[0] == "#": continue Bits = FileLine.strip().split("\t") if len(Bits)<2: continue Names = Bits[0] if Names[0] == '"': Names = Names[1:-1] SoundChips = Names.split() DebugFlag = 0 if len(Bits)>2: DebugFlag = int(Bits[2]) if DebugFlag and not self.DebugFlag: continue for SoundChip in SoundChips: if self.SoundFlags.get(SoundChip): # Add the source file: SourceFileName = Bits[1] ## if SourceFileName[0]!="/": ## SourceFileName = "/" + SourceFileName ## if SourceFileName[:4] != "/src": ## SourceFileName = "/src" + SourceFileName ## SourceFileName = "/PyMAME" + SourceFileName ## SourceFileName = SourceFileName[1:] if SourceFileName[-2:] == ".o": SourceFileName = SourceFileName[:-2] + ".c" self.SoundLib.SourceFiles.append(SourceFileName) break def AddCPUs(self): # Set preprocessor macros: for Flag in self.CPUFlags.keys(): if self.CPUFlags[Flag]: self.Macros["HAS_%s"%Flag] = None self.CPULib.SourceFiles.append("PyMAME/src/emu/cpu/x86drc.c") File = open(os.path.join("PyMAME", "CPUCode.txt"), "rb") for FileLine in File.xreadlines(): if FileLine[0] == "#": continue if not FileLine.strip(): continue Bits = FileLine.strip().split("\t") if len(Bits) < 2: continue Names = Bits[0] if Names[0] == '"': Names = Names[1:-1] # Handle the (excel byproduct) case '"#a,b,c"' if Names[0] == "#": continue CPUs = Names.split() DebugFlag = 0 if len(Bits)>2: DebugFlag = int(Bits[2]) if DebugFlag and not self.DebugFlag: continue for CPU in CPUs: CPUFlag = self.CPUFlags.get(CPU, None) if CPUFlag: # Add the source file: SourceFileName = Bits[1] ## if SourceFileName[0] != "/": ## SourceFileName = "/" + SourceFileName ## if SourceFileName[:4] != "/src": ## SourceFileName = "/src" + SourceFileName ## SourceFileName = "/PyMAME" + SourceFileName ## SourceFileName = SourceFileName[1:] if SourceFileName[-2:] == ".o": SourceFileName = SourceFileName[:-2] + ".c" self.CPULib.SourceFiles.append(SourceFileName) break else: print "CPUFlag: %s %s"%(CPU, CPUFlag) def BuildPNG2BDC(self): SourceFiles = ["PyMAME/src/build/png2bdc.c"] IncludeOption = self.IncludeDirectories MacroOption = self.MacroList class MyBuildClass(distutils.command.build.build): def build_opt(self): print ">>>build_opt() called..." traceback.print_stack() print dir(self) CC = distutils.ccompiler.new_compiler() print dir(CC) CC.set_include_dirs(IncludeOption) CC.macros = MacroOption opt_obj = CC.compile(SourceFiles) CC.link_executable(opt_obj, os.path.join("PyMAME", "png2bdc")) def run(self): self.build_opt() distutils.command.build.build.run(self) distutils.core.setup(cmdclass = {"build":MyBuildClass,},) def BuildFile2Str(self): SourceFiles = ["PyMAME/src/build/file2str.c"] IncludeOption = self.IncludeDirectories MacroOption = self.MacroList[:] for Item in MacroOption: if Item[0] == "main": MacroOption.remove(Item) class MyBuildClass(distutils.command.build.build): def build_opt(self): print ">>>build_opt() called..." #traceback.print_stack() #print dir(self) CC = distutils.ccompiler.new_compiler() #print dir(CC) CC.set_include_dirs(IncludeOption) CC.macros = MacroOption opt_obj = CC.compile(SourceFiles) CC.link_executable(opt_obj, os.path.join("PyMAME", "file2str")) def run(self): self.build_opt() distutils.command.build.build.run(self) distutils.core.setup(cmdclass = {"build":MyBuildClass,},) def Build68k(self): print "Build68k()" #%%% Need68kFlag = 0 Flags = ["M68000", "M68008", "M68010", "M68EC020", "M68020", "M68040"] for Flag in Flags: if self.CPUFlags.has_key(Flag): Need68kFlag = 1 print "Build68k() need:", Need68kFlag if not Need68kFlag: return # Special case: Build the 68kmake executable... Make68kSourceFiles = ["PyMAME/src/emu/cpu/m68000/m68kmake.c"] class MyBuildClass(distutils.command.build.build): def build_opt(self): CC = distutils.ccompiler.new_compiler() #if sys.platform != 'win32': # CC.add_library('m') #import os.path opt_obj = CC.compile(Make68kSourceFiles) CC.link_executable(opt_obj, os.path.join("PyMAME", "src", "emu", "cpu", "m68000", "m68kmake")) def run(self): self.build_opt() distutils.command.build.build.run(self) print "Make m68k stuff:" distutils.core.setup(cmdclass = {"build":MyBuildClass,}) print "DONE!" CurrentDirectory = os.getcwd() os.chdir("PyMAME/src/emu/cpu/m68000") Command = "m68kmake.exe" try: os.system(Command) except: traceback.print_exc() os.chdir(CurrentDirectory) def AddDebugCore(self): # Debugger: if self.DebugFlag: self.Macros["DEBUG"] = None self.Macros["NEW_DEBUGGER"] = None self.Macros["MAME_DEBUG"] = None self.SourceFileNames.append("PyMAME/src/profiler.c") FileNames = ["debugcmd.c", "debugcmt.c", "debugcon.c", "debugcpu.c", "debughlp.c", "debugvw.c", "express.c", "textbuf.c"] Directory = "PyMAME/src/debug" for FileName in FileNames: FilePath = os.path.join(Directory, FileName) self.SourceFileNames.append(FilePath) else: self.Macros["NDEBUG"] = None def BuildLHFiles(self, LayoutDir): #obj/windows/mame/build/file2str.exe src/mame/layout/atarifb.lay obj/windows/mame/mame/layout/atarifb.lh layout_atarifb File2StrPath = os.path.join("PyMAME", "file2str") print "BuildLHFiles..." for LayoutFileName in os.listdir(LayoutDir): (Stub, Extension) = os.path.splitext(LayoutFileName) if Extension != ".lay": continue TargetPath = os.path.join(LayoutDir, "%s.lh"%Stub) if os.path.exists(TargetPath): continue SourcePath = os.path.join(LayoutDir, LayoutFileName) Command = "%s %s %s layout_%s"%(File2StrPath, SourcePath, TargetPath, Stub) print Command os.system(Command) def Build(self): """ Main method for preparing PyMame.pyd or PyMame_d.pyd. """ self.InitFlags() self.SetupMacros() self.SetupOSSpecific() self.CPULib = LibClass("libcpu") self.CPULib.ExtraCompileArgs = self.ExtraCompileArgs self.SoundLib = LibClass("libsound") self.SoundLib.ExtraCompileArgs = self.ExtraCompileArgs self.ListNecroSourceFiles() self.ListEmuSourceFiles() self.AddDebugCore() self.AddCPUs() self.AddSoundChips() # At this point, ALL preprocessor flags are set in self.Macros, # and we populate self.MacroList: self.BuildMacroList() # List all external libraries (.a files) to be built: print ">>>List libraries..." self.ListLibraries() self.CPULib.MacroList = self.MacroList self.CPULib.IncludeDirectories = self.IncludeDirectories self.SoundLib.MacroList = self.MacroList self.SoundLib.IncludeDirectories = self.IncludeDirectories self.BuildLibraries.append(self.CPULib.GetInfo()) self.BuildLibraries.append(self.SoundLib.GetInfo()) # List all drivers (.a files for games) to be built: self.AddDrivers() print ">>>Added drivers...", self.Build68KFlag if self.Build68KFlag: self.Build68k() if self.BuildBuildToolsFlag: self.BuildFile2Str() if self.BuildLHFlag: LayoutDir = os.path.join("PyMAME", "src", "mame", "layout") self.BuildLHFiles(LayoutDir) LayoutDir = os.path.join("PyMAME", "src", "emu", "layout") self.BuildLHFiles(LayoutDir) #self.BuildPNG2BDC() #sys.exit(-1) # Now, create the Extension object, and call setup: NecroExtension = distutils.core.Extension("PyMAME", sources = self.SourceFileNames, include_dirs = self.IncludeDirectories, define_macros = self.MacroList, libraries = self.LinkLibraries, extra_compile_args = self.ExtraCompileArgs) distutils.core.setup(name="PyMAME", version='1.1', ext_modules = [NecroExtension], libraries = self.BuildLibraries, ) def SetupMacros(self): self.Macros = {} # For non-64-bit Builds: self.Macros["X86_MIPS3_DRC"] = None self.Macros["X86_PPC_DRC"] = None self.Macros["LSB_FIRST"] = None self.Macros["OPTIMIZE"] = 3 self.Macros["INLINE"] = "static __inline__" self.Macros["asm"] = "__asm__" if sys.byteorder == "little": self.Macros["LSB_FIRST"] = None self.Macros["CRLF"] = 3 def BuildMacroList(self): self.MacroList = [] for (Name, Value) in self.Macros.items(): self.MacroList.append((Name, Value)) ##### Begin block of auto-generated code from BuildBuildPyMAME... def InitFlags(self): self.DriverFlags = { "alba":1, "alliedl":1, "alpha":1, "amiga":1, "atari":1, "atlus":1, "barcrest":1, "bfm":1, "capcom":1, "cinemat":1, "comad":1, "cvs":1, "dataeast":1, "dooyong":1, "dynax":1, "edevices":1, "eolith":1, "excelent":1, "exidy":1, "f32":1, "fuuki":1, "gaelco":1, "gameplan":1, "gametron":1, "gottlieb":1, "greyhnd":1, "igs":1, "irem":1, "itech":1, "jaleco":1, "kaneko":1, "konami":1, "meadows":1, "merit":1, "metro":1, "midcoin":1, "midw8080":1, "midway":1, "misc":1, "msx":1, "namco":1, "nasco":1, "neogeo":1, "nichibut":1, "nintendo":1, "nix":1, "nmk":1, "olympia":1, "omori":1, "orca":1, "pacific":1, "pacman":1, "pce":1, "phoenix":1, "playmark":1, "psikyo":1, "ramtek":1, "rare":1, "sanritsu":1, "sega":1, "seibu":1, "seta":1, "shared":1, "sigma":1, "snk":1, "stern":1, "subsino":1, "sun":1, "suna":1, "tad":1, "taito":1, "tatsumi":1, "tch":1, "tecfri":1, "technos":1, "tehkan":1, "thepit":1, "toaplan":1, "tong":1, "unico":1, "univers":1, "upl":1, "valadon":1, "veltmjr":1, "venture":1, "vsystem":1, "yunsung":1, "zaccaria":1, } self.CPUFlags = { "8080":1, "8085A":1, "ADSP2100":1, "ADSP2101":1, "ADSP2104":1, "ADSP2105":1, "ADSP21062":1, "ADSP2115":1, "ADSP2181":1, "ALPHA8201":1, "ALPHA8301":1, "APEXC":1, "ARM":1, "ARM7":1, "ASAP":1, "CCPU":1, "CDP1802":1, "COP410":1, "COP420":1, "CP1610":1, "DECO16":1, "DSP32C":1, "DSP56156":1, "E116T":1, "E116XS":1, "E116XSR":1, "E116XT":1, "E132N":1, "E132T":1, "E132XN":1, "E132XS":1, "E132XSR":1, "E132XT":1, "F8":1, "G65816":1, "GMS30C2116":1, "GMS30C2132":1, "GMS30C2216":1, "GMS30C2232":1, "H6280":1, "H83002":1, "HD6309":1, "HD63701":1, "HD63705":1, "I386":1, "I486":1, "I80186":1, "I80188":1, "I80286":1, "I8035":1, "I8039":1, "I8048":1, "I8051":1, "I8052":1, "I8086":1, "I8088":1, "I8749":1, "I8751":1, "I8752":1, "I8X41":1, "I960":1, "JAGUAR":1, "KONAMI":1, "LH5801":1, "M37702":1, "M37710":1, "M4510":1, "M58715":1, "M6502":1, "M6509":1, "M6510":1, "M6510T":1, "M65C02":1, "M65SC02":1, "M65CE02":1, "M6800":1, "M68000":1, "M6801":1, "M68010":1, "M6802":1, "M68020":1, "M6803":1, "M68040":1, "M6805":1, "M6808":1, "M6809":1, "M6809E":1, "M68705":1, "M68EC020":1, "M7501":1, "M8502":1, "MB86233":1, "MB8841":1, "MB8842":1, "MB8843":1, "MB8844":1, "MB8884":1, "MC68HC11":1, "MEDIAGX":1, "MINX":1, "MPC8240":1, "N2A03":1, "N7751":1, "NSC8105":1, "PDP1":1, "PENTIUM":1, "PIC16C54":1, "PIC16C55":1, "PIC16C56":1, "PIC16C57":1, "PIC16C58":1, "PPC403":1, "PPC601":1, "PPC602":1, "PPC603":1, "PSXCPU":1, "QED5271":1, "R3000":1, "R3041":1, "R4600":1, "R4650":1, "R4700":1, "R5000":1, "RM7000":1, "RSP":1, "S2650":1, "SATURN":1, "SC61860":1, "SE3208":1, "SH2":1, "SH4":1, "SM8500":1, "SPC700":1, "SSP1601":1, "T11":1, "TLCS90":1, "TMS32010":1, "TMS32025":1, "TMS32026":1, "TMS32031":1, "TMS32032":1, "TMS32051":1, "TMS34010":1, "TMS34020":1, "TMS7000":1, "TMS7000_EXL":1, "TMS9900":1, "TMS9980":1, "TMS9995":1, "TX0_64KW":1, #"TMS99010":1, "TX0_8KW":1, "UPD7807":1, "UPD7810":1, "V20":1, "V25":1, "V30":1, "V30MZ":1, "V33":1, "V35":1, "V60":1, "V70":1, "V810":1, "Z180":1, "Z80":1, "Z8000":1, "Z80GB":1, } self.SoundFlags = { "ADPCM":1, "AICA":1, "ASTROCADE":1, "AY8910":1, "BEEP":1, "BSMT2000":1, "C140":1, "C352":1, "C6280":1, "CD2801":1, "CD2802":1, "CDDA":1, "CDP1869":1, "CEM3394":1, "CUSTOM":1, "DAC":1, "DISCRETE":1, "DMADAC":1, "ES5503":1, "ES5505":1, "ES5506":1, "ES8712":1, "GAELCO_CG1V":1, "GAELCO_GAE1":1, "HC55516":1, "ICS2115":1, "IREMGA20":1, "K005289":1, "K007232":1, "K051649":1, "K053260":1, "K054539":1, "M58817":1, "MSM5205":1, "MSM5232":1, "MULTIPCM":1, "NAMCO":1, "NAMCONA":1, "NAMCO_15XX":1, "NAMCO_52XX":1, "NAMCO_54XX":1, "NAMCO_63701X":1, "NAMCO_CUS30":1, "NES":1, "OKIM6295":1, "POKEY":1, "PSXSPU":1, "QSOUND":1, "RF5C400":1, "RF5C68":1, "S14001A":1, "SAA1099":1, "SAMPLES":1, "SCSP":1, "SEGAPCM":1, "SN76477":1, "SN76496":1, "SP0250":1, "SP0256":1, "SPEAKER":1, "ST0016":1, "TIA":1, "TMC0281":1, "TMC0285":1, "TMS3615":1, "TMS36XX":1, "TMS5100":1, "TMS5110":1, "TMS5110A":1, "TMS5200":1, "TMS5220":1, "UPD7759":1, "VLM5030":1, "VRENDER0":1, "X1_010":1, "Y8950":1, "YM2151":1, "YM2203":1, "YM2413":1, "YM2608":1, "YM2610":1, "YM2610B":1, "YM2612":1, "YM3438":1, "YM3526":1, "YM3812":1, "YMF262":1, "YMF271":1, "YMF278B":1, "YMZ280B":1, } ##### End block of auto-generated code from BuildBuildPyMAME if __name__ == "__main__": Builder = DistributionMaster() for Arg in sys.argv[1:]: if Arg == "-g": Builder.DebugFlag = 1 if 0: # FAST build of only the core. Skip layout, etc. Builder.BuildLHFlag = 0 Builder.BuildLibrariesFlag = 0 Builder.Build68KFlag = 0 Builder.BuildBuildToolsFlag = 0 Builder.Build()