msvc compatibility
diff --git a/build/ninja/msvc.py b/build/ninja/msvc.py
index 8526132..9f9d13a 100644
--- a/build/ninja/msvc.py
+++ b/build/ninja/msvc.py
@@ -31,8 +31,8 @@
self.linkcmd = '$toolchain$link $libpaths $configlibpaths $linkflags $linkarchflags $linkconfigflags /DEBUG /NOLOGO /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MANIFEST /MANIFESTUAC:\"level=\'asInvoker\' uiAccess=\'false\'\" /TLBID:1 /PDB:$pdbpath /OUT:$out $in $libs $archlibs $oslibs'
self.dllcmd = self.linkcmd + ' /DLL'
- self.cflags = ['/D', '"' + project.upper() + '_COMPILE=1"', '/D', '"_UNICODE"', '/D', '"UNICODE"', '/Zi', '/Oi', '/Oy-', '/GS-', '/Gy-', '/Qpar-', '/fp:fast', '/fp:except-', '/Zc:forScope', '/Zc:wchar_t', '/GR-', '/openmp-']
- self.cwarnflags = ['/W4', '/WX']
+ self.cflags = ['/D', '"' + project.upper() + '_COMPILE=1"', '/D', '"_UNICODE"', '/D', '"UNICODE"', '/std:c17', '/Zi', '/Oi', '/Oy-', '/GS-', '/Gy-', '/Qpar-', '/fp:fast', '/fp:except-', '/Zc:forScope', '/Zc:wchar_t', '/GR-', '/openmp-']
+ self.cwarnflags = ['/W4', '/WX', '/wd4201'] #Ignore nameless union/struct which is allowed in C11
self.cmoreflags = []
self.arflags = ['/ignore:4221'] #Ignore empty object file warning]
self.linkflags = ['/DEBUG']
@@ -138,10 +138,11 @@
tools_list.sort(key=StrictVersion)
self.toolchain = os.path.join(tools_basepath, tools_list[-1])
self.toolchain_version = major_version + ".0"
+ break
if self.toolchain == '':
toolchain = ''
- versions = ['16.0', '15.0', '14.0', '13.0', '12.0', '11.0', '10.0']
+ versions = ['17.0', '16.0', '15.0']
keys = [
'HKLM\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7',
'HKCU\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7',
@@ -161,12 +162,11 @@
except:
continue
if not toolchain == '':
- if version == '15.0' or version == '16.0':
- tools_basepath = os.path.join(toolchain, 'VC', 'Tools', 'MSVC')
- tools_list = [item for item in os.listdir(tools_basepath) if os.path.isdir(os.path.join(tools_basepath, item))]
- from distutils.version import StrictVersion
- tools_list.sort(key=StrictVersion)
- toolchain = os.path.join(tools_basepath, tools_list[-1])
+ tools_basepath = os.path.join(toolchain, 'VC', 'Tools', 'MSVC')
+ tools_list = [item for item in os.listdir(tools_basepath) if os.path.isdir(os.path.join(tools_basepath, item))]
+ from distutils.version import StrictVersion
+ tools_list.sort(key=StrictVersion)
+ toolchain = os.path.join(tools_basepath, tools_list[-1])
self.toolchain = toolchain
self.toolchain_version = version
break
@@ -239,13 +239,10 @@
return []
def make_arch_toolchain_path(self, arch):
- if self.toolchain_version == '15.0' or self.toolchain_version == '16.0':
- if arch == 'x86-64':
- return os.path.join(self.toolchain, 'bin', 'HostX64', 'x64\\')
- elif arch == 'x86':
- return os.path.join(self.toolchain, 'bin', 'HostX64', 'x86\\')
if arch == 'x86-64':
- return os.path.join(self.toolchain, 'bin', 'amd64\\')
+ return os.path.join(self.toolchain, 'bin', 'HostX64', 'x64\\')
+ elif arch == 'x86':
+ return os.path.join(self.toolchain, 'bin', 'HostX64', 'x86\\')
return os.path.join(self.toolchain, 'bin\\')
def make_carchflags(self, arch, targettype):
@@ -323,20 +320,14 @@
libpaths += [os.path.join(libpath, self.libpath, config, arch) for libpath in extralibpaths]
if self.sdkpath != '':
if arch == 'x86':
- if self.toolchain_version == '15.0' or self.toolchain_version == '16.0':
- libpaths += [os.path.join(self.toolchain, 'lib', 'x86')]
- else:
- libpaths += [os.path.join(self.toolchain, 'lib')]
+ libpaths += [os.path.join(self.toolchain, 'lib', 'x86')]
if self.sdkversion == 'v8.1':
libpaths += [os.path.join( self.sdkpath, 'lib', 'winv6.3', 'um', 'x86')]
if self.sdkversion == 'v10.0':
libpaths += [os.path.join(self.sdkpath, 'lib', self.sdkversionpath, 'um', 'x86')]
libpaths += [os.path.join(self.sdkpath, 'lib', self.sdkversionpath, 'ucrt', 'x86')]
else:
- if self.toolchain_version == '15.0' or self.toolchain_version == '16.0':
- libpaths += [os.path.join( self.toolchain, 'lib', 'x64')]
- else:
- libpaths += [os.path.join( self.toolchain, 'lib', 'amd64')]
+ libpaths += [os.path.join( self.toolchain, 'lib', 'x64')]
if self.sdkversion == 'v8.1':
libpaths += [os.path.join( self.sdkpath, 'lib', 'winv6.3', 'um', 'x64')]
if self.sdkversion == 'v10.0':
diff --git a/build/ninja/version.py b/build/ninja/version.py
index 1bf086a..78be895 100644
--- a/build/ninja/version.py
+++ b/build/ninja/version.py
@@ -15,7 +15,7 @@
if sys.platform.startswith('win'):
gitcmd = 'git.exe'
try:
- git_version = subprocess.check_output( [ gitcmd, 'describe', '--long' ], stderr = subprocess.STDOUT ).strip()
+ git_version = subprocess.check_output( [ gitcmd, 'describe', '--tags', '--long' ], stderr = subprocess.STDOUT ).strip()
tokens = git_version.decode().split( '-' )
version_numbers = tokens[0].split( '.' )
except Exception:
diff --git a/build/ninja/vslocate.py b/build/ninja/vslocate.py
index d3c7016..afa171a 100644
--- a/build/ninja/vslocate.py
+++ b/build/ninja/vslocate.py
@@ -115,7 +115,7 @@
enum_setup_instances = ctypes.POINTER(IEnumSetupInstances)()
result = enum_instances(configuration, ctypes.byref(enum_setup_instances))
if result != 0:
- #print("Failed to enum setup instances: " + str(result))
+ #print("Failed to enum setup instances: " + str(result))
return installations
diff --git a/rpmalloc/rpmalloc.c b/rpmalloc/rpmalloc.c
index aa3b3e6..f061cb4 100644
--- a/rpmalloc/rpmalloc.c
+++ b/rpmalloc/rpmalloc.c
@@ -110,6 +110,7 @@
/// Platform and arch specifics
#if defined(_MSC_VER) && !defined(__clang__)
+# pragma warning (disable: 5105)
# ifndef FORCEINLINE
# define FORCEINLINE inline __forceinline
# endif
diff --git a/test/main.c b/test/main.c
index 46b1612..a01e09c 100644
--- a/test/main.c
+++ b/test/main.c
@@ -2,6 +2,11 @@
#if defined(_WIN32) && !defined(_CRT_SECURE_NO_WARNINGS)
# define _CRT_SECURE_NO_WARNINGS
#endif
+#ifdef _MSC_VER
+# if !defined(__clang__)
+# pragma warning (disable: 5105)
+# endif
+#endif
#if defined(__clang__)
#pragma clang diagnostic ignored "-Wnonportable-system-include-path"
#endif
diff --git a/test/thread.c b/test/thread.c
index ff4758b..9d047e9 100644
--- a/test/thread.c
+++ b/test/thread.c
@@ -3,6 +3,9 @@
#include <errno.h>
#ifdef _MSC_VER
+# if !defined(__clang__)
+# pragma warning (disable: 5105)
+# endif
# define ATTRIBUTE_NORETURN
#else
# define ATTRIBUTE_NORETURN __attribute__((noreturn))