Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Unified Diff: tools/gn/gyp_binary_target_writer.cc

Issue 149163005: Work on GN iOS build. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/gyp_binary_target_writer.h ('k') | tools/gn/gyp_target_writer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/gyp_binary_target_writer.cc
diff --git a/tools/gn/gyp_binary_target_writer.cc b/tools/gn/gyp_binary_target_writer.cc
index cb6b4e01b5ba33d3dfd3bd503663b08c81af8daa..92a793bd938fa34a3215888a8ce5712a06c6f305 100644
--- a/tools/gn/gyp_binary_target_writer.cc
+++ b/tools/gn/gyp_binary_target_writer.cc
@@ -117,7 +117,7 @@ GypBinaryTargetWriter::GypBinaryTargetWriter(const TargetGroup& group,
const Toolchain* debug_toolchain,
const SourceDir& gyp_dir,
std::ostream& out)
- : GypTargetWriter(group.debug->item()->AsTarget(), debug_toolchain,
+ : GypTargetWriter(group.get()->item()->AsTarget(), debug_toolchain,
gyp_dir, out),
group_(group) {
}
@@ -183,6 +183,13 @@ void GypBinaryTargetWriter::WriteType(int indent) {
if (target_->hard_dep())
Indent(indent) << "'hard_dependency': 1,\n";
+
+ // Write out the toolsets depending on whether there is a host build. If no
+ // toolset is specified, GYP assumes a target build.
+ if (group_.debug && group_.host_debug)
+ Indent(indent) << "'toolsets': ['target', 'host'],\n";
+ else if (group_.host_debug)
+ Indent(indent) << "'toolsets': ['host'],\n";
}
void GypBinaryTargetWriter::WriteVCConfiguration(int indent) {
@@ -278,16 +285,46 @@ void GypBinaryTargetWriter::WriteLinuxConfiguration(int indent) {
}
void GypBinaryTargetWriter::WriteMacConfiguration(int indent) {
+ // The Mac flags are parameterized by the GYP generator (Ninja vs. XCode).
+ const char kNinjaGeneratorCondition[] =
+ "'conditions': [['\"<(GENERATOR)\"==\"ninja\"', {\n";
+ const char kNinjaGeneratorElse[] = "}, {\n";
+ const char kNinjaGeneratorEnd[] = "}]],\n";
+
Indent(indent) << "'configurations': {\n";
+ // Debug.
Indent(indent + kExtraIndent) << "'Debug': {\n";
- Flags debug_flags(FlagsFromTarget(group_.debug->item()->AsTarget()));
- WriteMacFlags(debug_flags, indent + kExtraIndent * 2);
+ Indent(indent + kExtraIndent * 2) << kNinjaGeneratorCondition;
+ {
+ // Ninja generator.
+ WriteMacTargetAndHostFlags(group_.debug, group_.host_debug,
+ indent + kExtraIndent * 3);
+ }
+ Indent(indent + kExtraIndent * 2) << kNinjaGeneratorElse;
+ if (group_.xcode_debug) {
+ // XCode generator.
+ WriteMacTargetAndHostFlags(group_.xcode_debug, group_.xcode_host_debug,
+ indent + kExtraIndent * 3);
+ }
+ Indent(indent + kExtraIndent * 2) << kNinjaGeneratorEnd;
Indent(indent + kExtraIndent) << "},\n";
+ // Release.
Indent(indent + kExtraIndent) << "'Release': {\n";
- Flags release_flags(FlagsFromTarget(group_.release->item()->AsTarget()));
- WriteMacFlags(release_flags, indent + kExtraIndent * 2);
+ Indent(indent + kExtraIndent * 2) << kNinjaGeneratorCondition;
+ {
+ // Ninja generator.
+ WriteMacTargetAndHostFlags(group_.release, group_.host_release,
+ indent + kExtraIndent * 3);
+ }
+ Indent(indent + kExtraIndent * 2) << kNinjaGeneratorElse;
+ if (group_.xcode_release) {
+ // XCode generator.
+ WriteMacTargetAndHostFlags(group_.xcode_release, group_.xcode_host_release,
+ indent + kExtraIndent * 3);
+ }
+ Indent(indent + kExtraIndent * 2) << kNinjaGeneratorEnd;
Indent(indent + kExtraIndent) << "},\n";
Indent(indent) << "},\n";
@@ -428,9 +465,10 @@ void GypBinaryTargetWriter::WriteMacFlags(Flags& flags, int indent) {
target_->settings()->build_settings()->GetFullPath(SourceFile(
"//third_party/llvm-build/Release+Asserts/bin/clang++"));
- Indent(indent) << "'CC': '" << FilePathToUTF8(clang_path) << "',\n";
- Indent(indent) << "'LDPLUSPLUS': '"
- << FilePathToUTF8(clang_pp_path) << "',\n";
+ Indent(indent + kExtraIndent)
+ << "'CC': '" << FilePathToUTF8(clang_path) << "',\n";
+ Indent(indent + kExtraIndent)
+ << "'LDPLUSPLUS': '" << FilePathToUTF8(clang_pp_path) << "',\n";
}
Indent(indent) << "},\n";
@@ -473,6 +511,40 @@ void GypBinaryTargetWriter::WriteLinuxFlags(const Flags& flags, int indent) {
out_ << " ],\n";
}
+void GypBinaryTargetWriter::WriteMacTargetAndHostFlags(
+ const BuilderRecord* target,
+ const BuilderRecord* host,
+ int indent) {
+ // The Mac flags are sometimes (when cross-compiling) also parameterized on
+ // the toolset.
+ const char kToolsetTargetCondition[] =
+ "'target_conditions': [['_toolset==\"target\"', {\n";
+ const char kToolsetTargetElse[] = "}, {\n";
+ const char kToolsetTargetEnd[] = "}]],\n";
+
+ int extra_indent = 0;
+ if (host) {
+ // Write out the first part of the conditional.
+ Indent(indent) << kToolsetTargetCondition;
+ extra_indent = kExtraIndent;
+ }
+
+ // Always write the target flags (may or may not be inside a target
+ // conditional).
+ {
+ Flags flags(FlagsFromTarget(target->item()->AsTarget()));
+ WriteMacFlags(flags, indent + extra_indent);
+ }
+
+ // Now optionally write the host conditional arm.
+ if (host) {
+ Indent(indent) << kToolsetTargetElse;
+ Flags flags(FlagsFromTarget(host->item()->AsTarget()));
+ WriteMacFlags(flags, indent + kExtraIndent);
+ Indent(indent) << kToolsetTargetEnd;
+ }
+}
+
void GypBinaryTargetWriter::WriteSources(const Target* target, int indent) {
Indent(indent) << "'sources': [\n";
« no previous file with comments | « tools/gn/gyp_binary_target_writer.h ('k') | tools/gn/gyp_target_writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698