diff --git a/premake5.lua b/premake5.lua index 4660867f5..0ff17be1e 100644 --- a/premake5.lua +++ b/premake5.lua @@ -7,7 +7,7 @@ objdir(build_obj) -- Define an ARCH variable -- Only use this to enable architecture-specific functionality. -if os.is("linux") then +if os.istarget("linux") then ARCH = os.outputof("uname -p") else ARCH = "unknown" @@ -220,9 +220,9 @@ solution("xenia") uuid("931ef4b0-6170-4f7a-aaf2-0fece7632747") startproject("xenia-app") architecture("x86_64") - if os.is("linux") then + if os.istarget("linux") then platforms({"Linux"}) - elseif os.is("windows") then + elseif os.istarget("windows") then platforms({"Windows"}) end configurations({"Checked", "Debug", "Release"}) @@ -261,7 +261,7 @@ solution("xenia") include("src/xenia/ui/vulkan") include("src/xenia/vfs") - if os.is("windows") then + if os.istarget("windows") then include("src/xenia/apu/xaudio2") include("src/xenia/hid/winkey") include("src/xenia/hid/xinput") diff --git a/src/xenia/app/premake5.lua b/src/xenia/app/premake5.lua index f23b6c287..4275da7ba 100644 --- a/src/xenia/app/premake5.lua +++ b/src/xenia/app/premake5.lua @@ -39,9 +39,6 @@ project("xenia-app") "xenia-vfs", "xxhash", }) - flags({ - "WinMain", -- Use WinMain instead of main. - }) defines({ "XBYAK_NO_OP_NAMES", "XBYAK_ENABLE_OMITTED_OPERAND", diff --git a/src/xenia/gpu/vulkan/premake5.lua b/src/xenia/gpu/vulkan/premake5.lua index f8e9903fe..6a7b9200b 100644 --- a/src/xenia/gpu/vulkan/premake5.lua +++ b/src/xenia/gpu/vulkan/premake5.lua @@ -59,9 +59,6 @@ project("xenia-gpu-vulkan-trace-viewer") "xenia-vfs", "xxhash", }) - flags({ - "WinMain", -- Use WinMain instead of main. - }) defines({ }) includedirs({ diff --git a/src/xenia/hid/premake5.lua b/src/xenia/hid/premake5.lua index 1b374a4fb..ea7b6afbf 100644 --- a/src/xenia/hid/premake5.lua +++ b/src/xenia/hid/premake5.lua @@ -33,9 +33,6 @@ project("xenia-hid-demo") "xenia-ui", "xenia-ui-vulkan", }) - flags({ - "WinMain", -- Use WinMain instead of main. - }) defines({ "GLEW_STATIC=1", "GLEW_MX=1", diff --git a/src/xenia/ui/vulkan/premake5.lua b/src/xenia/ui/vulkan/premake5.lua index e9abb1c5c..8246ef249 100644 --- a/src/xenia/ui/vulkan/premake5.lua +++ b/src/xenia/ui/vulkan/premake5.lua @@ -37,9 +37,6 @@ project("xenia-ui-window-vulkan-demo") "xenia-ui-spirv", "xenia-ui-vulkan", }) - flags({ - "WinMain", -- Use WinMain instead of main. - }) defines({ }) includedirs({ diff --git a/src/xenia/vfs/premake5.lua b/src/xenia/vfs/premake5.lua index be71cef59..ea174e3e0 100644 --- a/src/xenia/vfs/premake5.lua +++ b/src/xenia/vfs/premake5.lua @@ -26,9 +26,6 @@ project("xenia-vfs-dump") "xenia-base", "xenia-vfs", }) - flags({ - -- "WinMain", -- Use WinMain instead of main. - }) defines({}) includedirs({ project_root.."/third_party/gflags/src", diff --git a/third_party/premake-core b/third_party/premake-core index 61d799c8f..8593bc948 160000 --- a/third_party/premake-core +++ b/third_party/premake-core @@ -1 +1 @@ -Subproject commit 61d799c8f9d1ab8130942b2d9dcd2819b9d8b049 +Subproject commit 8593bc9480924f0d0724a4533e8de70222e6a08d diff --git a/tools/build/bin/premake5.exe b/tools/build/bin/premake5.exe index bcf844443..ed8857680 100644 Binary files a/tools/build/bin/premake5.exe and b/tools/build/bin/premake5.exe differ diff --git a/tools/build/premake b/tools/build/premake index aa6ae27ad..fa56606d5 100644 --- a/tools/build/premake +++ b/tools/build/premake @@ -69,9 +69,8 @@ def build_premake(): elif sys.platform == 'win32': # Grab Visual Studio version and execute shell to set up environment. vs_version = import_vs_environment() - if vs_version != 2015: - print('ERROR: Visual Studio 2015 not found!') - print('Ensure you have the VS140COMNTOOLS environment variable!') + if vs_version is None: + print('ERROR: Visual Studio not found!') sys.exit(1) return @@ -143,17 +142,30 @@ def import_vs_environment(): A version such as 2015 or None if no VS is found. """ version = 0 + + candidate_path = subprocess.check_output('../../third_party/vswhere/vswhere.exe -all -version "[15,)" -latest -format value -property installationPath', shell=False, universal_newlines=True) + candidate_path = candidate_path.strip() + tools_path = '' - if 'VS140COMNTOOLS' in os.environ: + if candidate_path: + tools_path = os.path.join(candidate_path, 'vc\\auxiliary\\build\\vcvarsall.bat') + if os.path.isfile(tools_path) and os.access(tools_path, os.X_OK): + version = subprocess.check_output('third_party/vswhere/vswhere.exe -version "[15,)" -latest -format value -property catalog_productLineVersion', shell=False, universal_newlines=True) + version = version.strip() + if version: + version = int(version) + else: + version = 2017 + if version == 0 and 'VS140COMNTOOLS' in os.environ: version = 2015 tools_path = os.environ['VS140COMNTOOLS'] + tools_path = os.path.join(tools_path, '..\\..\\vc\\vcvarsall.bat') if version == 0: return None - tools_path = os.path.join(tools_path, '..\\..\\vc\\vcvarsall.bat') - args = [tools_path, '&&', 'set'] + args = [tools_path, 'x64', '&&', 'set'] popen = subprocess.Popen( - args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) variables, _ = popen.communicate() envvars_to_save = ( 'devenvdir', diff --git a/tools/build/premake5.lua b/tools/build/premake5.lua index 49575613f..6a66f5a2b 100644 --- a/tools/build/premake5.lua +++ b/tools/build/premake5.lua @@ -1,3 +1,5 @@ +require("vstudio") + include("scripts/build_paths.lua") include("scripts/force_compile_as_c.lua") include("scripts/force_compile_as_cc.lua") diff --git a/tools/build/scripts/build_paths.lua b/tools/build/scripts/build_paths.lua index 5fcceb061..e97bac0f4 100644 --- a/tools/build/scripts/build_paths.lua +++ b/tools/build/scripts/build_paths.lua @@ -7,7 +7,7 @@ build_tools = "tools/build" build_scripts = build_tools .. "/scripts" build_tools_src = build_tools .. "/src" -if os.is("windows") then +if os.istarget("windows") then platform_suffix = "win" else platform_suffix = "posix" diff --git a/tools/build/scripts/force_compile_as_c.lua b/tools/build/scripts/force_compile_as_c.lua index e26c3b7ec..30de988e9 100644 --- a/tools/build/scripts/force_compile_as_c.lua +++ b/tools/build/scripts/force_compile_as_c.lua @@ -21,7 +21,11 @@ if premake.override then -- for msvc premake.override(premake.vstudio.vc2010, "additionalCompileOptions", function(base, cfg, condition) if cfg.abspath and table.contains(forced_c_files, cfg.abspath) then - _p(3,'CompileAsC', condition) + if condition == nil or condition == '' then + _p(3,'CompileAsC') + else + _p(3,'CompileAsC', condition) + end end return base(cfg, condition) end) diff --git a/tools/build/scripts/force_compile_as_cc.lua b/tools/build/scripts/force_compile_as_cc.lua index 16c680476..c7a15cef0 100644 --- a/tools/build/scripts/force_compile_as_cc.lua +++ b/tools/build/scripts/force_compile_as_cc.lua @@ -21,7 +21,11 @@ if premake.override then -- for msvc premake.override(premake.vstudio.vc2010, "additionalCompileOptions", function(base, cfg, condition) if cfg.abspath and table.contains(forced_cc_files, cfg.abspath) then - _p(3,'CompileAsCpp', condition) + if condition == nil or condition == '' then + _p(3,'CompileAsCpp') + else + _p(3,'CompileAsCpp', condition) + end end return base(cfg, condition) end) diff --git a/xenia-build b/xenia-build index 6fd59ed4d..c863ccfb7 100755 --- a/xenia-build +++ b/xenia-build @@ -100,7 +100,12 @@ def import_vs_environment(): if candidate_path: tools_path = os.path.join(candidate_path, 'vc\\auxiliary\\build\\vcvarsall.bat') if os.path.isfile(tools_path) and os.access(tools_path, os.X_OK): - version = 2017 + version = subprocess.check_output('third_party/vswhere/vswhere.exe -version "[15,)" -latest -format value -property catalog_productLineVersion', shell=False, universal_newlines=True) + version = version.strip() + if version: + version = int(version) + else: + version = 2017 if version == 0 and 'VS140COMNTOOLS' in os.environ: version = 2015 tools_path = os.environ['VS140COMNTOOLS'] @@ -317,16 +322,19 @@ def run_premake(target_os, action, cc=None): target_os: target --os to pass to premake. action: action to preform. """ - ret = subprocess.call([ + args = [ sys.executable, os.path.join('tools', 'build', 'premake'), '--file=premake5.lua', '--os=%s' % target_os, - '--cc=%s' % ('clang' if not cc else cc), '--test-suite-mode=combined', '--verbose', action, - ], shell=False) + ] + if cc: + args.insert(4, '--cc=%s' % cc) + + ret = subprocess.call(args, shell=False) if ret == 0: generate_version_h()