Skip to content

Commit 41c6ab2

Browse files
committed
[lldb][swift] Only compile LLDB code that depends on Swift when Swift support is enabled.
With this commit turning of LLDB_ENABLE_SWIFT_SUPPORT will also unset the LLDB_ENABLE_SWIFT define. It also puts all LLDB code that depends on Swift behind an #ifdef LLDB_ENABLE_SWIFT so that we can now build an LLDB that is as close as possible to a LLDB with Swift support without actually needing any Swift code.
1 parent 9f4a963 commit 41c6ab2

File tree

18 files changed

+104
-26
lines changed

18 files changed

+104
-26
lines changed

lldb/cmake/modules/LLDBConfig.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ option(LLDB_SKIP_STRIP "Whether to skip stripping of binaries when installing ll
7070
option(LLDB_ENABLE_SWIFT_SUPPORT "Enable swift support" ON)
7171
option(LLDB_USE_STATIC_BINDINGS "Use the static Python bindings." OFF)
7272
option(LLDB_ENABLE_WERROR "Fail and stop if a warning is triggered." ${LLVM_ENABLE_WERROR})
73+
if(LLDB_ENABLE_SWIFT_SUPPORT)
74+
add_definitions( -DLLDB_ENABLE_SWIFT )
75+
endif()
7376
# END SWIFT CODE
7477

7578
if (LLDB_USE_SYSTEM_DEBUGSERVER)

lldb/include/lldb/Core/ValueObject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,9 @@ class ValueObject : public UserID {
582582

583583
virtual bool HasSyntheticValue();
584584

585+
#ifdef LLDB_ENABLE_SWIFT
585586
SwiftASTContextReader GetScratchSwiftASTContext();
587+
#endif // LLDB_ENABLE_SWIFT
586588

587589
virtual bool IsSynthetic() { return false; }
588590

lldb/include/lldb/Target/Target.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,8 +1086,10 @@ class Target : public std::enable_shared_from_this<Target>,
10861086
PersistentExpressionState *
10871087
GetPersistentExpressionStateForLanguage(lldb::LanguageType language);
10881088

1089+
#ifdef LLDB_ENABLE_SWIFT
10891090
SwiftPersistentExpressionState *
10901091
GetSwiftPersistentExpressionState(ExecutionContextScope &exe_scope);
1092+
#endif // LLDB_ENABLE_SWIFT
10911093

10921094
const TypeSystemMap &GetTypeSystemMap();
10931095

@@ -1126,6 +1128,7 @@ class Target : public std::enable_shared_from_this<Target>,
11261128
Status &error);
11271129

11281130

1131+
#ifdef LLDB_ENABLE_SWIFT
11291132
/// Get the lock guarding the scratch typesystem from being re-initialized.
11301133
SharedMutex &GetSwiftScratchContextLock() {
11311134
return m_scratch_typesystem_lock;
@@ -1138,6 +1141,7 @@ class Target : public std::enable_shared_from_this<Target>,
11381141
private:
11391142
void DisplayFallbackSwiftContextErrors(
11401143
SwiftASTContextForExpressions *swift_ast_ctx);
1144+
#endif // LLDB_ENABLE_SWIFT
11411145

11421146
public:
11431147

lldb/source/Core/Mangled.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@
2424
#include "llvm/Demangle/Demangle.h"
2525
#include "llvm/Support/Compiler.h"
2626

27-
// BEGIN SWIFT
27+
#ifdef LLDB_ENABLE_SWIFT
2828
#include "lldb/Target/SwiftLanguageRuntime.h"
2929
#include "llvm/ADT/DenseMap.h"
3030
#include "swift/Demangling/Demangle.h"
31+
#endif // LLDB_ENABLE_SWIFT
32+
// BEGIN SWIFT
33+
#include "lldb/Core/ThreadSafeDenseMap.h"
3134
// END SWIFT
3235

3336
#include <mutex>
@@ -40,9 +43,10 @@ using namespace lldb_private;
4043

4144
static inline bool cstring_is_mangled(llvm::StringRef s) {
4245
return Mangled::GetManglingScheme(s) != Mangled::eManglingSchemeNone
43-
// BEGIN SWIFT
44-
|| SwiftLanguageRuntime::IsSwiftMangledName(s);
45-
// END SWIFT
46+
#ifdef LLDB_ENABLE_SWIFT
47+
|| SwiftLanguageRuntime::IsSwiftMangledName(s)
48+
#endif // LLDB_ENABLE_SWIFT
49+
;
4650
}
4751

4852
static ConstString
@@ -89,7 +93,7 @@ get_demangled_name_without_arguments(ConstString mangled,
8993
return g_most_recent_mangled_to_name_sans_args.second;
9094
}
9195
}
92-
// BEGIN SWIFT
96+
#ifdef LLDB_ENABLE_SWIFT
9397
else if (SwiftLanguageRuntime::IsSwiftMangledName(demangled.GetStringRef())) {
9498
lldb_private::ConstString basename;
9599
bool is_method = false;
@@ -102,7 +106,7 @@ get_demangled_name_without_arguments(ConstString mangled,
102106
}
103107
}
104108
}
105-
// END SWIFT
109+
#endif // LLDB_ENABLE_SWIFT
106110
}
107111

108112
if (demangled)
@@ -375,7 +379,7 @@ ConstString Mangled::GetDemangledName(// BEGIN SWIFT
375379
free(demangled_name);
376380
}
377381
}
378-
// BEGIN SWIFT
382+
#ifdef LLDB_ENABLE_SWIFT
379383
else if (mangling_scheme == eManglingSchemeNone &&
380384
!m_mangled.GetMangledCounterpart(m_demangled) &&
381385
SwiftLanguageRuntime::IsSwiftMangledName(m_mangled.GetStringRef())) {
@@ -399,7 +403,7 @@ ConstString Mangled::GetDemangledName(// BEGIN SWIFT
399403
mangled_name);
400404
}
401405
}
402-
// END SWIFT
406+
#endif // LLDB_ENABLE_SWIFT
403407
if (m_demangled.IsNull()) {
404408
// Set the demangled string to the empty string to indicate we tried to
405409
// parse it once and failed.
@@ -415,6 +419,7 @@ ConstString Mangled::GetDisplayDemangledName(
415419
const SymbolContext *sc
416420
) const {
417421
ConstString demangled;
422+
#ifdef LLDB_ENABLE_SWIFT
418423
if (m_mangled) {
419424
do {
420425
const char *mangled = m_mangled.GetCString();
@@ -438,6 +443,7 @@ ConstString Mangled::GetDisplayDemangledName(
438443
}
439444
} while (0);
440445
}
446+
#endif // LLDB_ENABLE_SWIFT
441447
if (!demangled)
442448
demangled = GetDemangledName();
443449
return demangled ? demangled : m_mangled;
@@ -523,10 +529,10 @@ lldb::LanguageType Mangled::GuessLanguage() const {
523529
return lldb::eLanguageTypeC_plus_plus;
524530
else if (ObjCLanguage::IsPossibleObjCMethodName(mangled_name))
525531
return lldb::eLanguageTypeObjC;
526-
// BEGIN SWIFT
532+
#ifdef LLDB_ENABLE_SWIFT
527533
else if (SwiftLanguageRuntime::IsSwiftMangledName(mangled.GetStringRef()))
528534
return lldb::eLanguageTypeSwift;
529-
// END SWIFT
535+
#endif // LLDB_ENABLE_SWIFT
530536
} else {
531537
// ObjC names aren't really mangled, so they won't necessarily be in the
532538
// mangled name slot.

lldb/source/Core/Module.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@
5353
#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
5454
#include "Plugins/Language/ObjC/ObjCLanguage.h"
5555

56-
// BEGIN SWIFT
56+
#ifdef LLDB_ENABLE_SWIFT
5757
#include "lldb/Symbol/SwiftASTContext.h"
5858
#include "lldb/Target/SwiftLanguageRuntime.h"
59-
// END SWIFT
59+
#endif // LLDB_ENABLE_SWIFT
6060

6161
#include "llvm/ADT/STLExtras.h"
6262
#include "llvm/Support/Compiler.h"
@@ -646,10 +646,10 @@ Module::LookupInfo::LookupInfo(ConstString name,
646646
Language::LanguageIsObjC(language)) &&
647647
ObjCLanguage::IsPossibleObjCMethodName(name_cstr))
648648
m_name_type_mask = eFunctionNameTypeFull;
649-
// BEGIN SWIFT
649+
#ifdef LLDB_ENABLE_SWIFT
650650
else if (SwiftLanguageRuntime::IsSwiftMangledName(name.GetStringRef()))
651651
m_name_type_mask = eFunctionNameTypeFull;
652-
// END SWIFT
652+
#endif // LLDB_ENABLE_SWIFT
653653
else if (Language::LanguageIsC(language)) {
654654
m_name_type_mask = eFunctionNameTypeFull;
655655
} else {
@@ -660,7 +660,7 @@ Module::LookupInfo::LookupInfo(ConstString name,
660660

661661
CPlusPlusLanguage::MethodName cpp_method(name);
662662

663-
// BEGIN SWIFT
663+
#ifdef LLDB_ENABLE_SWIFT
664664
SwiftLanguageRuntime::MethodName swift_method(name, true);
665665

666666
if ((language == eLanguageTypeUnknown ||
@@ -673,7 +673,7 @@ Module::LookupInfo::LookupInfo(ConstString name,
673673
language == eLanguageTypeObjC_plus_plus) &&
674674
cpp_method.IsValid())
675675
basename = cpp_method.GetBasename();
676-
// END SWIFT
676+
#endif // LLDB_ENABLE_SWIFT
677677

678678
if (basename.empty()) {
679679
if (CPlusPlusLanguage::ExtractContextAndIdentifier(name_cstr, context,
@@ -694,9 +694,11 @@ Module::LookupInfo::LookupInfo(ConstString name,
694694
CPlusPlusLanguage::MethodName cpp_method(name);
695695

696696
// BEGIN SWIFT
697+
#ifdef LLDB_ENABLE_SWIFT
697698
SwiftLanguageRuntime::MethodName swift_method(name, true);
698699
if (swift_method.IsValid())
699700
basename = swift_method.GetBasename();
701+
#endif // LLDB_ENABLE_SWIFT
700702
if (cpp_method.IsValid())
701703
basename = cpp_method.GetBasename();
702704
if (!basename.empty()) {
@@ -1572,10 +1574,11 @@ bool Module::SetArchitecture(const ArchSpec &new_arch) {
15721574
llvm::consumeError(type_system_or_err.takeError());
15731575
return true;
15741576
}
1575-
1577+
#ifdef LLDB_ENABLE_SWIFT
15761578
if (auto *swift_ast =
15771579
llvm::dyn_cast_or_null<SwiftASTContext>(&*type_system_or_err))
15781580
swift_ast->SetTriple(new_arch.GetTriple());
1581+
#endif // LLDB_ENABLE_SWIFT
15791582
return true;
15801583
}
15811584
return m_arch.IsCompatibleMatch(new_arch);
@@ -1698,8 +1701,10 @@ void Module::ClearModuleDependentCaches() {
16981701
return;
16991702
}
17001703

1704+
#ifdef LLDB_ENABLE_SWIFT
17011705
if (auto *swift_ast = llvm::dyn_cast_or_null<SwiftASTContext>(&*type_system_or_err))
17021706
swift_ast->ClearModuleDependentCaches();
1707+
#endif // LLDB_ENABLE_SWIFT
17031708
}
17041709

17051710
void Module::ForEachTypeSystem(

lldb/source/Core/ValueObject.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1748,6 +1748,7 @@ LanguageType ValueObject::GetObjectRuntimeLanguage() {
17481748
return lldb::eLanguageTypeUnknown;
17491749
}
17501750

1751+
#ifdef LLDB_ENABLE_SWIFT
17511752
SwiftASTContextReader ValueObject::GetScratchSwiftASTContext() {
17521753
lldb::TargetSP target_sp(GetTargetSP());
17531754
if (!target_sp)
@@ -1757,6 +1758,7 @@ SwiftASTContextReader ValueObject::GetScratchSwiftASTContext() {
17571758
auto *exe_scope = ctx.GetBestExecutionContextScope();
17581759
return target_sp->GetScratchSwiftASTContext(error, *exe_scope);
17591760
}
1761+
#endif // LLDB_ENABLE_SWIFT
17601762

17611763
void ValueObject::AddSyntheticChild(ConstString key,
17621764
ValueObject *valobj) {
@@ -2818,7 +2820,9 @@ void ValueObject::LogValueObject(Log *log,
28182820
void ValueObject::Dump(Stream &s) { Dump(s, DumpValueObjectOptions(*this)); }
28192821

28202822
void ValueObject::Dump(Stream &s, const DumpValueObjectOptions &options) {
2823+
#ifdef LLDB_ENABLE_SWIFT
28212824
auto swift_scratch_ctx_lock = SwiftASTContextLock(GetSwiftExeCtx(*this));
2825+
#endif // LLDB_ENABLE_SWIFT
28222826
ValueObjectPrinter printer(this, &s, options);
28232827
printer.PrintValueObject();
28242828
}
@@ -3360,13 +3364,15 @@ ValueObjectSP ValueObject::Persist() {
33603364
return nullptr;
33613365

33623366
PersistentExpressionState *persistent_state;
3367+
#ifdef LLDB_ENABLE_SWIFT
33633368
if (GetPreferredDisplayLanguage() == eLanguageTypeSwift) {
33643369
ExecutionContext ctx = GetExecutionContextRef().Lock(false);
33653370
auto *exe_scope = ctx.GetBestExecutionContextScope();
33663371
if (!exe_scope)
33673372
return nullptr;
33683373
persistent_state = target_sp->GetSwiftPersistentExpressionState(*exe_scope);
33693374
} else
3375+
#endif // LLDB_ENABLE_SWIFT
33703376
persistent_state = target_sp->GetPersistentExpressionStateForLanguage(
33713377
GetPreferredDisplayLanguage());
33723378

lldb/source/Core/ValueObjectDynamicValue.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ bool ValueObjectDynamicValue::UpdateValue() {
148148
m_data.SetAddressByteSize(target->GetArchitecture().GetAddressByteSize());
149149
}
150150

151+
#ifdef LLDB_ENABLE_SWIFT
151152
auto swift_scratch_ctx_lock = SwiftASTContextLock(&exe_ctx);
153+
#endif // LLDB_ENABLE_SWIFT
152154

153155
// First make sure our Type and/or Address haven't changed:
154156
Process *process = exe_ctx.GetProcessPtr();
@@ -431,6 +433,10 @@ bool ValueObjectDynamicValue::DynamicValueTypeInfoNeedsUpdate() {
431433
if (!m_dynamic_type_info.HasType())
432434
return false;
433435

436+
#ifdef LLDB_ENABLE_SWIFT
434437
auto *cached_ctx = m_value.GetCompilerType().GetTypeSystem();
435438
return cached_ctx == GetScratchSwiftASTContext().get();
439+
#else // !LLDB_ENABLE_SWIFT
440+
return false;
441+
#endif // LLDB_ENABLE_SWIFT
436442
}

lldb/source/Core/ValueObjectVariable.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ bool ValueObjectVariable::UpdateValue() {
260260
break;
261261
}
262262

263-
// BEGIN Swift
263+
#ifdef LLDB_ENABLE_SWIFT
264264
if (auto type = variable->GetType())
265265
if (llvm::dyn_cast_or_null<TypeSystemSwift>(
266266
type->GetForwardCompilerType().GetTypeSystem()) &&
@@ -281,7 +281,7 @@ bool ValueObjectVariable::UpdateValue() {
281281
}
282282
}
283283
}
284-
// END Swift
284+
#endif // LLDB_ENABLE_SWIFT
285285

286286
switch (value_type) {
287287
case Value::eValueTypeVector:

lldb/source/Expression/Materializer.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,12 @@ class EntityVariable : public Materializer::Entity {
419419
m_alignment = 8;
420420
m_is_reference =
421421
m_variable_sp->GetType()->GetForwardCompilerType().IsReferenceType();
422+
#ifdef LLDB_ENABLE_SWIFT
422423
m_is_generic = SwiftASTContext::IsGenericType(
423424
m_variable_sp->GetType()->GetForwardCompilerType());
425+
#else // !LLDB_ENABLE_SWIFT
426+
m_is_generic = false;
427+
#endif // LLDB_ENABLE_SWIFT
424428
}
425429

426430
void Materialize(lldb::StackFrameSP &frame_sp, IRMemoryMap &map,
@@ -661,9 +665,11 @@ class EntityVariable : public Materializer::Entity {
661665

662666
CompilerType valobj_type = valobj_sp->GetCompilerType();
663667

668+
#ifdef LLDB_ENABLE_SWIFT
664669
if (SwiftASTContext::IsGenericType(valobj_type)) {
665670
valobj_sp = valobj_sp->GetDynamicValue(lldb::eDynamicDontRunTarget);
666671
}
672+
#endif // LLDB_ENABLE_SWIFT
667673

668674
lldb_private::DataExtractor data;
669675

@@ -922,6 +928,7 @@ class EntityResultVariable : public Materializer::Entity {
922928
PersistentExpressionState *persistent_state = nullptr;
923929

924930
if (m_type.GetMinimumLanguage() == lldb::eLanguageTypeSwift) {
931+
#ifdef LLDB_ENABLE_SWIFT
925932
Status status;
926933
auto type_system =
927934
target_sp->GetScratchSwiftASTContext(status, *exe_scope).get();
@@ -933,6 +940,7 @@ class EntityResultVariable : public Materializer::Entity {
933940
}
934941
persistent_state =
935942
target_sp->GetSwiftPersistentExpressionState(*exe_scope);
943+
#endif // LLDB_ENABLE_SWIFT
936944
} else {
937945
auto type_system_or_err =
938946
target_sp->GetScratchTypeSystemForLanguage(m_type.GetMinimumLanguage());

lldb/source/Expression/UserExpression.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,12 +399,15 @@ UserExpression::Execute(DiagnosticManager &diagnostic_manager,
399399
diagnostic_manager, exe_ctx, options, shared_ptr_to_me, result_var);
400400
Target *target = exe_ctx.GetTargetPtr();
401401
if (options.GetResultIsInternal() && result_var && target) {
402+
#ifdef LLDB_ENABLE_SWIFT
402403
if (m_language == lldb::eLanguageTypeSwift) {
403404
if (auto *exe_scope = exe_ctx.GetBestExecutionContextScope())
404405
if (auto *persistent_state =
405406
target->GetSwiftPersistentExpressionState(*exe_scope))
406407
persistent_state->RemovePersistentVariable(result_var);
407-
} else if (auto *persistent_state =
408+
} else
409+
#endif // LLDB_ENABLE_SWIFT
410+
if (auto *persistent_state =
408411
target->GetPersistentExpressionStateForLanguage(m_language))
409412
persistent_state->RemovePersistentVariable(result_var);
410413
}

lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
#include "lldb/Utility/Log.h"
1818
#include "lldb/Utility/StreamString.h"
1919

20+
#ifdef LLDB_ENABLE_SWIFT
2021
#include "lldb/Symbol/SwiftASTContext.h" // Needed for llvm::isa<SwiftASTContext>(...)
2122
#include "lldb/Symbol/TypeSystem.h"
22-
2323
#include "swift/AST/Decl.h"
2424
#include "swift/AST/Pattern.h"
25+
#endif // LLDB_ENABLE_SWIFT
2526
#include "clang/AST/Decl.h"
2627

2728
#include "llvm/ADT/StringMap.h"

0 commit comments

Comments
 (0)