Skip to content

Commit 11cdc45

Browse files
committed
[CMake] Options to control generation of reproducers
Clang automatically generates a reproducer on crash, but we don't provide any control over the reproducers (whether to generate them only for compiler crashes or linker crashes as well) or their location. This change also additional provides an option to enable generating reproducers in case of an error (and not just crash) which can be helpful in environments such as automated builders to help with reproducing issues.
1 parent da4958a commit 11cdc45

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

llvm/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,10 @@ option (LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO
874874
option(LLVM_VERSION_PRINTER_SHOW_BUILD_CONFIG
875875
"Show the optional build config flags when tools are invoked with --version." ON)
876876

877+
set(LLVM_CRASH_DIAGNOSTICS "" CACHE STRING "Control when to generate reproducer. Can be OFF, COMPILER, ALL")
878+
set(LLVM_CRASH_DIAGNOSTICS_DIR "" CACHE STRING "Path to use for crash reproducers")
879+
set(LLVM_ERROR_REPRODUCERS OFF CACHE BOOL "Generate a reproducer in the case of an error")
880+
877881
# You can configure which libraries from LLVM you want to include in the
878882
# shared library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited
879883
# list of LLVM components. All component names handled by llvm-config are valid.

llvm/cmake/modules/HandleLLVMOptions.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,3 +1433,22 @@ if(LLVM_ENABLE_LLVM_LIBC)
14331433
message(WARNING "Unable to link against LLVM libc. LLVM will be built without linking against the LLVM libc overlay.")
14341434
endif()
14351435
endif()
1436+
1437+
if(LLVM_CRASH_DIAGNOSTICS)
1438+
string(TOLOWER "${LLVM_CRASH_DIAGNOSTICS}" LLVM_CRASH_DIAGNOSTICS)
1439+
check_c_compiler_flag("-fcrash-diagnostics=${LLVM_CRASH_DIAGNOSTICS}" SUPPORTS_FCRASH_DIAGNOSTICS)
1440+
append_if(SUPPORTS_FCRASH_DIAGNOSTICS "-fcrash-diagnostics=${LLVM_CRASH_DIAGNOSTICS}"
1441+
CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
1442+
endif()
1443+
1444+
if(LLVM_CRASH_DIAGNOSTICS_DIR)
1445+
check_c_compiler_flag("-fcrash-diagnostics-dir=foo" SUPPORTS_FCRASH_DIAGNOSTICS_DIR)
1446+
append_if(SUPPORTS_FCRASH_DIAGNOSTICS_DIR "-fcrash-diagnostics-dir=${LLVM_CRASH_DIAGNOSTICS_DIR}"
1447+
CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
1448+
endif()
1449+
1450+
if(LLVM_ERROR_REPRODUCERS)
1451+
check_c_compiler_flag("-gen-reproducer=error" SUPPORTS_GEN_REPRODUCER_ERROR)
1452+
append_if(SUPPORTS_GEN_REPRODUCER_ERROR "-gen-reproducer=error"
1453+
CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
1454+
endif()

llvm/cmake/modules/LLVMConfig.cmake.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ set(LLVM_HAVE_OPT_VIEWER_MODULES @LLVM_HAVE_OPT_VIEWER_MODULES@)
139139
set(LLVM_CONFIGURATION_TYPES @CMAKE_CONFIGURATION_TYPES@)
140140
set(LLVM_ENABLE_SHARED_LIBS @BUILD_SHARED_LIBS@)
141141

142+
set(LLVM_CRASH_DIAGNOSTICS "@LLVM_CRASH_DIAGNOSTICS@")
143+
set(LLVM_CRASH_DIAGNOSTICS_DIR "@LLVM_CRASH_DIAGNOSTICS_DIR@")
144+
set(LLVM_ERROR_REPRODUCERS "@LLVM_ERROR_REPRODUCERS@")
145+
142146
set(LLVM_DEFAULT_EXTERNAL_LIT "@LLVM_CONFIG_DEFAULT_EXTERNAL_LIT@")
143147
set(LLVM_LIT_ARGS "@LLVM_LIT_ARGS@")
144148

0 commit comments

Comments
 (0)