summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@gmail.com>2019-11-03 20:34:39 (GMT)
committerCristian Adam <cristian.adam@gmail.com>2019-11-03 20:34:39 (GMT)
commite331367a898c6e0afa386c52fc7bd4d84d75ec29 (patch)
tree3ebbba93f49fccd2c7a6d126965e505ff430bcdd
parent91c26b3d387ffd4948ecde38ab2c5f894b7dbe8c (diff)
downloadCMake-e331367a898c6e0afa386c52fc7bd4d84d75ec29.zip
CMake-e331367a898c6e0afa386c52fc7bd4d84d75ec29.tar.gz
CMake-e331367a898c6e0afa386c52fc7bd4d84d75ec29.tar.bz2
PCH: Add support for OBJC/OBJCXX languages
-rw-r--r--Modules/Compiler/GNU.cmake2
-rw-r--r--Modules/Platform/Windows-Clang.cmake3
-rw-r--r--Source/cmGeneratorTarget.cxx34
-rw-r--r--Source/cmLocalGenerator.cxx2
4 files changed, 31 insertions, 10 deletions
diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake
index e0ff174..6960571 100644
--- a/Modules/Compiler/GNU.cmake
+++ b/Modules/Compiler/GNU.cmake
@@ -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.
diff --git a/Modules/Platform/Windows-Clang.cmake b/Modules/Platform/Windows-Clang.cmake
index f226553..02864c6 100644
--- a/Modules/Platform/Windows-Clang.cmake
+++ b/Modules/Platform/Windows-Clang.cmake
@@ -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")
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 949d9d9..f235af9 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -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 =
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index a2eb1b9..00bd8af 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -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() &&