diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index 2ad067e..0bd3b8bb 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -27,7 +27,7 @@ # Do NOT CHANGE this if you don't know what you're doing -- see # https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md # Reverting problematic clang rolls is safe, though. -CLANG_REVISION = '315613' +CLANG_REVISION = '317263' use_head_revision = bool(os.environ.get('LLVM_FORCE_HEAD_REVISION', '0') in ('1', 'YES')) @@ -35,7 +35,7 @@ CLANG_REVISION = 'HEAD' # This is incremented when pushing a new build of Clang at the same revision. -CLANG_SUB_REVISION=1 +CLANG_SUB_REVISION=2 PACKAGE_VERSION = "%s-%s" % (CLANG_REVISION, CLANG_SUB_REVISION) @@ -48,10 +48,10 @@ LLVM_BOOTSTRAP_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-bootstrap') LLVM_BOOTSTRAP_INSTALL_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-bootstrap-install') -LLVM_LTO_LLD_DIR = os.path.join(THIRD_PARTY_DIR, 'llvm-lto-lld') CHROME_TOOLS_SHIM_DIR = os.path.join(LLVM_DIR, 'tools', 'chrometools') LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build', 'Release+Asserts') +LLD_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, 'lld') COMPILER_RT_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, 'compiler-rt') CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang') LLD_DIR = os.path.join(LLVM_DIR, 'tools', 'lld') @@ -569,37 +569,6 @@ cxxflags = ['--gcc-toolchain=' + args.gcc_toolchain] print 'Building final compiler' - # Build lld with LTO. That speeds up the linker by ~10%. - # We only use LTO for Linux now. - if args.bootstrap and args.lto_lld: - print 'Building LTO lld' - if os.path.exists(LLVM_LTO_LLD_DIR): - RmTree(LLVM_LTO_LLD_DIR) - EnsureDirExists(LLVM_LTO_LLD_DIR) - os.chdir(LLVM_LTO_LLD_DIR) - - # The linker expects all archive members to have symbol tables, so the - # archiver needs to be able to create symbol tables for bitcode files. - # GNU ar and ranlib don't understand bitcode files, but llvm-ar and - # llvm-ranlib do, so use them. - ar = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ar') - ranlib = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ranlib') - - lto_cmake_args = base_cmake_args + [ - '-DCMAKE_C_COMPILER=' + cc, - '-DCMAKE_CXX_COMPILER=' + cxx, - '-DCMAKE_AR=' + ar, - '-DCMAKE_RANLIB=' + ranlib, - '-DLLVM_ENABLE_LTO=thin', - '-DLLVM_USE_LINKER=lld', - '-DCMAKE_C_FLAGS=' + ' '.join(cflags), - '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags)] - - RmCmakeCache('.') - RunCommand(['cmake'] + lto_cmake_args + [LLVM_DIR]) - RunCommand(['ninja', 'lld']) - - # LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is # needed, on OS X it requires libc++. clang only automatically links to libc++ # when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run @@ -619,7 +588,6 @@ # This makes running package.py over 10% faster (30 min instead of 34 min) RmTree(LIBCXX_DIR) - # Build clang. # If building at head, define a macro that plugins can use for #ifdefing # out code that builds at head, but not at CLANG_REVISION or vice versa. @@ -635,13 +603,52 @@ cxxflags += ['/Zi', '/GS-'] ldflags += ['/DEBUG', '/OPT:REF', '/OPT:ICF'] - CreateChromeToolsShim() - deployment_env = None if deployment_target: deployment_env = os.environ.copy() deployment_env['MACOSX_DEPLOYMENT_TARGET'] = deployment_target + # Build lld. This is done separately from the rest of the build because lld + # requires threading support. + print 'Building lld' + if os.path.exists(LLD_BUILD_DIR): + RmTree(LLD_BUILD_DIR) + EnsureDirExists(LLD_BUILD_DIR) + os.chdir(LLD_BUILD_DIR) + + lld_cmake_args = base_cmake_args + [ + '-DCMAKE_C_FLAGS=' + ' '.join(cflags), + '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags), + '-DCMAKE_EXE_LINKER_FLAGS=' + ' '.join(ldflags), + '-DCMAKE_SHARED_LINKER_FLAGS=' + ' '.join(ldflags), + '-DCMAKE_MODULE_LINKER_FLAGS=' + ' '.join(ldflags)] + if cc is not None: lld_cmake_args.append('-DCMAKE_C_COMPILER=' + cc) + if cxx is not None: lld_cmake_args.append('-DCMAKE_CXX_COMPILER=' + cxx) + + if args.lto_lld: + # Build lld with LTO. That speeds up the linker by ~10%. + # We only use LTO for Linux now. + # + # The linker expects all archive members to have symbol tables, so the + # archiver needs to be able to create symbol tables for bitcode files. + # GNU ar and ranlib don't understand bitcode files, but llvm-ar and + # llvm-ranlib do, so use them. + ar = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ar') + ranlib = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ranlib') + lld_cmake_args += [ + '-DCMAKE_AR=' + ar, + '-DCMAKE_RANLIB=' + ranlib, + '-DLLVM_ENABLE_LTO=thin', + '-DLLVM_USE_LINKER=lld'] + + RmCmakeCache('.') + RunCommand(['cmake'] + lld_cmake_args + [LLVM_DIR], msvc_arch='x64', + env=deployment_env) + RunCommand(['ninja', 'lld'], msvc_arch='x64') + + # Build clang and other tools. + CreateChromeToolsShim() + cmake_args = [] # TODO(thakis): Unconditionally append this to base_cmake_args instead once # compiler-rt can build with clang-cl on Windows (http://llvm.org/PR23698) @@ -668,9 +675,14 @@ msvc_arch='x64', env=deployment_env) RunCommand(['ninja'], msvc_arch='x64') - # Copy LTO-optimized lld, if any. - if args.bootstrap and args.lto_lld: - CopyFile(os.path.join(LLVM_LTO_LLD_DIR, 'bin', 'lld'), + # Copy in the threaded version of lld. + if sys.platform == 'win32': + CopyFile(os.path.join(LLD_BUILD_DIR, 'bin', 'lld-link.exe'), + os.path.join(LLVM_BUILD_DIR, 'bin')) + CopyFile(os.path.join(LLD_BUILD_DIR, 'bin', 'lld.pdb'), + os.path.join(LLVM_BUILD_DIR, 'bin')) + else: + CopyFile(os.path.join(LLD_BUILD_DIR, 'bin', 'lld'), os.path.join(LLVM_BUILD_DIR, 'bin')) if chrome_tools: