summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--makefile12
-rw-r--r--scripts/genie.lua62
-rw-r--r--scripts/src/bus.lua1
-rw-r--r--scripts/src/main.lua130
-rw-r--r--src/frontend/mame/clifront.cpp32
-rw-r--r--src/frontend/mame/infoxml.cpp20
-rw-r--r--src/frontend/mame/luaengine.cpp2
-rw-r--r--src/frontend/mame/ui/info.cpp8
-rw-r--r--src/frontend/mame/ui/simpleselgame.cpp8
9 files changed, 186 insertions, 89 deletions
diff --git a/makefile b/makefile
index e51740da8cb..f42393bd8d6 100644
--- a/makefile
+++ b/makefile
@@ -104,7 +104,9 @@
# QT_HOME = /usr/lib64/qt48/
-# SOURCES = src/mame/drivers/asteroid.cpp,src/mame/audio/llander.cpp
+# SOURCES = src/mame/atari/asteroid.cpp,src/mame/cinemat/cchasm.cpp
+
+# SOURCEFILTER = mydrivers.flt
# FORCE_VERSION_COMPILE = 1
@@ -875,6 +877,10 @@ ifdef SOURCES
PARAMS += --SOURCES='$(SOURCES)'
endif
+ifdef SOURCEFILTER
+PARAMS += --SOURCEFILTER='$(SOURCEFILTER)'
+endif
+
ifdef FORCE_VERSION_COMPILE
PARAMS += --FORCE_VERSION_COMPILE='$(FORCE_VERSION_COMPILE)'
endif
@@ -930,6 +936,9 @@ SCRIPTS = scripts/genie.lua \
$(wildcard src/osd/$(OSD)/$(OSD).mak) \
$(wildcard src/$(TARGET)/$(SUBTARGET_FULL).mak)
+ifdef SOURCEFILTER
+SCRIPTS += $(SOURCEFILTER)
+else
ifndef SOURCES
ifdef PROJECT
SCRIPTS += projects/$(PROJECT)/scripts/target/$(TARGET)/$(SUBTARGET_FULL).lua
@@ -938,6 +947,7 @@ else
#SCRIPTS += scripts/target/$(TARGET)/$(SUBTARGET_FULL).lua
endif
endif
+endif
ifdef REGENIE
SCRIPTS+= regenie
diff --git a/scripts/genie.lua b/scripts/genie.lua
index fcc670768df..609280cd8ad 100644
--- a/scripts/genie.lua
+++ b/scripts/genie.lua
@@ -393,6 +393,11 @@ newoption {
}
newoption {
+ trigger = "SOURCEFILTER",
+ description = "Filter list specifying sources to compile.",
+}
+
+newoption {
trigger = "PLATFORM",
description = "Target machine platform (x86,arm,...)",
}
@@ -552,21 +557,21 @@ if (_OPTIONS["PROJECT"] ~= nil) then
error("File definition for TARGET=" .. _OPTIONS["target"] .. " SUBTARGET=" .. _OPTIONS["subtarget"] .. " does not exist")
end
dofile (path.join(".." ,"projects", _OPTIONS["PROJECT"], "scripts", "target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua"))
-end
-if (_OPTIONS["SOURCES"] == nil) and (_OPTIONS["PROJECT"] == nil) then
+elseif (_OPTIONS["SOURCES"] == nil) and (_OPTIONS["SOURCEFILTER"] == nil) then
local subtargetscript = path.join("target", _OPTIONS["target"], _OPTIONS["subtarget"] .. ".lua")
local subtargetfilter = path.join(MAME_DIR, "src", _OPTIONS["target"], _OPTIONS["subtarget"] .. ".flt")
if os.isfile(subtargetscript) then
dofile(subtargetscript)
elseif os.isfile(subtargetfilter) then
- local cmd = string.format(
- "%s %s filterproject -r %s -t %s -f %s %s",
- PYTHON, path.join(MAME_DIR, "scripts", "build", "makedep.py"),
- MAME_DIR, _OPTIONS["subtarget"], subtargetfilter, path.join(MAME_DIR, "src", _OPTIONS["target"] , _OPTIONS["target"] .. ".lst"))
- local OUT_STR = os.outputof(cmd)
+ local makedep = path.join(MAME_DIR, "scripts", "build", "makedep.py")
+ local driverlist = path.join(MAME_DIR, "src", _OPTIONS["target"], _OPTIONS["target"] .. ".lst")
+ local OUT_STR = os.outputof(
+ string.format(
+ "%s %s filterproject -r %s -t %s -f %s %s",
+ PYTHON, makedep, MAME_DIR, _OPTIONS["subtarget"], subtargetfilter, driverlist))
load(OUT_STR)()
else
- error("File definition for TARGET=" .. _OPTIONS["target"] .. " SUBTARGET=" .. _OPTIONS["subtarget"] .. " does not exist")
+ error("Definition file for TARGET=" .. _OPTIONS["target"] .. " SUBTARGET=" .. _OPTIONS["subtarget"] .. " does not exist")
end
end
@@ -1420,19 +1425,46 @@ end
configuration { }
-if (_OPTIONS["SOURCES"] ~= nil) then
+if _OPTIONS["SOURCES"] ~= nil then
+ if _OPTIONS["SOURCEFILTER"] ~= nil then
+ error("SOURCES and SOURCEFILTER cannot be combined")
+ end
+
+ local makedep = path.join(MAME_DIR, "scripts", "build", "makedep.py")
local str = _OPTIONS["SOURCES"]
local sourceargs = ""
for word in string.gmatch(str, '([^,]+)') do
- if (not os.isfile(path.join(MAME_DIR, word))) then
- print("File " .. word .. " does not exist")
- os.exit()
+ if not os.isfile(path.join(MAME_DIR, word)) then
+ error("File " .. word .. " does not exist")
end
sourceargs = sourceargs .. " " .. word
end
- local OUT_STR = os.outputof( PYTHON .. " " .. MAME_DIR .. "scripts/build/makedep.py sourcesproject -r " .. MAME_DIR .. " -t " .. _OPTIONS["subtarget"] .. sourceargs )
+
+ local OUT_STR = os.outputof(
+ string.format(
+ "%s %s sourcesproject -r %s -t %s %s",
+ PYTHON, makedep, MAME_DIR, _OPTIONS["subtarget"], sourceargs))
+ load(OUT_STR)()
+
+ local driverlist = path.join(MAME_DIR, "src", _OPTIONS["target"], _OPTIONS["target"] .. ".lst")
+ local driverfilter = path.join(GEN_DIR, _OPTIONS["target"], _OPTIONS["subtarget"] .. ".flt")
+ os.outputof(
+ string.format(
+ "%s %s sourcesfilter -l %s %s > %s",
+ PYTHON, makedep, driverlist, sourceargs, driverfilter))
+elseif _OPTIONS["SOURCEFILTER"] ~= nil then
+ local driverfilter = path.join(MAME_DIR, _OPTIONS["SOURCEFILTER"])
+ if not os.isfile(driverfilter) then
+ error("File " .. _OPTIONS["SOURCEFILTER"] .. " does not exist")
+ end
+
+ local makedep = path.join(MAME_DIR, "scripts", "build", "makedep.py")
+ local driverlist = path.join(MAME_DIR, "src", _OPTIONS["target"], _OPTIONS["target"] .. ".lst")
+ local OUT_STR = os.outputof(
+ string.format(
+ "%s %s filterproject -r %s -t %s -f %s %s",
+ PYTHON, makedep, MAME_DIR, _OPTIONS["subtarget"], driverfilter, driverlist))
load(OUT_STR)()
- os.outputof( PYTHON .. " " .. MAME_DIR .. "scripts/build/makedep.py sourcesfilter -l " .. MAME_DIR .. "src/" .. _OPTIONS["target"] .. "/" .. _OPTIONS["target"] .. ".lst" .. sourceargs .. " > ".. GEN_DIR .. _OPTIONS["target"] .. "/" .. _OPTIONS["subtarget"] .. ".flt" )
end
group "libs"
@@ -1473,7 +1505,7 @@ end
group "emulator"
dofile(path.join("src", "main.lua"))
-if (_OPTIONS["SOURCES"] == nil) then
+if (_OPTIONS["SOURCES"] == nil) and (_OPTIONS["SOURCEFILTER"] == nil) then
if (_OPTIONS["target"] == _OPTIONS["subtarget"]) then
startproject (_OPTIONS["target"])
else
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 348eb598223..46b7461763f 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -3087,6 +3087,7 @@ end
---------------------------------------------------
--
--@src/devices/bus/nes_ctrl/ctrl.h,BUSES["NES_CTRL"] = true
+--@src/devices/bus/nes_ctrl/zapper_sensor.h,BUSES["NES_CTRL"] = true
---------------------------------------------------
if (BUSES["NES_CTRL"]~=null) then
diff --git a/scripts/src/main.lua b/scripts/src/main.lua
index ce31dd7f5c4..ae95b11e501 100644
--- a/scripts/src/main.lua
+++ b/scripts/src/main.lua
@@ -11,7 +11,7 @@
function mainProject(_target, _subtarget)
local projname
-if (_OPTIONS["SOURCES"] == nil) then
+if (_OPTIONS["SOURCES"] == nil) and (_OPTIONS["SOURCEFILTER"] == nil) then
if (_target == _subtarget) then
projname = _target
else
@@ -282,68 +282,80 @@ if (STANDALONE~=true) then
GEN_DIR .. _target .. "/" .. _subtarget .. "/drivlist.cpp",
}
- if (_OPTIONS["SOURCES"] == nil) then
-
- if os.isfile(MAME_DIR .. "src/" .. _target .."/" .. _subtarget ..".flt") then
- dependency {
- { GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.cpp", MAME_DIR .. "src/".._target .."/" .. _target ..".lst", true },
- }
- custombuildtask {
+ local driverlist = MAME_DIR .. "src/" .. _target .. "/" .. _target .. ".lst"
+ local driverssrc = GEN_DIR .. _target .. "/" .. _subtarget .. "/drivlist.cpp"
+ if _OPTIONS["SOURCES"] ~= nil then
+ dependency {
+ { driverssrc, driverlist, true },
+ }
+ custombuildtask {
+ {
+ GEN_DIR .. _target .."/" .. _subtarget .. ".flt" ,
+ driverssrc,
+ { MAME_DIR .. "scripts/build/makedep.py", driverlist },
{
- MAME_DIR .. "src/" .. _target .. "/" .. _subtarget .. ".flt",
- GEN_DIR .. _target .. "/" .. _subtarget .. "/drivlist.cpp",
- { MAME_DIR .. "scripts/build/makedep.py", MAME_DIR .. "src/" .. _target .."/" .. _target .. ".lst" },
- {
- "@echo Building driver list...",
- PYTHON .. " $(1) driverlist $(2) -f $(<) > $(@)"
- }
- },
- }
- elseif os.isfile(MAME_DIR .. "src/" .._target .. "/" .. _subtarget ..".lst") then
- custombuildtask {
+ "@echo Building driver list...",
+ PYTHON .. " $(1) driverlist $(2) -f $(<) > $(@)"
+ }
+ },
+ }
+ elseif _OPTIONS["SOURCEFILTER"] ~= nil then
+ dependency {
+ { driverssrc, driverlist, true },
+ }
+ custombuildtask {
+ {
+ MAME_DIR .. _OPTIONS["SOURCEFILTER"],
+ driverssrc,
+ { MAME_DIR .. "scripts/build/makedep.py", driverlist },
{
- MAME_DIR .. "src/" .. _target .. "/" .. _subtarget .. ".lst",
- GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.cpp",
- { MAME_DIR .. "scripts/build/makedep.py" },
- {
- "@echo Building driver list...",
- PYTHON .. " $(1) driverlist $(<) > $(@)"
- }
- },
- }
- else
- dependency {
- { GEN_DIR .. _target .. "/" .. _target .."/drivlist.cpp", MAME_DIR .. "src/".._target .."/" .. _target ..".lst", true },
- }
- custombuildtask {
+ "@echo Building driver list...",
+ PYTHON .. " $(1) driverlist $(2) -f $(<) > $(@)"
+ }
+ },
+ }
+ elseif os.isfile(MAME_DIR .. "src/" .. _target .."/" .. _subtarget ..".flt") then
+ dependency {
+ { driverssrc, driverlist, true },
+ }
+ custombuildtask {
+ {
+ MAME_DIR .. "src/" .. _target .. "/" .. _subtarget .. ".flt",
+ driverssrc,
+ { MAME_DIR .. "scripts/build/makedep.py", driverlist },
{
- MAME_DIR .. "src/" .. _target .. "/" .. _target .. ".lst",
- GEN_DIR .. _target .. "/" .. _target .. "/drivlist.cpp",
- { MAME_DIR .. "scripts/build/makedep.py" },
- {
- "@echo Building driver list...",
- PYTHON .. " $(1) driverlist $(<) > $(@)"
- }
- },
- }
- end
- end
-
- if (_OPTIONS["SOURCES"] ~= nil) then
- dependency {
- { GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.cpp", MAME_DIR .. "src/".._target .."/" .. _target ..".lst", true },
- }
- custombuildtask {
+ "@echo Building driver list...",
+ PYTHON .. " $(1) driverlist $(2) -f $(<) > $(@)"
+ }
+ },
+ }
+ elseif os.isfile(MAME_DIR .. "src/" .._target .. "/" .. _subtarget ..".lst") then
+ custombuildtask {
+ {
+ MAME_DIR .. "src/" .. _target .. "/" .. _subtarget .. ".lst",
+ driverssrc,
+ { MAME_DIR .. "scripts/build/makedep.py" },
{
- GEN_DIR .. _target .."/" .. _subtarget ..".flt" ,
- GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.cpp",
- { MAME_DIR .. "scripts/build/makedep.py", MAME_DIR .. "src/".._target .."/" .. _target ..".lst" },
- {
- "@echo Building driver list...",
- PYTHON .. " $(1) driverlist $(2) -f $(<) > $(@)"
- }
- },
- }
+ "@echo Building driver list...",
+ PYTHON .. " $(1) driverlist $(<) > $(@)"
+ }
+ },
+ }
+ else
+ dependency {
+ { driverssrc, driverlist, true },
+ }
+ custombuildtask {
+ {
+ driverlist,
+ driverssrc,
+ { MAME_DIR .. "scripts/build/makedep.py" },
+ {
+ "@echo Building driver list...",
+ PYTHON .. " $(1) driverlist $(<) > $(@)"
+ }
+ },
+ }
end
configuration { "mingw*" }
diff --git a/src/frontend/mame/clifront.cpp b/src/frontend/mame/clifront.cpp
index b081c5f45a5..9e04f1ed77b 100644
--- a/src/frontend/mame/clifront.cpp
+++ b/src/frontend/mame/clifront.cpp
@@ -400,7 +400,25 @@ void cli_frontend::listsource(const std::vector<std::string> &args)
{
auto const list_system_source = [] (device_type type)
{
- osd_printf_info("%-16s %s\n", type.shortname(), core_filename_extract_base(type.source()));
+ std::string_view src(type.source());
+ auto prefix(src.find("src/mame/"));
+ if (std::string_view::npos == prefix)
+ prefix = src.find("src\\mame\\");
+ if (std::string_view::npos != prefix)
+ {
+ src.remove_prefix(prefix + 9);
+ }
+ else
+ {
+ auto prefix(src.find("src/"));
+ if (std::string_view::npos == prefix)
+ prefix = src.find("src\\");
+ if (std::string_view::npos != prefix)
+ {
+ src.remove_prefix(prefix + 4);
+ }
+ }
+ osd_printf_info("%-16s %s\n", type.shortname(), src);
};
apply_action(
args,
@@ -499,11 +517,17 @@ void cli_frontend::listbrothers(const std::vector<std::string> &args)
drivlist.reset();
while (drivlist.next())
{
- int clone_of = drivlist.clone();
+ std::string_view src(drivlist.driver().type.source());
+ auto prefix(src.find("src/mame/"));
+ if (std::string_view::npos == prefix)
+ prefix = src.find("src\\mame\\");
+ if (std::string_view::npos != prefix)
+ src.remove_prefix(prefix + 9);
+ int const clone_of = drivlist.clone();
if (clone_of != -1)
- osd_printf_info("%-20s %-16s %s\n", core_filename_extract_base(drivlist.driver().type.source()), drivlist.driver().name, (clone_of == -1 ? "" : drivlist.driver(clone_of).name));
+ osd_printf_info("%-20s %-16s %s\n", src, drivlist.driver().name, (clone_of == -1 ? "" : drivlist.driver(clone_of).name));
else
- osd_printf_info("%-20s %s\n", core_filename_extract_base(drivlist.driver().type.source()), drivlist.driver().name);
+ osd_printf_info("%-20s %s\n", src, drivlist.driver().name);
}
}
diff --git a/src/frontend/mame/infoxml.cpp b/src/frontend/mame/infoxml.cpp
index 70270e0a0f9..8ca6dfcc875 100644
--- a/src/frontend/mame/infoxml.cpp
+++ b/src/frontend/mame/infoxml.cpp
@@ -748,11 +748,13 @@ void output_one(std::ostream &out, driver_enumerator &drivlist, const game_drive
util::stream_format(out, "\t<%s name=\"%s\"", XML_TOP, normalize_string(driver.name));
// strip away any path information from the source_file and output it
- const char *start = strrchr(driver.type.source(), '/');
- if (!start)
- start = strrchr(driver.type.source(), '\\');
- start = start ? (start + 1) : driver.type.source();
- util::stream_format(out, " sourcefile=\"%s\"", normalize_string(start));
+ std::string_view src(driver.type.source());
+ auto prefix(src.find("src/mame/"));
+ if (std::string_view::npos == prefix)
+ prefix = src.find("src\\mame\\");
+ if (std::string_view::npos != prefix)
+ src.remove_prefix(prefix + 9);
+ util::stream_format(out, " sourcefile=\"%s\"", normalize_string(src));
// append bios and runnable flags
if (driver.flags & machine_flags::IS_BIOS_ROOT)
@@ -844,8 +846,12 @@ void output_one_device(std::ostream &out, machine_config &config, device_t &devi
// start to output info
util::stream_format(out, "\t<%s name=\"%s\"", XML_TOP, normalize_string(device.shortname()));
- std::string src(device.source());
- strreplace(src,"../", "");
+ std::string_view src(device.source());
+ auto prefix(src.find("src/"));
+ if (std::string_view::npos == prefix)
+ prefix = src.find("src\\");
+ if (std::string_view::npos != prefix)
+ src.remove_prefix(prefix + 4);
util::stream_format(out, " sourcefile=\"%s\" isdevice=\"yes\" runnable=\"no\"", normalize_string(src));
auto const parent(device.type().parent_rom_device_type());
if (parent)
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index fbfd3f0c829..43449a62184 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -1284,7 +1284,7 @@ void lua_engine::initialize()
game_driver_type["manufacturer"] = sol::readonly(&game_driver::manufacturer);
game_driver_type["parent"] = sol::readonly(&game_driver::parent);
game_driver_type["compatible_with"] = sol::property([] (game_driver const &driver) { return strcmp(driver.compatible_with, "0") ? driver.compatible_with : nullptr; });
- game_driver_type["source_file"] = sol::property([] (game_driver const &driver) { return &driver.type.source()[0]; });
+ game_driver_type["source_file"] = sol::property([] (game_driver const &driver) { return driver.type.source(); });
game_driver_type["orientation"] = sol::property(
[] (game_driver const &driver)
{
diff --git a/src/frontend/mame/ui/info.cpp b/src/frontend/mame/ui/info.cpp
index ce74942cbd2..f6fa969bbb4 100644
--- a/src/frontend/mame/ui/info.cpp
+++ b/src/frontend/mame/ui/info.cpp
@@ -362,11 +362,17 @@ std::string machine_info::game_info_string() const
std::ostringstream buf;
// print description, manufacturer, and CPU:
+ std::string_view src(m_machine.system().type.source());
+ auto prefix(src.find("src/mame/"));
+ if (std::string_view::npos == prefix)
+ prefix = src.find("src\\mame\\");
+ if (std::string_view::npos != prefix)
+ src.remove_prefix(prefix + 9);
util::stream_format(buf, _("%1$s\n%2$s %3$s\nDriver: %4$s\n\nCPU:\n"),
system_list::instance().systems()[driver_list::find(m_machine.system().name)].description,
m_machine.system().year,
m_machine.system().manufacturer,
- core_filename_extract_base(m_machine.system().type.source()));
+ src);
// loop over all CPUs
execute_interface_enumerator execiter(m_machine.root_device());
diff --git a/src/frontend/mame/ui/simpleselgame.cpp b/src/frontend/mame/ui/simpleselgame.cpp
index 7febc58e867..9cd8dd26fbe 100644
--- a/src/frontend/mame/ui/simpleselgame.cpp
+++ b/src/frontend/mame/ui/simpleselgame.cpp
@@ -335,7 +335,13 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float
tempbuf[1] = string_format(_("%1$s, %2$-.100s"), driver->year, driver->manufacturer);
// next line source path
- tempbuf[2] = string_format(_("Driver: %1$s"), core_filename_extract_base(driver->type.source()));
+ std::string_view src(driver->type.source());
+ auto prefix(src.find("src/mame/"));
+ if (std::string_view::npos == prefix)
+ prefix = src.find("src\\mame\\");
+ if (std::string_view::npos != prefix)
+ src.remove_prefix(prefix + 9);
+ tempbuf[2] = string_format(_("Driver: %1$s"), src);
// update cached values if selection changed
if (driver != m_cached_driver)