mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-16 20:21:41 -06:00
PCH: Add support for OBJC/OBJCXX languages
This commit is contained in:
@@ -13,6 +13,8 @@ include(Internal/CMakeCheckCompilerFlag)
|
||||
|
||||
set(__pch_header_C "c-header")
|
||||
set(__pch_header_CXX "c++-header")
|
||||
set(__pch_header_OBJC "objective-c-header")
|
||||
set(__pch_header_OBJCXX "objective-c++-header")
|
||||
|
||||
macro(__compiler_gnu lang)
|
||||
# Feature flags.
|
||||
|
||||
@@ -8,9 +8,6 @@ if(__WINDOWS_CLANG)
|
||||
endif()
|
||||
set(__WINDOWS_CLANG 1)
|
||||
|
||||
set(__pch_header_C "c-header")
|
||||
set(__pch_header_CXX "c++-header")
|
||||
|
||||
macro(__windows_compiler_clang_gnu lang)
|
||||
set(CMAKE_LIBRARY_PATH_FLAG "-L")
|
||||
set(CMAKE_LINK_LIBRARY_FLAG "-l")
|
||||
|
||||
@@ -3334,9 +3334,11 @@ std::vector<BT<std::string>> cmGeneratorTarget::GetPrecompileHeaders(
|
||||
std::string cmGeneratorTarget::GetPchHeader(const std::string& config,
|
||||
const std::string& language) const
|
||||
{
|
||||
if (language != "C" && language != "CXX") {
|
||||
if (language != "C" && language != "CXX" && language != "OBJC" &&
|
||||
language != "OBJCXX") {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
if (this->GetPropertyAsBool("DISABLE_PRECOMPILE_HEADERS")) {
|
||||
return std::string();
|
||||
}
|
||||
@@ -3367,8 +3369,15 @@ std::string cmGeneratorTarget::GetPchHeader(const std::string& config,
|
||||
filename = generatorTarget->ObjectDirectory;
|
||||
}
|
||||
|
||||
const std::map<std::string, std::string> languageToExtension = {
|
||||
{ "C", ".h" },
|
||||
{ "CXX", ".hxx" },
|
||||
{ "OBJC", ".objc.h" },
|
||||
{ "OBJCXX", ".objcxx.hxx" }
|
||||
};
|
||||
|
||||
filename = cmStrCat(filename, "CMakeFiles/", generatorTarget->GetName(),
|
||||
".dir/cmake_pch", ((language == "C") ? ".h" : ".hxx"));
|
||||
".dir/cmake_pch", languageToExtension.at(language));
|
||||
|
||||
const std::string filename_tmp = cmStrCat(filename, ".tmp");
|
||||
if (!pchReuseFrom) {
|
||||
@@ -3418,7 +3427,8 @@ std::string cmGeneratorTarget::GetPchHeader(const std::string& config,
|
||||
std::string cmGeneratorTarget::GetPchSource(const std::string& config,
|
||||
const std::string& language) const
|
||||
{
|
||||
if (language != "C" && language != "CXX") {
|
||||
if (language != "C" && language != "CXX" && language != "OBJC" &&
|
||||
language != "OBJCXX") {
|
||||
return std::string();
|
||||
}
|
||||
const auto inserted =
|
||||
@@ -3444,9 +3454,20 @@ std::string cmGeneratorTarget::GetPchSource(const std::string& config,
|
||||
|
||||
// For GCC the source extension will be tranformed into .h[xx].gch
|
||||
if (!this->Makefile->IsOn("CMAKE_LINK_PCH")) {
|
||||
filename += ((language == "C") ? ".h.c" : ".hxx.cxx");
|
||||
const std::map<std::string, std::string> languageToExtension = {
|
||||
{ "C", ".h.c" },
|
||||
{ "CXX", ".hxx.cxx" },
|
||||
{ "OBJC", ".objc.h.m" },
|
||||
{ "OBJCXX", ".objcxx.hxx.mm" }
|
||||
};
|
||||
|
||||
filename += languageToExtension.at(language);
|
||||
} else {
|
||||
filename += ((language == "C") ? ".c" : ".cxx");
|
||||
const std::map<std::string, std::string> languageToExtension = {
|
||||
{ "C", ".c" }, { "CXX", ".cxx" }, { "OBJC", ".m" }, { "OBJCXX", ".mm" }
|
||||
};
|
||||
|
||||
filename += languageToExtension.at(language);
|
||||
}
|
||||
|
||||
const std::string filename_tmp = cmStrCat(filename, ".tmp");
|
||||
@@ -3464,7 +3485,8 @@ std::string cmGeneratorTarget::GetPchSource(const std::string& config,
|
||||
std::string cmGeneratorTarget::GetPchFileObject(const std::string& config,
|
||||
const std::string& language)
|
||||
{
|
||||
if (language != "C" && language != "CXX") {
|
||||
if (language != "C" && language != "CXX" && language != "OBJC" &&
|
||||
language != "OBJCXX") {
|
||||
return std::string();
|
||||
}
|
||||
const auto inserted =
|
||||
|
||||
@@ -2266,7 +2266,7 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
|
||||
std::vector<cmSourceFile*> sources;
|
||||
target->GetSourceFiles(sources, buildType);
|
||||
|
||||
for (const std::string& lang : { "C", "CXX" }) {
|
||||
for (const std::string& lang : { "C", "CXX", "OBJC", "OBJCXX" }) {
|
||||
auto langSources =
|
||||
std::count_if(sources.begin(), sources.end(), [lang](cmSourceFile* sf) {
|
||||
return lang == sf->GetLanguage() &&
|
||||
|
||||
Reference in New Issue
Block a user