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, ...@@ -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') CHROME_TOOLS_SHIM_DIR = os.path.join(LLVM_DIR, 'tools', 'chrometools')
LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build', LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build',
'Release+Asserts') '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') COMPILER_RT_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, 'compiler-rt')
CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang') CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang')
LLD_DIR = os.path.join(LLVM_DIR, 'tools', 'lld') LLD_DIR = os.path.join(LLVM_DIR, 'tools', 'lld')
...@@ -614,22 +614,27 @@ def UpdateClang(args): ...@@ -614,22 +614,27 @@ def UpdateClang(args):
deployment_env = os.environ.copy() deployment_env = os.environ.copy()
deployment_env['MACOSX_DEPLOYMENT_TARGET'] = deployment_target deployment_env['MACOSX_DEPLOYMENT_TARGET'] = deployment_target
# Build lld. This is done separately from the rest of the build because lld # Build lld and code coverage tools. This is done separately from the rest of
# requires threading support. # the build because these tools require threading support.
print 'Building lld' tools_with_threading = [ 'lld', 'llvm-cov', 'llvm-profdata' ]
if os.path.exists(LLD_BUILD_DIR): print 'Building the following tools with threading support: %s' % (
RmTree(LLD_BUILD_DIR) str(tools_with_threading))
EnsureDirExists(LLD_BUILD_DIR)
os.chdir(LLD_BUILD_DIR)
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_C_FLAGS=' + ' '.join(cflags),
'-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags), '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags),
'-DCMAKE_EXE_LINKER_FLAGS=' + ' '.join(ldflags), '-DCMAKE_EXE_LINKER_FLAGS=' + ' '.join(ldflags),
'-DCMAKE_SHARED_LINKER_FLAGS=' + ' '.join(ldflags), '-DCMAKE_SHARED_LINKER_FLAGS=' + ' '.join(ldflags),
'-DCMAKE_MODULE_LINKER_FLAGS=' + ' '.join(ldflags)] '-DCMAKE_MODULE_LINKER_FLAGS=' + ' '.join(ldflags)]
if cc is not None: lld_cmake_args.append('-DCMAKE_C_COMPILER=' + cc) if cc is not None:
if cxx is not None: lld_cmake_args.append('-DCMAKE_CXX_COMPILER=' + cxx) 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: if args.lto_lld:
# Build lld with LTO. That speeds up the linker by ~10%. # Build lld with LTO. That speeds up the linker by ~10%.
...@@ -641,16 +646,16 @@ def UpdateClang(args): ...@@ -641,16 +646,16 @@ def UpdateClang(args):
# llvm-ranlib do, so use them. # llvm-ranlib do, so use them.
ar = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ar') ar = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ar')
ranlib = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ranlib') ranlib = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'llvm-ranlib')
lld_cmake_args += [ threads_enabled_cmake_args += [
'-DCMAKE_AR=' + ar, '-DCMAKE_AR=' + ar,
'-DCMAKE_RANLIB=' + ranlib, '-DCMAKE_RANLIB=' + ranlib,
'-DLLVM_ENABLE_LTO=thin', '-DLLVM_ENABLE_LTO=thin',
'-DLLVM_USE_LINKER=lld'] '-DLLVM_USE_LINKER=lld']
RmCmakeCache('.') RmCmakeCache('.')
RunCommand(['cmake'] + lld_cmake_args + [LLVM_DIR], msvc_arch='x64', RunCommand(['cmake'] + threads_enabled_cmake_args + [LLVM_DIR],
env=deployment_env) msvc_arch='x64', env=deployment_env)
RunCommand(['ninja', 'lld'], msvc_arch='x64') RunCommand(['ninja'] + tools_with_threading, msvc_arch='x64')
# Build clang and other tools. # Build clang and other tools.
CreateChromeToolsShim() CreateChromeToolsShim()
...@@ -681,14 +686,15 @@ def UpdateClang(args): ...@@ -681,14 +686,15 @@ def UpdateClang(args):
msvc_arch='x64', env=deployment_env) msvc_arch='x64', env=deployment_env)
RunCommand(['ninja'], msvc_arch='x64') 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': 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')) 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')) os.path.join(LLVM_BUILD_DIR, 'bin'))
else: 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')) os.path.join(LLVM_BUILD_DIR, 'bin'))
if chrome_tools: 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