Commit 13ea5f06 authored by Brad King's avatar Brad King Committed by Kitware Robot
Browse files

Merge topic 'objc-pch'

e331367a

 PCH: Add support for OBJC/OBJCXX languages
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !3983
parents 3521e3d5 e331367a
......@@ -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")
......
......@@ -3347,9 +3347,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();
}
......@@ -3380,8 +3382,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) {
......@@ -3431,7 +3440,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 =
......@@ -3457,9 +3467,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");
......@@ -3477,7 +3498,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() &&
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment