Add support for building with Visual Studio 2019
authorSlawomir Cygan <slawomir.cygan@intel.com>
Tue, 9 Jul 2019 10:19:26 +0000 (12:19 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 16 Apr 2020 11:17:59 +0000 (07:17 -0400)
Components: Framework

Change-Id: I52c92750e9e2874b86fd7bceea0070ad609909c1
(cherry picked from commit cab8ce57b1400c6909a555973cb8393e1036e610)

scripts/build/config.py

index f05bc6b..11cda47 100644 (file)
@@ -69,10 +69,11 @@ class BuildConfig:
                return "cmake"
 
 class CMakeGenerator:
-       def __init__ (self, name, isMultiConfig = False, extraBuildArgs = []):
+       def __init__ (self, name, isMultiConfig = False, extraBuildArgs = [], platform = None):
                self.name                       = name
                self.isMultiConfig      = isMultiConfig
                self.extraBuildArgs     = copy.copy(extraBuildArgs)
+               self.platform           = platform
 
        def getName (self):
                return self.name
@@ -81,6 +82,10 @@ class CMakeGenerator:
                args = ['-G', self.name]
                if not self.isMultiConfig:
                        args.append('-DCMAKE_BUILD_TYPE=%s' % buildType)
+               if self.platform:
+                       # this is supported since CMake 3.1, needed for VS2019+
+                       args.append('-A')
+                       args.append(self.platform)
                return args
 
        def getBuildArgs (self, buildType):
@@ -121,10 +126,17 @@ class VSProjectGenerator(CMakeGenerator):
 
        def __init__(self, version, arch):
                name = "Visual Studio %d" % version
+
+               platform = None
+
                if arch == self.ARCH_64BIT:
-                       name += " Win64"
+                       if version >= 16:
+                               # From VS2019 onwards, the architecture is given by -A <platform-name> switch
+                               platform = "x64"
+                       else:
+                               name += " Win64"
 
-               CMakeGenerator.__init__(self, name, isMultiConfig = True, extraBuildArgs = ['/m'])
+               CMakeGenerator.__init__(self, name, isMultiConfig = True, extraBuildArgs = ['/m'], platform = platform)
                self.version            = version
                self.arch                       = arch
 
@@ -163,7 +175,8 @@ class VSProjectGenerator(CMakeGenerator):
                                11:             [(_winreg.HKEY_CLASSES_ROOT, "VisualStudio.DTE.11.0"), (_winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\VCExpress\\11.0")],
                                12:             [(_winreg.HKEY_CLASSES_ROOT, "VisualStudio.DTE.12.0"), (_winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\VCExpress\\12.0")],
                                14:             [(_winreg.HKEY_CLASSES_ROOT, "VisualStudio.DTE.14.0"), (_winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\VCExpress\\14.0")],
-                               15:             [(_winreg.HKEY_CLASSES_ROOT, "VisualStudio.DTE.15.0"), (_winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\VCExpress\\15.0")]
+                               15:             [(_winreg.HKEY_CLASSES_ROOT, "VisualStudio.DTE.15.0"), (_winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\VCExpress\\15.0")],
+                               16:             [(_winreg.HKEY_CLASSES_ROOT, "VisualStudio.DTE.16.0"), (_winreg.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\VCExpress\\16.0")]
                        }
 
                        if not self.version in keyMap:
@@ -192,6 +205,8 @@ VS2015_X32_GENERATOR        = VSProjectGenerator(14, VSProjectGenerator.ARCH_32BIT)
 VS2015_X64_GENERATOR   = VSProjectGenerator(14, VSProjectGenerator.ARCH_64BIT)
 VS2017_X32_GENERATOR   = VSProjectGenerator(15, VSProjectGenerator.ARCH_32BIT)
 VS2017_X64_GENERATOR   = VSProjectGenerator(15, VSProjectGenerator.ARCH_64BIT)
+VS2019_X32_GENERATOR   = VSProjectGenerator(16, VSProjectGenerator.ARCH_32BIT)
+VS2019_X64_GENERATOR   = VSProjectGenerator(16, VSProjectGenerator.ARCH_64BIT)
 
 def selectFirstAvailableGenerator (generators):
        for generator in generators:
@@ -200,6 +215,7 @@ def selectFirstAvailableGenerator (generators):
        return None
 
 ANY_VS_X32_GENERATOR   = selectFirstAvailableGenerator([
+                                                               VS2019_X32_GENERATOR,
                                                                VS2017_X32_GENERATOR,
                                                                VS2015_X32_GENERATOR,
                                                                VS2013_X32_GENERATOR,
@@ -207,6 +223,7 @@ ANY_VS_X32_GENERATOR        = selectFirstAvailableGenerator([
                                                                VS2010_X32_GENERATOR,
                                                        ])
 ANY_VS_X64_GENERATOR   = selectFirstAvailableGenerator([
+                                                               VS2019_X64_GENERATOR,
                                                                VS2017_X64_GENERATOR,
                                                                VS2015_X64_GENERATOR,
                                                                VS2013_X64_GENERATOR,
@@ -219,6 +236,8 @@ ANY_UNIX_GENERATOR          = selectFirstAvailableGenerator([
                                                                NMAKE_GENERATOR,
                                                        ])
 ANY_GENERATOR                  = selectFirstAvailableGenerator([
+                                                               VS2019_X64_GENERATOR,
+                                                               VS2019_X32_GENERATOR,
                                                                VS2017_X64_GENERATOR,
                                                                VS2017_X32_GENERATOR,
                                                                VS2015_X64_GENERATOR,