summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--makefile12
-rw-r--r--scripts/genie.lua19
-rw-r--r--scripts/src/emu.lua9
-rw-r--r--scripts/src/main.lua12
-rw-r--r--src/build/makedep.py107
5 files changed, 109 insertions, 50 deletions
diff --git a/makefile b/makefile
index c7141b872a2..d76debb1f1b 100644
--- a/makefile
+++ b/makefile
@@ -89,6 +89,8 @@
# QT_HOME = /usr/lib64/qt48/
+# DRIVERS = src/mame/drivers/1942.c,src/mame/drivers/cops.c
+
-include useroptions.mak
###########################################################################
@@ -597,6 +599,10 @@ ifdef QT_HOME
PARAMS += --QT_HOME='$(QT_HOME)'
endif
+ifdef DRIVERS
+PARAMS += --DRIVERS='$(DRIVERS)'
+endif
+
#-------------------------------------------------
# All scripts
#-------------------------------------------------
@@ -619,9 +625,13 @@ SCRIPTS = scripts/genie.lua \
scripts/src/netlist.lua \
scripts/toolchain.lua \
scripts/src/osd/modules.lua \
- scripts/target/$(TARGET)/$(SUBTARGET).lua \
$(wildcard src/osd/$(OSD)/$(OSD).mak) \
$(wildcard src/$(TARGET)/$(SUBTARGET).mak)
+
+ifndef DRIVERS
+SCRIPTS += scripts/target/$(TARGET)/$(SUBTARGET).lua
+endif
+
ifdef REGENIE
SCRIPTS+= regenie
endif
diff --git a/scripts/genie.lua b/scripts/genie.lua
index 38e98bec587..fd8a2ae5647 100644
--- a/scripts/genie.lua
+++ b/scripts/genie.lua
@@ -53,6 +53,7 @@ SOUNDS = {}
MACHINES = {}
VIDEOS = {}
BUSES = {}
+bus_count = 0
newoption {
trigger = "with-tools",
@@ -355,6 +356,11 @@ newoption {
}
}
+newoption {
+ trigger = "DRIVERS",
+ description = "List of drivers to compile.",
+}
+
if _OPTIONS["SHLIB"]=="1" then
LIBTYPE = "SharedLib"
else
@@ -488,11 +494,16 @@ msgarchiving ("Archiving $(notdir $@)...")
messageskip { "SkipCreatingMessage", "SkipBuildingMessage", "SkipCleaningMessage" }
-if (not os.isfile(path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua"))) then
- error("File definition for TARGET=" .. _OPTIONS["target"] .. " SUBTARGET=" .. _OPTIONS["subtarget"] .. " does not exist")
+if (_OPTIONS["DRIVERS"] == nil) then
+ if (not os.isfile(path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua"))) then
+ error("File definition for TARGET=" .. _OPTIONS["target"] .. " SUBTARGET=" .. _OPTIONS["subtarget"] .. " does not exist")
+ end
+ dofile (path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua"))
+else
+ OUT_STR = os.outputof( PYTHON .. " " .. MAME_DIR .. "src/build/makedep.py " .. MAME_DIR .. " " .. _OPTIONS["DRIVERS"] .. " target " .. _OPTIONS["subtarget"])
+ load(OUT_STR)()
+ os.outputof( PYTHON .. " " .. MAME_DIR .. "src/build/makedep.py " .. MAME_DIR .. " " .. _OPTIONS["DRIVERS"] .. " drivers " .. _OPTIONS["subtarget"] .. " > ".. GEN_DIR .. _OPTIONS["target"] .. "/" .. _OPTIONS["subtarget"].."/drivlist.c")
end
-dofile (path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua"))
-
configuration { "gmake" }
flags {
"SingleOutputDir",
diff --git a/scripts/src/emu.lua b/scripts/src/emu.lua
index 2cd14d3cac4..12e7525aca1 100644
--- a/scripts/src/emu.lua
+++ b/scripts/src/emu.lua
@@ -410,7 +410,13 @@ function emuProject(_target, _subtarget)
-- netlist now defines a project
dofile(path.join("src", "netlist.lua"))
-
+
+ bus_count = 0
+ for k,v in pairs(BUSES) do
+ bus_count = bus_count + 1
+ end
+
+if (bus_count > 0) then
project ("bus")
uuid ("5d782c89-cf7e-4cfe-8f9f-0d4bfc16c91d")
kind (LIBTYPE)
@@ -448,6 +454,7 @@ function emuProject(_target, _subtarget)
end
dofile(path.join("src", "bus.lua"))
+end
project ("dasm")
diff --git a/scripts/src/main.lua b/scripts/src/main.lua
index 2156a775dbc..c76cbbf3028 100644
--- a/scripts/src/main.lua
+++ b/scripts/src/main.lua
@@ -86,7 +86,13 @@ function mainProject(_target, _subtarget)
findfunction("linkProjects_" .. _OPTIONS["target"] .. "_" .. _OPTIONS["subtarget"])(_OPTIONS["target"], _OPTIONS["subtarget"])
links {
"osd_" .. _OPTIONS["osd"],
- "bus",
+ }
+ if (bus_count > 0) then
+ links {
+ "bus",
+ }
+ end
+ links {
"netlist",
"optional",
"emu",
@@ -214,6 +220,8 @@ function mainProject(_target, _subtarget)
MAME_DIR .. "src/version.c",
GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.c",
}
+
+if (_OPTIONS["DRIVERS"] == nil) then
dependency {
{ "../../../../generated/mame/mame/drivlist.c", MAME_DIR .. "src/mame/mess.lst", true },
{ "../../../../generated/mame/mame/drivlist.c" , MAME_DIR .. "src/mame/arcade.lst", true},
@@ -221,7 +229,7 @@ function mainProject(_target, _subtarget)
custombuildtask {
{ MAME_DIR .. "src/".._target .."/" .. _subtarget ..".lst" , GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.c", { MAME_DIR .. "src/build/makelist.py" }, {"@echo Building driver list...", PYTHON .. " $(1) $(<) > $(@)" }},
}
-
+end
configuration { "gmake" }
dependency {
{ ".PHONY", ".FORCE", true },
diff --git a/src/build/makedep.py b/src/build/makedep.py
index 6c6899e3607..f82292324fa 100644
--- a/src/build/makedep.py
+++ b/src/build/makedep.py
@@ -22,40 +22,40 @@ components = [ ]
drivers = [ ]
-def file_exists(srcfile, folder, inc_dir):
+def file_exists(root, srcfile, folder, inc_dir):
includes = [ folder ]
includes.extend(inc_dir)
for line in includes:
try:
- fp = open(line + srcfile, 'rb')
+ fp = open(root + line + srcfile, 'rb')
return line + srcfile
except IOError:
ignore=1
return ''
-def add_c_if_exists(fullname):
+def add_c_if_exists(root, fullname):
try:
- fp = open(fullname, 'rb')
+ fp = open(root + fullname, 'rb')
deps_files_included.append(fullname)
except IOError:
ignore=1
-def add_rest_if_exists(srcfile):
+def add_rest_if_exists(root, srcfile):
t = srcfile.rsplit('/', 2)
if t[1]=='includes':
t[2] = t[2].replace('.h','.c')
t[1] = 'drivers'
- add_c_if_exists("/".join(t))
+ add_c_if_exists(root,"/".join(t))
t[1] = 'machine'
- add_c_if_exists("/".join(t))
+ add_c_if_exists(root,"/".join(t))
t[1] = 'video'
- add_c_if_exists("/".join(t))
+ add_c_if_exists(root,"/".join(t))
t[1] = 'audio'
- add_c_if_exists("/".join(t))
+ add_c_if_exists(root,"/".join(t))
-def parse_file_for_deps(srcfile, folder):
+def parse_file_for_deps(root, srcfile, folder):
try:
- fp = open(srcfile, 'rb')
+ fp = open(root + srcfile, 'rb')
except IOError:
sys.stderr.write("Unable to open source file '%s'\n" % srcfile)
return 1
@@ -92,21 +92,21 @@ def parse_file_for_deps(srcfile, folder):
if content.startswith('#include'):
name = content[8:]
name = name.replace('"','')
- fullname = file_exists(name, folder,deps_include_dirs)
+ fullname = file_exists(root, name, folder,deps_include_dirs)
if fullname in deps_files_included:
continue
if fullname!='':
deps_files_included.append(fullname)
- add_c_if_exists(fullname.replace('.h','.c'))
- add_rest_if_exists(fullname)
+ add_c_if_exists(root, fullname.replace('.h','.c'))
+ add_rest_if_exists(root, fullname)
newfolder = fullname.rsplit('/', 1)[0] + '/'
- parse_file_for_deps(fullname, newfolder)
+ parse_file_for_deps(root, fullname, newfolder)
continue
return 0
-def parse_file(srcfile, folder):
+def parse_file(root, srcfile, folder):
try:
- fp = open(srcfile, 'rb')
+ fp = open(root + srcfile, 'rb')
except IOError:
sys.stderr.write("Unable to open source file '%s'\n" % srcfile)
return 1
@@ -143,7 +143,7 @@ def parse_file(srcfile, folder):
if content.startswith('#include'):
name = content[8:]
name = name.replace('"','')
- fullname = file_exists(name, folder,include_dirs)
+ fullname = file_exists(root, name, folder,include_dirs)
if fullname in files_included:
continue
if fullname!='':
@@ -152,13 +152,13 @@ def parse_file(srcfile, folder):
components.append(mappings[fullname])
files_included.append(fullname)
newfolder = fullname.rsplit('/', 1)[0] + '/'
- parse_file(fullname, newfolder)
+ parse_file(root, fullname, newfolder)
continue
return 0
-def parse_file_for_drivers(srcfile):
+def parse_file_for_drivers(root, srcfile):
try:
- fp = open(srcfile, 'rb')
+ fp = open(root + srcfile, 'rb')
except IOError:
sys.stderr.write("Unable to open source file '%s'\n" % srcfile)
return 1
@@ -213,41 +213,64 @@ def parse_lua_file(srcfile):
mappings[name.rsplit(',', 1)[0]] = name.rsplit(',', 1)[1]
return 0
-if len(sys.argv) < 4:
+if len(sys.argv) < 5:
print('Usage:')
- print(' makedep <source.c> <type> <target>')
+ print(' makedep <root> <source.c> <type> <target>')
sys.exit(0)
-parse_lua_file('scripts/src/bus.lua')
-parse_lua_file('scripts/src/cpu.lua')
-parse_lua_file('scripts/src/machine.lua')
-parse_lua_file('scripts/src/sound.lua')
-parse_lua_file('scripts/src/video.lua')
+root = sys.argv[1] + '/'
-for filename in sys.argv[1].rsplit(',') :
+parse_lua_file(root +'scripts/src/bus.lua')
+parse_lua_file(root +'scripts/src/cpu.lua')
+parse_lua_file(root +'scripts/src/machine.lua')
+parse_lua_file(root +'scripts/src/sound.lua')
+parse_lua_file(root +'scripts/src/video.lua')
+
+for filename in sys.argv[2].rsplit(',') :
deps_files_included.append(filename.replace('\\','/'))
- parse_file_for_deps(filename,'')
+ parse_file_for_deps(root,filename,'')
for filename in deps_files_included:
- parse_file(filename,'')
+ parse_file(root,filename,'')
-for filename in sys.argv[1].rsplit(',') :
- parse_file_for_drivers(filename)
+for filename in sys.argv[2].rsplit(',') :
+ parse_file_for_drivers(root,filename)
# display output
-if sys.argv[2]=='drivers':
- for line in drivers:
- sys.stdout.write("%s\n" % line)
-if sys.argv[2]=='target':
+if sys.argv[3]=='drivers':
+ # add a reference to the ___empty driver
+ drivers.append("___empty")
+
+ # start with a header
+ print('#include "emu.h"\n')
+ print('#include "drivenum.h"\n')
+
+ #output the list of externs first
+ for drv in sorted(drivers):
+ print("GAME_EXTERN(%s);" % drv)
+ print("")
+
+ # then output the array
+ print("const game_driver * const driver_list::s_drivers_sorted[%d] =" % len(drivers))
+ print("{")
+ for drv in sorted(drivers):
+ print("\t&GAME_NAME(%s)," % drv)
+ print("};")
+ print("")
+
+ # also output a global count
+ print("int driver_list::s_driver_count = %d;\n" % len(drivers))
+
+if sys.argv[3]=='target':
for line in components:
sys.stdout.write("%s\n" % line)
sys.stdout.write('\n');
- sys.stdout.write('function createProjects_mame_%s(_target, _subtarget)\n' % sys.argv[3]);
- sys.stdout.write(' project ("mame_%s")\n' % sys.argv[3]);
+ sys.stdout.write('function createProjects_mame_%s(_target, _subtarget)\n' % sys.argv[4]);
+ sys.stdout.write(' project ("mame_%s")\n' % sys.argv[4]);
sys.stdout.write(' targetsubdir(_target .."_" .. _subtarget)\n');
sys.stdout.write(' kind (LIBTYPE)\n');
- sys.stdout.write(' uuid (os.uuid("drv-mame-%s"))\n' % sys.argv[3]);
+ sys.stdout.write(' uuid (os.uuid("drv-mame-%s"))\n' % sys.argv[4]);
sys.stdout.write(' \n');
sys.stdout.write(' options {\n');
sys.stdout.write(' "ForceCPP",\n');
@@ -276,9 +299,9 @@ if sys.argv[2]=='target':
sys.stdout.write(' }\n');
sys.stdout.write('end\n');
sys.stdout.write('\n');
- sys.stdout.write('function linkProjects_mame_%s(_target, _subtarget)\n' % sys.argv[3]);
+ sys.stdout.write('function linkProjects_mame_%s(_target, _subtarget)\n' % sys.argv[4]);
sys.stdout.write(' links {\n');
- sys.stdout.write(' "mame_%s",\n' % sys.argv[3]);
+ sys.stdout.write(' "mame_%s",\n' % sys.argv[4]);
sys.stdout.write(' }\n');
sys.stdout.write('end\n');