[llvm] [CMake] Options to control generation of reproducers (PR #143037)
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 5 14:29:21 PDT 2025
https://github.com/petrhosek created https://github.com/llvm/llvm-project/pull/143037
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.
>From 11cdc45cf66600f15dad4d5af548215dbf2735bd Mon Sep 17 00:00:00 2001
From: Petr Hosek <phosek at google.com>
Date: Thu, 5 Jun 2025 21:24:43 +0000
Subject: [PATCH] [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.
---
llvm/CMakeLists.txt | 4 ++++
llvm/cmake/modules/HandleLLVMOptions.cmake | 19 +++++++++++++++++++
llvm/cmake/modules/LLVMConfig.cmake.in | 4 ++++
3 files changed, 27 insertions(+)
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index ed44b16bf9aeb..80db33dfe5336 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -874,6 +874,10 @@ option (LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO
option(LLVM_VERSION_PRINTER_SHOW_BUILD_CONFIG
"Show the optional build config flags when tools are invoked with --version." ON)
+set(LLVM_CRASH_DIAGNOSTICS "" CACHE STRING "Control when to generate reproducer. Can be OFF, COMPILER, ALL")
+set(LLVM_CRASH_DIAGNOSTICS_DIR "" CACHE STRING "Path to use for crash reproducers")
+set(LLVM_ERROR_REPRODUCERS OFF CACHE BOOL "Generate a reproducer in the case of an error")
+
# You can configure which libraries from LLVM you want to include in the
# shared library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited
# list of LLVM components. All component names handled by llvm-config are valid.
diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
index 2912f45953c41..8d0eca75d003a 100644
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -1433,3 +1433,22 @@ if(LLVM_ENABLE_LLVM_LIBC)
message(WARNING "Unable to link against LLVM libc. LLVM will be built without linking against the LLVM libc overlay.")
endif()
endif()
+
+if(LLVM_CRASH_DIAGNOSTICS)
+ string(TOLOWER "${LLVM_CRASH_DIAGNOSTICS}" LLVM_CRASH_DIAGNOSTICS)
+ check_c_compiler_flag("-fcrash-diagnostics=${LLVM_CRASH_DIAGNOSTICS}" SUPPORTS_FCRASH_DIAGNOSTICS)
+ append_if(SUPPORTS_FCRASH_DIAGNOSTICS "-fcrash-diagnostics=${LLVM_CRASH_DIAGNOSTICS}"
+ CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
+endif()
+
+if(LLVM_CRASH_DIAGNOSTICS_DIR)
+ check_c_compiler_flag("-fcrash-diagnostics-dir=foo" SUPPORTS_FCRASH_DIAGNOSTICS_DIR)
+ append_if(SUPPORTS_FCRASH_DIAGNOSTICS_DIR "-fcrash-diagnostics-dir=${LLVM_CRASH_DIAGNOSTICS_DIR}"
+ CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
+endif()
+
+if(LLVM_ERROR_REPRODUCERS)
+ check_c_compiler_flag("-gen-reproducer=error" SUPPORTS_GEN_REPRODUCER_ERROR)
+ append_if(SUPPORTS_GEN_REPRODUCER_ERROR "-gen-reproducer=error"
+ CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
+endif()
diff --git a/llvm/cmake/modules/LLVMConfig.cmake.in b/llvm/cmake/modules/LLVMConfig.cmake.in
index c15b9576cd5d5..c33db454e07e2 100644
--- a/llvm/cmake/modules/LLVMConfig.cmake.in
+++ b/llvm/cmake/modules/LLVMConfig.cmake.in
@@ -139,6 +139,10 @@ set(LLVM_HAVE_OPT_VIEWER_MODULES @LLVM_HAVE_OPT_VIEWER_MODULES@)
set(LLVM_CONFIGURATION_TYPES @CMAKE_CONFIGURATION_TYPES@)
set(LLVM_ENABLE_SHARED_LIBS @BUILD_SHARED_LIBS@)
+set(LLVM_CRASH_DIAGNOSTICS "@LLVM_CRASH_DIAGNOSTICS@")
+set(LLVM_CRASH_DIAGNOSTICS_DIR "@LLVM_CRASH_DIAGNOSTICS_DIR@")
+set(LLVM_ERROR_REPRODUCERS "@LLVM_ERROR_REPRODUCERS@")
+
set(LLVM_DEFAULT_EXTERNAL_LIT "@LLVM_CONFIG_DEFAULT_EXTERNAL_LIT@")
set(LLVM_LIT_ARGS "@LLVM_LIT_ARGS@")
More information about the llvm-commits
mailing list