Xcode: Support for 'LLDB Init File' scheme property

Fixes: #24002
This commit is contained in:
Cristiano Carvalheiro 2024-12-11 20:01:03 +00:00 committed by Brad King
parent 65ad1bbd4c
commit 419cfe30d0
13 changed files with 107 additions and 0 deletions

View File

@ -489,6 +489,7 @@ syn keyword cmakeProperty contained
\ XCODE_SCHEME_GUARD_MALLOC
\ XCODE_SCHEME_LAUNCH_CONFIGURATION
\ XCODE_SCHEME_LAUNCH_MODE
\ XCODE_SCHEME_LLDB_INIT_FILE
\ XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
\ XCODE_SCHEME_MALLOC_GUARD_EDGES
\ XCODE_SCHEME_MALLOC_SCRIBBLE
@ -1854,6 +1855,7 @@ syn keyword cmakeVariable contained
\ CMAKE_XCODE_SCHEME_GUARD_MALLOC
\ CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
\ CMAKE_XCODE_SCHEME_LAUNCH_MODE
\ CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
\ CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
\ CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
\ CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE

View File

@ -495,6 +495,7 @@ Properties on Targets
/prop_tgt/XCODE_SCHEME_GUARD_MALLOC
/prop_tgt/XCODE_SCHEME_LAUNCH_CONFIGURATION
/prop_tgt/XCODE_SCHEME_LAUNCH_MODE
/prop_tgt/XCODE_SCHEME_LLDB_INIT_FILE
/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES
/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE

View File

@ -296,6 +296,7 @@ Variables that Change Behavior
/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC
/variable/CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
/variable/CMAKE_XCODE_SCHEME_LAUNCH_MODE
/variable/CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE

View File

@ -45,4 +45,5 @@ The following target properties will be applied on the
- :prop_tgt:`XCODE_SCHEME_ENVIRONMENT`
- :prop_tgt:`XCODE_SCHEME_EXECUTABLE`
- :prop_tgt:`XCODE_SCHEME_LAUNCH_MODE`
- :prop_tgt:`XCODE_SCHEME_LLDB_INIT_FILE`
- :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`

View File

@ -0,0 +1,15 @@
XCODE_SCHEME_LLDB_INIT_FILE
---------------------------
.. versionadded:: 3.32
Property value for ``LLDB Init File`` in the Info section of the
generated Xcode scheme. In case the value contains generator
expressions those are evaluated.
This property is initialized by the value of the variable
:variable:`CMAKE_XCODE_SCHEME_LLDB_INIT_FILE` if it is set
when a target is created.
Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
documentation to see all Xcode schema related properties.

View File

@ -0,0 +1,7 @@
xcode-scheme-lldb-init-file
---------------------------
* The :variable:`CMAKE_XCODE_SCHEME_LLDB_INIT_FILE` variable and corresponding
:prop_tgt:`XCODE_SCHEME_LLDB_INIT_FILE` target property were added to tell
the :generator:`Xcode` generator what to put in the scheme's "LLDB Init File"
setting.

View File

@ -0,0 +1,13 @@
CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
---------------------------------
.. versionadded:: 3.32
Property value for ``LLDB Init File`` in the Info section of the generated Xcode
scheme.
This variable initializes the :prop_tgt:`XCODE_SCHEME_LLDB_INIT_FILE` property on
all targets.
Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
documentation to see all Xcode schema related properties.

View File

@ -630,6 +630,7 @@ TargetProperty const StaticTargetProperties[] = {
{ "XCODE_SCHEME_MALLOC_GUARD_EDGES"_s, IC::NeedsXcodeAndCanCompileSources },
{ "XCODE_SCHEME_GUARD_MALLOC"_s, IC::NeedsXcodeAndCanCompileSources },
{ "XCODE_SCHEME_LAUNCH_MODE"_s, IC::NeedsXcodeAndCanCompileSources },
{ "XCODE_SCHEME_LLDB_INIT_FILE"_s, IC::NeedsXcodeAndCanCompileSources },
{ "XCODE_SCHEME_ZOMBIE_OBJECTS"_s, IC::NeedsXcodeAndCanCompileSources },
{ "XCODE_SCHEME_MALLOC_STACK"_s, IC::NeedsXcodeAndCanCompileSources },
{ "XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE"_s, IC::NeedsXcodeAndCanCompileSources },

View File

@ -120,6 +120,7 @@ void cmXCodeScheme::WriteTestAction(cmXMLWriter& xout,
xout.Attribute("selectedLauncherIdentifier",
"Xcode.DebuggerFoundation.Launcher.LLDB");
xout.Attribute("shouldUseLaunchSchemeArgsEnv", "YES");
WriteCustomLLDBInitFile(xout, configuration);
xout.StartElement("Testables");
for (auto const* test : this->Tests) {
@ -164,6 +165,7 @@ void cmXCodeScheme::WriteLaunchAction(cmXMLWriter& xout,
xout.Attribute("launchStyle", value);
}
WriteCustomWorkingDirectory(xout, configuration);
WriteCustomLLDBInitFile(xout, configuration);
xout.Attribute("ignoresPersistentStateOnLaunch", "NO");
WriteLaunchActionBooleanAttribute(xout, "debugDocumentVersioning",
@ -481,6 +483,18 @@ void cmXCodeScheme::WriteCustomWorkingDirectory(
}
}
void cmXCodeScheme::WriteCustomLLDBInitFile(cmXMLWriter& xout,
const std::string& configuration)
{
std::string const& propertyValue =
this->Target->GetTarget()->GetSafeProperty("XCODE_SCHEME_LLDB_INIT_FILE");
if (!propertyValue.empty()) {
auto customLLDBInitFile = cmGeneratorExpression::Evaluate(
propertyValue, this->LocalGenerator, configuration);
xout.Attribute("customLLDBInitFile", customLLDBInitFile);
}
}
std::string cmXCodeScheme::WriteVersionString()
{
std::ostringstream v;

View File

@ -71,6 +71,9 @@ private:
void WriteCustomWorkingDirectory(cmXMLWriter& xout,
const std::string& configuration);
void WriteCustomLLDBInitFile(cmXMLWriter& xout,
const std::string& configuration);
std::string WriteVersionString();
std::string FindConfiguration(const std::string& name);

View File

@ -13,6 +13,48 @@ function(check_property property matcher)
endif()
endfunction()
function(check_property_count property matcher expected_count)
set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${property}.xcscheme")
file(STRINGS ${schema} actual-${property}
REGEX "${matcher}")
if(NOT actual-${property})
string(APPEND RunCMake_TEST_FAILED
"Xcode schema property ${property}: Could not find\n"
" ${matcher}\n"
"in schema\n"
" ${schema}\n"
)
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
return()
endif()
list(LENGTH actual-${property} match_count)
if(NOT ${expected_count} EQUAL ${match_count})
string(APPEND RunCMake_TEST_FAILED
"Xcode schema property ${property}: Expected ${expected_count} matches of\n"
" ${matcher}\n"
"in schema\n"
" ${schema}\n"
"but found ${match_count}.\n\n"
)
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
endif()
endfunction()
function(check_no_property property matcher)
set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${property}.xcscheme")
file(STRINGS ${schema} actual-${property}
REGEX "${matcher}" LIMIT_COUNT 1)
if(actual-${property})
string(APPEND RunCMake_TEST_FAILED
"Xcode schema property ${property}: Found\n"
" ${matcher}\n"
"which is not expected in schema\n"
" ${schema}\n"
)
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
endif()
endfunction()
function(expect_schema target)
set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${target}.xcscheme")
if(NOT EXISTS ${schema})
@ -60,6 +102,9 @@ check_property("ENABLE_GPU_FRAME_CAPTURE_MODE_DISABLED_MIXED_CASE" "enableGPUFra
check_property("ENABLE_GPU_FRAME_CAPTURE_MODE_METAL_MIXED_CASE" "enableGPUFrameCaptureMode=\"1\"")
check_property("LAUNCH_MODE_AUTO" "launchStyle=\"0\"")
check_property("LAUNCH_MODE_WAIT" "launchStyle=\"1\"")
check_no_property("LLDB_INIT_FILE_EMPTY" "customLLDBInitFile")
check_property_count("LLDB_INIT_FILE_EVAL" "customLLDBInitFile=\"${RunCMake_TEST_BINARY_DIR}/.lldbinit\"" 2)
check_property_count("LLDB_INIT_FILE_FULL" "customLLDBInitFile=\"/full/path/to/.lldbinit\"" 2)
check_property("EXECUTABLE" "myExecutable")
check_property("ARGUMENTS" [=["--foo"]=])

View File

@ -40,6 +40,9 @@ create_scheme_for_property(ENABLE_GPU_FRAME_CAPTURE_MODE_DISABLED_MIXED_CASE ENA
create_scheme_for_property(ENABLE_GPU_FRAME_CAPTURE_MODE_METAL_MIXED_CASE ENABLE_GPU_FRAME_CAPTURE_MODE METal)
create_scheme_for_property(LAUNCH_MODE_AUTO LAUNCH_MODE AUTO)
create_scheme_for_property(LAUNCH_MODE_WAIT LAUNCH_MODE WAIT)
create_scheme_for_property(LLDB_INIT_FILE_EMPTY LLDB_INIT_FILE "")
create_scheme_for_property(LLDB_INIT_FILE_EVAL LLDB_INIT_FILE "${CMAKE_BINARY_DIR}/.lldbinit")
create_scheme_for_property(LLDB_INIT_FILE_FULL LLDB_INIT_FILE "/full/path/to/.lldbinit")
create_scheme_for_property(EXECUTABLE EXECUTABLE myExecutable)
create_scheme_for_property(ARGUMENTS ARGUMENTS "--foo;--bar=baz")
create_scheme_for_property(ENVIRONMENT ENVIRONMENT "FOO=foo;BAR=bar")

View File

@ -203,6 +203,7 @@ if (CMAKE_HOST_APPLE) # compile-guarded in CMake
"XCODE_SCHEME_MALLOC_GUARD_EDGES" "ON" "<SAME>"
"XCODE_SCHEME_GUARD_MALLOC" "ON" "<SAME>"
"XCODE_SCHEME_LAUNCH_MODE" "ON" "<SAME>"
"XCODE_SCHEME_LLDB_INIT_FILE" "ON" "<SAME>"
"XCODE_SCHEME_ZOMBIE_OBJECTS" "ON" "<SAME>"
"XCODE_SCHEME_MALLOC_STACK" "ON" "<SAME>"
"XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE" "ON" "<SAME>"