https://github.com/Teemperor created https://github.com/llvm/llvm-project/pull/215551
This test compiles 9 C++ test files and uses the `generateSource` function to inject includes for every single SB API header. The `generateSource` call also sets `SOURCE_DIR` so the test knows its current source directory. This patch removes the need for `generateSource` by including the SB API headers we actually need. SOURCE_DIR is now specified using an environment variable in the test. The motivation for this patch is that I want to avoid recompiling these source files unless their source or the included headers change. Currently, this test is one of the slowest in the test suite and needs about half a minute to run. In the future, I want to at least avoid the recompilation time for each test file. Note that we still have another test that includes all SB API headers normally and as a framework, so this does not remove test coverage. >From 1c67f983918123df1f6f2d9a3447b6167f9c7f3e Mon Sep 17 00:00:00 2001 From: Raphael Isemann <[email protected]> Date: Tue, 21 Jul 2026 14:12:14 +0100 Subject: [PATCH] [lldb][test] Don't include all SB API headers in TestMultithreaded This test compiles 9 C++ test files and uses the `generateSource` function to inject includes for every single SB API header. The `generateSource` call also sets `SOURCE_DIR` so the test knows its current source directory. This patch removes the need for `generateSource` by including the SB API headers we actually need. SOURCE_DIR is now specified using an environment variable in the test. The motivation for this patch is that I want to avoid recompiling these source files unless their source or the included headers change. Currently, this test is one of the slowest in the test suite and needs about half a minute to run. In the future, I want to at least avoid the recompilation time for each test file. Note that we still have another test that includes all SB API headers normally and as a framework, so this does not remove test coverage. --- .../api/multithreaded/TestMultithreaded.py | 16 ++++++--------- .../{driver.cpp.template => driver.cpp} | 2 +- ...er_test.cpp.template => listener_test.cpp} | 7 ++++++- ....template => test_breakpoint_callback.cpp} | 7 ++++++- ... => test_breakpoint_location_callback.cpp} | 9 ++++++++- ...pp.template => test_concurrent_unwind.cpp} | 10 +++++++++- ...te => test_listener_event_description.cpp} | 5 ++++- ... => test_listener_event_process_state.cpp} | 9 ++++++++- ....cpp.template => test_listener_resume.cpp} | 6 +++++- ...p-hook.cpp.template => test_stop-hook.cpp} | 20 ++++++++++++++++--- 10 files changed, 70 insertions(+), 21 deletions(-) rename lldb/test/API/api/multithreaded/{driver.cpp.template => driver.cpp} (97%) rename lldb/test/API/api/multithreaded/{listener_test.cpp.template => listener_test.cpp} (91%) rename lldb/test/API/api/multithreaded/{test_breakpoint_callback.cpp.template => test_breakpoint_callback.cpp} (86%) rename lldb/test/API/api/multithreaded/{test_breakpoint_location_callback.cpp.template => test_breakpoint_location_callback.cpp} (86%) rename lldb/test/API/api/multithreaded/{test_concurrent_unwind.cpp.template => test_concurrent_unwind.cpp} (89%) rename lldb/test/API/api/multithreaded/{test_listener_event_description.cpp.template => test_listener_event_description.cpp} (95%) rename lldb/test/API/api/multithreaded/{test_listener_event_process_state.cpp.template => test_listener_event_process_state.cpp} (88%) rename lldb/test/API/api/multithreaded/{test_listener_resume.cpp.template => test_listener_resume.cpp} (89%) rename lldb/test/API/api/multithreaded/{test_stop-hook.cpp.template => test_stop-hook.cpp} (86%) diff --git a/lldb/test/API/api/multithreaded/TestMultithreaded.py b/lldb/test/API/api/multithreaded/TestMultithreaded.py index ebe80c7de576a..e2e6df558205d 100644 --- a/lldb/test/API/api/multithreaded/TestMultithreaded.py +++ b/lldb/test/API/api/multithreaded/TestMultithreaded.py @@ -16,15 +16,6 @@ class SBBreakpointCallbackCase(TestBase): def setUp(self): TestBase.setUp(self) - self.generateSource("driver.cpp") - self.generateSource("listener_test.cpp") - self.generateSource("test_breakpoint_callback.cpp") - self.generateSource("test_breakpoint_location_callback.cpp") - self.generateSource("test_listener_event_description.cpp") - self.generateSource("test_listener_event_process_state.cpp") - self.generateSource("test_listener_resume.cpp") - self.generateSource("test_stop-hook.cpp") - self.generateSource("test_concurrent_unwind.cpp") @skipIfRemote # clang-cl does not support throw or catch (llvm.org/pr24538) @@ -128,10 +119,15 @@ def build_and_test(self, sources, test_name, inferior_source="inferior.cpp"): test_exe = self.getBuildArtifact(test_name) exe = [test_exe, self.getBuildArtifact(self.inferior)] + # Tests locate their support files (e.g. test_stop-hook.cpp's + # some_cmd.py) via the LLDB_TEST_SOURCE_DIR environment variable. + env = dict(os.environ) + env["LLDB_TEST_SOURCE_DIR"] = self.getSourceDir() + # check_call will raise a CalledProcessError if the executable doesn't # return exit code 0 to indicate success. We can let this exception go # - the test harness will recognize it as a test failure. - subprocess.check_call(exe) + subprocess.check_call(exe, env=env) def build_program(self, sources, program): return self.buildDriver(sources, program) diff --git a/lldb/test/API/api/multithreaded/driver.cpp.template b/lldb/test/API/api/multithreaded/driver.cpp similarity index 97% rename from lldb/test/API/api/multithreaded/driver.cpp.template rename to lldb/test/API/api/multithreaded/driver.cpp index 443f4fed7653d..e17e967a2875e 100644 --- a/lldb/test/API/api/multithreaded/driver.cpp.template +++ b/lldb/test/API/api/multithreaded/driver.cpp @@ -10,7 +10,7 @@ #include <signal.h> #endif -%include_SB_APIs% +#include "lldb/API/SBDebugger.h" #include "common.h" diff --git a/lldb/test/API/api/multithreaded/listener_test.cpp.template b/lldb/test/API/api/multithreaded/listener_test.cpp similarity index 91% rename from lldb/test/API/api/multithreaded/listener_test.cpp.template rename to lldb/test/API/api/multithreaded/listener_test.cpp index e305d1af4893f..7b7a8112e0ec5 100644 --- a/lldb/test/API/api/multithreaded/listener_test.cpp.template +++ b/lldb/test/API/api/multithreaded/listener_test.cpp @@ -7,7 +7,12 @@ #include <thread> #include <vector> -%include_SB_APIs% +#include "lldb/API/SBBreakpoint.h" +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBError.h" +#include "lldb/API/SBListener.h" +#include "lldb/API/SBProcess.h" +#include "lldb/API/SBTarget.h" #include "common.h" using namespace lldb; diff --git a/lldb/test/API/api/multithreaded/test_breakpoint_callback.cpp.template b/lldb/test/API/api/multithreaded/test_breakpoint_callback.cpp similarity index 86% rename from lldb/test/API/api/multithreaded/test_breakpoint_callback.cpp.template rename to lldb/test/API/api/multithreaded/test_breakpoint_callback.cpp index 4133025aa495a..557a7bb64066e 100644 --- a/lldb/test/API/api/multithreaded/test_breakpoint_callback.cpp.template +++ b/lldb/test/API/api/multithreaded/test_breakpoint_callback.cpp @@ -7,7 +7,12 @@ #include <vector> #include <string> -%include_SB_APIs% +#include "lldb/API/SBBreakpoint.h" +#include "lldb/API/SBBreakpointLocation.h" +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBProcess.h" +#include "lldb/API/SBTarget.h" +#include "lldb/API/SBThread.h" #include "common.h" diff --git a/lldb/test/API/api/multithreaded/test_breakpoint_location_callback.cpp.template b/lldb/test/API/api/multithreaded/test_breakpoint_location_callback.cpp similarity index 86% rename from lldb/test/API/api/multithreaded/test_breakpoint_location_callback.cpp.template rename to lldb/test/API/api/multithreaded/test_breakpoint_location_callback.cpp index a4bc65ab91331..90705aae352bb 100644 --- a/lldb/test/API/api/multithreaded/test_breakpoint_location_callback.cpp.template +++ b/lldb/test/API/api/multithreaded/test_breakpoint_location_callback.cpp @@ -7,7 +7,14 @@ #include <vector> #include <string> -%include_SB_APIs% +#include "lldb/API/SBBreakpoint.h" +#include "lldb/API/SBBreakpointLocation.h" +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBFileSpec.h" +#include "lldb/API/SBFileSpecList.h" +#include "lldb/API/SBProcess.h" +#include "lldb/API/SBTarget.h" +#include "lldb/API/SBThread.h" #include "common.h" diff --git a/lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp.template b/lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp similarity index 89% rename from lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp.template rename to lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp index e5101dde79619..1272f7464446e 100644 --- a/lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp.template +++ b/lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp @@ -3,7 +3,15 @@ #include <atomic> #include <thread> -%include_SB_APIs% +#include "lldb/API/SBBreakpoint.h" +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBError.h" +#include "lldb/API/SBFileSpec.h" +#include "lldb/API/SBFrame.h" +#include "lldb/API/SBLaunchInfo.h" +#include "lldb/API/SBProcess.h" +#include "lldb/API/SBTarget.h" +#include "lldb/API/SBThread.h" #include "common.h" diff --git a/lldb/test/API/api/multithreaded/test_listener_event_description.cpp.template b/lldb/test/API/api/multithreaded/test_listener_event_description.cpp similarity index 95% rename from lldb/test/API/api/multithreaded/test_listener_event_description.cpp.template rename to lldb/test/API/api/multithreaded/test_listener_event_description.cpp index 63e3f3631e5d2..54bdc4fceb790 100644 --- a/lldb/test/API/api/multithreaded/test_listener_event_description.cpp.template +++ b/lldb/test/API/api/multithreaded/test_listener_event_description.cpp @@ -8,7 +8,10 @@ #include <string> #include <thread> -%include_SB_APIs% +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBEvent.h" +#include "lldb/API/SBListener.h" +#include "lldb/API/SBStream.h" #include "common.h" diff --git a/lldb/test/API/api/multithreaded/test_listener_event_process_state.cpp.template b/lldb/test/API/api/multithreaded/test_listener_event_process_state.cpp similarity index 88% rename from lldb/test/API/api/multithreaded/test_listener_event_process_state.cpp.template rename to lldb/test/API/api/multithreaded/test_listener_event_process_state.cpp index 2926ece4d8d92..1e010b99ab8f1 100644 --- a/lldb/test/API/api/multithreaded/test_listener_event_process_state.cpp.template +++ b/lldb/test/API/api/multithreaded/test_listener_event_process_state.cpp @@ -8,7 +8,14 @@ #include <string> #include <thread> -%include_SB_APIs% +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBEvent.h" +#include "lldb/API/SBFrame.h" +#include "lldb/API/SBListener.h" +#include "lldb/API/SBProcess.h" +#include "lldb/API/SBStream.h" +#include "lldb/API/SBSymbol.h" +#include "lldb/API/SBThread.h" #include "common.h" diff --git a/lldb/test/API/api/multithreaded/test_listener_resume.cpp.template b/lldb/test/API/api/multithreaded/test_listener_resume.cpp similarity index 89% rename from lldb/test/API/api/multithreaded/test_listener_resume.cpp.template rename to lldb/test/API/api/multithreaded/test_listener_resume.cpp index 4adc9b3388793..752e26520bd08 100644 --- a/lldb/test/API/api/multithreaded/test_listener_resume.cpp.template +++ b/lldb/test/API/api/multithreaded/test_listener_resume.cpp @@ -8,7 +8,11 @@ #include <string> #include <thread> -%include_SB_APIs% +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBError.h" +#include "lldb/API/SBEvent.h" +#include "lldb/API/SBListener.h" +#include "lldb/API/SBProcess.h" #include "common.h" diff --git a/lldb/test/API/api/multithreaded/test_stop-hook.cpp.template b/lldb/test/API/api/multithreaded/test_stop-hook.cpp similarity index 86% rename from lldb/test/API/api/multithreaded/test_stop-hook.cpp.template rename to lldb/test/API/api/multithreaded/test_stop-hook.cpp index 393e717cceb5a..a88892340e613 100644 --- a/lldb/test/API/api/multithreaded/test_stop-hook.cpp.template +++ b/lldb/test/API/api/multithreaded/test_stop-hook.cpp @@ -2,13 +2,23 @@ // is set to a FILE *, lldb can still successfully run a // python command in a stop hook. +#include <cstdlib> #include <errno.h> #include <mutex> #include <stdio.h> #include <string> #include <vector> -%include_SB_APIs% +#include "lldb/API/SBBreakpoint.h" +#include "lldb/API/SBBroadcaster.h" +#include "lldb/API/SBCommandInterpreter.h" +#include "lldb/API/SBCommandReturnObject.h" +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBEvent.h" +#include "lldb/API/SBFileSpec.h" +#include "lldb/API/SBListener.h" +#include "lldb/API/SBProcess.h" +#include "lldb/API/SBTarget.h" #include "common.h" @@ -44,7 +54,11 @@ void test(SBDebugger &dbg, std::vector<std::string> args) { // one that runs in the stop hook and sets a variable when it // runs, and one that reports out the variable so we can ensure // that we did indeed run the stop hook. - const char *source_dir = "%SOURCE_DIR%"; + // The test sets LLDB_TEST_SOURCE_DIR to the directory containing this + // test's support files (see TestMultithreaded.py). + const char *source_dir = getenv("LLDB_TEST_SOURCE_DIR"); + if (!source_dir) + throw Exception("LLDB_TEST_SOURCE_DIR is not set"); SBFileSpec script_spec(source_dir); script_spec.AppendPathComponent("some_cmd.py"); char path[PATH_MAX]; @@ -54,7 +68,7 @@ void test(SBDebugger &dbg, std::vector<std::string> args) { import_command.append(path); interp.HandleCommand(import_command.c_str(), result); if (!result.Succeeded()) - throw Exception("Couldn't import %SOURCE_DIR%/some_cmd.py"); + throw Exception(std::string("Couldn't import ") + path); SBProcess process = target.LaunchSimple(nullptr, nullptr, nullptr); if (!process.IsValid()) _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
