[Lldb-commits] [lldb] [LLDB] Initial swift debugserver bringup (PR #233593)

Alex Langford via lldb-commits lldb-commits at lists.llvm.org
Mon Oct 19 16:01:46 PDT 2026


https://github.com/bulbazord updated https://github.com/llvm/llvm-project/pull/233593

>From 7a0aca1f503e2d4d49bfb113a2b023b15df8c821 Mon Sep 17 00:00:00 2001
From: Alex Langford <alangford at apple.com>
Date: Thu, 15 Oct 2026 10:43:33 -0700
Subject: [PATCH 1/3] [LLDB] Initial swift debugserver bringup

This commit breaks ground on the swift rewrite of debugserver. I am
choosing to start with the driver so we can immediately have an
executable to run and integrate into LLDB earlier rather than later.
The main purpose of this initial commit is to make sure that the build
system is ready and capable of building swift executables, though I'm
sure we'll uncover more issues as we add more functionality.

The new debugserver will support a GDB-Remote mode and a Platform mode
much like lldb-server already does. In terms of command line interface,
it will have top-level commands to specify which mode to operate with.

Currently the binary only prints the version (which I have hardcoded).
Later commits will fill this in with a version matching the LLDB it
ships with.

RFC: https://discourse.llvm.org/t/rfc-rewriting-debugserver-in-swift/92424/9
---
 lldb/cmake/modules/LLDBConfig.cmake           |  3 +++
 lldb/tools/CMakeLists.txt                     |  4 ++++
 lldb/tools/swift-debugserver/CMakeLists.txt   | 24 +++++++++++++++++++
 .../swift-debugserver/source/CMakeLists.txt   |  1 +
 .../source/driver/CMakeLists.txt              |  6 +++++
 .../source/driver/Debugserver.swift           |  6 +++++
 .../source/driver/GDBServer.swift             |  2 ++
 .../source/driver/PlatformServer.swift        |  2 ++
 .../source/driver/Version.swift               |  5 ++++
 9 files changed, 53 insertions(+)
 create mode 100644 lldb/tools/swift-debugserver/CMakeLists.txt
 create mode 100644 lldb/tools/swift-debugserver/source/CMakeLists.txt
 create mode 100644 lldb/tools/swift-debugserver/source/driver/CMakeLists.txt
 create mode 100644 lldb/tools/swift-debugserver/source/driver/Debugserver.swift
 create mode 100644 lldb/tools/swift-debugserver/source/driver/GDBServer.swift
 create mode 100644 lldb/tools/swift-debugserver/source/driver/PlatformServer.swift
 create mode 100644 lldb/tools/swift-debugserver/source/driver/Version.swift

diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake
index c3477ff620b58..6fbea7e183ead 100644
--- a/lldb/cmake/modules/LLDBConfig.cmake
+++ b/lldb/cmake/modules/LLDBConfig.cmake
@@ -448,4 +448,7 @@ else()
     set(LLDB_CAN_USE_DEBUGSERVER OFF)
 endif()
 
+set(default_build_swift_debugserver OFF)
+option(LLDB_BUILD_SWIFT_DEBUGSERVER "Build the Swift debugserver (experimental)" ${default_build_swift_debugserver})
+
 include(LLDBGenerateConfig)
diff --git a/lldb/tools/CMakeLists.txt b/lldb/tools/CMakeLists.txt
index d02a814f7383f..75dd293b631ff 100644
--- a/lldb/tools/CMakeLists.txt
+++ b/lldb/tools/CMakeLists.txt
@@ -22,6 +22,10 @@ if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
   endif()
 endif()
 
+if (LLDB_BUILD_SWIFT_DEBUGSERVER AND NOT LLDB_USE_SYSTEM_DEBUGSERVER)
+  add_lldb_tool_subdirectory(swift-debugserver)
+endif()
+
 if (LLDB_CAN_USE_LLDB_SERVER)
   add_lldb_tool_subdirectory(lldb-server)
 endif()
diff --git a/lldb/tools/swift-debugserver/CMakeLists.txt b/lldb/tools/swift-debugserver/CMakeLists.txt
new file mode 100644
index 0000000000000..85f884876d426
--- /dev/null
+++ b/lldb/tools/swift-debugserver/CMakeLists.txt
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.31.0)
+
+project(swift-debugserver LANGUAGES C Swift)
+
+# Must go below project(..)
+include(GNUInstallDirs)
+
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+  set(LLDB_BUILT_STANDALONE ON)
+
+  set(CMAKE_MODULE_PATH
+    ${CMAKE_MODULE_PATH}
+    "${CMAKE_SOURCE_DIR}/../../cmake"
+    "${CMAKE_SOURCE_DIR}/../../cmake/modules")
+
+  include(LLDBStandalone)
+  include(debugserverConfig)
+  include(AddLLDB)
+
+  set(LLDB_SOURCE_DIR "${CMAKE_SOURCE_DIR}/../../")
+  include_directories(${LLDB_SOURCE_DIR}/include)
+endif()
+
+add_subdirectory(source)
diff --git a/lldb/tools/swift-debugserver/source/CMakeLists.txt b/lldb/tools/swift-debugserver/source/CMakeLists.txt
new file mode 100644
index 0000000000000..e5dc2ccb22622
--- /dev/null
+++ b/lldb/tools/swift-debugserver/source/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(driver)
diff --git a/lldb/tools/swift-debugserver/source/driver/CMakeLists.txt b/lldb/tools/swift-debugserver/source/driver/CMakeLists.txt
new file mode 100644
index 0000000000000..efa5734691805
--- /dev/null
+++ b/lldb/tools/swift-debugserver/source/driver/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_lldb_tool(swift_debugserver ADD_TO_FRAMEWORK
+  DebugServer.swift
+  GDBServer.swift
+  PlatformServer.swift
+  Version.swift
+)
diff --git a/lldb/tools/swift-debugserver/source/driver/Debugserver.swift b/lldb/tools/swift-debugserver/source/driver/Debugserver.swift
new file mode 100644
index 0000000000000..9f153913d3b28
--- /dev/null
+++ b/lldb/tools/swift-debugserver/source/driver/Debugserver.swift
@@ -0,0 +1,6 @@
+ at main
+private struct DebugServer {
+  static func main() {
+    Version.printVersion()
+  }
+}
diff --git a/lldb/tools/swift-debugserver/source/driver/GDBServer.swift b/lldb/tools/swift-debugserver/source/driver/GDBServer.swift
new file mode 100644
index 0000000000000..9e52d304b32e8
--- /dev/null
+++ b/lldb/tools/swift-debugserver/source/driver/GDBServer.swift
@@ -0,0 +1,2 @@
+internal struct GDBServer {
+}
diff --git a/lldb/tools/swift-debugserver/source/driver/PlatformServer.swift b/lldb/tools/swift-debugserver/source/driver/PlatformServer.swift
new file mode 100644
index 0000000000000..3c64cff0d1f4b
--- /dev/null
+++ b/lldb/tools/swift-debugserver/source/driver/PlatformServer.swift
@@ -0,0 +1,2 @@
+internal struct PlatformServer {
+}
diff --git a/lldb/tools/swift-debugserver/source/driver/Version.swift b/lldb/tools/swift-debugserver/source/driver/Version.swift
new file mode 100644
index 0000000000000..058905b15d7da
--- /dev/null
+++ b/lldb/tools/swift-debugserver/source/driver/Version.swift
@@ -0,0 +1,5 @@
+internal struct Version {
+  internal static func printVersion() {
+    print("swift_debugserver Version 0.0.1")
+  }
+}

>From 6ae0c9554fcd778797affd166a616e02e832d3ee Mon Sep 17 00:00:00 2001
From: Alex Langford <alangford at apple.com>
Date: Mon, 19 Oct 2026 15:04:24 -0700
Subject: [PATCH 2/3] case sensitivity

---
 .../source/driver/{Debugserver.swift => DebugServer.swift}        | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename lldb/tools/swift-debugserver/source/driver/{Debugserver.swift => DebugServer.swift} (100%)

diff --git a/lldb/tools/swift-debugserver/source/driver/Debugserver.swift b/lldb/tools/swift-debugserver/source/driver/DebugServer.swift
similarity index 100%
rename from lldb/tools/swift-debugserver/source/driver/Debugserver.swift
rename to lldb/tools/swift-debugserver/source/driver/DebugServer.swift

>From 26cc6c2e49b719bb0a2517adc471e1a21955225b Mon Sep 17 00:00:00 2001
From: Alex Langford <alangford at apple.com>
Date: Mon, 19 Oct 2026 16:01:27 -0700
Subject: [PATCH 3/3] Saleem feedback

---
 lldb/cmake/modules/LLDBConfig.cmake                       | 3 +--
 lldb/tools/swift-debugserver/CMakeLists.txt               | 8 ++------
 lldb/tools/swift-debugserver/source/driver/CMakeLists.txt | 2 --
 .../tools/swift-debugserver/source/driver/GDBServer.swift | 2 --
 .../swift-debugserver/source/driver/PlatformServer.swift  | 2 --
 5 files changed, 3 insertions(+), 14 deletions(-)
 delete mode 100644 lldb/tools/swift-debugserver/source/driver/GDBServer.swift
 delete mode 100644 lldb/tools/swift-debugserver/source/driver/PlatformServer.swift

diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake
index 6fbea7e183ead..3e8c91b0f110f 100644
--- a/lldb/cmake/modules/LLDBConfig.cmake
+++ b/lldb/cmake/modules/LLDBConfig.cmake
@@ -448,7 +448,6 @@ else()
     set(LLDB_CAN_USE_DEBUGSERVER OFF)
 endif()
 
-set(default_build_swift_debugserver OFF)
-option(LLDB_BUILD_SWIFT_DEBUGSERVER "Build the Swift debugserver (experimental)" ${default_build_swift_debugserver})
+option(LLDB_BUILD_SWIFT_DEBUGSERVER "Build the Swift debugserver (experimental)" OFF)
 
 include(LLDBGenerateConfig)
diff --git a/lldb/tools/swift-debugserver/CMakeLists.txt b/lldb/tools/swift-debugserver/CMakeLists.txt
index 85f884876d426..83b98de22534e 100644
--- a/lldb/tools/swift-debugserver/CMakeLists.txt
+++ b/lldb/tools/swift-debugserver/CMakeLists.txt
@@ -2,13 +2,12 @@ cmake_minimum_required(VERSION 3.31.0)
 
 project(swift-debugserver LANGUAGES C Swift)
 
-# Must go below project(..)
 include(GNUInstallDirs)
 
-if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+if (PROJECT_IS_TOP_LEVEL)
   set(LLDB_BUILT_STANDALONE ON)
 
-  set(CMAKE_MODULE_PATH
+  list(APPEND CMAKE_MODULE_PATH
     ${CMAKE_MODULE_PATH}
     "${CMAKE_SOURCE_DIR}/../../cmake"
     "${CMAKE_SOURCE_DIR}/../../cmake/modules")
@@ -16,9 +15,6 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
   include(LLDBStandalone)
   include(debugserverConfig)
   include(AddLLDB)
-
-  set(LLDB_SOURCE_DIR "${CMAKE_SOURCE_DIR}/../../")
-  include_directories(${LLDB_SOURCE_DIR}/include)
 endif()
 
 add_subdirectory(source)
diff --git a/lldb/tools/swift-debugserver/source/driver/CMakeLists.txt b/lldb/tools/swift-debugserver/source/driver/CMakeLists.txt
index efa5734691805..3e7ac41b89575 100644
--- a/lldb/tools/swift-debugserver/source/driver/CMakeLists.txt
+++ b/lldb/tools/swift-debugserver/source/driver/CMakeLists.txt
@@ -1,6 +1,4 @@
 add_lldb_tool(swift_debugserver ADD_TO_FRAMEWORK
   DebugServer.swift
-  GDBServer.swift
-  PlatformServer.swift
   Version.swift
 )
diff --git a/lldb/tools/swift-debugserver/source/driver/GDBServer.swift b/lldb/tools/swift-debugserver/source/driver/GDBServer.swift
deleted file mode 100644
index 9e52d304b32e8..0000000000000
--- a/lldb/tools/swift-debugserver/source/driver/GDBServer.swift
+++ /dev/null
@@ -1,2 +0,0 @@
-internal struct GDBServer {
-}
diff --git a/lldb/tools/swift-debugserver/source/driver/PlatformServer.swift b/lldb/tools/swift-debugserver/source/driver/PlatformServer.swift
deleted file mode 100644
index 3c64cff0d1f4b..0000000000000
--- a/lldb/tools/swift-debugserver/source/driver/PlatformServer.swift
+++ /dev/null
@@ -1,2 +0,0 @@
-internal struct PlatformServer {
-}



More information about the lldb-commits mailing list