| 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 e32c60bff5a5a05deaeeb6de89e00e9f4143c1c9..cb6b4e01b5ba33d3dfd3bd503663b08c81af8daa 100644
|
| --- a/tools/gn/gyp_binary_target_writer.cc
|
| +++ b/tools/gn/gyp_binary_target_writer.cc
|
| @@ -7,6 +7,7 @@
|
| #include <set>
|
|
|
| #include "base/logging.h"
|
| +#include "base/strings/string_util.h"
|
| #include "tools/gn/builder_record.h"
|
| #include "tools/gn/config_values_extractors.h"
|
| #include "tools/gn/err.h"
|
| @@ -66,6 +67,32 @@ std::string GetVCOptimization(std::vector<std::string>* cflags) {
|
| return "'2'"; // Default value.
|
| }
|
|
|
| +// Returns the value from the already-filled in cflags for the processor
|
| +// architecture to set in the GYP file. Additionally, this removes the flag
|
| +// from the given vector so we don't get duplicates.
|
| +std::string GetMacArch(std::vector<std::string>* cflags) {
|
| + // Searches for the "-arch" option and returns the corresponding GYP value.
|
| + for (size_t i = 0; i < cflags->size(); i++) {
|
| + const std::string& cur = (*cflags)[i];
|
| + if (cur == "-arch") {
|
| + // This is the first part of a list with ["-arch", "i386"], return the
|
| + // following item, and delete both of them.
|
| + if (i < cflags->size() - 1) {
|
| + std::string ret = (*cflags)[i + 1];
|
| + cflags->erase(cflags->begin() + i, cflags->begin() + i + 2);
|
| + return ret;
|
| + }
|
| + } else if (StartsWithASCII(cur, "-arch ", true)) {
|
| + // The arch was passed as one GN string value, e.g. "-arch i386". Return
|
| + // the stuff following the space and delete the item.
|
| + std::string ret = cur.substr(6);
|
| + cflags->erase(cflags->begin() + i);
|
| + return ret;
|
| + }
|
| + }
|
| + return std::string();
|
| +}
|
| +
|
| // Finds all values from the given getter from all configs in the given list,
|
| // and adds them to the given result vector.
|
| template<typename T>
|
| @@ -350,6 +377,15 @@ void GypBinaryTargetWriter::WriteMacFlags(Flags& flags, int indent) {
|
|
|
| Indent(indent) << "'xcode_settings': {\n";
|
|
|
| + // Architecture. GYP uses this to write the -arch flag passed to the
|
| + // compiler, it doesn't look at our -arch flag. So we need to specify it in
|
| + // this special var and not in the cflags to avoid duplicates or conflicts.
|
| + std::string arch = GetMacArch(&flags.cflags);
|
| + if (arch == "i386")
|
| + Indent(indent + kExtraIndent) << "'ARCHS': [ 'i386' ],\n";
|
| + else if (arch == "x86_64")
|
| + Indent(indent + kExtraIndent) << "'ARCHS': [ 'x86_64' ],\n";
|
| +
|
| // C/C++ flags.
|
| if (!flags.cflags.empty() || !flags.cflags_c.empty() ||
|
| !flags.cflags_objc.empty()) {
|
|
|