2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-14 12:42:11 +00:00

Adding a new feature to help support building for the Windows Runtime (Windows store/phone).

1. Adds a new feature <windows-api> for specifying the WINAPI_FAMILY API set to target. Defaults to desktop, which is how builds before my changes.
2. A few small changes for adding ARM support.
3. Changes to call to correct vcvars setup script for Windows Phone 8.
This commit is contained in:
Steve Gates
2014-05-27 16:59:59 -07:00
parent 59fd3b651e
commit f3896eb774

View File

@@ -5,6 +5,7 @@
# Copyright (c) 2006 Ilya Sokolov
# Copyright (c) 2007 Rene Rivera
# Copyright (c) 2008 Jurko Gospodnetic
# Copyright (c) 2014 Microsoft Corporation
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
@@ -268,9 +269,27 @@ rule configure-version-specific ( toolset : version : conditions )
# dependencies to put there.
toolset.flags $(toolset).link LINKFLAGS $(conditions) : /MANIFEST ;
}
# Starting with Visual Studio 2013 the CRT is split into a desktop and app dll.
#If targeting WinRT and 12.0 set lib path to link against app CRT.
if [ MATCH "(12)" : $(version) ]
{
local VCPath = [ path.parent [ path.make [ default-path $(version) ] ] ] ;
local storeLibPath = [ path.join [ path.join $(VCPath) "lib" ] "store" ] ;
toolset.flags $(toolset).link LINKPATH $(conditions)/<windows-api>store/$(.cpu-arch-i386) : [ path.native $(storeLibPath) ] ;
toolset.flags $(toolset).link LINKPATH $(conditions)/<windows-api>store/$(.cpu-arch-amd64) : [ path.native [ path.join $(storeLibPath) "amd64" ] ] ;
toolset.flags $(toolset).link LINKPATH $(conditions)/<windows-api>store/$(.cpu-arch-arm) : [ path.native [ path.join $(storeLibPath) "arm" ] ] ;
}
toolset.pop-checking-for-flags-module ;
}
# Feature for handling targeting different Windows API sets.
feature.feature windows-api : desktop store phone : propagated composite link-incompatible ;
feature.compose <windows-api>store : <define>WINAPI_FAMILY=WINAPI_FAMILY_APP <define>_WIN32_WINNT=0x0602 <linkflags>/APPCONTAINER <testing.execute>off ;
feature.compose <windows-api>phone : <define>WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP <define>_WIN32_WINNT=0x0602 <linkflags>/APPCONTAINER <testing.execute>off ;
feature.set-default windows-api : desktop ;
# Registers this toolset including all of its flags, features & generators. Does
# nothing on repeated calls.
@@ -677,6 +696,52 @@ local rule auto-detect-toolset-versions ( )
}
# Local helper rule to create the vcvars setup command for given architecture
# and options.
#
local rule generate-setup-cmd ( command : parent : options * : cpu : global-setup : default-global-setup-options : default-setup )
{
local setup-prefix = "call " ;
local setup-suffix = " >nul"$(.nl) ;
if ! [ os.name ] in NT
{
setup-prefix = "cmd.exe /S /C call " ;
setup-suffix = " \">nul\" \"&&\" " ;
}
local setup-options ;
local setup = [ feature.get-values <setup-$(cpu)> : $(options) ] ;
if $(setup) = ""
{
if $(global-setup) != ""
{
setup = $(global-setup) ;
# If needed we can easily add using configuration flags
# here for overriding which options get passed to the
# global setup command for which target platform:
# setup-options = [ feature.get-values <setup-options-$(c)> : $(options) ] ;
setup-options ?= $(default-global-setup-options) ;
}
else
{
setup = [ locate-default-setup $(command) : $(parent) : $(default-setup) ] ;
}
}
# Cygwin to Windows path translation.
setup = "\""$(setup:W)"\"" ;
# Append setup options to the setup name and add the final setup
# prefix & suffix.
setup-options ?= "" ;
setup = $(setup-prefix)$(setup:J=" ")" "$(setup-options:J=" ")$(setup-suffix) ;
return $(setup) ;
}
# Worker rule for toolset version configuration. Takes an explicit version id or
# nothing in case it should configure the default toolset version (the first
# registered one or a new 'default' one in case no toolset versions have been
@@ -791,13 +856,21 @@ local rule configure-really ( version ? : options * )
# Generate and register setup command.
local below-8.0 = [ MATCH ^([67]\\.) : $(version) ] ;
if $(version) < 11
{
local below-11.0 = true ;
}
local cpu = i386 amd64 ia64 arm ;
if $(below-8.0)
{
cpu = i386 ;
}
if $(below-11.0)
{
cpu = i386 amd64 ia64 ;
}
local setup-amd64 ;
local setup-i386 ;
local setup-ia64 ;
@@ -856,6 +929,7 @@ local rule configure-really ( version ? : options * )
local default-setup-i386 = vcvars32.bat ;
local default-setup-ia64 = vcvarsx86_ia64.bat ;
local default-setup-arm = vcvarsx86_arm.bat ;
local default-setup-phone = vcvarsphoneall.bat ;
# http://msdn2.microsoft.com/en-us/library/x4d2c09s(VS.80).aspx and
# http://msdn2.microsoft.com/en-us/library/x4d2c09s(vs.90).aspx
@@ -929,6 +1003,18 @@ local rule configure-really ( version ? : options * )
setup-options ?= "" ;
setup-$(c) = $(setup-prefix)$(setup-$(c):J=" ")" "$(setup-options:J=" ")$(setup-suffix) ;
}
# Windows phone uses a setup script in a different directory hierarchy.
# Support for future version of Windows phone will need to deal with phone versions here.
local phone-command = [ path.native [ path.join $(parent) WPSDK WP80 ] ] ;
local phone-parent = [ path.make $(phone-command) ] ;
phone-parent = [ path.native [ path.parent $(phone-parent) ] ] ;
local global-setup-phone = [ feature.get-values <setup> : $(options) ] ;
global-setup-phone ?= [ path.native [ path.join $(phone-command) $(default-setup-phone) ] ] ;
setup-phone-i386 = [ generate-setup-cmd $(phone-command) : $(phone-parent) : $(options) : i386
: $(global-setup-phone) : $(default-global-setup-options-i386) : $(default-setup-phone) ] ;
setup-phone-arm = [ generate-setup-cmd $(phone-command) : $(phone-parent) : $(options) : arm
: $(global-setup-phone) : $(default-global-setup-options-arm) : $(default-setup-phone) ] ;
}
# Get tool names (if any) and finish setup.
@@ -981,15 +1067,23 @@ local rule configure-really ( version ? : options * )
local cpu-assembler = $(assembler) ;
cpu-assembler ?= $(default-assembler-$(c)) ;
toolset.flags msvc.compile .CC $(cpu-conditions) : $(setup-$(c))$(compiler) /Zm800 -nologo ;
toolset.flags msvc.compile .RC $(cpu-conditions) : $(setup-$(c))$(resource-compiler) ;
toolset.flags msvc.compile .ASM $(cpu-conditions) : $(setup-$(c))$(cpu-assembler) -nologo ;
toolset.flags msvc.link .LD $(cpu-conditions) : $(setup-$(c))$(linker) /NOLOGO /INCREMENTAL:NO ;
toolset.flags msvc.archive .LD $(cpu-conditions) : $(setup-$(c))$(linker) /lib /NOLOGO ;
toolset.flags msvc.compile .IDL $(cpu-conditions) : $(setup-$(c))$(idl-compiler) ;
toolset.flags msvc.compile .MC $(cpu-conditions) : $(setup-$(c))$(mc-compiler) ;
toolset.flags msvc.compile .RC <windows-api>$(api)/$(cpu-conditions) : $(setup-$(c))$(resource-compiler) ;
toolset.flags msvc.compile .IDL <windows-api>$(api)/$(cpu-conditions) : $(setup-$(c))$(idl-compiler) ;
toolset.flags msvc.compile .MC <windows-api>$(api)/$(cpu-conditions) : $(setup-$(c))$(mc-compiler) ;
toolset.flags msvc.link .MT <windows-api>$(api)/$(cpu-conditions) : $(setup-$(c))$(manifest-tool) -nologo ;
toolset.flags msvc.link .MT $(cpu-conditions) : $(setup-$(c))$(manifest-tool) -nologo ;
for api in desktop store phone
{
local setup-script = $(setup-$(c)) ;
if $(api) = phone
{
setup-script = $(setup-phone-$(c)) ;
}
toolset.flags msvc.compile .CC <windows-api>$(api)/$(cpu-conditions) : $(setup-script)$(compiler) /Zm800 -nologo ;
toolset.flags msvc.compile .ASM <windows-api>$(api)/$(cpu-conditions) : $(setup-script)$(cpu-assembler) -nologo ;
toolset.flags msvc.link .LD <windows-api>$(api)/$(cpu-conditions) : $(setup-script)$(linker) /NOLOGO /INCREMENTAL:NO ;
toolset.flags msvc.archive .LD <windows-api>$(api)/$(cpu-conditions) : $(setup-script)$(linker) /lib /NOLOGO ;
}
if $(cc-filter)
{
@@ -1367,6 +1461,7 @@ if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]
<architecture>ia64/<address-model>64 ;
.cpu-arch-arm =
<architecture>arm/<address-model>
<architecture>arm/<address-model>32 ;
@@ -1388,7 +1483,8 @@ if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]
athlon-mp $(.cpu-type-em64t) $(.cpu-type-amd64) ;
.cpu-type-itanium = itanium itanium1 merced ;
.cpu-type-itanium2 = itanium2 mckinley ;
.cpu-type-arm = armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5t armv5te armv6 armv6j iwmmxt ep9312
armv7 armv7s ;
# Known toolset versions, in order of preference.
.known-versions = 12.0 11.0 10.0 10.0express 9.0 9.0express 8.0 8.0express 7.1