summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/cmake/caches/Fuchsia-stage2.cmake7
-rw-r--r--llvm/cmake/modules/LLVMExternalProjectUtils.cmake10
-rw-r--r--llvm/runtimes/CMakeLists.txt12
-rwxr-xr-xllvm/runtimes/llvm-strip-link.in27
4 files changed, 54 insertions, 2 deletions
diff --git a/clang/cmake/caches/Fuchsia-stage2.cmake b/clang/cmake/caches/Fuchsia-stage2.cmake
index 51efb2ddb8d..fab7f0d9e5b 100644
--- a/clang/cmake/caches/Fuchsia-stage2.cmake
+++ b/clang/cmake/caches/Fuchsia-stage2.cmake
@@ -74,6 +74,9 @@ foreach(target aarch64-linux-gnu;armv7-linux-gnueabihf;i386-linux-gnu;x86_64-lin
set(RUNTIMES_${target}_SANITIZER_CXX_ABI "libc++" CACHE STRING "")
set(RUNTIMES_${target}_SANITIZER_CXX_ABI_INTREE ON CACHE BOOL "")
set(RUNTIMES_${target}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "")
+
+ # Use .build-id link.
+ list(APPEND RUNTIME_BUILD_ID_LINK "${target}")
endif()
endforeach()
@@ -126,6 +129,9 @@ if(FUCHSIA_SDK)
set(RUNTIMES_${target}-fuchsia_LIBCXX_HERMETIC_STATIC_LIBRARY ON CACHE BOOL "")
set(RUNTIMES_${target}-fuchsia_LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY OFF CACHE BOOL "")
set(RUNTIMES_${target}-fuchsia_LIBCXX_ABI_VERSION 2 CACHE STRING "")
+
+ # Use .build-id link.
+ list(APPEND RUNTIME_BUILD_ID_LINK "${target}-fuchsia")
endforeach()
set(LLVM_RUNTIME_SANITIZERS "Address" CACHE STRING "")
@@ -134,6 +140,7 @@ endif()
set(LLVM_BUILTIN_TARGETS "${BUILTIN_TARGETS}" CACHE STRING "")
set(LLVM_RUNTIME_TARGETS "${RUNTIME_TARGETS}" CACHE STRING "")
+set(LLVM_RUNTIME_BUILD_ID_LINK_TARGETS "${RUNTIME_BUILD_ID_LINK}" CACHE STRING "")
# Setup toolchain.
set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")
diff --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
index 4d26a30f97b..dab71820ade 100644
--- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
+++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake
@@ -35,12 +35,14 @@ endfunction()
# Extra targets in the subproject to generate targets for
# PASSTHROUGH_PREFIXES prefix...
# Extra variable prefixes (name is always included) to pass down
+# STRIP_TOOL path
+# Use provided strip tool instead of the default one.
# )
function(llvm_ExternalProject_Add name source_dir)
cmake_parse_arguments(ARG
"USE_TOOLCHAIN;EXCLUDE_FROM_ALL;NO_INSTALL;ALWAYS_CLEAN"
"SOURCE_DIR"
- "CMAKE_ARGS;TOOLCHAIN_TOOLS;RUNTIME_LIBRARIES;DEPENDS;EXTRA_TARGETS;PASSTHROUGH_PREFIXES"
+ "CMAKE_ARGS;TOOLCHAIN_TOOLS;RUNTIME_LIBRARIES;DEPENDS;EXTRA_TARGETS;PASSTHROUGH_PREFIXES;STRIP_TOOL"
${ARGN})
canonicalize_tool_name(${name} nameCanon)
if(NOT ARG_TOOLCHAIN_TOOLS)
@@ -125,12 +127,16 @@ function(llvm_ExternalProject_Add name source_dir)
if(llvm-objcopy IN_LIST TOOLCHAIN_TOOLS)
list(APPEND compiler_args -DCMAKE_OBJCOPY=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-objcopy)
endif()
- if(llvm-strip IN_LIST TOOLCHAIN_TOOLS)
+ if(llvm-strip IN_LIST TOOLCHAIN_TOOLS AND NOT ARG_STRIP_TOOL)
list(APPEND compiler_args -DCMAKE_STRIP=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-strip)
endif()
list(APPEND ARG_DEPENDS ${TOOLCHAIN_TOOLS})
endif()
+ if(ARG_STRIP_TOOL)
+ list(APPEND compiler_args -DCMAKE_STRIP=${ARG_STRIP_TOOL})
+ endif()
+
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp
DEPENDS ${ARG_DEPENDS}
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index 4cb3ed9db2b..1866b256b4f 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -318,6 +318,14 @@ else() # if this is included from LLVM's CMake
list(APPEND runtime_names ${projName})
endforeach()
+ if(LLVM_RUNTIME_BUILD_ID_LINK_TARGETS)
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/llvm-strip-link.in
+ ${CMAKE_CURRENT_BINARY_DIR}/llvm-strip-link
+ @ONLY
+ )
+ endif()
+
function(runtime_default_target)
cmake_parse_arguments(ARG "" "" "DEPENDS;PREFIXES" ${ARGN})
@@ -426,6 +434,10 @@ else() # if this is included from LLVM's CMake
endif()
endforeach()
+ if(target IN_LIST LLVM_RUNTIME_BUILD_ID_LINK_TARGETS)
+ list(APPEND EXTRA_ARGS STRIP_TOOL ${CMAKE_CURRENT_BINARY_DIR}/llvm-strip-link)
+ endif()
+
llvm_ExternalProject_Add(runtimes-${name}
${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${${name}_deps}
diff --git a/llvm/runtimes/llvm-strip-link.in b/llvm/runtimes/llvm-strip-link.in
new file mode 100755
index 00000000000..f9f6a9883df
--- /dev/null
+++ b/llvm/runtimes/llvm-strip-link.in
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+import sys
+import subprocess
+
+
+ELF_MAGIC = '\x7fELF'
+
+with open(sys.argv[1], "rb") as f:
+ buf = f.read(len(ELF_MAGIC))
+ if buf != ELF_MAGIC:
+ sys.exit(0)
+
+llvm_objcopy = os.path.join('@LLVM_RUNTIME_OUTPUT_INTDIR@', 'llvm-objcopy')
+install_dir = os.path.join(os.getenv('DESTDIR', ''), '@CMAKE_INSTALL_PREFIX@')
+link_dir = os.path.join(install_dir, 'lib', 'debug', '.build-id')
+
+sys.exit(subprocess.call([
+ llvm_objcopy,
+ '--strip-sections',
+ '--build-id-link-dir=' + link_dir,
+ '--build-id-link-input=.debug',
+ '--build-id-link-output=',
+ sys.argv[1],
+]))
OpenPOWER on IntegriCloud