author | Mike Hommey <mh+mozilla@glandium.org> |
Wed, 27 Jul 2016 17:03:09 +0900 | |
changeset 307694 | 880f40a0a8327f3cff5c79966300052cdd4eb59a |
parent 307693 | f0b5125375e62995f973b4c829d735136bdf21a9 |
child 307695 | 24ba1412f0dc1b1b37e5097dc25908a963c7b04a |
push id | 30516 |
push user | cbook@mozilla.com |
push date | Tue, 02 Aug 2016 15:10:10 +0000 |
treeherder | mozilla-central@f299890191b2 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | chmanchester |
bugs | 1290026 |
milestone | 51.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
build/moz.configure/windows.configure | file | annotate | diff | comparison | revisions | |
config/config.mk | file | annotate | diff | comparison | revisions |
--- a/build/moz.configure/windows.configure +++ b/build/moz.configure/windows.configure @@ -146,16 +146,123 @@ add_old_configure_assignment( 'WINDOWSSDKDIR', delayed_getattr(valid_windows_sdk_dir, 'path')) add_old_configure_assignment( 'MOZ_WINSDK_MAXVER', depends(valid_windows_sdk_dir)( lambda x: '0x%04X0000' % x.version if x else None)) +@imports(_from='mozbuild.shellutil', _import='quote') +def valid_ucrt_sdk_dir_result(value): + if value: + return '%s in %s' % (value.version, quote(value.path)) + +@depends_win(windows_sdk_dir, 'WINDOWSSDKDIR') +@checking('for Universal CRT SDK', valid_ucrt_sdk_dir_result) +@imports(_from='__builtin__', _import='sorted') +def valid_ucrt_sdk_dir(windows_sdk_dir, windows_sdk_dir_env): + if windows_sdk_dir_env: + windows_sdk_dir_env = windows_sdk_dir_env[0] + sdks = {} + for d in windows_sdk_dir: + ucrt_dir = get_include_dir(d, 'ucrt') + if ucrt_dir: + version = os.path.basename(os.path.dirname(ucrt_dir)) + # We're supposed to always find a version in the directory, because + # the 8.1 SDK, which doesn't have a version in the directory, doesn't + # contain the Universal CRT SDK. When the main SDK is 8.1, there + # is, however, supposed to be a reduced install of the SDK 10 + # with the UCRT. + if version != 'include': + sdks[d] = Version(version) + continue + if d == windows_sdk_dir_env: + raise FatalCheckError( + 'The SDK in WINDOWSSDKDIR (%s) does not contain the Universal ' + 'CRT.' % windows_sdk_dir_env) + + valid_sdks = sorted(sdks, key=lambda x: sdks[x], reverse=True) + if not valid_sdks: + raise FatalCheckError('Cannot find the Universal CRT SDK. ' + 'Please install it.') + + return namespace( + path=valid_sdks[0], + version=sdks[valid_sdks[0]], + ) + + +@depends_win(c_compiler) +@imports('os') +def vc_path(c_compiler): + if c_compiler.type != 'msvc': + return + # Normally, we'd start from c_compiler.compiler, but for now, it's not the + # ideal full path to the compiler. At least, we're guaranteed find_program + # will get us the one we found in toolchain.configure. + cl = find_program(c_compiler.compiler) + result = os.path.dirname(cl) + while True: + next, p = os.path.split(result) + if next == result: + die('Cannot determine the Visual C++ directory the compiler (%s) ' + 'is in' % cl) + result = next + if p.lower() == 'bin': + break + return result + + +@depends_win(vc_path) +@checking('for the Debug Interface Access SDK', lambda x: x or 'not found') +def dia_sdk_dir(vc_path): + if vc_path: + path = os.path.join(os.path.dirname(vc_path), 'DIA SDK') + if os.path.isdir(path): + return path + + +@depends_win(vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir) +@imports('os') +def include_path(vc_path, windows_sdk_dir, ucrt_sdk_dir, dia_sdk_dir): + if not vc_path: + return + atlmfc_dir = os.path.join(vc_path, 'atlmfc', 'include') + if not os.path.isdir(atlmfc_dir): + die('Cannot find the ATL/MFC headers in the Visual C++ directory (%s). ' + 'Please install them.' % vc_path) + + winrt_dir = get_include_dir(windows_sdk_dir.path, 'winrt') + if not os.path.isdir(winrt_dir): + die('Cannot find the WinRT headers in the Windows SDK directory (%s). ' + 'Please install them.' % windows_sdk_dir.path) + + includes = [] + include_env = os.environ.get('INCLUDE') + if include_env: + includes.append(include_env) + includes.extend(( + os.path.join(vc_path, 'include'), + atlmfc_dir, + get_include_dir(windows_sdk_dir.path, 'shared'), + get_include_dir(windows_sdk_dir.path, 'um'), + winrt_dir, + get_include_dir(ucrt_sdk_dir.path, 'ucrt'), + )) + if dia_sdk_dir: + includes.append(os.path.join(dia_sdk_dir, 'include')) + # Set in the environment for old-configure + includes = os.pathsep.join(includes) + os.environ['INCLUDE'] = includes + return includes + +set_config('INCLUDE', include_path) + + option(env='MT', nargs=1, help='Path to the Microsoft Manifest Tool') @depends_win(valid_windows_sdk_dir) @imports(_from='os', _import='environ') @imports('platform') def sdk_bin_path(valid_windows_sdk_dir): if not valid_windows_sdk_dir: return
--- a/config/config.mk +++ b/config/config.mk @@ -353,16 +353,22 @@ SDK_LIB_DIR = $(DIST)/sdk/lib SDK_BIN_DIR = $(DIST)/sdk/bin DEPENDENCIES = .md ifdef MACOSX_DEPLOYMENT_TARGET export MACOSX_DEPLOYMENT_TARGET endif # MACOSX_DEPLOYMENT_TARGET +# Export to propagate to cl and submake for third-party code. +# Eventually, we'll want to just use -I. +ifdef INCLUDE +export INCLUDE +endif + ifdef MOZ_USING_CCACHE ifdef CLANG_CXX export CCACHE_CPP2=1 endif endif # Set link flags according to whether we want a console. ifeq ($(OS_ARCH),WINNT)