Drop Visual Studio 2015 build support and older (#482)

* Drop Visual Studio 2015 build support and older

* Flake
This commit is contained in:
juj
2020-04-28 17:25:19 +03:00
committed by GitHub
parent 6dd96f1f2c
commit 7016bd60ce

102
emsdk.py
View File

@@ -217,38 +217,29 @@ if WINDOWS:
# Detect which CMake generator to use when building on Windows # Detect which CMake generator to use when building on Windows
if '--mingw' in sys.argv: if '--mingw' in sys.argv:
CMAKE_GENERATOR = 'MinGW Makefiles' CMAKE_GENERATOR = 'MinGW Makefiles'
elif '--vs2013' in sys.argv:
CMAKE_GENERATOR = 'Visual Studio 12'
elif '--vs2015' in sys.argv:
CMAKE_GENERATOR = 'Visual Studio 14'
elif '--vs2017' in sys.argv: elif '--vs2017' in sys.argv:
CMAKE_GENERATOR = 'Visual Studio 15' CMAKE_GENERATOR = 'Visual Studio 15'
elif '--vs2019' in sys.argv: elif '--vs2019' in sys.argv:
CMAKE_GENERATOR = 'Visual Studio 16' CMAKE_GENERATOR = 'Visual Studio 16'
else: else:
program_files = os.environ['ProgramFiles(x86)'] if 'ProgramFiles(x86)' in os.environ else os.environ['ProgramFiles'] program_files = os.environ['ProgramFiles(x86)'] if 'ProgramFiles(x86)' in os.environ else os.environ['ProgramFiles']
vs2019_exists = len(vswhere(16)) > 0
vs2017_exists = len(vswhere(15)) > 0 vs2017_exists = len(vswhere(15)) > 0
vs2015_exists = 'VS140COMNTOOLS' in os.environ or 'VSSDK140Install' in os.environ or os.path.isdir(os.path.join(program_files, 'Microsoft Visual Studio 14.0'))
vs2013_exists = 'VS120COMNTOOLS' in os.environ or os.path.isdir(os.path.join(program_files, 'Microsoft Visual Studio 12.0'))
mingw_exists = which('mingw32-make') is not None and which('g++') is not None mingw_exists = which('mingw32-make') is not None and which('g++') is not None
if vs2015_exists: if vs2019_exists:
CMAKE_GENERATOR = 'Visual Studio 14' CMAKE_GENERATOR = 'Visual Studio 16'
elif vs2017_exists: elif vs2017_exists:
# VS2017 has an LLVM build issue, see # VS2017 has an LLVM build issue, see
# https://github.com/kripken/emscripten-fastcomp/issues/185 # https://github.com/kripken/emscripten-fastcomp/issues/185
CMAKE_GENERATOR = 'Visual Studio 15' CMAKE_GENERATOR = 'Visual Studio 15'
elif mingw_exists: elif mingw_exists:
CMAKE_GENERATOR = 'MinGW Makefiles' CMAKE_GENERATOR = 'MinGW Makefiles'
elif vs2013_exists:
# VS2013 is no longer supported, so attempt it as a last resort if someone
# might want to insist using it.
CMAKE_GENERATOR = 'Visual Studio 12'
else: else:
# No detected generator # No detected generator
CMAKE_GENERATOR = '' CMAKE_GENERATOR = ''
sys.argv = [a for a in sys.argv if a not in ('--mingw', '--vs2013', '--vs2015', '--vs2017', '--vs2019')] sys.argv = [a for a in sys.argv if a not in ('--mingw', '--vs2017', '--vs2019')]
# Computes a suitable path prefix to use when building with a given generator. # Computes a suitable path prefix to use when building with a given generator.
@@ -257,11 +248,9 @@ def cmake_generator_prefix():
return '_vs2019' return '_vs2019'
if CMAKE_GENERATOR == 'Visual Studio 15': if CMAKE_GENERATOR == 'Visual Studio 15':
return '_vs2017' return '_vs2017'
elif CMAKE_GENERATOR == 'Visual Studio 14':
return '_vs2015'
elif CMAKE_GENERATOR == 'MinGW Makefiles': elif CMAKE_GENERATOR == 'MinGW Makefiles':
return '_mingw' return '_mingw'
# Unix Makefiles and Visual Studio 2013 do not specify a path prefix for backwards path compatibility # Unix Makefiles do not specify a path prefix for backwards path compatibility
return '' return ''
@@ -826,15 +815,7 @@ def decide_cmake_build_type(tool):
# The root directory of the build. # The root directory of the build.
def llvm_build_dir(tool): def llvm_build_dir(tool):
generator_suffix = '' generator_suffix = ''
if CMAKE_GENERATOR == 'Visual Studio 10': if CMAKE_GENERATOR == 'Visual Studio 15':
generator_suffix = '_vs2010'
elif CMAKE_GENERATOR == 'Visual Studio 11':
generator_suffix = '_vs2012'
elif CMAKE_GENERATOR == 'Visual Studio 12':
generator_suffix = '_vs2013'
elif CMAKE_GENERATOR == 'Visual Studio 14':
generator_suffix = '_vs2015'
elif CMAKE_GENERATOR == 'Visual Studio 15':
generator_suffix = '_vs2017' generator_suffix = '_vs2017'
elif CMAKE_GENERATOR == 'Visual Studio 16': elif CMAKE_GENERATOR == 'Visual Studio 16':
generator_suffix = '_vs2019' generator_suffix = '_vs2019'
@@ -888,8 +869,11 @@ def build_env(generator):
# See https://groups.google.com/forum/#!topic/emscripten-discuss/5Or6QIzkqf0 # See https://groups.google.com/forum/#!topic/emscripten-discuss/5Or6QIzkqf0
if OSX: if OSX:
build_env['CXXFLAGS'] = ((build_env['CXXFLAGS'] + ' ') if hasattr(build_env, 'CXXFLAGS') else '') + '-stdlib=libc++' build_env['CXXFLAGS'] = ((build_env['CXXFLAGS'] + ' ') if hasattr(build_env, 'CXXFLAGS') else '') + '-stdlib=libc++'
elif 'Visual Studio 15' in generator: elif 'Visual Studio 15' in generator or 'Visual Studio 16' in generator:
path = vswhere(15) if 'Visual Studio 16' in generator:
path = vswhere(16)
else:
path = vswhere(15)
build_env['VCTargetsPath'] = os.path.join(path, 'Common7\\IDE\\VC\\VCTargets') build_env['VCTargetsPath'] = os.path.join(path, 'Common7\\IDE\\VC\\VCTargets')
# CMake and VS2017 cl.exe needs to have mspdb140.dll et al. in its PATH. # CMake and VS2017 cl.exe needs to have mspdb140.dll et al. in its PATH.
@@ -899,70 +883,32 @@ def build_env(generator):
if os.path.isdir(path): if os.path.isdir(path):
build_env['PATH'] = build_env['PATH'] + ';' + path build_env['PATH'] = build_env['PATH'] + ';' + path
elif 'Visual Studio 14' in generator or 'Visual Studio 2015' in generator:
build_env['VCTargetsPath'] = os.path.join(os.environ['ProgramFiles(x86)'], 'MSBuild/Microsoft.Cpp/v4.0/V140')
# CMake and VS2015 cl.exe needs to have mspdb140.dll et al. in its PATH.
vc_bin_paths = [os.path.join(os.environ['ProgramFiles'], 'Microsoft Visual Studio 14.0\\VC\\bin'),
os.path.join(os.environ['ProgramFiles(x86)'], 'Microsoft Visual Studio 14.0\\VC\\bin')]
for path in vc_bin_paths:
if os.path.isdir(path):
build_env['PATH'] = build_env['PATH'] + ';' + path
elif 'Visual Studio 12' in generator or 'Visual Studio 2013' in generator:
build_env['VCTargetsPath'] = os.path.join(os.environ['ProgramFiles(x86)'], 'MSBuild/Microsoft.Cpp/v4.0/V120')
return build_env return build_env
def get_generator_for_sln_file(sln_file): def get_generator_for_sln_file(sln_file):
contents = open(sln_file, 'r').read() contents = open(sln_file, 'r').read()
if '# Visual Studio 16' in contents: if '# Visual Studio 16' in contents: # VS2019
return 'Visual Studio 16' return 'Visual Studio 16'
if '# Visual Studio 15' in contents: if '# Visual Studio 15' in contents: # VS2017
return 'Visual Studio 15' return 'Visual Studio 15'
if '# Visual Studio Express 2015' in contents or '# Visual Studio 2015' in contents or '# Visual Studio 14' in contents:
return 'Visual Studio 14'
if '# Visual Studio Express 2013' in contents or '# Visual Studio 2013' in contents or '# Visual Studio 12' in contents:
return 'Visual Studio 12'
raise Exception('Unknown generator used to build solution file ' + sln_file) raise Exception('Unknown generator used to build solution file ' + sln_file)
def find_msbuild(sln_file): def find_msbuild(sln_file):
# The following logic attempts to find a Visual Studio version specific # The following logic attempts to find a Visual Studio version specific
# MSBuild.exe from a list of known locations. This logic exists because it was # MSBuild.exe from a list of known locations.
# detected that when multiple Visual Studio versions exist (VS2013 & VS2015),
# their MSBuild.exes might not be able to drive a build proper. This search is
# messy, and perhaps in VS >= 2017 or similar none of this logic would be
# needed. Ideally would be able to do "cmake --build
# path/to/cmake/build/directory --config
# Debug|RelWithDebInfo|MinSizeRel|Release" across all platforms, but around
# VS2013 era this did not work. This could be reattempted when support for VS
# 2015 is dropped.
search_paths_vs2015 = [os.path.join(os.environ['ProgramFiles'], 'MSBuild/14.0/Bin/amd64'),
os.path.join(os.environ['ProgramFiles(x86)'], 'MSBuild/14.0/Bin/amd64'),
os.path.join(os.environ['ProgramFiles'], 'MSBuild/14.0/Bin'),
os.path.join(os.environ['ProgramFiles(x86)'], 'MSBuild/14.0/Bin')]
search_paths_vs2013 = [os.path.join(os.environ['ProgramFiles'], 'MSBuild/12.0/Bin/amd64'),
os.path.join(os.environ['ProgramFiles(x86)'], 'MSBuild/12.0/Bin/amd64'),
os.path.join(os.environ['ProgramFiles'], 'MSBuild/12.0/Bin'),
os.path.join(os.environ['ProgramFiles(x86)'], 'MSBuild/12.0/Bin')]
search_paths_old = [os.path.join(os.environ["WINDIR"], 'Microsoft.NET/Framework/v4.0.30319')]
generator = get_generator_for_sln_file(sln_file) generator = get_generator_for_sln_file(sln_file)
debug_print('find_msbuild looking for generator ' + str(generator)) debug_print('find_msbuild looking for generator ' + str(generator))
if generator == 'Visual Studio 16': if generator == 'Visual Studio 16': # VS2019
path = vswhere(16) path = vswhere(16)
search_paths = [os.path.join(path, 'MSBuild/Current/Bin'), search_paths = [os.path.join(path, 'MSBuild/Current/Bin'),
os.path.join(path, 'MSBuild/15.0/Bin/amd64'), os.path.join(path, 'MSBuild/15.0/Bin/amd64'),
os.path.join(path, 'MSBuild/15.0/Bin')] os.path.join(path, 'MSBuild/15.0/Bin')]
elif generator == 'Visual Studio 15': elif generator == 'Visual Studio 15': # VS2017
path = vswhere(15) path = vswhere(15)
search_paths = [os.path.join(path, 'MSBuild/15.0/Bin/amd64'), search_paths = [os.path.join(path, 'MSBuild/15.0/Bin/amd64'),
os.path.join(path, 'MSBuild/15.0/Bin')] os.path.join(path, 'MSBuild/15.0/Bin')]
elif generator == 'Visual Studio 14':
search_paths = search_paths_vs2015
elif generator == 'Visual Studio 12':
search_paths = search_paths_vs2013 + search_paths_old
else: else:
raise Exception('Unknown generator!') raise Exception('Unknown generator!')
@@ -1111,7 +1057,7 @@ def build_llvm_fastcomp(tool):
args = [] args = []
cmake_generator = CMAKE_GENERATOR cmake_generator = CMAKE_GENERATOR
if 'Visual Studio 16' in CMAKE_GENERATOR: if 'Visual Studio 16' in CMAKE_GENERATOR: # VS2019
# With Visual Studio 16 2019, CMake changed the way they specify target arch. # With Visual Studio 16 2019, CMake changed the way they specify target arch.
# Instead of appending it into the CMake generator line, it is specified # Instead of appending it into the CMake generator line, it is specified
# with a -A arch parameter. # with a -A arch parameter.
@@ -1209,7 +1155,7 @@ def build_llvm_monorepo(tool):
# It looks like compiler-rt is not compatible to build on Windows? # It looks like compiler-rt is not compatible to build on Windows?
args += ['-DLLVM_ENABLE_PROJECTS="clang;clang;lld;lld"'] args += ['-DLLVM_ENABLE_PROJECTS="clang;clang;lld;lld"']
cmake_generator = CMAKE_GENERATOR cmake_generator = CMAKE_GENERATOR
if 'Visual Studio 16' in CMAKE_GENERATOR: if 'Visual Studio 16' in CMAKE_GENERATOR: # VS2019
# With Visual Studio 16 2019, CMake changed the way they specify target arch. # With Visual Studio 16 2019, CMake changed the way they specify target arch.
# Instead of appending it into the CMake generator line, it is specified # Instead of appending it into the CMake generator line, it is specified
# with a -A arch parameter. # with a -A arch parameter.
@@ -1302,7 +1248,7 @@ def emscripten_post_install(tool):
# Configure # Configure
cmake_generator = CMAKE_GENERATOR cmake_generator = CMAKE_GENERATOR
if 'Visual Studio 16' in CMAKE_GENERATOR: if 'Visual Studio 16' in CMAKE_GENERATOR: # VS2019
# With Visual Studio 16 2019, CMake changed the way they specify target arch. # With Visual Studio 16 2019, CMake changed the way they specify target arch.
# Instead of appending it into the CMake generator line, it is specified # Instead of appending it into the CMake generator line, it is specified
# with a -A arch parameter. # with a -A arch parameter.
@@ -1360,7 +1306,7 @@ def build_binaryen_tool(tool):
args = [] args = []
cmake_generator = CMAKE_GENERATOR cmake_generator = CMAKE_GENERATOR
if 'Visual Studio 16' in CMAKE_GENERATOR: if 'Visual Studio 16' in CMAKE_GENERATOR: # VS2019
# With Visual Studio 16 2019, CMake changed the way they specify target arch. # With Visual Studio 16 2019, CMake changed the way they specify target arch.
# Instead of appending it into the CMake generator line, it is specified # Instead of appending it into the CMake generator line, it is specified
# with a -A arch parameter. # with a -A arch parameter.
@@ -1826,7 +1772,7 @@ class Tool(object):
if len(msbuild_dir) > 0: if len(msbuild_dir) > 0:
return True return True
else: else:
return "Visual Studio 2010 was not found" return "Visual Studio was not found!"
else: else:
return True return True
@@ -2774,7 +2720,7 @@ def main():
purposes. Default: Enabled purposes. Default: Enabled
--disable-assertions: Forces assertions off during the build. --disable-assertions: Forces assertions off during the build.
--vs2013/--vs2015/--vs2017: If building from source, overrides to build --vs2017/--vs2019: If building from source, overrides to build
using the specified compiler. When installing using the specified compiler. When installing
precompiled packages, this has no effect. precompiled packages, this has no effect.
Note: The same compiler specifier must be Note: The same compiler specifier must be
@@ -2793,7 +2739,7 @@ def main():
if WINDOWS: if WINDOWS:
print(''' print('''
emsdk activate [--global] [--embedded] [--build=type] [--vs2013/--vs2015/--vs2017] <tool/sdk> emsdk activate [--global] [--embedded] [--build=type] [--vs2017/--vs2019] <tool/sdk>
- Activates the given tool or SDK in the - Activates the given tool or SDK in the
environment of the current shell. If the environment of the current shell. If the
@@ -2806,7 +2752,7 @@ def main():
directory rather than the user home directory rather than the user home
directory. If a custom compiler version was directory. If a custom compiler version was
used to override the compiler to use, pass used to override the compiler to use, pass
the same --vs2013/--vs2015/--vs2017 parameter the same --vs2017/--vs2019 parameter
here to choose which version to activate. here to choose which version to activate.
emcmdprompt.bat - Spawns a new command prompt window with the emcmdprompt.bat - Spawns a new command prompt window with the