Commit 1c84b5c8 authored by Brad King's avatar Brad King Committed by Kitware Robot

Merge topic 'pch-makefile-depends'

797689ab PCH: Fix Makefile dependencies to rebuild PCH on header changes
0b10b3ed cmMakefileTargetGenerator: Inline WriteObjectBuildFile in only call site
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !3928
parents 154aa87c 797689ab
Pipeline #148792 passed with stage
in 0 seconds
...@@ -423,25 +423,17 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( ...@@ -423,25 +423,17 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(
// Create the directory containing the object file. This may be a // Create the directory containing the object file. This may be a
// subdirectory under the target's directory. // subdirectory under the target's directory.
std::string dir = cmSystemTools::GetFilenamePath(obj); {
cmSystemTools::MakeDirectory(this->LocalGenerator->ConvertToFullPath(dir)); std::string dir = cmSystemTools::GetFilenamePath(obj);
cmSystemTools::MakeDirectory(this->LocalGenerator->ConvertToFullPath(dir));
}
// Save this in the target's list of object files. // Save this in the target's list of object files.
this->Objects.push_back(obj); this->Objects.push_back(obj);
this->CleanFiles.insert(obj); this->CleanFiles.insert(obj);
// TODO: Remove
// std::string relativeObj
//= this->LocalGenerator->GetHomeRelativeOutputPath();
// relativeObj += obj;
// we compute some depends when writing the depend.make that we will also
// use in the build.make, same with depMakeFile
std::vector<std::string> depends; std::vector<std::string> depends;
// generate the build rule file
this->WriteObjectBuildFile(obj, lang, source, depends);
// The object file should be checked for dependency integrity. // The object file should be checked for dependency integrity.
std::string objFullPath = std::string objFullPath =
cmStrCat(this->LocalGenerator->GetCurrentBinaryDirectory(), '/', obj); cmStrCat(this->LocalGenerator->GetCurrentBinaryDirectory(), '/', obj);
...@@ -450,12 +442,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles( ...@@ -450,12 +442,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(
cmSystemTools::CollapseFullPath(source.GetFullPath()); cmSystemTools::CollapseFullPath(source.GetFullPath());
this->LocalGenerator->AddImplicitDepends(this->GeneratorTarget, lang, this->LocalGenerator->AddImplicitDepends(this->GeneratorTarget, lang,
objFullPath, srcFullPath); objFullPath, srcFullPath);
}
void cmMakefileTargetGenerator::WriteObjectBuildFile(
std::string& obj, const std::string& lang, cmSourceFile const& source,
std::vector<std::string>& depends)
{
this->LocalGenerator->AppendRuleDepend(depends, this->LocalGenerator->AppendRuleDepend(depends,
this->FlagFileNameFull.c_str()); this->FlagFileNameFull.c_str());
this->LocalGenerator->AppendRuleDepends(depends, this->LocalGenerator->AppendRuleDepends(depends,
...@@ -471,10 +458,14 @@ void cmMakefileTargetGenerator::WriteObjectBuildFile( ...@@ -471,10 +458,14 @@ void cmMakefileTargetGenerator::WriteObjectBuildFile(
const std::string pchSource = const std::string pchSource =
this->GeneratorTarget->GetPchSource(config, lang); this->GeneratorTarget->GetPchSource(config, lang);
if (!pchSource.empty() && !source.GetProperty("SKIP_PRECOMPILE_HEADERS")) { if (!pchSource.empty() && !source.GetProperty("SKIP_PRECOMPILE_HEADERS")) {
depends.push_back(this->GeneratorTarget->GetPchHeader(config, lang)); std::string const& pchHeader =
this->GeneratorTarget->GetPchHeader(config, lang);
depends.push_back(pchHeader);
if (source.GetFullPath() != pchSource) { if (source.GetFullPath() != pchSource) {
depends.push_back(this->GeneratorTarget->GetPchFile(config, lang)); depends.push_back(this->GeneratorTarget->GetPchFile(config, lang));
} }
this->LocalGenerator->AddImplicitDepends(this->GeneratorTarget, lang,
objFullPath, pchHeader);
} }
std::string relativeObj = std::string relativeObj =
......
...@@ -91,11 +91,6 @@ protected: ...@@ -91,11 +91,6 @@ protected:
// write the rules for an object // write the rules for an object
void WriteObjectRuleFiles(cmSourceFile const& source); void WriteObjectRuleFiles(cmSourceFile const& source);
// write the build rule for an object
void WriteObjectBuildFile(std::string& obj, const std::string& lang,
cmSourceFile const& source,
std::vector<std::string>& depends);
// write the depend.make file for an object // write the depend.make file for an object
void WriteObjectDependRules(cmSourceFile const& source, void WriteObjectDependRules(cmSourceFile const& source,
std::vector<std::string>& depends); std::vector<std::string>& depends);
......
...@@ -62,6 +62,12 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx ...@@ -62,6 +62,12 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
"static const char* zot_macro_dir = \"zot_macro_dir\";\n") "static const char* zot_macro_dir = \"zot_macro_dir\";\n")
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
"static const char* zot_macro_tgt = \"zot_macro_tgt\";\n") "static const char* zot_macro_tgt = \"zot_macro_tgt\";\n")
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_pch.hxx
"#ifndef ZOT_PCH_HXX\n"
"#define ZOT_PCH_HXX\n"
"static const char* zot_pch = \"zot_pch\";\n"
"#endif\n"
)
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h
"#define link_depends_no_shared_lib_value 1\n") "#define link_depends_no_shared_lib_value 1\n")
...@@ -155,7 +161,7 @@ execute_process(COMMAND ${zot} OUTPUT_VARIABLE out RESULT_VARIABLE runResult) ...@@ -155,7 +161,7 @@ execute_process(COMMAND ${zot} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
string(REGEX REPLACE "[\r\n]" " " out "${out}") string(REGEX REPLACE "[\r\n]" " " out "${out}")
message("Run result: ${runResult} Output: \"${out}\"") message("Run result: ${runResult} Output: \"${out}\"")
set(VALUE_UNCHANGED "[zot] [zot_custom] [zot_macro_dir] [zot_macro_tgt] ") set(VALUE_UNCHANGED "[zot] [zot_custom] [zot_macro_dir] [zot_macro_tgt] [zot_pch] ")
if("${out}" STREQUAL "${VALUE_UNCHANGED}") if("${out}" STREQUAL "${VALUE_UNCHANGED}")
message("Worked!") message("Worked!")
else() else()
...@@ -245,6 +251,12 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx ...@@ -245,6 +251,12 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
"static const char* zot_macro_dir = \"zot_macro_dir changed\";\n") "static const char* zot_macro_dir = \"zot_macro_dir changed\";\n")
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
"static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n") "static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n")
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_pch.hxx
"#ifndef ZOT_PCH_HXX\n"
"#define ZOT_PCH_HXX\n"
"static const char* zot_pch = \"zot_pch changed\";\n"
"#endif\n"
)
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h
"#define link_depends_no_shared_lib_value 0\n") "#define link_depends_no_shared_lib_value 0\n")
...@@ -326,7 +338,7 @@ string(REGEX REPLACE "[\r\n]" " " out "${out}") ...@@ -326,7 +338,7 @@ string(REGEX REPLACE "[\r\n]" " " out "${out}")
message("Run result: ${runResult} Output: \"${out}\"") message("Run result: ${runResult} Output: \"${out}\"")
set(VALUE_CHANGED set(VALUE_CHANGED
"[zot changed] [zot_custom changed] [zot_macro_dir changed] [zot_macro_tgt changed] " "[zot changed] [zot_custom changed] [zot_macro_dir changed] [zot_macro_tgt changed] [zot_pch changed] "
) )
if("${out}" STREQUAL "${VALUE_CHANGED}") if("${out}" STREQUAL "${VALUE_CHANGED}")
message("Worked!") message("Worked!")
......
...@@ -93,6 +93,12 @@ add_executable(zot zot.cxx ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx ...@@ -93,6 +93,12 @@ add_executable(zot zot.cxx ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx
zot_macro_dir.cxx zot_macro_tgt.cxx) zot_macro_dir.cxx zot_macro_tgt.cxx)
add_dependencies(zot zot_custom) add_dependencies(zot zot_custom)
add_library(zot_pch zot_pch.cxx)
target_link_libraries(zot zot_pch)
if(NOT CMAKE_OSX_ARCHITECTURES MATCHES "[;$]")
target_precompile_headers(zot_pch PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/zot_pch.hxx)
endif()
# Test the #include line macro transformation rule support. # Test the #include line macro transformation rule support.
set_property( set_property(
TARGET zot TARGET zot
......
...@@ -4,11 +4,12 @@ ...@@ -4,11 +4,12 @@
const char* zot_macro_dir_f(); const char* zot_macro_dir_f();
const char* zot_macro_tgt_f(); const char* zot_macro_tgt_f();
const char* zot_pch_f();
int main() int main()
{ {
printf("[%s] [%s] [%s] [%s]\n", zot, zot_custom, zot_macro_dir_f(), printf("[%s] [%s] [%s] [%s] [%s]\n", zot, zot_custom, zot_macro_dir_f(),
zot_macro_tgt_f()); zot_macro_tgt_f(), zot_pch_f());
fflush(stdout); fflush(stdout);
return 0; return 0;
} }
#include <zot_pch.hxx>
const char* zot_pch_f()
{
return zot_pch;
}
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