diff --git a/chromium/tools/gn/qmake_link_writer.cc b/chromium/tools/gn/qmake_link_writer.cc
index e6066a94541c86212ba73c536311cf491089759f..f7036b85dcabe61a209983627679a5b3a7567a17 100644
--- a/chromium/tools/gn/qmake_link_writer.cc
+++ b/chromium/tools/gn/qmake_link_writer.cc
@@ -42,6 +42,7 @@
 // found in the LICENSE file.
 
 #include "tools/gn/qmake_link_writer.h"
+#include "tools/gn/deps_iterator.h"
 #include "tools/gn/ninja_binary_target_writer.h"
 #include "tools/gn/output_file.h"
 #include "tools/gn/settings.h"
@@ -62,6 +63,28 @@ QMakeLinkWriter::QMakeLinkWriter(const NinjaBinaryTargetWriter* writer, const Ta
 QMakeLinkWriter::~QMakeLinkWriter() {
 }
 
+// Based on similar function in qt_creator_writer.cc
+void CollectDeps(std::set<const Target*> &deps, const Target* target) {
+  for (const auto& dep : target->GetDeps(Target::DEPS_ALL)) {
+    const Target* dep_target = dep.ptr;
+    if (deps.count(dep_target))
+      continue;
+    deps.insert(dep_target);
+    CollectDeps(deps, dep_target);
+  }
+}
+
+void PrintSourceFile(std::ostream& out, PathOutput& path_output, const SourceFile& file) {
+  out << " \\\n    \"";
+  if (file.is_source_absolute()) {
+    out << "$$PWD/";
+    path_output.WriteFile(out, file);
+  } else {
+    out << file.value();
+  }
+  out << "\"";
+}
+
 void QMakeLinkWriter::Run() {
 
   CHECK(target_->output_type() == Target::SHARED_LIBRARY)
@@ -89,6 +112,42 @@ void QMakeLinkWriter::Run() {
   UniqueVector<const Target*> non_linkable_deps;
   nwriter_->GetDeps(&extra_object_files, &linkable_deps, &non_linkable_deps);
 
+  std::set<const Target*> deps;
+  deps.insert(target_);
+  CollectDeps(deps, target_);
+
+  // sources files.
+  out_ << "NINJA_SOURCES =";
+  for (const auto& target : deps) {
+    for (const auto& file : target->sources()) {
+      PrintSourceFile(out_, path_output_, file);
+    }
+  }
+  out_ << std::endl;
+
+  // headers files.
+  out_ << "NINJA_HEADERS =";
+  for (const auto& target : deps) {
+    for (const auto& file : target->public_headers()) {
+      PrintSourceFile(out_, path_output_, file);
+    }
+  }
+  out_ << std::endl;
+
+  std::set<std::string> defines;
+  for (const auto& target : deps) {
+    for (ConfigValuesIterator it(target); !it.done(); it.Next()) {
+      for (std::string define : it.cur().defines()) {
+        defines.insert(define);
+      }
+    }
+  }
+  out_ << "NINJA_DEFINES =";
+  for (const auto& define : defines) {
+    out_ << " \\\n    " << define;
+  }
+  out_ << std::endl;
+
   // object files.
   out_ << "NINJA_OBJECTS =";
   for (const auto& file : object_files) {