""" Script to build PyFCEU, a library wrapping (hacked) FCEUltra """ # python BuildPyFCEU.py build --compiler=mingw32 import os import sys import distutils.core MINGW_DIR = r"c:\mingw\include" SDL_INCLUDE_DIR = r"c:\msys\local\include\SDL" class DistributionMaster(): def __init__(self): self.IncludeDirectories = ["PyFCEU/src"] self.IncludeDirectories = ["PyFCEU/src/NecroCore"] self.DebugFlag = 0 if sys.platform == "win32" or sys.platform == "cygwin": self.OS = "windows" self.IncludeDirectories.append(MINGW_DIR) else: self.OS = "UNKNOWN" self.IncludeDirectories.append(SDL_INCLUDE_DIR) #self.IncludeDirectories.append("PyFCEU/src/drivers/win") # 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 ListSourceFilesRoot(self): SourceDir = "PyFCEU/src" FileNames = ["cart.c","cheat.c","crc32.c","debug.c","endian.c", "fceu.c","fceustr.c","fds.c","file.c","filter.c","general.c", "ines.c","input.c","md5.c","memory.c","movie.c","netplay.c", "nsf.c","palette.c","ppu.c","sound.c", #"soundexp.c" "state.c","unif.c","unzip.c","video.c","vsuni.c","wave.c","x6502.c", "PyFCEU.c", "fceuq.c", #"quest.c", "PyQuest.c" # necrocore #%%% "PyFCEU.c", "fceuq.c", ] for FileName in FileNames: FilePath = os.path.join(SourceDir, FileName) self.SourceFileNames.append(FilePath) def ListSourceFilesNecroCore(self): SourceDir = "PyFCEU/src/NecroCore" FileNames = ["quest.c", "PyQuest.c", ] for FileName in FileNames: FilePath = os.path.join(SourceDir, FileName) self.SourceFileNames.append(FilePath) def ListSourceFilesBoards(self): Dir = "PyFCEU/src/boards" FileNames = ["8237.c", "h2288.c", "malee.c", "novel.c", "sachen.c", "simple.c", "super24.c", "supervision.c"] for FileName in FileNames: FilePath = os.path.join(Dir, FileName) self.SourceFileNames.append(FilePath) def ListSourceFilesInput(self): Dir = "PyFCEU/src/input" FileNames = ["cursor.c", "zapper.c", "powerpad.c", "arkanoid.c", "shadow.c", "fkb.c", "hypershot.c", "mahjong.c", "oekakids.c", "ftrainer.c", "quiz.c", "toprider.c", "bworld.c" ] for FileName in FileNames: FilePath = os.path.join(Dir, FileName) self.SourceFileNames.append(FilePath) def ListSourceFilesMappers(self): Dir = "PyFCEU/src/mappers" FileNames = ["mmc2and4.c", "simple.c", "112.c", "117.c", "15.c", "151.c", "16.c", "17.c", "18.c", "180.c", "184.c", "21.c", "22.c", "225.c", "226.c", "228.c", "229.c", "23.c", "24and26.c", "240.c", "246.c", "25.c", "32.c", "33.c", "40.c", "41.c", "6.c", "65.c", "67.c", "68.c", "69.c", "71.c", "73.c", "75.c", "76.c", "79.c", "8.c", "80.c", "85.c", "95.c", "97.c", "99.c", "182.c", "46.c", "43.c", "42.c", "113.c", "86.c", "89.c", "83.c", "77.c", "92.c", "88.c", "248.c", "emu2413.c", "242.c", "232.c", "72.c", "234.c", "227.c", "82.c", "189.c", "51.c", "91.c", "114.c", "241.c", "235.c", "57.c", "255.c", "61.c", "59.c", "193.c", "50.c", "60.c", "62.c", "244.c", "230.c", "200.c", "201.c", "202.c", "203.c", "231.c", "208.c", "58.c", "187.c", ] for FileName in FileNames: FilePath = os.path.join(Dir, FileName) self.SourceFileNames.append(FilePath) def ListSourceFilesDriversCommon(self): Dir = "PyFCEU/src/drivers/common" FileNames = ["args.c", "cheat.c", "config.c", "vidblit.c", "hq2x.c", "hq3x.c", "scale2x.c", "scale3x.c", "scalebit.c" ] for FileName in FileNames: FilePath = os.path.join(Dir, FileName) self.SourceFileNames.append(FilePath) def ListSourceFilesMBShare(self): Dir = "PyFCEU/src/mbshare" FileNames = ["90.c", "164.c", "deirom.c", "mmc1.c", "mmc3.c", "mmc5.c", "n106.c", "tengen.c"] for FileName in FileNames: FilePath = os.path.join(Dir, FileName) self.SourceFileNames.append(FilePath) def ListSourceFiles(self): SourceDir = "PyFCEU/src" self.ListSourceFilesRoot() self.ListSourceFilesBoards() self.ListSourceFilesInput() self.ListSourceFilesNecroCore() self.ListSourceFilesMappers() self.ListSourceFilesMBShare() self.ListSourceFilesDriversCommon() def SetupMacros(self): self.Macros = {} self.Macros["FCEU_VERSION_NUMERIC"] = "9812" self.Macros["PSS_STYLE"] = "2" self.Macros["WIN32"] = "1" self.Macros["C80x86"] = "1" self.Macros["LSB_FIRST"] = "1" self.Macros["FCEU_VERSION"] = "0.98.12" self.Macros["VERSION"] = "0.98.12" self.Macros["FRAMESKIP"] = "1" self.Macros["_GNU_SOURCE"] = "1" self.Macros["SDL"] = None def BuildMacroList(self): self.MacroList = [] for (Name, Value) in self.Macros.items(): self.MacroList.append((Name, Value)) def ListLibraries(self): self.LinkLibraries.append("z") self.LinkLibraries.append("ddraw") self.LinkLibraries.append("dinput") self.LinkLibraries.append("dsound") self.LinkLibraries.append("gdi32") self.LinkLibraries.append("dxguid") self.LinkLibraries.append("winmm") self.LinkLibraries.append("shell32") self.LinkLibraries.append("wsock32") self.LinkLibraries.append("comdlg32") self.LinkLibraries.append("ole32") return def SetupOSSpecific(self): print "SetupOSSpecific(%s)"%self.OS if self.OS == "windows": ################################# # Add OS-specific precomplier directives: # Add OS-specific libraries: ################################# # Add OS-specific source files: Dir = os.path.join("PyFCEU", "src", "drivers", "win") FileNames = ["cheat.c", "debug.c", "input.c", "joystick.c", "keyboard.c", "log.c", "netplay.c", "PyOSD.c", "throttle.c", "sound.c", "video.c", "window.c", "config.c", "args.c", "state.c", "wave.c", ] #"res.res"] #"main.c", for FileName in FileNames: FilePath = os.path.join(Dir, FileName) self.SourceFileNames.append(FilePath) ## Dir = os.path.join("PyFCEU", "src") ## FileNames = ["res.o", ] ## for FileName in FileNames: ## FilePath = os.path.join(Dir, FileName) ## self.SourceFileNames.append(FilePath) def Build(self): """ Main method for preparing PyFCEU.pyd or PyFCEU_d.pyd. """ self.ListSourceFiles() self.SetupMacros() self.SetupOSSpecific() # Macros have all been set; list them now. self.BuildMacroList() # List all external libraries (.a files) to be built: self.ListLibraries() # Now, create the Extension object, and call setup: FCEUExtension = distutils.core.Extension("PyFCEU", sources = self.SourceFileNames, include_dirs = self.IncludeDirectories, define_macros = self.MacroList, libraries = self.LinkLibraries) distutils.core.setup(name="PyFCEU", version='1.0', ext_modules=[FCEUExtension], libraries = self.BuildLibraries) if __name__ == "__main__": Builder = DistributionMaster() for Arg in sys.argv[1:]: if Arg == "-g": Builder.DebugFlag = 1 Builder.Build()