Commit fe9ee5d8 authored by Max Moroz's avatar Max Moroz Committed by Commit Bot

Build code coverage tools with LLVM_ENABLE_THREADS enabled + minor refactoring.

Threaded versions of the tools make processing code coverage data and generating
code coverage reports an order of magnitude faster. See the experiments data
in https://bugs.chromium.org/p/chromium/issues/detail?id=759794#c34.

Bug: 759794
Change-Id: Ia5776de8d250d2e4bb23de79dd921e22e78a3095
Reviewed-on: https://chromium-review.googlesource.com/825985Reviewed-by: default avatarHans Wennborg <hans@chromium.org>
Reviewed-by: default avatarAbhishek Arya <inferno@chromium.org>
Commit-Queue: Max Moroz <mmoroz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#524199}
parent b5494c4a
......@@ -51,7 +51,7 @@ LLVM_BOOTSTRAP_INSTALL_DIR = os.path.join(THIRD_PARTY_DIR,
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')
THREADS_ENABLED_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, 'threads_enabled')
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')
......@@ -614,22 +614,27 @@ def UpdateClang(args):
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)
# Build lld and code coverage tools. This is done separately from the rest of
# the build because these tools require threading support.
tools_with_threading = [ 'lld', 'llvm-cov', 'llvm-profdata' ]
print 'Building the following tools with threading support: %s' % (
str(tools_with_threading))
lld_cmake_args = base_cmake_args + [
if os.path.exists(THREADS_ENABLED_BUILD_DIR):
RmTree(THREADS_ENABLED_BUILD_DIR)
EnsureDirExists(THREADS_ENABLED_BUILD_DIR)
os.chdir(THREADS_ENABLED_BUILD_DIR)
threads_enabled_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 cc is not None:
threads_enabled_cmake_args.append('-DCMAKE_C_COMPILER=' + cc)
if cxx is not None:
threads_enabled_cmake_args.append('-DCMAKE_CXX_COMPILER=' + cxx)
if args.lto_lld:
# Build lld with LTO. That speeds up the linker by ~10%.
......@@ -641,16 +646,16 @@ def UpdateClang(args):
# 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 += [
threads_enabled_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')
RunCommand(['cmake'] + threads_enabled_cmake_args + [LLVM_DIR],
msvc_arch='x64', env=deployment_env)
RunCommand(['ninja'] + tools_with_threading, msvc_arch='x64')
# Build clang and other tools.
CreateChromeToolsShim()
......@@ -681,14 +686,15 @@ def UpdateClang(args):
msvc_arch='x64', env=deployment_env)
RunCommand(['ninja'], msvc_arch='x64')
# Copy in the threaded version of lld.
# Copy in the threaded versions of lld and other tools.
if sys.platform == 'win32':
CopyFile(os.path.join(LLD_BUILD_DIR, 'bin', 'lld-link.exe'),
CopyFile(os.path.join(THREADS_ENABLED_BUILD_DIR, 'bin', 'lld-link.exe'),
os.path.join(LLVM_BUILD_DIR, 'bin'))
CopyFile(os.path.join(LLD_BUILD_DIR, 'bin', 'lld.pdb'),
CopyFile(os.path.join(THREADS_ENABLED_BUILD_DIR, 'bin', 'lld.pdb'),
os.path.join(LLVM_BUILD_DIR, 'bin'))
else:
CopyFile(os.path.join(LLD_BUILD_DIR, 'bin', 'lld'),
for tool in tools_with_threading:
CopyFile(os.path.join(THREADS_ENABLED_BUILD_DIR, 'bin', tool),
os.path.join(LLVM_BUILD_DIR, 'bin'))
if chrome_tools:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment