diff --git a/Jamroot b/Jamroot index 982a8004c35..6c1700e1a0f 100644 --- a/Jamroot +++ b/Jamroot @@ -172,8 +172,7 @@ if $(all-headers) project boost : requirements . - [ boostcpp.architecture ] - [ boostcpp.address-model ] + [ boostcpp.platform ] # Disable auto-linking for all targets here, primarily because it caused # troubles with V2. diff --git a/boostcpp.jam b/boostcpp.jam index a46e21caaab..be3578dca92 100644 --- a/boostcpp.jam +++ b/boostcpp.jam @@ -606,32 +606,38 @@ rule toolset-properties ( properties * ) return [ property.select $(toolset-version-property) : $(properties) ] ; } -rule deduce-address-model ( properties * ) +.deducible-architectures = arm loongarch mips power riscv s390x sparc x86 combined ; +feature.feature x-deduced-platform + : $(.deducible-architectures)_32 $(.deducible-architectures)_64 + : composite implicit optional propagated ; +for a in $(.deducible-architectures) { - local deduced ; + feature.compose $(a)_32 : $(a) 32 ; + feature.compose $(a)_64 : $(a) 64 ; +} + +rule deduce-platform ( properties * ) +{ + local deduced-pl = [ property.select : $(properties) ] ; + if $(deduced-pl) + { + return $(deduced-pl) ; + } + local filtered = [ toolset-properties $(properties) ] ; + local names = 32 64 ; local idx = [ configure.find-builds "default address-model" : $(filtered) : /boost/architecture//32 "32-bit" : /boost/architecture//64 "64-bit" ] ; - deduced = $(names[$(idx)]) ; - - local result = [ property.select : $(properties) ] ; - result ?= $(deduced) ; - return $(result) ; -} - -rule address-model ( ) -{ - return @boostcpp.deduce-address-model ; -} + local deduced-am = $(names[$(idx)]) ; + if ! $(deduced-am) + { + return ; + } -rule deduce-architecture ( properties * ) -{ - local deduced ; - local filtered = [ toolset-properties $(properties) ] ; - local names = arm loongarch mips power riscv s390x sparc x86 combined ; - local idx = [ configure.find-builds "default architecture" : $(filtered) + names = $(.deducible-architectures) ; + idx = [ configure.find-builds "default architecture" : $(filtered) : /boost/architecture//arm : /boost/architecture//loongarch : /boost/architecture//mips @@ -641,14 +647,29 @@ rule deduce-architecture ( properties * ) : /boost/architecture//sparc : /boost/architecture//x86 : /boost/architecture//combined ] ; - deduced = $(names[$(idx)]) ; + local deduced-arch = $(names[$(idx)]) ; + if ! $(deduced-arch) + { + return ; + } - local result = [ property.select : $(properties) ] ; - result ?= $(deduced) ; - return $(result) ; + local requested-am = [ property.select : $(properties) ] ; + requested-am ?= $(deduced-am) ; + + local requested-arch = [ property.select : $(properties) ] ; + requested-arch ?= $(deduced-arch) ; + + deduced-pl = $(requested-arch:G=)_$(requested-am:G=) ; + + if ! $(deduced-pl:G=) in [ feature.values ] + { + deduced-pl = ; + } + return $(deduced-pl) ; } -rule architecture ( ) + +rule platform ( ) { - return @boostcpp.deduce-architecture ; + return @boostcpp.deduce-platform ; }