Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend the USE_LIBBACKTRACE option #13816

Merged
merged 5 commits into from
Feb 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ tvm_option(USE_FALLBACK_STL_MAP "Use TVM's POD compatible Map" OFF)
tvm_option(USE_ETHOSN "Build with Arm(R) Ethos(TM)-N" OFF)
tvm_option(USE_CMSISNN "Build with Arm CMSIS-NN" OFF)
tvm_option(INDEX_DEFAULT_I64 "Defaults the index datatype to int64" ON)
tvm_option(USE_LIBBACKTRACE "Build libbacktrace to supply linenumbers on stack traces" AUTO)
tvm_option(USE_LIBBACKTRACE "Use libbacktrace to supply linenumbers on stack traces" AUTO)
tvm_option(BACKTRACE_ON_SEGFAULT "Install a signal handler to print a backtrace on segfault" OFF)
tvm_option(BUILD_STATIC_RUNTIME "Build static version of libtvm_runtime" OFF)
tvm_option(USE_PAPI "Use Performance Application Programming Interface (PAPI) to read performance counters" OFF)
Expand Down
15 changes: 15 additions & 0 deletions cmake/config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,21 @@ set(BUILD_STATIC_RUNTIME OFF)
# - /path/to/ccache: use specific path to ccache
set(USE_CCACHE AUTO)

# Whether to use libbacktrace to supply linenumbers on stack traces.
# Possible values:
# - ON: Find libbacktrace from system paths. Report an error if not found.
# - OFF: Don't use libbacktrace.
# - /path/to/libbacktrace: Looking for the libbacktrace header and static lib from a user-provided path. Report error if not found.
# - COMPILE: Build and link to libbacktrace from 3rdparty/libbacktrace.
# - AUTO:
# - Find libbacktrace from system paths.
# - If not found, fallback to COMPILE on Linux or MacOS, fallback to OFF on Windows or other platforms.
set(USE_LIBBACKTRACE AUTO)

# Whether to install a signal handler to print a backtrace on segfault.
# Need to have USE_LIBBACKTRACE enabled.
set(BACKTRACE_ON_SEGFAULT OFF)

# Whether to enable PAPI support in profiling. PAPI provides access to hardware
# counters while profiling.
# Possible values:
Expand Down
4 changes: 0 additions & 4 deletions cmake/libs/Libbacktrace.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,5 @@ ExternalProject_Add_Step(project_libbacktrace checkout
DEPENDS ${LIBBACKTRACE_SRCS}
)

add_library(libbacktrace STATIC IMPORTED)
add_dependencies(libbacktrace project_libbacktrace)
set_property(TARGET libbacktrace
PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/lib/libbacktrace.a)
# create include directory so cmake doesn't complain
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/include)
106 changes: 81 additions & 25 deletions cmake/modules/Logging.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

# This script configures the logging module and dependency on libbacktrace

include(FindPackageHandleStandardArgs)

if(USE_CUSTOM_LOGGING)
# Set and propogate TVM_LOG_CUSTOMIZE flag is custom logging has been requested
target_compile_definitions(tvm_objs PUBLIC TVM_LOG_CUSTOMIZE=1)
Expand All @@ -26,35 +28,89 @@ if(USE_CUSTOM_LOGGING)
target_compile_definitions(tvm_runtime PUBLIC TVM_LOG_CUSTOMIZE=1)
endif()

if("${USE_LIBBACKTRACE}" STREQUAL "AUTO")
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(USE_LIBBACKTRACE ON)
else()
set(USE_LIBBACKTRACE OFF)
endif()
message(STATUS "Autoset: USE_LIBBACKTRACE=" ${USE_LIBBACKTRACE} " in " ${CMAKE_SYSTEM_NAME})
endif()
add_library(libbacktrace STATIC IMPORTED)

set(LIBBACKTRACE_INCLUDE_DIR NOTFOUND)
set(LIBBACKTRACE_STATIC_LIBRARY NOTFOUND)
set(LIBBACKTRACE_FOUND NO)

macro(__find_libbacktrace)
find_path(LIBBACKTRACE_INCLUDE_DIR backtrace.h)
find_library(LIBBACKTRACE_STATIC_LIBRARY libbacktrace.a)
find_package_handle_standard_args(LIBBACKTRACE REQUIRED_VARS
LIBBACKTRACE_STATIC_LIBRARY LIBBACKTRACE_INCLUDE_DIR)
endmacro()

if(USE_LIBBACKTRACE)
message(STATUS "Building with libbacktrace...")
macro(__find_libbacktrace_from PATH)
find_path(LIBBACKTRACE_INCLUDE_DIR backtrace.h
PATHS ${PATH}
PATH_SUFFIXES include
NO_CMAKE_SYSTEM_PATH
NO_SYSTEM_ENVIRONMENT_PATH
)
find_library(LIBBACKTRACE_STATIC_LIBRARY libbacktrace.a
PATHS ${PATH}
PATH_SUFFIXES lib
NO_CMAKE_SYSTEM_PATH
NO_SYSTEM_ENVIRONMENT_PATH
)
find_package_handle_standard_args(LIBBACKTRACE REQUIRED_VARS
LIBBACKTRACE_STATIC_LIBRARY LIBBACKTRACE_INCLUDE_DIR)
endmacro()

macro(__compile_libbacktrace)
message(STATUS "Building libbacktrace from 3rdparty/libbacktrace")
include(cmake/libs/Libbacktrace.cmake)
target_link_libraries(tvm PRIVATE libbacktrace)
target_link_libraries(tvm_runtime PRIVATE libbacktrace)
add_dependencies(libbacktrace project_libbacktrace)
set(LIBBACKTRACE_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/include)
set(LIBBACKTRACE_STATIC_LIBRARY ${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/lib/libbacktrace.a)
add_dependencies(tvm_runtime_objs libbacktrace)
# pre 3.12 versions of cmake cannot propagate include directories from imported targets so we set them manually
target_include_directories(tvm PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/include")
target_include_directories(tvm_objs PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/include")
target_include_directories(tvm_runtime PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/include")
target_include_directories(tvm_runtime_objs PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/libbacktrace/include")
target_compile_definitions(tvm_objs PRIVATE TVM_USE_LIBBACKTRACE=1)
target_compile_definitions(tvm_runtime_objs PRIVATE TVM_USE_LIBBACKTRACE=1)
set(LIBBACKTRACE_FOUND YES)
endmacro()

if(USE_LIBBACKTRACE STREQUAL "AUTO")
__find_libbacktrace()
if(NOT LIBBACKTRACE_FOUND AND (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "Darwin"))
__compile_libbacktrace()
endif()
elseif(USE_LIBBACKTRACE STREQUAL "COMPILE")
__compile_libbacktrace()
elseif("${USE_LIBBACKTRACE}" MATCHES ${IS_TRUE_PATTERN})
__find_libbacktrace()
if(NOT LIBBACKTRACE_FOUND)
message(SEND_ERROR "libbacktrace not found. (Set USE_LIBBACKTRACE to COMPILE if you want to build with the submodule at 3rdparty/libbacktrace.)")
endif()
elseif("${USE_LIBBACKTRACE}" MATCHES ${IS_FALSE_PATTERN})
else()
target_compile_definitions(tvm_objs PRIVATE TVM_USE_LIBBACKTRACE=0)
target_compile_definitions(tvm_runtime_objs PRIVATE TVM_USE_LIBBACKTRACE=0)
# Treat USE_LIBBACKTRACE as path to libbacktrace
message(STATUS "Using libbacktrace from ${USE_LIBBACKTRACE}")
__find_libbacktrace_from(${USE_LIBBACKTRACE})
if(NOT LIBBACKTRACE_FOUND)
message(SEND_ERROR "libbacktrace not found from ${USE_LIBBACKTRACE}.")
endif()
endif()

if(BACKTRACE_ON_SEGFAULT)
target_compile_definitions(tvm_objs PRIVATE TVM_BACKTRACE_ON_SEGFAULT)
target_compile_definitions(tvm_runtime_objs PRIVATE TVM_BACKTRACE_ON_SEGFAULT)
endif()
set_property(TARGET libbacktrace
PROPERTY IMPORTED_LOCATION ${LIBBACKTRACE_STATIC_LIBRARY})

function(configure_backtrace TARGET)
if(LIBBACKTRACE_FOUND)
get_target_property(target_type ${TARGET} TYPE)
if(target_type MATCHES "EXECUTABLE|(STATIC|SHARED|MODULE)_LIBRARY")
target_link_libraries(${TARGET} PRIVATE libbacktrace)
endif()
target_include_directories(${TARGET} PRIVATE ${LIBBACKTRACE_INCLUDE_DIR})
target_compile_definitions(${TARGET} PRIVATE TVM_USE_LIBBACKTRACE=1)
else()
target_compile_definitions(${TARGET} PRIVATE TVM_USE_LIBBACKTRACE=0)
endif()

if(BACKTRACE_ON_SEGFAULT)
target_compile_definitions(${TARGET} PRIVATE TVM_BACKTRACE_ON_SEGFAULT)
endif()
endfunction()

configure_backtrace(tvm)
configure_backtrace(tvm_runtime)
configure_backtrace(tvm_objs)
configure_backtrace(tvm_runtime_objs)
2 changes: 1 addition & 1 deletion tests/scripts/task_config_build_cpu.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ echo set\(USE_ETHOSN_HW OFF\) >> config.cmake
echo set\(USE_CMSISNN OFF\) >> config.cmake
echo set\(USE_VITIS_AI ON\) >> config.cmake
echo set\(USE_VERILATOR ON\) >> config.cmake
echo set\(USE_LIBBACKTRACE ON\) >> config.cmake
echo set\(USE_LIBBACKTRACE COMPILE\) >> config.cmake
echo set\(BACKTRACE_ON_SEGFAULT ON\) >> config.cmake
echo set\(USE_CCACHE OFF\) >> config.cmake
echo set\(USE_ETHOSU OFF\) >> config.cmake
Expand Down
2 changes: 1 addition & 1 deletion tests/scripts/task_config_build_minimal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ echo set\(USE_RELAY_DEBUG ON\) >> config.cmake
echo set\(CMAKE_BUILD_TYPE=Debug\) >> config.cmake
echo set\(CMAKE_CXX_FLAGS \"-Werror -Wp,-D_GLIBCXX_ASSERTIONS\"\) >> config.cmake
echo set\(HIDE_PRIVATE_SYMBOLS ON\) >> config.cmake
echo set\(USE_LIBBACKTRACE ON\) >> config.cmake
echo set\(USE_LIBBACKTRACE COMPILE\) >> config.cmake
echo set\(USE_CCACHE OFF\) >> config.cmake
echo set\(SUMMARIZE ON\) >> config.cmake
echo set\(USE_MICRO ON\) >> config.cmake