Skip to content

Commit a3a975c

Browse files
author
android-build-team Robot
committed
release-request-655284b0-7f0b-48b5-b01d-27f48a99f2c0-for-git_oc-mr1-release-4017105 snap-temp-L82600000064873863
Change-Id: I3498bddcdd82f82338d6a71f0a1ff13560bbf88b
2 parents d87c20e + 142862f commit a3a975c

36 files changed

+2279
-831
lines changed

.arcconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"project_id" : "libunwind",
3-
"conduit_uri" : "http://reviews.llvm.org/"
3+
"conduit_uri" : "https://reviews.llvm.org/"
44
}

Android.bp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ LIBUNWIND_CPPFLAGS = [
3939
"-Wextra",
4040
"-Wno-unused-function",
4141
"-Wno-unused-parameter",
42+
"-Wno-unused-local-typedef",
4243
"-Werror",
4344
]
4445

CMakeLists.txt

Lines changed: 142 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,46 @@
22
# Setup Project
33
#===============================================================================
44

5-
cmake_minimum_required(VERSION 2.8.8)
5+
cmake_minimum_required(VERSION 3.4.3)
66

77
if (POLICY CMP0042)
88
cmake_policy(SET CMP0042 NEW) # Set MACOSX_RPATH=YES by default
99
endif()
1010

11+
# Add path for custom modules
12+
set(CMAKE_MODULE_PATH
13+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
14+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules"
15+
${CMAKE_MODULE_PATH}
16+
)
17+
1118
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
1219
project(libunwind)
1320

1421
# Rely on llvm-config.
1522
set(CONFIG_OUTPUT)
16-
find_program(LLVM_CONFIG "llvm-config")
23+
if(NOT LLVM_CONFIG_PATH)
24+
find_program(LLVM_CONFIG_PATH "llvm-config")
25+
endif()
1726
if (DEFINED LLVM_PATH)
1827
set(LLVM_INCLUDE_DIR ${LLVM_INCLUDE_DIR} CACHE PATH "Path to llvm/include")
1928
set(LLVM_PATH ${LLVM_PATH} CACHE PATH "Path to LLVM source tree")
2029
set(LLVM_MAIN_SRC_DIR ${LLVM_PATH})
2130
set(LLVM_CMAKE_PATH "${LLVM_PATH}/cmake/modules")
22-
elseif (LLVM_CONFIG)
23-
message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}")
24-
set(CONFIG_COMMAND ${LLVM_CONFIG} "--includedir" "--prefix" "--src-root")
31+
elseif(LLVM_CONFIG_PATH)
32+
message(STATUS "Found LLVM_CONFIG_PATH as ${LLVM_CONFIG_PATH}")
33+
set(CONFIG_COMMAND ${LLVM_CONFIG_PATH} "--includedir" "--prefix" "--src-root")
2534
execute_process(COMMAND ${CONFIG_COMMAND}
2635
RESULT_VARIABLE HAD_ERROR
2736
OUTPUT_VARIABLE CONFIG_OUTPUT)
2837
if (NOT HAD_ERROR)
2938
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";"
3039
CONFIG_OUTPUT ${CONFIG_OUTPUT})
31-
else ()
40+
else()
3241
string(REPLACE ";" " " CONFIG_COMMAND_STR "${CONFIG_COMMAND}")
3342
message(STATUS "${CONFIG_COMMAND_STR}")
3443
message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}")
35-
endif ()
44+
endif()
3645

3746
list(GET CONFIG_OUTPUT 0 INCLUDE_DIR)
3847
list(GET CONFIG_OUTPUT 1 LLVM_OBJ_ROOT)
@@ -41,51 +50,63 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
4150
set(LLVM_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include")
4251
set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree")
4352
set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree")
44-
set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR}/share/llvm/cmake")
4553
set(LLVM_LIT_PATH "${LLVM_PATH}/utils/lit/lit.py")
46-
else ()
54+
55+
# --cmakedir is supported since llvm r291218 (4.0 release)
56+
execute_process(
57+
COMMAND ${LLVM_CONFIG_PATH} --cmakedir
58+
RESULT_VARIABLE HAD_ERROR
59+
OUTPUT_VARIABLE CONFIG_OUTPUT
60+
ERROR_QUIET)
61+
if(NOT HAD_ERROR)
62+
string(STRIP "${CONFIG_OUTPUT}" LLVM_CMAKE_PATH)
63+
else()
64+
set(LLVM_CMAKE_PATH
65+
"${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
66+
endif()
67+
else()
4768
message(FATAL_ERROR "llvm-config not found and LLVM_MAIN_SRC_DIR not defined. "
4869
"Reconfigure with -DLLVM_CONFIG=path/to/llvm-config "
4970
"or -DLLVM_PATH=path/to/llvm-source-root.")
50-
endif ()
71+
endif()
5172

5273
if (EXISTS ${LLVM_CMAKE_PATH})
5374
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_PATH}")
5475
include("${LLVM_CMAKE_PATH}/AddLLVM.cmake")
5576
include("${LLVM_CMAKE_PATH}/HandleLLVMOptions.cmake")
56-
else ()
77+
else()
5778
message(FATAL_ERROR "Not found: ${LLVM_CMAKE_PATH}")
58-
endif ()
79+
endif()
5980

6081
set(PACKAGE_NAME libunwind)
61-
set(PACKAGE_VERSION 3.8.0svn)
82+
set(PACKAGE_VERSION 5.0.0svn)
6283
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
6384
set(PACKAGE_BUGREPORT "[email protected]")
6485

6586
if (EXISTS ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py)
6687
set(LLVM_LIT ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py)
67-
else ()
88+
else()
6889
# Seek installed Lit.
6990
find_program(LLVM_LIT "lit.py" ${LLVM_MAIN_SRC_DIR}/utils/lit
7091
DOC "Path to lit.py")
71-
endif ()
92+
endif()
7293

7394
if (LLVM_LIT)
7495
# Define the default arguments to use with 'lit', and an option for the user
7596
# to override.
7697
set(LIT_ARGS_DEFAULT "-sv")
7798
if (MSVC OR XCODE)
7899
set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
79-
endif ()
100+
endif()
80101
set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit")
81102

82103
# On Win32 hosts, provide an option to specify the path to the GnuWin32 tools.
83104
if (WIN32 AND NOT CYGWIN)
84105
set(LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools")
85-
endif ()
86-
else ()
106+
endif()
107+
else()
87108
set(LLVM_INCLUDE_TESTS OFF)
88-
endif ()
109+
endif()
89110

90111
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
91112
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
@@ -97,15 +118,37 @@ endif()
97118
#===============================================================================
98119
# Setup CMake Options
99120
#===============================================================================
121+
include(HandleCompilerRT)
100122

101123
# Define options.
124+
option(LIBUNWIND_BUILD_32_BITS "Build 32 bit libunwind" ${LLVM_BUILD_32_BITS})
102125
option(LIBUNWIND_ENABLE_ASSERTIONS "Enable assertions independent of build mode." ON)
103126
option(LIBUNWIND_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
104127
option(LIBUNWIND_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
105128
option(LIBUNWIND_ENABLE_SHARED "Build libunwind as a shared library." ON)
129+
option(LIBUNWIND_ENABLE_STATIC "Build libunwind as a static library." ON)
130+
option(LIBUNWIND_ENABLE_CROSS_UNWINDING "Enable cross-platform unwinding support." OFF)
131+
option(LIBUNWIND_ENABLE_ARM_WMMX "Enable unwinding support for ARM WMMX registers." OFF)
132+
option(LIBUNWIND_ENABLE_THREADS "Build libunwind with threading support." ON)
133+
option(LIBUNWIND_USE_COMPILER_RT "Use compiler-rt instead of libgcc" OFF)
134+
option(LIBUNWIND_INCLUDE_DOCS "Build the libunwind documentation." ${LLVM_INCLUDE_DOCS})
135+
136+
set(LIBUNWIND_TARGET_TRIPLE "" CACHE STRING "Target triple for cross compiling.")
137+
set(LIBUNWIND_GCC_TOOLCHAIN "" CACHE PATH "GCC toolchain for cross compiling.")
138+
set(LIBUNWIND_SYSROOT "" CACHE PATH "Sysroot for cross compiling.")
139+
140+
if (NOT LIBUNWIND_ENABLE_SHARED AND NOT LIBUNWIND_ENABLE_STATIC)
141+
message(FATAL_ERROR "libunwind must be built as either a shared or static library.")
142+
endif()
106143

107-
set(LIBUNWIND_GCC_TOOLCHAIN "" CACHE STRING "GCC toolchain for cross compiling.")
108-
set(LIBUNWIND_SYSROOT "" CACHE STRING "Sysroot for cross compiling.")
144+
# Check that we can build with 32 bits if requested.
145+
if (CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32)
146+
if (LIBUNWIND_BUILD_32_BITS AND NOT LLVM_BUILD_32_BITS) # Don't duplicate the output from LLVM
147+
message(STATUS "Building 32 bits executables and libraries.")
148+
endif()
149+
elseif(LIBUNWIND_BUILD_32_BITS)
150+
message(FATAL_ERROR "LIBUNWIND_BUILD_32_BITS=ON is not supported on this platform.")
151+
endif()
109152

110153
#===============================================================================
111154
# Configure System
@@ -116,17 +159,15 @@ set(CMAKE_MODULE_PATH
116159
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
117160
${CMAKE_MODULE_PATH})
118161

119-
# Configure compiler.
120-
include(config-ix)
121-
122162
set(LIBUNWIND_COMPILER ${CMAKE_CXX_COMPILER})
123163
set(LIBUNWIND_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
124164
set(LIBUNWIND_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
125165
set(LIBUNWIND_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})
126166

127-
#===============================================================================
128-
# Setup Compiler Flags
129-
#===============================================================================
167+
set(LIBUNWIND_C_FLAGS "")
168+
set(LIBUNWIND_CXX_FLAGS "")
169+
set(LIBUNWIND_COMPILE_FLAGS "")
170+
set(LIBUNWIND_LINK_FLAGS "")
130171

131172
# Get required flags.
132173
macro(append_if list condition var)
@@ -135,10 +176,33 @@ macro(append_if list condition var)
135176
endif()
136177
endmacro()
137178

138-
set(LIBUNWIND_C_FLAGS "")
139-
set(LIBUNWIND_CXX_FLAGS "")
140-
set(LIBUNWIND_COMPILE_FLAGS "")
141-
set(LIBUNWIND_LINK_FLAGS "")
179+
macro(add_target_flags_if condition var)
180+
if (${condition})
181+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${var}")
182+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${var}")
183+
list(APPEND LIBUNWIND_COMPILE_FLAGS ${var})
184+
list(APPEND LIBUNWIND_LINK_FLAGS ${var})
185+
endif()
186+
endmacro()
187+
188+
add_target_flags_if(LIBUNWIND_BUILD_32_BITS "-m32")
189+
add_target_flags_if(LIBUNWIND_TARGET_TRIPLE
190+
"--target=${LIBUNWIND_TARGET_TRIPLE}")
191+
add_target_flags_if(LIBUNWIND_GCC_TOOLCHAIN
192+
"--gcc-toolchain=${LIBUNWIND_GCC_TOOLCHAIN}")
193+
add_target_flags_if(LIBUNWIND_SYSROOT
194+
"--sysroot=${LIBUNWIND_SYSROOT}")
195+
196+
# Configure compiler.
197+
include(config-ix)
198+
199+
if (LIBUNWIND_USE_COMPILER_RT)
200+
list(APPEND LIBUNWIND_LINK_FLAGS "-rtlib=compiler-rt")
201+
endif()
202+
203+
#===============================================================================
204+
# Setup Compiler Flags
205+
#===============================================================================
142206

143207
append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_HAS_WERROR_FLAG -Werror=return-type)
144208

@@ -189,36 +253,71 @@ if (LIBUNWIND_ENABLE_ASSERTIONS)
189253
# MSVC doesn't like _DEBUG on release builds. See PR 4379.
190254
if (NOT MSVC)
191255
list(APPEND LIBUNWIND_COMPILE_FLAGS -D_DEBUG)
192-
endif ()
256+
endif()
193257

194258
# On Release builds cmake automatically defines NDEBUG, so we
195259
# explicitly undefine it:
196260
if (uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE")
197261
list(APPEND LIBUNWIND_COMPILE_FLAGS -UNDEBUG)
198-
endif ()
262+
endif()
199263
else()
200264
if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE")
201265
list(APPEND LIBUNWIND_COMPILE_FLAGS -DNDEBUG)
202-
endif ()
203-
endif ()
266+
endif()
267+
endif()
268+
269+
# Cross-unwinding
270+
if (NOT LIBUNWIND_ENABLE_CROSS_UNWINDING)
271+
list(APPEND LIBUNWIND_COMPILE_FLAGS -D_LIBUNWIND_IS_NATIVE_ONLY)
272+
endif()
273+
274+
# Threading-support
275+
if (NOT LIBUNWIND_ENABLE_THREADS)
276+
list(APPEND LIBUNWIND_COMPILE_FLAGS -D_LIBUNWIND_HAS_NO_THREADS)
277+
endif()
278+
279+
# ARM WMMX register support
280+
if (LIBUNWIND_ENABLE_ARM_WMMX)
281+
# __ARM_WMMX is a compiler pre-define (as per the ACLE 2.0). Clang does not
282+
# define this macro for any supported target at present. Therefore, here we
283+
# provide the option to explicitly enable support for WMMX registers in the
284+
# unwinder.
285+
list(APPEND LIBUNWIND_COMPILE_FLAGS -D__ARM_WMMX)
286+
endif()
204287

205288
# This is the _ONLY_ place where add_definitions is called.
206289
if (MSVC)
207290
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
208-
endif ()
209-
210-
append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_TARGET_TRIPLE
211-
"-target ${LIBUNWIND_TARGET_TRIPLE}")
212-
append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_GCC_TOOLCHAIN
213-
"-gcc-toolchain ${LIBUNWIND_GCC_TOOLCHAIN}")
214-
append_if(LIBUNWIND_COMPILE_FLAGS LIBUNWIND_SYSROOT
215-
"--sysroot=${LIBUNWIND_SYSROOT}")
291+
endif()
216292

217293
#===============================================================================
218294
# Setup Source Code
219295
#===============================================================================
220296

221297
include_directories(include)
222298

299+
find_path(
300+
LIBUNWIND_LIBCXX_INCLUDES_INTERNAL
301+
__libcpp_version
302+
PATHS ${LLVM_MAIN_SRC_DIR}/projects/libcxx/include
303+
${LLVM_MAIN_SRC_DIR}/runtimes/libcxx/include
304+
NO_DEFAULT_PATH
305+
)
306+
if ((NOT LIBUNWIND_STANDALONE_BUILD OR HAVE_LIBCXX) AND
307+
IS_DIRECTORY "${LIBUNWIND_LIBCXX_INCLUDES_INTERNAL}")
308+
set(LIBUNWIND_CXX_INCLUDE_PATHS_DEFAULT "${LIBUNWIND_LIBCXX_INCLUDES_INTERNAL}")
309+
endif()
310+
311+
set(LIBUNWIND_CXX_INCLUDE_PATHS "${LIBUNWIND_CXX_INCLUDE_PATHS_DEFAULT}" CACHE PATH
312+
"Paths to C++ header directories separated by ';'.")
313+
314+
if (NOT LIBUNWIND_CXX_INCLUDE_PATHS STREQUAL "")
315+
list(APPEND LIBUNWIND_CXX_FLAGS -nostdinc++)
316+
include_directories("${LIBUNWIND_CXX_INCLUDE_PATHS}")
317+
endif()
318+
223319
add_subdirectory(src)
224320

321+
if (LIBUNWIND_INCLUDE_DOCS)
322+
add_subdirectory(docs)
323+
endif()

0 commit comments

Comments
 (0)