Skip to content

Commit

Permalink
force PlatformToolset from msbuild command line
Browse files Browse the repository at this point in the history
  • Loading branch information
SpaceIm committed Jan 1, 2023
1 parent 2976776 commit f6da520
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 34 deletions.
5 changes: 5 additions & 0 deletions conan/tools/microsoft/msbuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from conan.tools.microsoft.msbuilddeps import MSBuildDeps
from conan.tools.microsoft.toolchain import MSBuildToolchain
from conan.tools.microsoft.visual import msvs_toolset
from conans.errors import ConanException


Expand Down Expand Up @@ -31,6 +32,7 @@ def __init__(self, conanfile):
if conanfile.settings.get_safe("os") == "WindowsCE":
msvc_arch = conanfile.settings.get_safe("os.platform")
self.platform = msvc_arch
self.toolset = msvs_toolset(conanfile)

def command(self, sln, targets=None):
cmd = ('msbuild "%s" /p:Configuration=%s /p:Platform=%s'
Expand All @@ -50,6 +52,9 @@ def command(self, sln, targets=None):
raise ConanException("targets argument should be a list")
cmd += " /target:{}".format(";".join(targets))

if self.toolset:
cmd += f" /p:PlatformToolset=\"{self.toolset}\""

props_paths = []
for props_file in (MSBuildToolchain.filename, MSBuildDeps.filename):
props_path = os.path.join(self._conanfile.generators_folder, props_file)
Expand Down
35 changes: 2 additions & 33 deletions conan/tools/microsoft/toolchain.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from conan.tools._check_build_profile import check_using_build_profile
from conan.tools.build import build_jobs
from conan.tools.intel.intel_cc import IntelCC
from conan.tools.microsoft.visual import VCVars, msvc_version_to_toolset_version
from conan.tools.microsoft.visual import msvs_toolset, VCVars
from conans.errors import ConanException
from conans.util.files import save, load

Expand Down Expand Up @@ -54,7 +54,7 @@ def __init__(self, conanfile):
self.configuration = conanfile.settings.build_type
self.runtime_library = self._runtime_library(conanfile.settings)
self.cppstd = conanfile.settings.get_safe("compiler.cppstd")
self.toolset = self._msvs_toolset(conanfile)
self.toolset = msvs_toolset(conanfile)
self.properties = {}
check_using_build_profile(self._conanfile)

Expand Down Expand Up @@ -82,37 +82,6 @@ def generate(self):
else:
VCVars(self._conanfile).generate()

@staticmethod
def _msvs_toolset(conanfile):
settings = conanfile.settings
compiler = settings.get_safe("compiler")
compiler_version = settings.get_safe("compiler.version")
if compiler == "msvc":
subs_toolset = settings.get_safe("compiler.toolset")
if subs_toolset:
return subs_toolset
return msvc_version_to_toolset_version(compiler_version)
if compiler == "intel":
compiler_version = compiler_version if "." in compiler_version else \
"%s.0" % compiler_version
return "Intel C++ Compiler " + compiler_version
if compiler == "intel-cc":
return IntelCC(conanfile).ms_toolset
if compiler == "Visual Studio":
toolset = settings.get_safe("compiler.toolset")
if not toolset:
toolsets = {"17": "v143",
"16": "v142",
"15": "v141",
"14": "v140",
"12": "v120",
"11": "v110",
"10": "v100",
"9": "v90",
"8": "v80"}
toolset = toolsets.get(compiler_version)
return toolset or ""

@staticmethod
def _runtime_library(settings):
compiler = settings.compiler
Expand Down
32 changes: 32 additions & 0 deletions conan/tools/microsoft/visual.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os
import textwrap

from conan.tools.intel.intel_cc import IntelCC
from conans.client.tools import vs_installation_path
from conans.client.tools.version import Version
from conans.errors import ConanException, ConanInvalidConfiguration
Expand Down Expand Up @@ -268,3 +269,34 @@ def is_msvc_static_runtime(conanfile):
:return: True, if msvc + runtime MT. Otherwise, False
"""
return is_msvc(conanfile) and "MT" in msvc_runtime_flag(conanfile)


def msvs_toolset(conanfile):
settings = conanfile.settings
compiler = settings.get_safe("compiler")
compiler_version = settings.get_safe("compiler.version")
if compiler == "msvc":
subs_toolset = settings.get_safe("compiler.toolset")
if subs_toolset:
return subs_toolset
return msvc_version_to_toolset_version(compiler_version)
if compiler == "intel":
compiler_version = compiler_version if "." in compiler_version else \
"%s.0" % compiler_version
return "Intel C++ Compiler " + compiler_version
if compiler == "intel-cc":
return IntelCC(conanfile).ms_toolset
if compiler == "Visual Studio":
toolset = settings.get_safe("compiler.toolset")
if not toolset:
toolsets = {"17": "v143",
"16": "v142",
"15": "v141",
"14": "v140",
"12": "v120",
"11": "v110",
"10": "v100",
"9": "v90",
"8": "v80"}
toolset = toolsets.get(compiler_version)
return toolset or ""
3 changes: 2 additions & 1 deletion conans/test/functional/toolchains/microsoft/test_msbuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -581,7 +581,8 @@ def test_toolchain_win_multi(self):
])
cmd = ('set "VSCMD_START_DIR=%%CD%%" && '
f'"{vcvars_path}" x64 && msbuild "MyProject.sln" /p:Configuration={configuration} '
f'/p:Platform={platform_arch} /p:ForceImportBeforeCppTargets="{props_paths}"')
f'/p:Platform={platform_arch} /p:PlatformToolset={self.toolset} '
f'/p:ForceImportBeforeCppTargets="{props_paths}"')
client.run_command(cmd)
self.assertIn("Visual Studio {ide_year}".format(ide_year=self.ide_year), client.out)
self.assertIn("[vcvarsall.bat] Environment initialized for: 'x64'", client.out)
Expand Down

0 comments on commit f6da520

Please sign in to comment.