Merge topic 'xcode-obj-dir'

024e3d2bf6 Xcode: Put object files in a place that Xcode cleans

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !7843
This commit is contained in:
Brad King
2022-10-31 13:42:10 +00:00
committed by Kitware Robot
9 changed files with 44 additions and 16 deletions
+21 -8
View File
@@ -2544,8 +2544,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
}
if (gtgt->CanCompileSources()) {
std::string tmpDir =
cmStrCat(gtgt->GetSupportDirectory(), '/', this->GetCMakeCFGIntDir());
std::string const tmpDir =
this->GetTargetTempDir(gtgt, this->GetCMakeCFGIntDir());
buildSettings->AddAttribute("TARGET_TEMP_DIR", this->CreateString(tmpDir));
std::string outDir;
@@ -4399,7 +4399,7 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
this->CreateString(swiftVersion));
}
std::string symroot = cmStrCat(root->GetCurrentBinaryDirectory(), "/build");
std::string const symroot = this->GetSymrootDir();
buildSettings->AddAttribute("SYMROOT", this->CreateString(symroot));
// Inside a try_compile project, do not require signing on any platform.
@@ -4506,6 +4506,19 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
return true;
}
std::string cmGlobalXCodeGenerator::GetSymrootDir() const
{
return cmStrCat(this->CMakeInstance->GetHomeOutputDirectory(), "/build");
}
std::string cmGlobalXCodeGenerator::GetTargetTempDir(
cmGeneratorTarget const* gt, std::string const& configName) const
{
// Use a path inside the SYMROOT.
return cmStrCat(this->GetSymrootDir(), '/', gt->GetName(), ".build/",
configName);
}
void cmGlobalXCodeGenerator::ComputeArchitectures(cmMakefile* mf)
{
this->Architectures.clear();
@@ -4629,8 +4642,8 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackMakefile(
for (auto objLib : objlibs) {
const std::string objLibName = objLib->GetName();
std::string d = cmStrCat(objLib->GetSupportDirectory(), '/',
configName, "/lib", objLibName, ".a");
std::string d = cmStrCat(this->GetTargetTempDir(gt, configName),
"/lib", objLibName, ".a");
std::string dependency = this->ConvertToRelativeForMake(d);
makefileStream << "\\\n\t" << dependency;
@@ -4644,8 +4657,8 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackMakefile(
// if building for more than one architecture
// then remove those executables as well
if (this->Architectures.size() > 1) {
std::string universal = cmStrCat(gt->GetSupportDirectory(), '/',
configName, "/$(OBJDIR)/");
std::string universal =
cmStrCat(this->GetTargetTempDir(gt, configName), "/$(OBJDIR)/");
for (const auto& architecture : this->Architectures) {
std::string universalFile = cmStrCat(universal, architecture, '/',
gt->GetFullName(configName));
@@ -5044,7 +5057,7 @@ void cmGlobalXCodeGenerator::ComputeTargetObjectDirectory(
{
auto objectDirArch = GetTargetObjectDirArch(*gt, this->ObjectDirArch);
gt->ObjectDirectory =
cmStrCat(gt->GetSupportDirectory(), '/', this->GetCMakeCFGIntDir(),
cmStrCat(this->GetTargetTempDir(gt, this->GetCMakeCFGIntDir()),
"/$(OBJECT_FILE_DIR_normal:base)/", objectDirArch, '/');
}
+4
View File
@@ -339,6 +339,10 @@ private:
std::string GetLibraryOrFrameworkPath(const std::string& path) const;
std::string GetSymrootDir() const;
std::string GetTargetTempDir(cmGeneratorTarget const* gt,
std::string const& configName) const;
static std::string GetDeploymentPlatform(const cmMakefile* mf);
void ComputeArchitectures(cmMakefile* mf);
@@ -27,7 +27,7 @@
]
},
{
"path": "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/.*/empty(\\.c)?\\.o(bj)?$",
"path": "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(object|build/c_object_lib\\.build)/.*/empty(\\.c)?\\.o(bj)?$",
"isGenerated": true,
"sourceGroupName": "Object Libraries",
"compileGroupLanguage": null,
@@ -57,7 +57,7 @@
{
"name": "Object Libraries",
"sourcePaths": [
"^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/.*/empty(\\.c)?\\.o(bj)?$"
"^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(object|build/c_object_lib\\.build)/.*/empty(\\.c)?\\.o(bj)?$"
]
}
],
@@ -64,7 +64,7 @@
"nameOnDisk": null,
"artifacts": [
{
"path": "^object/.*/empty(\\.c)?\\.o(bj)?$",
"path": "^(object|build/c_object_lib\\.build)/.*/empty(\\.c)?\\.o(bj)?$",
"_dllExtra": false
}
],
@@ -27,7 +27,7 @@
]
},
{
"path": "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/.*/empty(\\.cxx)?\\.o(bj)?$",
"path": "^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(object|build/cxx_object_lib\\.build)/.*/empty(\\.cxx)?\\.o(bj)?$",
"isGenerated": true,
"sourceGroupName": "Object Libraries",
"compileGroupLanguage": null,
@@ -57,7 +57,7 @@
{
"name": "Object Libraries",
"sourcePaths": [
"^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/object/.*/empty(\\.cxx)?\\.o(bj)?$"
"^.*/Tests/RunCMake/FileAPI/codemodel-v2-build/(object|build/cxx_object_lib\\.build)/.*/empty(\\.cxx)?\\.o(bj)?$"
]
}
],
@@ -64,7 +64,7 @@
"nameOnDisk": null,
"artifacts": [
{
"path": "^object/.*/empty(\\.cxx)?\\.o(bj)?$",
"path": "^(object|build/cxx_object_lib\\.build)/.*/empty(\\.cxx)?\\.o(bj)?$",
"_dllExtra": false
}
],
@@ -0,0 +1,5 @@
set(pattern "${RunCMake_TEST_BINARY_DIR}/build/empty.build/Debug/Objects-normal/*/empty.o")
file(GLOB objs "${pattern}")
if(NOT objs)
set(RunCMake_TEST_FAILED "Expected object does not exist:\n ${pattern}")
endif()
@@ -0,0 +1,5 @@
set(pattern "${RunCMake_TEST_BINARY_DIR}/build/empty.build/Debug/Objects-normal/*/empty.o")
file(GLOB objs "${pattern}")
if(objs)
set(RunCMake_TEST_FAILED "Object file(s) not cleaned:\n ${objs}")
endif()
@@ -2,9 +2,10 @@ include(RunCMake)
function(RunClean)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Clean-build)
run_cmake(Clean)
run_cmake(Clean -DCMAKE_CONFIGURATION_TYPES=Debug)
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(Clean-build xcodebuild clean)
run_cmake_command(Clean-build xcodebuild)
run_cmake_command(Clean-clean xcodebuild clean)
endfunction()
RunClean()