mirror of
https://github.com/RPCSX/mbuild.git
synced 2026-01-31 01:05:17 +01:00
Change-Id: I15cf7c8da6aaaae5e53cc40d47daa00dcfbf59fb (cherry picked from commit 3ec97dd5837492d42a3a305feb433209f315ace9)
1281 lines
47 KiB
Python
1281 lines
47 KiB
Python
# -*- python -*-
|
|
#BEGIN_LEGAL
|
|
#
|
|
#Copyright (c) 2017 Intel Corporation
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
#END_LEGAL
|
|
|
|
# TESTING MATRIX
|
|
# ('e' is for express)
|
|
#
|
|
# 32 32/64 64
|
|
# 6 ok ? N/A
|
|
# 7 ok ok N/A
|
|
# 8 ? ok ok
|
|
# 8e ? ? ?
|
|
# 9 ? ok ok
|
|
# 9e ok ? ?
|
|
# 10 ? ? ?
|
|
#
|
|
|
|
"""Environment setup for Microsoft Visual Studio. Set INCLUDE,
|
|
LIBPATH, LIB, PATH, VCINSTALLDIR, VS80COMNTOOLS, VSINSTALLDIR, etc.
|
|
"""
|
|
from __future__ import print_function
|
|
import os
|
|
import sys
|
|
import platform
|
|
from .base import *
|
|
from .util import *
|
|
from .env import *
|
|
|
|
########################################################################
|
|
def set_env(v,s):
|
|
"""Add v=s to the shell environment"""
|
|
if v in os.environ:
|
|
orig = os.environ[v]
|
|
else:
|
|
orig = ''
|
|
|
|
# We have had issues on windows were we attempt to make the
|
|
# environment too long. This catches the error and prints a nice
|
|
# error msg.
|
|
try:
|
|
os.environ[v]=s
|
|
except Exception as e:
|
|
sys.stderr.write( str(e) + '\n')
|
|
sys.stderr.write("Env Variable [%s]\n" % (v))
|
|
sys.stderr.write("Original was [%s]\n" % (orig))
|
|
sys.stderr.write("New value was [%s]\n" % (s))
|
|
sys.exit(1)
|
|
|
|
def set_env_list(v,slist):
|
|
set_env(v,";".join(slist))
|
|
|
|
def add_to_front(v,s):
|
|
"""Add v=s+old_v to the shell environment"""
|
|
set_env(v,s + ';' + os.environ[v])
|
|
|
|
def add_to_front_list(v,s):
|
|
add_to_front(v,';'.join(s))
|
|
|
|
def add_env(v,s):
|
|
"""Add v=v;old_vs to the shell environment. Inserts at front"""
|
|
if 0:
|
|
if os.path.exists(s):
|
|
tag = "GOOD"
|
|
else:
|
|
tag = "BAD"
|
|
print ("{} {}".format(tag,s))
|
|
v.insert(0,s)
|
|
########################################################################
|
|
|
|
def _find_dir_list(lst):
|
|
for dir in lst:
|
|
if os.path.exists(dir):
|
|
return dir
|
|
return None
|
|
|
|
|
|
def _set_msvs_dev6(env, x64_host, x64_target): # VC 98
|
|
vc_prefixes = [ "C:/VC98",
|
|
"C:/Program Files (x86)/Microsoft Visual Studio",
|
|
"C:/Program Files/Microsoft Visual Studio" ]
|
|
|
|
msdev_prefixes = [
|
|
"C:/Program Files/Microsoft Visual Studio/Common" ]
|
|
vc_prefix = _find_dir_list(vc_prefixes)
|
|
msdev_prefix = _find_dir_list(msdev_prefixes)
|
|
if not vc_prefix:
|
|
die("Could not find VC98")
|
|
if not msdev_prefix:
|
|
die("Could not find VC98 MSDEV")
|
|
|
|
i = []
|
|
add_env(i, vc_prefix + "/VC98/ATL/INCLUDE")
|
|
add_env(i, vc_prefix + "/VC98/INCLUDE")
|
|
add_env(i, vc_prefix + "/VC98/MFC/INCUDE")
|
|
set_env_list("INCLUDE",i)
|
|
|
|
lib = []
|
|
add_env(lib, vc_prefix + "/VC98/LIB")
|
|
add_env(lib, vc_prefix + "/VC98/MFC/LIB")
|
|
set_env_list("LIB",lib)
|
|
|
|
path=[]
|
|
add_env(path, msdev_prefix + "/msdev98/Bin")
|
|
add_env(path, vc_prefix + "/VC98/Bin")
|
|
add_env(path, msdev_prefix + "/TOOLS/WINNT")
|
|
add_env(path, msdev_prefix + "/TOOLS")
|
|
add_to_front_list('PATH', path)
|
|
|
|
set_env("MSDevDir", msdev_prefix + "/msdev98")
|
|
set_env("MSVCDir", vc_prefix + "/VC98")
|
|
|
|
return vc_prefix + "/VC98"
|
|
|
|
def _set_msvs_dev7(env, x64_host, x64_target): # .NET 2003
|
|
|
|
prefixes = [ "c:/Program Files/Microsoft Visual Studio .NET 2003",
|
|
"c:/Program Files (x86)/Microsoft Visual Studio .NET 2003"]
|
|
prefix = _find_dir_list(prefixes)
|
|
if not prefix:
|
|
die("Could not find MSVS7 .NET 2003")
|
|
|
|
inc = []
|
|
add_env(inc, prefix + '/VC7/ATLMFC/INCLUDE')
|
|
add_env(inc, prefix + '/VC7/include')
|
|
add_env(inc, prefix + '/VC7/PlatformSDK/include/prerelease')
|
|
add_env(inc, prefix + '/VC7/PlatformSDK/include')
|
|
add_env(inc, prefix + '/SDK/v1.1/include')
|
|
add_env(inc, prefix + '/SDK/v1.1/include/')
|
|
set_env_list("INCLUDE",inc)
|
|
|
|
lib = []
|
|
add_env(lib, prefix + '/VC7/ATLMFC/LIB')
|
|
add_env(lib, prefix + '/VC7/LIB')
|
|
add_env(lib, prefix + '/VC7/PlatformSDK/lib/prerelease')
|
|
add_env(lib, prefix + '/VC7/PlatformSDK/lib')
|
|
add_env(lib, prefix + '/SDK/v1.1/lib')
|
|
add_env(lib, prefix + '/SDK/v1.1/Lib/')
|
|
set_env_list("LIB",lib)
|
|
|
|
path = []
|
|
add_env(path, prefix + "/Common7/IDE")
|
|
add_env(path, prefix + "/VC7/bin")
|
|
add_env(path, prefix + "/Common7/Tools")
|
|
add_env(path, prefix + "/Common7/Tools/bin/prerelease")
|
|
add_env(path, prefix + "/Common7/Tools/bin")
|
|
add_env(path, prefix + "/SDK/v1.1/bin")
|
|
add_to_front_list('PATH', path)
|
|
|
|
set_env("VCINSTALLDIR", prefix)
|
|
set_env("VC71COMNTOOLS", prefix + "/Common7/Tools/")
|
|
set_env("VSINSTALLDIR", prefix + '/Common7/IDE')
|
|
set_env("MSVCDir", prefix + '/VC7')
|
|
set_env("FrameworkVersion","v1.1.4322")
|
|
set_env("FrameworkSDKDir", prefix + "/SDK/v1.1")
|
|
set_env("FrameworkDir", "C:/WINDOWS/Microsoft.NET/Framework")
|
|
# DevEnvDir has a trailing slash
|
|
set_env("DevEnvDir", prefix + "/Common7/IDE/")
|
|
|
|
return prefix + "/VC7"
|
|
def _set_msvs_dev8(env, x64_host, x64_target, regv=None): # VS 2005
|
|
if regv:
|
|
prefix = regv
|
|
else:
|
|
prefixes = ["c:/Program Files (x86)/Microsoft Visual Studio 8",
|
|
"c:/Program Files/Microsoft Visual Studio 8"]
|
|
prefix = _find_dir_list(prefixes)
|
|
if not os.path.exists(prefix):
|
|
die("Could not find MSVC8 (2005)")
|
|
|
|
set_env('VCINSTALLDIR', prefix + '/VC')
|
|
set_env('VS80COMNTOOLS', prefix + "/Common7/Tools")
|
|
set_env('VSINSTALLDIR', prefix)
|
|
|
|
i =[]
|
|
add_env(i, prefix + "/VC/ATLMFC/INCLUDE")
|
|
add_env(i, prefix + "/VC/INCLUDE")
|
|
add_env(i, prefix + "/VC/PlatformSDK/include")
|
|
add_env(i, prefix + "/SDK/v2.0/include")
|
|
set_env_list('INCLUDE', i)
|
|
|
|
set_env('FrameworkDir','C:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('FrameworkVersion', 'v2.0.50727')
|
|
set_env('FrameworkSDKDir', prefix +'/SDK/v2.0')
|
|
|
|
# DevEnvDir has a trailing slash
|
|
set_env("DevEnvDir", prefix +'/Common7/IDE/')
|
|
|
|
lp = []
|
|
path=[]
|
|
lib=[]
|
|
if x64_host and x64_target:
|
|
add_env(lp, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
|
|
add_env(lib, prefix + "/VC/ATLMFC/LIB/amd64")
|
|
add_env(lib, prefix + "/VC/LIB/amd64")
|
|
add_env(lib, prefix + "/VC/PlatformSDK/lib/amd64")
|
|
add_env(lib, prefix + "/SDK/v2.0/LIBAMD64")
|
|
|
|
add_env(path, prefix + "/VC/bin/amd64")
|
|
add_env(path, prefix + "/VC/PlatformSDK/bin/win64/amd64")
|
|
add_env(path, prefix + "/VC/PlatformSDK/bin")
|
|
add_env(path, prefix + "/VC/VCPackages")
|
|
add_env(path, prefix + "/Common7/IDE")
|
|
add_env(path, prefix + "/Common7/Tools")
|
|
add_env(path, prefix + "/Common7/Tools/bin")
|
|
add_env(path, prefix + "/SDK/v2.0/bin")
|
|
add_env(path, prefix + "C:/WINDOWS/Microsoft.NET/Framework64/v2.0.50727")
|
|
|
|
elif not x64_target:
|
|
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/VC/BIN')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, prefix + '/Common7/Tools/bin')
|
|
add_env(path, prefix + '/VC/PlatformSDK/bin')
|
|
add_env(path, prefix + '/SDK/v2.0/bin')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727')
|
|
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(lib, prefix + '/VC/LIB')
|
|
add_env(lib, prefix + '/VC/PlatformSDK/lib')
|
|
add_env(lib, prefix + '/SDK/v2.0/lib')
|
|
|
|
add_env(lp, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(lp, 'C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727')
|
|
|
|
add_to_front_list('PATH', path)
|
|
set_env_list('LIB',lib)
|
|
set_env_list('LIBPATH', lp)
|
|
|
|
return prefix + "/VC"
|
|
|
|
def _set_msvs_dev9(env, x64_host, x64_target, regv=None): # VS 2008
|
|
if regv:
|
|
prefix = regv
|
|
else:
|
|
prefixes = ['C:/Program Files (x86)/Microsoft Visual Studio 9.0',
|
|
'C:/Program Files/Microsoft Visual Studio 9.0']
|
|
prefix = _find_dir_list(prefixes)
|
|
|
|
set_env('VSINSTALLDIR', prefix)
|
|
set_env('VS90COMNTOOLS', prefix + '/Common7/Tools')
|
|
set_env('VCINSTALLDIR', prefix +'/VC')
|
|
set_env('FrameworkDir', 'C:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('Framework35Version','v3.5')
|
|
set_env('FrameworkVersion','v2.0.50727')
|
|
set_env('FrameworkSDKDir', prefix +'/SDK/v3.5')
|
|
set_env('WindowsSdkDir','C:/Program Files/Microsoft SDKs/Windows/v6.0A')
|
|
|
|
# DevEnvDir has a trailing slash
|
|
set_env('DevEnvDir', prefix + '/Common7/IDE/')
|
|
inc = []
|
|
add_env(inc, prefix + 'VC/ATLMFC/INCLUDE')
|
|
add_env(inc, prefix + '/VC/INCLUDE')
|
|
add_env(inc, 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/include')
|
|
set_env_list('INCLUDE',inc)
|
|
|
|
path = []
|
|
lib = []
|
|
libpath = []
|
|
|
|
if x64_target: # FIXME! 64b!!!!
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/VC/BIN')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/bin')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework/v3.5')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727')
|
|
|
|
add_env(lib, prefix +'/VC/ATLMFC/LIB/amdt64')
|
|
add_env(lib, prefix +'/VC/LIB/amd64')
|
|
add_env(lib, 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/lib/x64')
|
|
|
|
add_env(libpath, 'C:/WINDOWS/Microsoft.NET/Framework64/v2.0.50727')
|
|
add_env(libpath, 'C:/WINDOWS/Microsoft.NET/Framework64/v3.5')
|
|
add_env(libpath, 'C:/WINDOWS/Microsoft.NET/Framework64/v2.0.50727')
|
|
add_env(libpath, 'C:/WINDOWS/Microsoft.NET/Framework64/v2.0.50727')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
add_env(libpath, prefix + '/VC/LIB/amd64')
|
|
else:
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/VC/BIN')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/bin')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework/v3.5')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727')
|
|
|
|
add_env(lib, prefix +'/VC/LIB')
|
|
add_env(lib, prefix +'/VC/ATLMFC/LIB')
|
|
add_env(lib, 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/lib')
|
|
|
|
add_env(libpath, 'C:/WINDOWS/Microsoft.NET/Framework/v3.5')
|
|
add_env(libpath, 'C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(libpath, prefix + '/VC/LIB')
|
|
|
|
set_env_list('LIBPATH',libpath)
|
|
set_env_list('LIB',lib)
|
|
add_to_front_list('PATH',path)
|
|
|
|
return prefix + "/VC"
|
|
|
|
|
|
def _set_msvs_dev10(env, x64_host, x64_target, regv=None): # VS 2010
|
|
if regv:
|
|
prefix = regv
|
|
else:
|
|
prefix = 'C:/Program Files (x86)/Microsoft Visual Studio 10.0'
|
|
|
|
path = []
|
|
lib = []
|
|
libpath = []
|
|
|
|
inc = []
|
|
add_env(inc, prefix + '/VC/INCLUDE')
|
|
add_env(inc, prefix + '/VC/ATLMFC/INCLUDE')
|
|
add_env(inc, 'c:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/include')
|
|
set_env_list('INCLUDE',inc)
|
|
|
|
set_env('Framework35Version','v3.5')
|
|
set_env('FrameworkVersion', 'v4.0.20728')
|
|
set_env('FrameworkVersion32', 'v4.0.20728')
|
|
|
|
set_env('VCINSTALLDIR', prefix + '/VC')
|
|
set_env('VS100COMNTOOLS', prefix + '/Common7/Tools')
|
|
set_env('VSINSTALLDIR' , prefix)
|
|
set_env('WindowsSdkDir', 'c:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A')
|
|
|
|
# DevEnvDir has a trailing slash
|
|
set_env('DevEnvDir', prefix + '/Common7/IDE/')
|
|
|
|
if x64_target:
|
|
set_env('FrameworkDir','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkDIR64','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkVersion64', 'v4.0.20728')
|
|
|
|
set_env('Platform','X64')
|
|
add_env(lib, prefix + '/VC/LIB/amd64')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
add_env(lib, 'c:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/lib/x64')
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.20728')
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework64/v3.5')
|
|
add_env(libpath, prefix + '/VC/LIB/amd64')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
|
|
add_env(path, prefix + '/VC/BIN/amd64')
|
|
add_env(path, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.20728')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework64/v3.5')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, 'C:/Program Files (x86)/HTML Help Workshop')
|
|
add_env(path, 'C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/' +
|
|
'bin/NETFX 4.0 Tools/x64')
|
|
add_env(path, 'C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/bin/x64')
|
|
add_env(path, 'C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/bin')
|
|
else:
|
|
set_env('FrameworkDir', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('FrameworkDIR32', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
|
|
add_env(lib, prefix + '/VC/LIB')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(lib, 'c:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/lib')
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework/v4.0.20728')
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework/v3.5')
|
|
add_env(libpath, prefix + '/VC/LIB')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB')
|
|
|
|
add_env(path, prefix + '/Common7/IDE/')
|
|
add_env(path, prefix + '/VC/BIN')
|
|
add_env(path, prefix +'/Common7/Tools')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework/v4.0.20728')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework/v3.5')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, 'C:/Program Files (x86)/HTML Help Workshop')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools')
|
|
add_env(path, 'C;/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/' +
|
|
'bin/NETFX 4.0 Tools')
|
|
add_env(path, 'C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/bin')
|
|
|
|
set_env_list('LIBPATH',libpath)
|
|
set_env_list('LIB',lib)
|
|
add_to_front_list('PATH',path)
|
|
|
|
return prefix + "/VC"
|
|
|
|
|
|
def _set_msvs_dev11(env, x64_host, x64_target, regv=None): # msvs2012
|
|
progfi = 'C:/Program Files (x86)'
|
|
if regv:
|
|
prefix = regv
|
|
else:
|
|
prefix = progfi + '/Microsoft Visual Studio 11.0'
|
|
|
|
sdkdir = progfi + '/Microsoft SDKs/Windows/v8.0'
|
|
sdk8 = progfi + '/Microsoft SDKs/Windows/v8.0A'
|
|
sdk7 = progfi + '/Microsoft SDKs/Windows/v7.0A'
|
|
winkit = progfi + '/Windows Kits/8.0'
|
|
|
|
path = []
|
|
lib = []
|
|
libpath = []
|
|
|
|
inc = []
|
|
add_env(inc, prefix + '/VC/INCLUDE')
|
|
add_env(inc, prefix + '/VC/ATLMFC/INCLUDE')
|
|
add_env(inc, winkit + '/include')
|
|
add_env(inc, winkit + '/include/um')
|
|
add_env(inc, winkit + '/include/shared')
|
|
add_env(inc, winkit + '/include/winrt')
|
|
set_env_list('INCLUDE',inc)
|
|
|
|
set_env('Framework35Version','v3.5')
|
|
set_env('FrameworkVersion', 'v4.0.30319')
|
|
set_env('FrameworkVersion32', 'v4.0.30319')
|
|
|
|
set_env('VCINSTALLDIR', prefix + '/VC/')
|
|
set_env('VS110COMNTOOLS', prefix + '/Common7/Tools')
|
|
set_env('VSINSTALLDIR' , prefix)
|
|
set_env('WindowsSdkDir', winkit)
|
|
|
|
|
|
if x64_target:
|
|
set_env('FrameworkDir','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkDIR64','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkVersion64', 'v4.0.30319')
|
|
|
|
set_env('Platform','X64')
|
|
|
|
add_env(lib, prefix + '/VC/LIB/amd64')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
add_env(lib, winkit + '/lib/win8/um/x64')
|
|
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319')
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework64/v3.5')
|
|
add_env(libpath, prefix + '/VC/LIB/amd64')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
add_env(libpath, winkit + '/References/CommonConfiguration/Neutral')
|
|
add_env(libpath, sdkdir + 'ExtensionSDKs/Microsoft.VCLibs/11.0/' +
|
|
'References/CommonConfiguration/neutral')
|
|
|
|
add_env(path, prefix + '/VC/BIN/amd64')
|
|
add_env(path, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319')
|
|
add_env(path, 'C:/WINDOWS/Microsoft.NET/Framework64/v3.5')
|
|
|
|
add_env(path, prefix + '/Common7/IDE/CommonExtensions/Microsoft/TestWindow')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, 'C:/Program Files (x86)/HTML Help Workshop')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools/x64')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools')
|
|
add_env(path, winkit + '/8.0/bin/x64')
|
|
add_env(path, sdk8 + '/bin/NETFX 4.0 Tools/x64')
|
|
add_env(path, sdk7 + '/Bin/x64')
|
|
add_env(path, sdk8 + '/bin/NETFX 4.0 Tools')
|
|
add_env(path, sdk7 + '/Bin')
|
|
add_env(path, winkit + '/Windows Performance Toolkit')
|
|
add_env(path, 'C:/Program Files/Microsoft SQL Server/110/Tools/Binn')
|
|
|
|
else:
|
|
set_env('FrameworkDir', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('FrameworkDIR32', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
|
|
add_env(lib, prefix + '/VC/LIB')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(lib, winkit + '/lib/win8/um/x86')
|
|
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework/v4.0.30319')
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework/v3.5')
|
|
add_env(libpath, prefix + '/VC/LIB')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(libpath, winkit + '/References/CommonConfiguration/Neutral')
|
|
add_env(libpath, sdkdir + '/ExtensionSDKs/Microsoft.VCLibs/11.0/' +
|
|
'References/CommonConfiguration/neutral')
|
|
|
|
|
|
add_env(path, prefix + '/Common7/IDE/CommonExtensions/Microsoft/TestWindow')
|
|
add_env(path, 'C:/Program Files (x86)/Microsoft SDKs/F#/3.0/Framework/v4.0')
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/VC/BIN')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, 'C:/Windows/Microsoft.NET/Framework/v4.0.30319')
|
|
add_env(path, 'C:/Windows/Microsoft.NET/Framework/v3.5')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, 'C:/Program Files (x86)/HTML Help Workshop')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools')
|
|
add_env(path, winkit + '/bin/x86')
|
|
add_env(path, sdk8 + '/bin/NETFX 4.0 Tools')
|
|
add_env(path, sdk7 + '/Bin')
|
|
add_env(path, winkit + '/Windows Performance Toolkit')
|
|
add_env(path, 'C:/Program Files/Microsoft SQL Server/110/Tools/Binn')
|
|
|
|
|
|
|
|
set_env_list('LIBPATH',libpath)
|
|
set_env_list('LIB',lib)
|
|
add_to_front_list('PATH',path)
|
|
|
|
return prefix + "/VC"
|
|
|
|
|
|
|
|
def _set_msvs_dev12(env, x64_host, x64_target, regv=None): # msvs2013
|
|
progfi = 'C:/Program Files (x86)'
|
|
if regv:
|
|
prefix = regv
|
|
else:
|
|
prefix = progfi + '/Microsoft Visual Studio 12.0'
|
|
|
|
sdk81a = progfi + '/Microsoft SDKs/Windows/v8.1A'
|
|
sdk81 = progfi + '/Microsoft SDKs/Windows/v8.1'
|
|
winkit = progfi + '/Windows Kits/8.1'
|
|
|
|
|
|
path = []
|
|
lib = []
|
|
libpath = []
|
|
|
|
inc = []
|
|
add_env(inc, prefix + '/VC/INCLUDE')
|
|
add_env(inc, prefix + '/VC/ATLMFC/INCLUDE')
|
|
add_env(inc, winkit + '/include') # not used in msvs12
|
|
add_env(inc, winkit + '/include/um')
|
|
add_env(inc, winkit + '/include/shared')
|
|
add_env(inc, winkit + '/include/winrt')
|
|
set_env_list('INCLUDE',inc)
|
|
|
|
set_env('Framework40Version','v4.0')
|
|
set_env('FrameworkVersion', 'v4.0.30319')
|
|
set_env('ExtensionSdkDir',
|
|
sdk81 + '/ExtensionSDKs')
|
|
|
|
set_env('VCINSTALLDIR', prefix + '/VC/')
|
|
set_env('VS120COMNTOOLS', prefix + '/Common7/Tools')
|
|
set_env('VSINSTALLDIR' , prefix)
|
|
set_env('WindowsSdkDir', winkit)
|
|
set_env('VisualStudioVersion','12.0')
|
|
|
|
set_env('WindowsSDK_ExecutablePath_x86',
|
|
sdk81a + '/bin/NETFX 4.5.1 Tools/')
|
|
|
|
if x64_target:
|
|
set_env('WindowsSDK_ExecutablePath_x64',
|
|
sdk81a +'/bin/NETFX 4.5.1 Tools/x64/')
|
|
|
|
set_env('FrameworkDir','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkDIR64','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkVersion64', 'v4.0.30319')
|
|
|
|
set_env('Platform','X64')
|
|
|
|
add_env(lib, prefix + '/VC/LIB/amd64')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
add_env(lib, winkit + '/lib/winv6.3/um/x64')
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319')
|
|
add_env(libpath, prefix + '/VC/LIB/amd64')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
add_env(libpath, winkit + '/References/CommonConfiguration/Neutral')
|
|
add_env(libpath, sdk81 + '/ExtensionSDKs/Microsoft.VCLibs/12.0/' +
|
|
'References/CommonConfiguration/neutral')
|
|
|
|
add_env(path, prefix + '/Common7/IDE/CommonExtensions/Microsoft/TestWindow')
|
|
add_env(path, prefix + '/VC/BIN/amd64')
|
|
add_env(path, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319')
|
|
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, 'C:/Program Files (x86)/HTML Help Workshop')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools/x64')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools')
|
|
add_env(path, winkit + '/8.1/bin/x64')
|
|
add_env(path, winkit + '/8.1/bin/x86')
|
|
add_env(path, sdk81a + '/bin/NETFX 4.5.1 Tools/x64')
|
|
add_env(path, winkit + '/Windows Performance Toolkit')
|
|
|
|
|
|
else:
|
|
set_env('FrameworkDir', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('FrameworkDIR32', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('FrameworkVersion32','v4.0.30319')
|
|
|
|
add_env(lib, prefix + '/VC/LIB')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(lib, winkit + '/lib/winv6.3/um/x86')
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework/v4.0.30319')
|
|
add_env(libpath, prefix + '/VC/LIB')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB')
|
|
add_env(libpath, winkit + '/References/CommonConfiguration/Neutral')
|
|
add_env(libpath, sdk81 + '/ExtensionSDKs/Microsoft.VCLibs/12.0/' +
|
|
'References/CommonConfiguration/neutral')
|
|
|
|
|
|
add_env(path, prefix + '/Common7/IDE/CommonExtensions/Microsoft/TestWindow')
|
|
add_env(path, progfi + '/Microsoft SDKs/F#/3.1/Framework/v4.0')
|
|
add_env(path, progfi + '/MSBuild/12.0/bin')
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/VC/BIN')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, 'C:/Windows/Microsoft.NET/Framework/v4.0.30319')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, progfi + '/HTML Help Workshop')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools')
|
|
add_env(path, winkit + '/bin/x86')
|
|
add_env(path, sdk81a + '/bin/NETFX 4.5.1 Tools')
|
|
add_env(path, winkit + '/Windows Performance Toolkit')
|
|
|
|
|
|
set_env_list('LIBPATH',libpath)
|
|
set_env_list('LIB',lib)
|
|
add_to_front_list('PATH',path)
|
|
|
|
return prefix + "/VC"
|
|
|
|
|
|
def _get_winkit10_version(env, winkit10):
|
|
# Find the UCRT Version. Could not locate a registry entry with
|
|
# the information. Preview version of msvs2015/dev14 did not set
|
|
# the env var. Poke around in the directory system as a last
|
|
# resort. Could make this configrable
|
|
winkit10version = None
|
|
if 'UCRTVersion' in os.environ:
|
|
winkit10version = os.environ['UCRTVersion']
|
|
if winkit10 and not winkit10version:
|
|
# use glob and find youngest directory
|
|
ctime = 0
|
|
for g in glob(winkit10 + '/include/*'):
|
|
if os.path.exists('{}/ucrt'.format(g)):
|
|
gtime = os.path.getctime(g)
|
|
if gtime > ctime:
|
|
winkit10version = os.path.basename(g)
|
|
ctime = gtime
|
|
if not winkit10version:
|
|
warn("Did not find winkit 10 version. RC tool may not be available")
|
|
msgb("UCRT Version", winkit10version)
|
|
|
|
# Early versions of winkit10 that ship with MSVS2015(dev14) do not
|
|
# have the the required stuff so people had to rely on SDK
|
|
# 8.1. The early versions only have a ucrt subdirectory and not a
|
|
# "shared", "um" or "winrt" directories. We pick the "shared"
|
|
# directory as our guide. I could also use the version number but
|
|
# I have no way of knowing all the verion numbers people might
|
|
# have. (In my limited experience, I've seen only 3 so far).
|
|
complete = True
|
|
if not os.path.exists('{}/include/{}/shared'.format(winkit10, winkit10version)):
|
|
complete = False
|
|
return (winkit10version,complete)
|
|
|
|
def _find_msvc_version_directory(root):
|
|
ctime = 0
|
|
msvc_ver = None
|
|
for g in glob(root + '/*'):
|
|
gtime = os.path.getctime(g)
|
|
if gtime > ctime:
|
|
msvc_ver = os.path.basename(g)
|
|
ctime = gtime
|
|
if not msvc_ver:
|
|
die("Could not find MSVC version directory.")
|
|
return msvc_ver
|
|
|
|
def _find_latest_subdir(d):
|
|
ctime = 0
|
|
for g in glob(d + '*'):
|
|
gtime = os.path.getctime(g)
|
|
if gtime > ctime:
|
|
ctime = gtime
|
|
subdir = g
|
|
return subdir
|
|
def _ijoin(x,y):
|
|
return '{}/{}'.format(x,y)
|
|
|
|
def msvc_dir_from_vc_dir(vc_dir):
|
|
msvc_tools_root = vc_dir + '/Tools/MSVC'
|
|
msvc_ver = _find_msvc_version_directory(msvc_tools_root)
|
|
msvc_tools_root = _ijoin(msvc_tools_root,msvc_ver)
|
|
#msgb('MSVC version', msvc_tools_root)
|
|
return msvc_tools_root, msvc_ver
|
|
|
|
def set_msvc_compilers(env,msvc_tools_root):
|
|
"""set host/target paths for MSVS2017/DEV15. Also called from
|
|
build_env.py when using an externally configured shell."""
|
|
x64_to_x64 = '{}/bin/Host{}/{}/'.format(msvc_tools_root,'x64','x64')
|
|
x64_to_x86 = '{}/bin/Host{}/{}/'.format(msvc_tools_root,'x64','x86')
|
|
x86_to_x64 = '{}/bin/Host{}/{}/'.format(msvc_tools_root,'x86','x64')
|
|
x86_to_x86 = '{}/bin/Host{}/{}/'.format(msvc_tools_root,'x86','x86')
|
|
env['msvc_compilers'] = {}
|
|
env['msvc_compilers']['ia32'] = {}
|
|
env['msvc_compilers']['x86-64'] = {}
|
|
env['msvc_compilers']['ia32']['ia32'] = x86_to_x64
|
|
env['msvc_compilers']['ia32']['x86-64'] = x86_to_x86
|
|
env['msvc_compilers']['x86-64']['ia32'] = x64_to_x86
|
|
env['msvc_compilers']['x86-64']['x86-64'] = x64_to_x64
|
|
|
|
def _set_msvs_dev15(env, x64_host, x64_target, regv=None): # msvs 2017
|
|
versions = ['Enterprise', 'Professional', 'Community']
|
|
|
|
progfi = 'C:/Program Files (x86)'
|
|
if regv:
|
|
prefix = regv
|
|
else:
|
|
prefix = progfi + '/Microsoft Visual Studio/2017'
|
|
|
|
if x64_target:
|
|
tgt = 'x64'
|
|
else:
|
|
tgt = 'x86'
|
|
|
|
found = False
|
|
for v in versions:
|
|
p = _ijoin(prefix,v)
|
|
if os.path.exists(p):
|
|
found = True
|
|
break
|
|
if not found:
|
|
die('Could not find MSVS 2017 directory')
|
|
vprefix = p
|
|
#msgb('VPREFIX', vprefix)
|
|
winkit10 = progfi + '/Windows Kits/10'
|
|
winkit10version, winkit10complete = _get_winkit10_version(env,winkit10)
|
|
#msgb('WINKIT10 VERSION', winkit10version)
|
|
if winkit10complete == False:
|
|
die('need a complete winkit10 for MSVS 2017 (dev 15)')
|
|
env['rc_winkit'] = winkit10
|
|
|
|
msvc_tools_root, msvc_ver = msvc_dir_from_vc_dir(vprefix + '/VC')
|
|
|
|
netfx_sdk = progfi + '/Windows Kits/NETFXSDK/4.6.1/'
|
|
|
|
path = []
|
|
lib = []
|
|
libpath = []
|
|
inc = []
|
|
|
|
add_env(inc, prefix + '/ATLMFC/include')
|
|
add_env(inc, msvc_tools_root + '/include')
|
|
add_env(inc, netfx_sdk + 'include/um')
|
|
wki = '{}/include/{}'.format(winkit10, winkit10version)
|
|
add_env(inc, wki + '/ucrt')
|
|
add_env(inc, wki + '/shared')
|
|
add_env(inc, wki + '/um')
|
|
add_env(inc, wki + '/winrt')
|
|
|
|
# LIB
|
|
wkl = '{}/lib/{}'.format(winkit10, winkit10version)
|
|
lib1 = '{}/ATLMFC/lib/{}'.format(msvc_tools_root,tgt)
|
|
lib2 = '{}/lib/{}'.format(msvc_tools_root,tgt)
|
|
add_env(lib, lib1)
|
|
add_env(lib, lib2)
|
|
add_env(lib, '{}lib/um/{}'.format(netfx_sdk,tgt))
|
|
add_env(lib, '{}/ucrt/{}'.format(wkl,tgt))
|
|
add_env(lib, '{}/um/{}'.format(wkl,tgt))
|
|
|
|
# LIBPATH
|
|
add_env(libpath, lib1)
|
|
add_env(libpath, lib2)
|
|
add_env(libpath, winkit10 + '/UnionMetadata')
|
|
add_env(libpath, winkit10 + '/References')
|
|
s = ''
|
|
if tgt == 'x64':
|
|
s = '64'
|
|
fwr = 'C:/windows/Microsoft.NET/Framework{}'.format(s)
|
|
fwr64 = 'C:/windows/Microsoft.NET/Framework64'
|
|
fwv = 'v4.0.30319'
|
|
fwp = '{}/{}'.format(fwr,fwv)
|
|
add_env(libpath, fwp)
|
|
|
|
# PATH
|
|
|
|
# locations for cross compilers changed in this version
|
|
set_msvc_compilers(env, msvc_tools_root)
|
|
x86_to_x64 = env['msvc_compilers']['ia32']['ia32']
|
|
x86_to_x86 = env['msvc_compilers']['ia32']['x86-64']
|
|
x64_to_x86 = env['msvc_compilers']['x86-64']['ia32']
|
|
x64_to_x64 = env['msvc_compilers']['x86-64']['x86-64']
|
|
|
|
cross = False
|
|
if x64_host:
|
|
if x64_target:
|
|
cl_tgt_bin_dir = x64_to_x64
|
|
else:
|
|
cross = True
|
|
cl_tgt_bin_dir = x64_to_x86
|
|
cl_host_bin_dir = x64_to_x64
|
|
else:
|
|
if x64_target:
|
|
cross = True
|
|
cl_tgt_bin_dir = x86_to_x64
|
|
cl_host_bin_dir = x64_to_x86
|
|
else:
|
|
cl_tgt_bin_dir = x86_to_x86
|
|
|
|
add_env(path, cl_tgt_bin_dir)
|
|
# CL TARGET compiler gets DLLs from the HOST bin dir
|
|
if cross:
|
|
add_env(path, cl_host_bin_dir)
|
|
|
|
add_env(path, '{}/Common7/IDE/VC/VCPackages'.format(msvc_tools_root))
|
|
add_env(path, '{}/Common7/IDE/CommonExtensions/Microsoft/TestWindow'.format(msvc_tools_root))
|
|
add_env(path, '{}/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer'.format(msvc_tools_root))
|
|
add_env(path, '{}/MSBuild/15.0/bin/Roslyn'.format(msvc_tools_root))
|
|
add_env(path, '{}/Team Tools/Performance Tools'.format(msvc_tools_root))
|
|
|
|
add_env(path, progfi + '/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools')
|
|
netfx_tools = progfi + '/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.6.1 Tools'
|
|
add_env(path, netfx_tools)
|
|
|
|
add_env(path, '{}/bin/{}'.format(winkit10,tgt))
|
|
add_env(path, '{}/bin/{}/{}'.format(winkit10,winkit10version,tgt))
|
|
add_env(path, '{}/MSBuild/15.0/bin'.format(vprefix))
|
|
add_env(path, fwp)
|
|
add_env(path, '{}/Common7/IDE'.format(vprefix))
|
|
add_env(path, '{}/Common7/Tools'.format(vprefix))
|
|
|
|
set_env_list('INCLUDE',inc)
|
|
set_env_list('LIB',lib)
|
|
set_env_list('LIBPATH',libpath)
|
|
add_to_front_list('PATH',path)
|
|
if 0:
|
|
msgb("INCLUDE", "\n\t".join(inc))
|
|
msgb("LIB", "\n\t".join(lib))
|
|
msgb("LIBPATH", "\n\t".join(libpath))
|
|
msgb("PATH", "\n\t".join(path))
|
|
|
|
# Misc env variables. Not sure which are needed, if any
|
|
set_env('NETFXSDKDir',netfx_sdk)
|
|
set_env('DevEnvDir', vprefix + '/Common7/IDE/')
|
|
set_env('ExtensionSdkDir', progfi + '/Microsoft SDKs/Windows Kits/10/ExtensionSDKs')
|
|
set_env('Framework40Version','v4.0')
|
|
set_env('FrameworkVersion',fwv)
|
|
if x64_host:
|
|
set_env('VSCMD_ARG_HOST_ARCH','x64')
|
|
else:
|
|
set_env('VSCMD_ARG_HOST_ARCH','x86')
|
|
|
|
set_env('Platform',tgt)
|
|
set_env('VSCMD_ARG_TGT_ARCH',tgt)
|
|
|
|
if x64_target:
|
|
set_env('FrameworkDir', fwr)
|
|
set_env('FrameworkDIR64',fwr)
|
|
set_env('FrameworkVersion64',fwv)
|
|
else:
|
|
set_env('FrameworkDIR32',fwr)
|
|
set_env('FrameworkVersion32',fwv)
|
|
if x64_host:
|
|
set_env('FrameworkDir', fwr64)
|
|
set_env('FrameworkDIR64',fwr64)
|
|
set_env('FrameworkVersion64',fwv)
|
|
else:
|
|
set_env('FrameworkDir', fwr)
|
|
|
|
set_env('UCRTVersion', winkit10version)
|
|
set_env('WindowsSDKLibVersion', winkit10version + '/')
|
|
set_env('WindowsSDKVersion', winkit10version + '/')
|
|
set_env('WindowsSdkVerBinPath', '{}/bin/{}/'.format(winkit10,winkit10version))
|
|
set_env('WindowsSdkBinPath', winkit10 + '/bin/')
|
|
set_env('WindowsSdkDir', winkit10 + '/')
|
|
set_env('UniversalCRTSdkDir',winkit10 + '/')
|
|
set_env('WindowsLibPath', winkit10 + '/UnionMetadata;' + winkit10 + '/References')
|
|
|
|
set_env('VCIDEInstallDir', vprefix + '/Common7/IDE/VC/')
|
|
set_env('VCINSTALLDIR', vprefix + '/VC/')
|
|
set_env('VCToolsInstallDir', vprefix + '/VC/Tools/MSVC/' + msvc_ver + '/')
|
|
set_env('VCToolsRedistDir', vprefix + '/VC/Redist/MSVC/' + msvc_ver + '/')
|
|
set_env('VS150COMNTOOLS', vprefix + '/Common7/Tools/')
|
|
set_env('VSINSTALLDIR', vprefix + '/')
|
|
set_env('VisualStudioVersion', '15.0')
|
|
|
|
set_env('WindowsSDK_ExecutablePath_x64', netfx_tools + '/x64/')
|
|
set_env('WindowsSDK_ExecutablePath_x86', netfx_tools + '/')
|
|
|
|
return vprefix + '/VC'
|
|
|
|
def _set_msvs_dev14(env, x64_host, x64_target, regv=None): # msvs 2015
|
|
progfi = 'C:/Program Files (x86)'
|
|
if regv:
|
|
prefix = regv
|
|
else:
|
|
prefix = progfi + '/Microsoft Visual Studio 14.0'
|
|
|
|
sdk81a = progfi + '/Microsoft SDKs/Windows/v8.1A'
|
|
sdk81 = progfi + '/Microsoft SDKs/Windows/v8.1'
|
|
sdk10a = progfi + '/Microsoft SDKs/Windows/v10.0A'
|
|
if os.path.exists(sdk10a):
|
|
sdek81a = None
|
|
sdek81 = None
|
|
else:
|
|
sdk10a = None
|
|
|
|
winkit8 = progfi + '/Windows Kits/8.1'
|
|
winkit10 = progfi + '/Windows Kits/10'
|
|
|
|
if os.path.exists(winkit10):
|
|
winkit = winkit10
|
|
sdk81 = None
|
|
sdk81a = None
|
|
else:
|
|
winkit = winkit8
|
|
winkit10 = None
|
|
|
|
winkit10version, winkit10complete = _get_winkit10_version(env,winkit10)
|
|
# if winkit10complete is False, we need to fall back on
|
|
# winkit8 for some stuff
|
|
|
|
if winkit10complete:
|
|
env['rc_winkit'] = winkit10
|
|
else:
|
|
env['rc_winkit'] = winkit8
|
|
|
|
path = []
|
|
lib = []
|
|
libpath = []
|
|
|
|
inc = []
|
|
add_env(inc, prefix + '/VC/INCLUDE')
|
|
add_env(inc, prefix + '/VC/ATLMFC/INCLUDE')
|
|
|
|
if winkit10version:
|
|
t = '{}/include/{}'.format(winkit10,winkit10version)
|
|
add_env(inc, t + '/ucrt')
|
|
|
|
if winkit10version and winkit10complete:
|
|
add_env(inc, t + '/shared')
|
|
add_env(inc, t + '/um')
|
|
add_env(inc, t + '/winrt')
|
|
else:
|
|
add_env(inc, winkit8 + '/include') # not used in msvs12
|
|
add_env(inc, winkit8 + '/include/shared')
|
|
add_env(inc, winkit8 + '/include/um')
|
|
add_env(inc, winkit8 + '/include/winrt')
|
|
|
|
set_env_list('INCLUDE',inc)
|
|
|
|
set_env('Framework40Version', 'v4.0')
|
|
set_env('FrameworkVersion', 'v4.0.30319')
|
|
#set_env('ExtensionSdkDir', sdk81 + '/ExtensionSDKs')
|
|
|
|
set_env('VCINSTALLDIR', prefix + '/VC/')
|
|
set_env('VS140COMNTOOLS', prefix + '/Common7/Tools')
|
|
set_env('VSINSTALLDIR' , prefix)
|
|
set_env('WindowsSdkDir', winkit + '/')
|
|
set_env('VisualStudioVersion','14.0')
|
|
|
|
if sdk10a:
|
|
set_env('WindowsSDK_ExecutablePath_x86',
|
|
sdk10a + '/bin/NETFX 4.6.1 Tools/')
|
|
else:
|
|
set_env('WindowsSDK_ExecutablePath_x86',
|
|
sdk81a + '/bin/NETFX 4.5.1 Tools/')
|
|
|
|
if x64_target:
|
|
if sdk10a:
|
|
set_env('WindowsSDK_ExecutablePath_x64',
|
|
sdk10a +'/bin/NETFX 4.6.1 Tools/x64/')
|
|
else:
|
|
set_env('WindowsSDK_ExecutablePath_x64',
|
|
sdk81a +'/bin/NETFX 4.5.1 Tools/x64/')
|
|
|
|
set_env('FrameworkDir','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkDIR64','c:/WINDOWS/Microsoft.NET/Framework64')
|
|
set_env('FrameworkVersion64', 'v4.0.30319')
|
|
|
|
set_env('Platform','X64')
|
|
|
|
add_env(lib, prefix + '/VC/LIB/amd64')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
if winkit10version:
|
|
add_env(lib, winkit10 + '/lib/{}/ucrt/x64'.format(winkit10version))
|
|
if winkit10version and winkit10complete:
|
|
add_env(lib, winkit10 + '/lib/{}/um/x64'.format(winkit10version))
|
|
else:
|
|
add_env(lib, winkit8 + '/lib/winv6.3/um/x64')
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319')
|
|
add_env(libpath, prefix + '/VC/LIB/amd64')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB/amd64')
|
|
if not winkit10:
|
|
add_env(libpath, winkit + '/References/CommonConfiguration/Neutral')
|
|
# next one is usually not present and I am unclear of value/need
|
|
#if sdk81:
|
|
# add_env(libpath, sdk81 + '/ExtensionSDKs/Microsoft.VCLibs/14.0/' +
|
|
# 'References/CommonConfiguration/neutral')
|
|
|
|
add_env(path, prefix + '/Common7/IDE/CommonExtensions/Microsoft/TestWindow')
|
|
add_env(path, prefix + '/VC/BIN/amd64')
|
|
add_env(path, 'c:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319')
|
|
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, 'C:/Program Files (x86)/HTML Help Workshop')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools/x64')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools')
|
|
|
|
if winkit10complete:
|
|
t = winkit10
|
|
else:
|
|
t = winkit8
|
|
add_env(path, t + '/bin/x64')
|
|
add_env(path, t + '/bin/x86')
|
|
|
|
if sdk10a:
|
|
b = _find_latest_subdir(sdk10a + '/bin/')
|
|
add_env(path, b + '/x64')
|
|
else:
|
|
add_env(path, sdk81a + '/bin/NETFX 4.5.1 Tools/x64')
|
|
|
|
else: # 32b
|
|
set_env('FrameworkDir', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('FrameworkDIR32', 'c:/WINDOWS/Microsoft.NET/Framework')
|
|
set_env('FrameworkVersion32','v4.0.30319')
|
|
|
|
add_env(lib, prefix + '/VC/LIB')
|
|
add_env(lib, prefix + '/VC/ATLMFC/LIB')
|
|
if winkit10version:
|
|
add_env(lib, winkit10 + '/lib/{}/ucrt/x86'.format(winkit10version))
|
|
if winkit10version and winkit10complete:
|
|
add_env(lib, winkit10 + '/lib/{}/um/x86'.format(winkit10version))
|
|
else:
|
|
add_env(lib, winkit8 + '/lib/winv6.3/um/x86')
|
|
|
|
add_env(libpath, 'c:/WINDOWS/Microsoft.NET/Framework/v4.0.30319')
|
|
add_env(libpath, prefix + '/VC/LIB')
|
|
add_env(libpath, prefix + '/VC/ATLMFC/LIB')
|
|
if not winkit10complete:
|
|
add_env(libpath, winkit8 + '/References/CommonConfiguration/Neutral')
|
|
# next one is usually not present and I am unclear of value/need
|
|
#if sdk81:
|
|
# add_env(libpath, sdk81 + '/ExtensionSDKs/Microsoft.VCLibs/14.0/' +
|
|
# 'References/CommonConfiguration/neutral')
|
|
|
|
add_env(path, prefix + '/Common7/IDE/CommonExtensions/Microsoft/TestWindow')
|
|
add_env(path, progfi + '/Microsoft SDKs/F#/3.1/Framework/v4.0')
|
|
add_env(path, progfi + '/MSBuild/14.0/bin')
|
|
add_env(path, prefix + '/Common7/IDE')
|
|
add_env(path, prefix + '/VC/BIN')
|
|
add_env(path, prefix + '/Common7/Tools')
|
|
add_env(path, 'C:/Windows/Microsoft.NET/Framework/v4.0.30319')
|
|
add_env(path, prefix + '/VC/VCPackages')
|
|
add_env(path, progfi + '/HTML Help Workshop')
|
|
add_env(path, prefix + '/Team Tools/Performance Tools')
|
|
|
|
if winkit10complete:
|
|
t = winkit10
|
|
else:
|
|
t = winkit8
|
|
add_env(path, t + '/bin/x86')
|
|
|
|
if sdk10a:
|
|
b = _find_latest_subdir(sdk10a + '/bin/')
|
|
add_env(path, b + '/x64')
|
|
else:
|
|
add_env(path, sdk81a + '/bin/NETFX 4.5.1 Tools')
|
|
|
|
|
|
set_env_list('LIBPATH',libpath)
|
|
set_env_list('LIB',lib)
|
|
add_to_front_list('PATH',path)
|
|
|
|
return prefix + "/VC"
|
|
|
|
|
|
def _figure_out_msvs_version_filesystem(env, specific_version=0):
|
|
"""If specific_version is set to one of the listed versions, this will
|
|
only return success if that version is found. Otherwise it returns
|
|
the latest install. """
|
|
|
|
prefixes = [
|
|
# starting with DEV15, everything is in the "Program Files
|
|
# (x86)" directory.
|
|
(15,'C:/Program Files (x86)/Microsoft Visual Studio/2017'),
|
|
|
|
(14,'C:/Program Files (x86)/Microsoft Visual Studio 14.0'),
|
|
(14,'C:/Program Files/Microsoft Visual Studio 14.0'),
|
|
|
|
(12,'C:/Program Files (x86)/Microsoft Visual Studio 12.0'),
|
|
(12,'C:/Program Files/Microsoft Visual Studio 12.0'),
|
|
|
|
(11,'C:/Program Files (x86)/Microsoft Visual Studio 11.0'),
|
|
(11,'C:/Program Files/Microsoft Visual Studio 11.0'),
|
|
|
|
(10,'C:/Program Files (x86)/Microsoft Visual Studio 10.0'),
|
|
(10,'C:/Program Files/Microsoft Visual Studio 10.0'),
|
|
|
|
(9,'C:/Program Files (x86)/Microsoft Visual Studio 9.0'),
|
|
(9,'C:/Program Files/Microsoft Visual Studio 9.0'),
|
|
|
|
(8, "c:/Program Files (x86)/Microsoft Visual Studio 8"),
|
|
(8,"c:/Program Files/Microsoft Visual Studio 8"),
|
|
|
|
(7, "c:/Program Files/Microsoft Visual Studio .NET 2003"),
|
|
(7,"c:/Program Files (x86)/Microsoft Visual Studio .NET 2003")
|
|
]
|
|
for v,dir in prefixes:
|
|
if os.path.exists(dir):
|
|
if specific_version:
|
|
if specific_version == v:
|
|
return str(v)
|
|
else:
|
|
return str(v)
|
|
return None # we don't know
|
|
|
|
_is_py2 = sys.version[0] == '2'
|
|
|
|
def _read_registry(root,key,value):
|
|
if _is_py2:
|
|
import _winreg as winreg
|
|
else:
|
|
import winreg
|
|
try:
|
|
hkey = winreg.OpenKey(root, key)
|
|
except:
|
|
return None
|
|
try:
|
|
(val, typ) = winreg.QueryValueEx(hkey, value)
|
|
except:
|
|
winreg.CloseKey(hkey)
|
|
return None
|
|
winreg.CloseKey(hkey)
|
|
return val
|
|
|
|
def pick_compiler(env):
|
|
if env['msvs_version']:
|
|
if int(env['msvs_version']) >= 15:
|
|
compilers_dict = env['msvc_compilers']
|
|
return compilers_dict[env['build_cpu']][env['host_cpu']]
|
|
return _pick_compiler_until_dev14(env)
|
|
|
|
def _pick_compiler_until_dev14(env):
|
|
if env['build_cpu'] == 'ia32' and env['host_cpu'] == 'ia32':
|
|
toolchain = os.path.join(env['vc_dir'], 'bin', '')
|
|
elif env['build_cpu'] == 'ia32' and env['host_cpu'] == 'x86-64':
|
|
toolchain = os.path.join(env['vc_dir'], 'bin', 'x86_amd64', '')
|
|
elif env['build_cpu'] == 'x86-64' and env['host_cpu'] == 'x86-64':
|
|
toolchain = os.path.join(env['vc_dir'], 'bin', 'amd64', '')
|
|
elif env['build_cpu'] == 'x86-64' and env['host_cpu'] == 'ia32':
|
|
toolchain = os.path.join(env['vc_dir'], 'bin', '')
|
|
elif env['compiler'] == 'ms':
|
|
die("Unknown build/target combination. build cpu=%s, " +
|
|
"host_cpu=%s" % ( env['build_cpu'], env['host_cpu']))
|
|
return toolchain
|
|
|
|
def _find_msvc_in_registry(env,version):
|
|
if _is_py2:
|
|
import _winreg as winreg
|
|
else:
|
|
import winreg
|
|
|
|
vs_ver = str(version) + '.0'
|
|
vs_key = 'SOFTWARE\\Microsoft\\VisualStudio\\' + vs_ver + '\\Setup\\VS'
|
|
vc_key = 'SOFTWARE\\Microsoft\\VisualStudio\\' + vs_ver + '\\Setup\\VC'
|
|
vs_dir = _read_registry(winreg.HKEY_LOCAL_MACHINE, vs_key, 'ProductDir')
|
|
vc_dir = _read_registry(winreg.HKEY_LOCAL_MACHINE, vc_key, 'ProductDir')
|
|
|
|
# On a 64-bit host, look for a 32-bit installation
|
|
|
|
if (not vs_dir or not vc_dir):
|
|
vs_key = 'SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\' + \
|
|
vs_ver + '\\Setup\\VS'
|
|
vc_key = 'SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\' + \
|
|
vs_ver + '\\Setup\\VC'
|
|
vs_dir = _read_registry(winreg.HKEY_LOCAL_MACHINE,
|
|
vs_key, 'ProductDir')
|
|
vc_dir = _read_registry(winreg.HKEY_LOCAL_MACHINE,
|
|
vc_key, 'ProductDir')
|
|
return (vs_dir,vc_dir)
|
|
|
|
def _figure_out_msvs_version_registry(env):
|
|
# starting with DEV15 (MSVS2017) MS stopped using the
|
|
# registry to store installation information.
|
|
versions = [14,12,11,10,9,8,7,6]
|
|
for v in versions:
|
|
(vs_dir,vc_dir) = _find_msvc_in_registry(env,v)
|
|
if vs_dir and vc_dir:
|
|
return (str(v),vs_dir)
|
|
return (None,None)
|
|
|
|
def set_msvs_env(env):
|
|
x64_target=False
|
|
if env['host_cpu'] == 'x86-64':
|
|
x64_target=True
|
|
|
|
x64_host = False
|
|
if env['build_cpu'] == 'x86-64':
|
|
x64_host=True
|
|
|
|
# Verify validity of chosen msvs_version in registry
|
|
|
|
uv = 0 # user version or 0 if no user version specified
|
|
if env['msvs_version'] != '' :
|
|
uv = int(env['msvs_version'])
|
|
|
|
# SEARCH FOUR WAYS
|
|
found = False
|
|
if uv:
|
|
# 1. look for specific version in registry
|
|
if uv < 15:
|
|
(vs_dir,vc_dir) = _find_msvc_in_registry(env,uv)
|
|
if vs_dir and vc_dir:
|
|
found = True
|
|
else:
|
|
warn("Could not find specified version of MSVS in registry.")
|
|
|
|
# 2. look in file system for specific version
|
|
if not found:
|
|
env['msvs_version'] = _figure_out_msvs_version_filesystem(env, uv)
|
|
if env['msvs_version']:
|
|
found = True
|
|
else:
|
|
die("Could not find specified version of MSVS in file system.")
|
|
|
|
# 3. Trying to locate newest version in file system. Must do this
|
|
# before generic registry search because regitry stopped being
|
|
# updated with DEV15/MSVS2017.
|
|
if not found:
|
|
env['msvs_version'] = _figure_out_msvs_version_filesystem(env)
|
|
if env['msvs_version']:
|
|
found = True
|
|
|
|
# 4. try latest version in registry
|
|
if not found:
|
|
env['msvs_version'], vs_dir = _figure_out_msvs_version_registry(env)
|
|
|
|
if not env['msvs_version']:
|
|
die("Did not find MSVS version!")
|
|
|
|
# "express" compiler is 32b only
|
|
vc = None
|
|
vs_dir = None
|
|
i = int(env['msvs_version'])
|
|
if i == 6: # 32b only
|
|
vc = _set_msvs_dev6(env,x64_host, x64_target)
|
|
elif i == 7: # 32b only
|
|
vc = _set_msvs_dev7(env,x64_host, x64_target)
|
|
elif i == 8:
|
|
vc = _set_msvs_dev8(env, x64_host, x64_target, vs_dir)
|
|
elif i == 9:
|
|
vc = _set_msvs_dev9(env, x64_host, x64_target, vs_dir)
|
|
elif i == 10:
|
|
vc = _set_msvs_dev10(env, x64_host, x64_target, vs_dir)
|
|
elif i == 11:
|
|
vc = _set_msvs_dev11(env, x64_host, x64_target, vs_dir)
|
|
elif i == 12:
|
|
vc = _set_msvs_dev12(env, x64_host, x64_target, vs_dir)
|
|
# And 12 shall be followed by 14. 13? 13 is Right Out!
|
|
elif i == 14:
|
|
vc = _set_msvs_dev14(env, x64_host, x64_target, vs_dir)
|
|
elif i == 15:
|
|
vc = _set_msvs_dev15(env, x64_host, x64_target, vs_dir)
|
|
else:
|
|
die("Unhandled MSVS version: " + env['msvs_version'])
|
|
|
|
msgb("FOUND MS VERSION",env['msvs_version'])
|
|
return vc
|
|
|