mirror of
https://github.com/holub/mame
synced 2025-06-29 07:34:45 +03:00

Don't ignore the return status of OSD module initialisation. Attempt to fall back to an alternate module if the selected module fails to initialise. Log more useful diagnostic information at verbose level. Fixed BGFX crash on exit after toggling fullscreen. Also persist more settings than just the selected chains across toggling fullscreen. Turned video modules into OSD modules in the same sense as all the other OSD modules. They now use the same selection/fallback mechanism as all the other modules without special extra code in the OSD implementations. Untangled some object ownership mess. Windows own renderers, OSD objects own windows. Fixed a refrence loop that caused the first window object to always leak. Don't create renderer object until after underlying window has been created. Fixed issues with order of creation/destruction when toggling fullscreen or changing prescale in fullscreen with -switchres in SDL builds. Use more smart pointers in BGFX and Direct3D render modules. Most of the code now reutrns a smart pointer when handing over ownership or a naked pointer when retaining ownership. Fixed a few leaks and simplified cleanup code. Encapsulated various OSD modules better.
506 lines
13 KiB
Lua
506 lines
13 KiB
Lua
-- license:BSD-3-Clause
|
|
-- copyright-holders:MAMEdev Team
|
|
|
|
---------------------------------------------------------------------------
|
|
--
|
|
-- sdl.lua
|
|
--
|
|
-- Rules for the building with SDL
|
|
--
|
|
---------------------------------------------------------------------------
|
|
|
|
dofile("modules.lua")
|
|
|
|
|
|
function maintargetosdoptions(_target,_subtarget)
|
|
osdmodulestargetconf()
|
|
|
|
if _OPTIONS["USE_DISPATCH_GL"]~="1" and _OPTIONS["MESA_INSTALL_ROOT"] then
|
|
libdirs {
|
|
path.join(_OPTIONS["MESA_INSTALL_ROOT"],"lib"),
|
|
}
|
|
linkoptions {
|
|
"-Wl,-rpath=" .. path.join(_OPTIONS["MESA_INSTALL_ROOT"],"lib"),
|
|
}
|
|
end
|
|
|
|
if _OPTIONS["NO_X11"]~="1" then
|
|
links {
|
|
"X11",
|
|
"Xinerama",
|
|
}
|
|
else
|
|
if _OPTIONS["targetos"]=="linux" or _OPTIONS["targetos"]=="netbsd" or _OPTIONS["targetos"]=="openbsd" then
|
|
links {
|
|
"EGL",
|
|
}
|
|
end
|
|
end
|
|
|
|
if _OPTIONS["NO_USE_XINPUT"]~="1" then
|
|
links {
|
|
"Xext",
|
|
"Xi",
|
|
}
|
|
end
|
|
|
|
if BASE_TARGETOS=="unix" and _OPTIONS["targetos"]~="macosx" and _OPTIONS["targetos"]~="android" and _OPTIONS["targetos"]~="asmjs" then
|
|
links {
|
|
"SDL2_ttf",
|
|
}
|
|
local str = backtick(pkgconfigcmd() .. " --libs fontconfig")
|
|
addlibfromstring(str)
|
|
addoptionsfromstring(str)
|
|
end
|
|
|
|
if _OPTIONS["targetos"]=="windows" then
|
|
if _OPTIONS["with-bundled-sdl2"]~=nil then
|
|
configuration { "mingw*"}
|
|
links {
|
|
"SDL2",
|
|
"imm32",
|
|
"version",
|
|
"ole32",
|
|
"oleaut32",
|
|
}
|
|
configuration { "vs*" }
|
|
links {
|
|
"SDL2",
|
|
"imm32",
|
|
"version",
|
|
}
|
|
configuration { }
|
|
else
|
|
if _OPTIONS["USE_LIBSDL"]~="1" then
|
|
configuration { "mingw*"}
|
|
links {
|
|
"SDL2main",
|
|
"SDL2",
|
|
}
|
|
configuration { "vs*" }
|
|
links {
|
|
"SDL2",
|
|
"imm32",
|
|
"version",
|
|
}
|
|
configuration { }
|
|
else
|
|
local str = backtick(sdlconfigcmd() .. " --libs | sed 's/ -lSDLmain//'")
|
|
addlibfromstring(str)
|
|
addoptionsfromstring(str)
|
|
end
|
|
configuration { "x32", "vs*" }
|
|
libdirs {
|
|
path.join(_OPTIONS["SDL_INSTALL_ROOT"],"lib","x86")
|
|
}
|
|
configuration { "x64", "vs*" }
|
|
libdirs {
|
|
path.join(_OPTIONS["SDL_INSTALL_ROOT"],"lib","x64")
|
|
}
|
|
configuration { }
|
|
end
|
|
links {
|
|
"dinput8",
|
|
"psapi",
|
|
}
|
|
elseif _OPTIONS["targetos"]=="haiku" then
|
|
links {
|
|
"network",
|
|
"bsd",
|
|
}
|
|
end
|
|
|
|
configuration { "mingw*" or "vs*" }
|
|
targetprefix "sdl"
|
|
links {
|
|
"psapi",
|
|
"ole32",
|
|
}
|
|
configuration { }
|
|
|
|
if _OPTIONS["targetos"]=="macosx" then
|
|
if _OPTIONS["with-bundled-sdl2"]~=nil then
|
|
links {
|
|
"SDL2",
|
|
}
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
|
|
function sdlconfigcmd()
|
|
if _OPTIONS["targetos"]=="asmjs" then
|
|
return "sdl2-config"
|
|
elseif not _OPTIONS["SDL_INSTALL_ROOT"] then
|
|
return pkgconfigcmd() .. " sdl2"
|
|
else
|
|
return path.join(_OPTIONS["SDL_INSTALL_ROOT"],"bin","sdl2") .. "-config"
|
|
end
|
|
end
|
|
|
|
|
|
newoption {
|
|
trigger = "MESA_INSTALL_ROOT",
|
|
description = "link against specific GL-Library - also adds rpath to executable (overridden by USE_DISPATCH_GL)",
|
|
}
|
|
|
|
newoption {
|
|
trigger = "SDL_INI_PATH",
|
|
description = "Default search path for .ini files",
|
|
}
|
|
|
|
newoption {
|
|
trigger = "NO_X11",
|
|
description = "Disable use of X11",
|
|
allowed = {
|
|
{ "0", "Enable X11" },
|
|
{ "1", "Disable X11" },
|
|
},
|
|
}
|
|
|
|
if not _OPTIONS["NO_X11"] then
|
|
if _OPTIONS["targetos"]=="windows" or _OPTIONS["targetos"]=="macosx" or _OPTIONS["targetos"]=="haiku" or _OPTIONS["targetos"]=="asmjs" then
|
|
_OPTIONS["NO_X11"] = "1"
|
|
else
|
|
_OPTIONS["NO_X11"] = "0"
|
|
end
|
|
end
|
|
|
|
newoption {
|
|
trigger = "NO_USE_XINPUT",
|
|
description = "Disable use of Xinput",
|
|
allowed = {
|
|
{ "0", "Enable Xinput" },
|
|
{ "1", "Disable Xinput" },
|
|
},
|
|
}
|
|
|
|
if not _OPTIONS["NO_USE_XINPUT"] then
|
|
if _OPTIONS["targetos"]=="windows" or _OPTIONS["targetos"]=="macosx" or _OPTIONS["targetos"]=="haiku" or _OPTIONS["targetos"]=="asmjs" then
|
|
_OPTIONS["NO_USE_XINPUT"] = "1"
|
|
else
|
|
_OPTIONS["NO_USE_XINPUT"] = "0"
|
|
end
|
|
end
|
|
|
|
newoption {
|
|
trigger = "NO_USE_XINPUT_WII_LIGHTGUN_HACK",
|
|
description = "Disable use of Xinput Wii Lightgun Hack",
|
|
allowed = {
|
|
{ "0", "Enable Xinput Wii Lightgun Hack" },
|
|
{ "1", "Disable Xinput Wii Lightgun Hack" },
|
|
},
|
|
}
|
|
|
|
if not _OPTIONS["NO_USE_XINPUT_WII_LIGHTGUN_HACK"] then
|
|
_OPTIONS["NO_USE_XINPUT_WII_LIGHTGUN_HACK"] = "1"
|
|
end
|
|
|
|
newoption {
|
|
trigger = "SDL2_MULTIAPI",
|
|
description = "Use couriersud's multi-keyboard patch for SDL 2.1? (this API was removed prior to the 2.0 release)",
|
|
allowed = {
|
|
{ "0", "Use single-keyboard API" },
|
|
{ "1", "Use multi-keyboard API" },
|
|
},
|
|
}
|
|
|
|
if not _OPTIONS["SDL2_MULTIAPI"] then
|
|
_OPTIONS["SDL2_MULTIAPI"] = "0"
|
|
end
|
|
|
|
newoption {
|
|
trigger = "SDL_INSTALL_ROOT",
|
|
description = "Equivalent to the ./configure --prefix=<path>",
|
|
}
|
|
|
|
newoption {
|
|
trigger = "SDL_FRAMEWORK_PATH",
|
|
description = "Location of SDL framework for custom OS X installations",
|
|
}
|
|
|
|
if not _OPTIONS["SDL_FRAMEWORK_PATH"] then
|
|
_OPTIONS["SDL_FRAMEWORK_PATH"] = "/Library/Frameworks/"
|
|
end
|
|
|
|
newoption {
|
|
trigger = "USE_LIBSDL",
|
|
description = "Use SDL library on OS (rather than framework/dll)",
|
|
allowed = {
|
|
{ "0", "Use framework/dll" },
|
|
{ "1", "Use library" },
|
|
},
|
|
}
|
|
|
|
if not _OPTIONS["USE_LIBSDL"] then
|
|
_OPTIONS["USE_LIBSDL"] = "0"
|
|
end
|
|
|
|
|
|
BASE_TARGETOS = "unix"
|
|
SDLOS_TARGETOS = "unix"
|
|
if _OPTIONS["targetos"]=="linux" then
|
|
elseif _OPTIONS["targetos"]=="openbsd" then
|
|
elseif _OPTIONS["targetos"]=="netbsd" then
|
|
elseif _OPTIONS["targetos"]=="haiku" then
|
|
elseif _OPTIONS["targetos"]=="asmjs" then
|
|
elseif _OPTIONS["targetos"]=="windows" then
|
|
BASE_TARGETOS = "win32"
|
|
SDLOS_TARGETOS = "win32"
|
|
elseif _OPTIONS["targetos"]=="macosx" then
|
|
SDLOS_TARGETOS = "macosx"
|
|
end
|
|
|
|
if _OPTIONS["with-bundled-sdl2"]~=nil then
|
|
includedirs {
|
|
GEN_DIR .. "includes",
|
|
}
|
|
end
|
|
if BASE_TARGETOS=="unix" then
|
|
if _OPTIONS["targetos"]=="macosx" then
|
|
local os_version = str_to_version(backtick("sw_vers -productVersion"))
|
|
|
|
links {
|
|
"Cocoa.framework",
|
|
}
|
|
linkoptions {
|
|
"-framework QuartzCore",
|
|
"-framework OpenGL",
|
|
"-framework IOKit",
|
|
}
|
|
|
|
|
|
if os_version>=101100 then
|
|
linkoptions {
|
|
"-weak_framework Metal",
|
|
}
|
|
end
|
|
if _OPTIONS["with-bundled-sdl2"]~=nil then
|
|
linkoptions {
|
|
"-framework AudioToolbox",
|
|
"-framework AudioUnit",
|
|
"-framework CoreAudio",
|
|
"-framework Carbon",
|
|
"-framework ForceFeedback",
|
|
"-framework IOKit",
|
|
"-framework CoreVideo",
|
|
}
|
|
else
|
|
if _OPTIONS["USE_LIBSDL"]~="1" then
|
|
linkoptions {
|
|
"-F" .. _OPTIONS["SDL_FRAMEWORK_PATH"],
|
|
}
|
|
links {
|
|
"SDL2.framework",
|
|
}
|
|
else
|
|
local str = backtick(sdlconfigcmd() .. " --libs --static | sed 's/-lSDLmain//'")
|
|
addlibfromstring(str)
|
|
addoptionsfromstring(str)
|
|
end
|
|
end
|
|
else
|
|
if _OPTIONS["NO_X11"]=="1" then
|
|
_OPTIONS["USE_QTDEBUG"] = "0"
|
|
else
|
|
libdirs {
|
|
"/usr/X11/lib",
|
|
"/usr/X11R6/lib",
|
|
"/usr/openwin/lib",
|
|
}
|
|
end
|
|
if _OPTIONS["with-bundled-sdl2"]~=nil then
|
|
if _OPTIONS["targetos"]~="android" then
|
|
links {
|
|
"SDL2",
|
|
}
|
|
end
|
|
else
|
|
local str = backtick(sdlconfigcmd() .. " --libs")
|
|
addlibfromstring(str)
|
|
addoptionsfromstring(str)
|
|
end
|
|
|
|
if _OPTIONS["targetos"]~="haiku" and _OPTIONS["targetos"]~="android" then
|
|
links {
|
|
"m",
|
|
"pthread",
|
|
}
|
|
if _OPTIONS["targetos"]=="solaris" then
|
|
links {
|
|
"socket",
|
|
"nsl",
|
|
}
|
|
elseif _OPTIONS["targetos"]~="asmjs" then
|
|
links {
|
|
"util",
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
project ("qtdbg_" .. _OPTIONS["osd"])
|
|
uuid (os.uuid("qtdbg_" .. _OPTIONS["osd"]))
|
|
kind (LIBTYPE)
|
|
|
|
dofile("sdl_cfg.lua")
|
|
includedirs {
|
|
MAME_DIR .. "src/emu",
|
|
MAME_DIR .. "src/devices", -- accessing imagedev from debugger
|
|
MAME_DIR .. "src/osd",
|
|
MAME_DIR .. "src/lib",
|
|
MAME_DIR .. "src/lib/util",
|
|
MAME_DIR .. "src/osd/modules/render",
|
|
MAME_DIR .. "3rdparty",
|
|
}
|
|
configuration { "linux-* or freebsd" }
|
|
buildoptions {
|
|
"-fPIC",
|
|
}
|
|
configuration { }
|
|
|
|
qtdebuggerbuild()
|
|
|
|
project ("osd_" .. _OPTIONS["osd"])
|
|
targetsubdir(_OPTIONS["target"] .."_" .._OPTIONS["subtarget"])
|
|
uuid (os.uuid("osd_" .. _OPTIONS["osd"]))
|
|
kind (LIBTYPE)
|
|
|
|
dofile("sdl_cfg.lua")
|
|
osdmodulesbuild()
|
|
|
|
includedirs {
|
|
MAME_DIR .. "src/emu",
|
|
MAME_DIR .. "src/devices", -- accessing imagedev from debugger
|
|
MAME_DIR .. "src/osd",
|
|
MAME_DIR .. "src/lib",
|
|
MAME_DIR .. "src/lib/util",
|
|
MAME_DIR .. "src/osd/modules/file",
|
|
MAME_DIR .. "src/osd/modules/render",
|
|
MAME_DIR .. "3rdparty",
|
|
MAME_DIR .. "src/osd/sdl",
|
|
}
|
|
|
|
if _OPTIONS["targetos"]=="macosx" then
|
|
files {
|
|
MAME_DIR .. "src/osd/modules/debugger/debugosx.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/breakpointsview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/breakpointsview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/consoleview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/consoleview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugcommandhistory.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugcommandhistory.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugconsole.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugconsole.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugwindowhandler.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugwindowhandler.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/deviceinfoviewer.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/deviceinfoviewer.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/devicesviewer.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/devicesviewer.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/disassemblyview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/disassemblyviewer.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/disassemblyviewer.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/errorlogview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/errorlogview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/disassemblyview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/errorlogviewer.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/errorlogviewer.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/memoryview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/memoryview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/memoryviewer.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/memoryviewer.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/pointsviewer.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/pointsviewer.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/registerpointsview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/registerpointsview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/registersview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/registersview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/watchpointsview.mm",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/watchpointsview.h",
|
|
MAME_DIR .. "src/osd/modules/debugger/osx/debugosx.h",
|
|
}
|
|
end
|
|
|
|
files {
|
|
MAME_DIR .. "src/osd/osdepend.h",
|
|
MAME_DIR .. "src/osd/modules/osdwindow.cpp",
|
|
MAME_DIR .. "src/osd/modules/osdwindow.h",
|
|
MAME_DIR .. "src/osd/sdl/osdsdl.cpp",
|
|
MAME_DIR .. "src/osd/sdl/osdsdl.h",
|
|
MAME_DIR .. "src/osd/sdl/sdlmain.cpp",
|
|
MAME_DIR .. "src/osd/sdl/sdlopts.cpp",
|
|
MAME_DIR .. "src/osd/sdl/sdlopts.h",
|
|
MAME_DIR .. "src/osd/sdl/sdlprefix.h",
|
|
MAME_DIR .. "src/osd/sdl/video.cpp",
|
|
MAME_DIR .. "src/osd/sdl/window.cpp",
|
|
MAME_DIR .. "src/osd/sdl/window.h",
|
|
}
|
|
|
|
|
|
project ("ocore_" .. _OPTIONS["osd"])
|
|
targetsubdir(_OPTIONS["target"] .."_" .. _OPTIONS["subtarget"])
|
|
uuid (os.uuid("ocore_" .. _OPTIONS["osd"]))
|
|
kind (LIBTYPE)
|
|
|
|
removeflags {
|
|
"SingleOutputDir",
|
|
}
|
|
|
|
dofile("sdl_cfg.lua")
|
|
|
|
includedirs {
|
|
MAME_DIR .. "src/emu",
|
|
MAME_DIR .. "src/osd",
|
|
MAME_DIR .. "src/lib",
|
|
MAME_DIR .. "src/lib/util",
|
|
MAME_DIR .. "src/osd/sdl",
|
|
}
|
|
|
|
files {
|
|
MAME_DIR .. "src/osd/osdcore.cpp",
|
|
MAME_DIR .. "src/osd/osdcore.h",
|
|
MAME_DIR .. "src/osd/osdfile.h",
|
|
MAME_DIR .. "src/osd/strconv.cpp",
|
|
MAME_DIR .. "src/osd/strconv.h",
|
|
MAME_DIR .. "src/osd/osdsync.cpp",
|
|
MAME_DIR .. "src/osd/osdsync.h",
|
|
MAME_DIR .. "src/osd/modules/osdmodule.cpp",
|
|
MAME_DIR .. "src/osd/modules/osdmodule.h",
|
|
MAME_DIR .. "src/osd/modules/lib/osdlib_" .. SDLOS_TARGETOS .. ".cpp",
|
|
MAME_DIR .. "src/osd/modules/lib/osdlib.h",
|
|
}
|
|
|
|
if BASE_TARGETOS=="unix" then
|
|
files {
|
|
MAME_DIR .. "src/osd/modules/file/posixdir.cpp",
|
|
MAME_DIR .. "src/osd/modules/file/posixfile.cpp",
|
|
MAME_DIR .. "src/osd/modules/file/posixfile.h",
|
|
MAME_DIR .. "src/osd/modules/file/posixptty.cpp",
|
|
MAME_DIR .. "src/osd/modules/file/posixsocket.cpp",
|
|
}
|
|
elseif BASE_TARGETOS=="win32" then
|
|
includedirs {
|
|
MAME_DIR .. "src/osd/windows",
|
|
}
|
|
files {
|
|
MAME_DIR .. "src/osd/modules/file/windir.cpp",
|
|
MAME_DIR .. "src/osd/modules/file/winfile.cpp",
|
|
MAME_DIR .. "src/osd/modules/file/winfile.h",
|
|
MAME_DIR .. "src/osd/modules/file/winptty.cpp",
|
|
MAME_DIR .. "src/osd/modules/file/winsocket.cpp",
|
|
MAME_DIR .. "src/osd/windows/winutil.cpp", -- FIXME put the necessary functions somewhere more appropriate?
|
|
MAME_DIR .. "src/osd/windows/winutil.h",
|
|
}
|
|
else
|
|
files {
|
|
MAME_DIR .. "src/osd/modules/file/stdfile.cpp",
|
|
}
|
|
end
|
|
|
|
|