[Refactor Xcode Objects] Enable adding per file '--help' compiler flag. This CL refactors xcode_object.h and xcode_object.cc to enable generating '--help' as per file compiler flag for the files in the "Compiler Sources" in "Build Phases". BUG=614818 Review-Url: https://codereview.chromium.org/2574333002 Cr-Original-Commit-Position: refs/heads/master@{#439913} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: 8fb7d9d9c9ddf8bd3d1448241fafa27416e1f756
diff --git a/tools/gn/xcode_object.cc b/tools/gn/xcode_object.cc index e97cbfd..4f1dcbe 100644 --- a/tools/gn/xcode_object.cc +++ b/tools/gn/xcode_object.cc
@@ -365,8 +365,11 @@ // PBXBuildFile --------------------------------------------------------------- PBXBuildFile::PBXBuildFile(const PBXFileReference* file_reference, - const PBXSourcesBuildPhase* build_phase) - : file_reference_(file_reference), build_phase_(build_phase) { + const PBXSourcesBuildPhase* build_phase, + const CompilerFlags compiler_flag) + : file_reference_(file_reference), + build_phase_(build_phase), + compiler_flag_(compiler_flag) { DCHECK(file_reference_); DCHECK(build_phase_); } @@ -387,6 +390,12 @@ out << indent_str << Reference() << " = {"; PrintProperty(out, rules, "isa", ToString(Class())); PrintProperty(out, rules, "fileRef", file_reference_); + if (compiler_flag_ == CompilerFlags::HELP) { + std::map<std::string, std::string> settings = { + {"COMPILER_FLAGS", "--help"}, + }; + PrintProperty(out, rules, "settings", settings); + } out << "};\n"; } @@ -563,11 +572,11 @@ PBXNativeTarget::~PBXNativeTarget() {} -void PBXNativeTarget::AddFileForIndexing( - const PBXFileReference* file_reference) { +void PBXNativeTarget::AddFileForIndexing(const PBXFileReference* file_reference, + const CompilerFlags compiler_flag) { DCHECK(file_reference); - source_build_phase_->AddBuildFile( - base::MakeUnique<PBXBuildFile>(file_reference, source_build_phase_)); + source_build_phase_->AddBuildFile(base::MakeUnique<PBXBuildFile>( + file_reference, source_build_phase_, compiler_flag)); } PBXObjectClass PBXNativeTarget::Class() const { @@ -614,15 +623,18 @@ void PBXProject::AddSourceFileToIndexingTarget( const std::string& navigator_path, - const std::string& source_path) { + const std::string& source_path, + const CompilerFlags compiler_flag) { if (!target_for_indexing_) { AddIndexingTarget(); } - AddSourceFile(navigator_path, source_path, target_for_indexing_); + AddSourceFile(navigator_path, source_path, compiler_flag, + target_for_indexing_); } void PBXProject::AddSourceFile(const std::string& navigator_path, const std::string& source_path, + const CompilerFlags compiler_flag, PBXNativeTarget* target) { PBXFileReference* file_reference = sources_->AddSourceFile(navigator_path, source_path); @@ -631,7 +643,7 @@ return; DCHECK(target); - target->AddFileForIndexing(file_reference); + target->AddFileForIndexing(file_reference, compiler_flag); } void PBXProject::AddAggregateTarget(const std::string& name,
diff --git a/tools/gn/xcode_object.h b/tools/gn/xcode_object.h index f56de09..22be61e 100644 --- a/tools/gn/xcode_object.h +++ b/tools/gn/xcode_object.h
@@ -22,6 +22,11 @@ // See https://chromium.googlesource.com/external/gyp/+/master/pylib/gyp/xcodeproj_file.py // for more information on Xcode project file format. +enum class CompilerFlags { + NONE, + HELP, +}; + // PBXObjectClass ------------------------------------------------------------- enum PBXObjectClass { @@ -154,7 +159,8 @@ class PBXBuildFile : public PBXObject { public: PBXBuildFile(const PBXFileReference* file_reference, - const PBXSourcesBuildPhase* build_phase); + const PBXSourcesBuildPhase* build_phase, + const CompilerFlags compiler_flag); ~PBXBuildFile() override; // PXBObject implementation. @@ -165,6 +171,7 @@ private: const PBXFileReference* file_reference_; const PBXSourcesBuildPhase* build_phase_; + const CompilerFlags compiler_flag_; DISALLOW_COPY_AND_ASSIGN(PBXBuildFile); }; @@ -251,7 +258,8 @@ const PBXFileReference* product_reference); ~PBXNativeTarget() override; - void AddFileForIndexing(const PBXFileReference* file_reference); + void AddFileForIndexing(const PBXFileReference* file_reference, + const CompilerFlags compiler_flag); // PBXObject implementation. PBXObjectClass Class() const override; @@ -276,11 +284,12 @@ ~PBXProject() override; void AddSourceFileToIndexingTarget(const std::string& navigator_path, - const std::string& source_path); + const std::string& source_path, + const CompilerFlags compiler_flag); void AddSourceFile(const std::string& navigator_path, const std::string& source_path, + const CompilerFlags compiler_flag, PBXNativeTarget* target); - void AddAggregateTarget(const std::string& name, const std::string& shell_script); void AddIndexingTarget();
diff --git a/tools/gn/xcode_writer.cc b/tools/gn/xcode_writer.cc index b052683..b35cb44 100644 --- a/tools/gn/xcode_writer.cc +++ b/tools/gn/xcode_writer.cc
@@ -353,8 +353,8 @@ for (const SourceFile& source : sources) { std::string source_file = RebasePath(source.value(), source_dir, absolute_source_path); - sources_for_indexing->AddSourceFileToIndexingTarget(source_file, - source_file); + sources_for_indexing->AddSourceFileToIndexingTarget( + source_file, source_file, CompilerFlags::NONE); } projects_.push_back(std::move(sources_for_indexing));