Merge remote-tracking branch 'origin/master' into d3d12

This commit is contained in:
gibbed 2019-04-20 02:40:46 -05:00
commit c965751911
12 changed files with 108 additions and 153 deletions

View File

@ -51,7 +51,7 @@ project("xenia-app")
files({
"xenia_main.cc",
"../base/main_"..platform_suffix..".cc",
"../base/main_entrypoint_"..platform_suffix..".cc",
"../base/main_init_"..platform_suffix..".cc",
})
resincludedirs({
@ -63,8 +63,8 @@ project("xenia-app")
"main_resources.rc",
})
filter("files:../base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
filter("files:../base/main_init_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX for main_init_win.cc so our AVX check doesn't use AVX instructions.
filter("platforms:Linux")
links({

View File

@ -1,38 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2014 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/base/main.h"
#include <gflags/gflags.h>
#include "xenia/base/logging.h"
#include "xenia/base/string.h"
extern "C" int main(int argc, char** argv) {
auto entry_info = xe::GetEntryInfo();
google::SetUsageMessage(std::string("usage: ") +
xe::to_string(entry_info.usage));
google::SetVersionString("1.0");
google::ParseCommandLineFlags(&argc, &argv, true);
std::vector<std::wstring> args;
for (int n = 0; n < argc; n++) {
args.push_back(xe::to_wstring(argv[n]));
}
// Initialize logging. Needs parsed FLAGS.
xe::InitializeLogging(entry_info.name);
// Call app-provided entry point.
int result = entry_info.entry_point(args);
google::ShutDownCommandLineFlags();
return result;
}

View File

@ -1,79 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2014 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/base/main.h"
#include <fcntl.h>
#include <gflags/gflags.h>
#include <io.h>
#include <cstdlib>
// Autogenerated by `xb premake`.
#include "build/version.h"
#include "xenia/base/platform_win.h"
#include "xenia/base/string.h"
#include "third_party/xbyak/xbyak/xbyak_util.h"
namespace xe {
void AttachConsole();
int Main();
}; // namespace xe
// Used in console mode apps; automatically picked based on subsystem.
int main(int, char**) {
Xbyak::util::Cpu cpu;
if (!cpu.has(Xbyak::util::Cpu::tAVX)) {
printf(
"Your CPU does not support AVX, which is required by Xenia.\r\nSee the "
"FAQ for system requirements at https://xenia.jp\r\n");
return -1;
}
return xe::Main();
}
// Used in windowed apps; automatically picked based on subsystem.
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int) {
Xbyak::util::Cpu cpu;
if (!cpu.has(Xbyak::util::Cpu::tAVX)) {
MessageBoxA(
NULL,
"Your CPU does not support AVX, which is required by Xenia. See the "
"FAQ for system requirements at https://xenia.jp",
"Xenia Error", MB_OK | MB_ICONERROR | MB_APPLMODAL | MB_SETFOREGROUND);
return -1;
}
// Attach a console so we can write output to stdout. If the user hasn't
// redirected output themselves it'll pop up a window.
xe::AttachConsole();
// Run normal entry point.
return xe::Main();
}
#if defined _M_IX86
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#elif defined _M_IA64
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#elif defined _M_X64
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#else
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#endif

View File

@ -0,0 +1,40 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2014 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/base/main.h"
#include <cstdlib>
#include "third_party/xbyak/xbyak/xbyak_util.h"
class StartupAvxCheck {
public:
StartupAvxCheck() {
Xbyak::util::Cpu cpu;
if (cpu.has(Xbyak::util::Cpu::tAVX)) {
return;
}
// TODO(gibbed): detect app type and printf instead, if needed?
MessageBoxA(
nullptr,
"Your CPU does not support AVX, which is required by Xenia. See the "
"FAQ for system requirements at https://xenia.jp",
"Xenia Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
ExitProcess(static_cast<uint32_t>(-1));
}
};
// This is a hack to get an instance of StartupAvxCheck
// constructed before any initialization code,
// where the AVX check then happens in the constructor.
//
// https://docs.microsoft.com/en-us/cpp/preprocessor/init-seg
#pragma warning(suppress : 4073)
#pragma init_seg(lib)
static StartupAvxCheck gStartupAvxCheck;

View File

@ -19,3 +19,26 @@ namespace xe {
bool has_console_attached() { return true; }
} // namespace xe
extern "C" int main(int argc, char** argv) {
auto entry_info = xe::GetEntryInfo();
google::SetUsageMessage(std::string("usage: ") +
xe::to_string(entry_info.usage));
google::SetVersionString("1.0");
google::ParseCommandLineFlags(&argc, &argv, true);
std::vector<std::wstring> args;
for (int n = 0; n < argc; n++) {
args.push_back(xe::to_wstring(argv[n]));
}
// Initialize logging. Needs parsed FLAGS.
xe::InitializeLogging(entry_info.name);
// Call app-provided entry point.
int result = entry_info.entry_point(args);
google::ShutDownCommandLineFlags();
return result;
}

View File

@ -130,6 +130,14 @@ int Main() {
// Initialize logging. Needs parsed FLAGS.
xe::InitializeLogging(entry_info.name);
Xbyak::util::Cpu cpu;
if (!cpu.has(Xbyak::util::Cpu::tAVX)) {
xe::FatalError(
"Your CPU does not support AVX, which is required by Xenia. See the "
"FAQ for system requirements at https://xenia.jp");
return -1;
}
// Print version info.
XELOGI("Build: %s / %s on %s", XE_BUILD_BRANCH, XE_BUILD_COMMIT,
XE_BUILD_DATE);
@ -149,3 +157,34 @@ int Main() {
}
} // namespace xe
// Used in console mode apps; automatically picked based on subsystem.
int main(int argc_ignored, char** argv_ignored) { return xe::Main(); }
// Used in windowed apps; automatically picked based on subsystem.
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR command_line, int) {
// Attach a console so we can write output to stdout. If the user hasn't
// redirected output themselves it'll pop up a window.
xe::AttachConsole();
// Run normal entry point.
return xe::Main();
}
#if defined _M_IX86
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#elif defined _M_IA64
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#elif defined _M_X64
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#else
#pragma comment( \
linker, \
"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") // NOLINT(whitespace/line_length)
#endif

View File

@ -18,7 +18,6 @@ project("xenia-cpu-ppc-tests")
files({
"ppc_testing_main.cc",
"../../../base/main_"..platform_suffix..".cc",
"../../../base/main_entrypoint_"..platform_suffix..".cc",
})
files({
"*.s",
@ -26,11 +25,8 @@ project("xenia-cpu-ppc-tests")
includedirs({
project_root.."/third_party/gflags/src",
})
filter("files:*.s")
flags({"ExcludeFromBuild"})
filter("files:../../../base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
filter("platforms:Windows")
debugdir(project_root)
debugargs({
@ -55,12 +51,14 @@ project("xenia-cpu-ppc-nativetests")
files({
"ppc_testing_native_main.cc",
"../../../base/main_"..platform_suffix..".cc",
"../../../base/main_entrypoint_"..platform_suffix..".cc",
})
files({
"instr_*.s",
"seq_*.s",
})
filter("files:instr_*.s", "files:seq_*.s")
flags({"ExcludeFromBuild"})
filter({})
includedirs({
project_root.."/third_party/gflags/src",
})
@ -72,9 +70,4 @@ project("xenia-cpu-ppc-nativetests")
"ppc_testing_native_thunks.s",
})
filter("files:instr_*.s", "files:seq_*.s")
flags({"ExcludeFromBuild"})
filter("files:../../../base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
end

View File

@ -48,12 +48,8 @@ project("xenia-gpu-shader-compiler")
files({
"shader_compiler_main.cc",
"../base/main_"..platform_suffix..".cc",
"../base/main_entrypoint_"..platform_suffix..".cc",
})
filter("files:../base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
filter("platforms:Windows")
-- Only create the .user file if it doesn't already exist.
local user_file = project_root.."/build/xenia-gpu-shader-compiler.vcxproj.user"

View File

@ -68,12 +68,8 @@ project("xenia-gpu-vulkan-trace-viewer")
files({
"vulkan_trace_viewer_main.cc",
"../../base/main_"..platform_suffix..".cc",
"../../base/main_entrypoint_"..platform_suffix..".cc",
})
filter("files:../../base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
filter("platforms:Linux")
links({
"X11",
@ -143,12 +139,8 @@ project("xenia-gpu-vulkan-trace-dump")
files({
"vulkan_trace_dump_main.cc",
"../../base/main_"..platform_suffix..".cc",
"../../base/main_entrypoint_"..platform_suffix..".cc",
})
filter("files:../../base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
filter("platforms:Linux")
links({
"X11",

View File

@ -43,15 +43,11 @@ project("xenia-hid-demo")
files({
"hid_demo.cc",
"../base/main_"..platform_suffix..".cc",
"../base/main_entrypoint_"..platform_suffix..".cc",
})
resincludedirs({
project_root,
})
filter("files:../base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
filter("platforms:Linux")
links({
"X11",

View File

@ -47,15 +47,11 @@ project("xenia-ui-window-vulkan-demo")
"../window_demo.cc",
"vulkan_window_demo.cc",
project_root.."/src/xenia/base/main_"..platform_suffix..".cc",
project_root.."/src/xenia/base/main_entrypoint_"..platform_suffix..".cc",
})
resincludedirs({
project_root,
})
filter("files:"..project_root.."/src/xenia/base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.
filter("platforms:Linux")
links({
"X11",

View File

@ -34,11 +34,8 @@ project("xenia-vfs-dump")
files({
"vfs_dump.cc",
project_root.."/src/xenia/base/main_"..platform_suffix..".cc",
project_root.."/src/xenia/base/main_entrypoint_"..platform_suffix..".cc",
})
resincludedirs({
project_root,
})
filter("files:"..project_root.."/src/xenia/base/main_entrypoint_"..platform_suffix..".cc")
vectorextensions("IA32") -- Disable AVX so our AVX check/error can happen.