From ec318488307becbe97b16be593e2228f8ae5e21f Mon Sep 17 00:00:00 2001 From: Nikita Kniazev Date: Fri, 11 Sep 2020 22:14:12 +0300 Subject: [PATCH] Default MSVC to a native platform (#596) This also removes ambiguous implicit address-model ARM/ARM64 values. --- src/tools/msvc.jam | 54 +++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/src/tools/msvc.jam b/src/tools/msvc.jam index bf07a93f9..3b8ef0672 100644 --- a/src/tools/msvc.jam +++ b/src/tools/msvc.jam @@ -1998,27 +1998,47 @@ if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ] .versions = [ new configurations ] ; # Supported CPU architectures. -.cpu-arch-i386 = - / - /32 - x86/ - x86/32 ; +.cpu-arch-info-i386 = x86 32 ; +.cpu-arch-info-amd64 = x86 64 ; +.cpu-arch-info-ia64 = ia64 64 ; +.cpu-arch-info-arm = arm 32 ; +.cpu-arch-info-arm64 = arm 64 ; -.cpu-arch-amd64 = - /64 - x86/64 ; +# Fill explicit architecture and address model values +for local cpu in [ MATCH "^\\.cpu-arch-info-(.*)" : [ VARNAMES $(__name__) ] ] +{ + local arch = $(.cpu-arch-info-$(cpu)[1]) ; + .cpus-on-$(arch) += $(cpu) ; + .cpu-arch-$(cpu) = $(arch)/$(.cpu-arch-info-$(cpu)[2]) ; +} -.cpu-arch-ia64 = - ia64/ - ia64/64 ; +# Match implicit architecture and address model based on the current platform +.default-cpu-arch = [ os.environ PROCESSOR_ARCHITEW6432 ] ; +.default-cpu-arch ?= [ os.environ PROCESSOR_ARCHITECTURE ] ; +.default-cpu-arch = $(.default-cpu-arch:L) ; +switch $(.default-cpu-arch) +{ + case x86 : .default-cpu-arch = i386 ; + case em64t : .default-cpu-arch = amd64 ; +} -.cpu-arch-arm = - arm/ - arm/32 ; +for local cpu in $(.cpus-on-$(.cpu-arch-info-$(.default-cpu-arch)[1])) +{ + .cpu-arch-$(cpu) += /$(.cpu-arch-info-$(cpu)[2]) ; +} + +.cpu-arch-$(.default-cpu-arch) += $(.cpu-arch-info-$(.default-cpu-arch)[1])/ ; +.cpu-arch-$(.default-cpu-arch) += / ; + +# If there is only one address model for an architecture we allow to ommit it +for local arch in [ MATCH "^\\.cpus-on-(.*)" : [ VARNAMES $(__name__) ] ] +{ + if ! $(.cpus-on-$(arch)[2-]) && $(.cpus-on-$(arch)[1]) != $(.default-cpu-arch) + { + .cpu-arch-$(.cpus-on-$(arch)) += $(arch)/ ; + } +} -.cpu-arch-arm64 = - arm/ - arm/64 ; # Supported CPU types (only Itanium optimization options are supported from # VC++ 2005 on). See