OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "tools/gn/xcode_object.h" | 5 #include "tools/gn/xcode_object.h" |
6 | 6 |
7 #include <iomanip> | 7 #include <iomanip> |
8 #include <sstream> | 8 #include <sstream> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 PrintProperty(out, rules, "buildPhases", build_phases_); | 358 PrintProperty(out, rules, "buildPhases", build_phases_); |
359 PrintProperty(out, rules, "dependencies", EmptyPBXObjectVector()); | 359 PrintProperty(out, rules, "dependencies", EmptyPBXObjectVector()); |
360 PrintProperty(out, rules, "name", name_); | 360 PrintProperty(out, rules, "name", name_); |
361 PrintProperty(out, rules, "productName", name_); | 361 PrintProperty(out, rules, "productName", name_); |
362 out << indent_str << "};\n"; | 362 out << indent_str << "};\n"; |
363 } | 363 } |
364 | 364 |
365 // PBXBuildFile --------------------------------------------------------------- | 365 // PBXBuildFile --------------------------------------------------------------- |
366 | 366 |
367 PBXBuildFile::PBXBuildFile(const PBXFileReference* file_reference, | 367 PBXBuildFile::PBXBuildFile(const PBXFileReference* file_reference, |
368 const PBXSourcesBuildPhase* build_phase) | 368 const PBXSourcesBuildPhase* build_phase, |
369 : file_reference_(file_reference), build_phase_(build_phase) { | 369 const CompilerFlags compiler_flag) |
| 370 : file_reference_(file_reference), |
| 371 build_phase_(build_phase), |
| 372 compiler_flag_(compiler_flag) { |
370 DCHECK(file_reference_); | 373 DCHECK(file_reference_); |
371 DCHECK(build_phase_); | 374 DCHECK(build_phase_); |
372 } | 375 } |
373 | 376 |
374 PBXBuildFile::~PBXBuildFile() {} | 377 PBXBuildFile::~PBXBuildFile() {} |
375 | 378 |
376 PBXObjectClass PBXBuildFile::Class() const { | 379 PBXObjectClass PBXBuildFile::Class() const { |
377 return PBXBuildFileClass; | 380 return PBXBuildFileClass; |
378 } | 381 } |
379 | 382 |
380 std::string PBXBuildFile::Name() const { | 383 std::string PBXBuildFile::Name() const { |
381 return file_reference_->Name() + " in " + build_phase_->Name(); | 384 return file_reference_->Name() + " in " + build_phase_->Name(); |
382 } | 385 } |
383 | 386 |
384 void PBXBuildFile::Print(std::ostream& out, unsigned indent) const { | 387 void PBXBuildFile::Print(std::ostream& out, unsigned indent) const { |
385 const std::string indent_str(indent, '\t'); | 388 const std::string indent_str(indent, '\t'); |
386 const IndentRules rules = {true, 0}; | 389 const IndentRules rules = {true, 0}; |
387 out << indent_str << Reference() << " = {"; | 390 out << indent_str << Reference() << " = {"; |
388 PrintProperty(out, rules, "isa", ToString(Class())); | 391 PrintProperty(out, rules, "isa", ToString(Class())); |
389 PrintProperty(out, rules, "fileRef", file_reference_); | 392 PrintProperty(out, rules, "fileRef", file_reference_); |
| 393 if (compiler_flag_ == CompilerFlags::HELP) { |
| 394 std::map<std::string, std::string> settings = { |
| 395 {"COMPILER_FLAGS", "--help"}, |
| 396 }; |
| 397 PrintProperty(out, rules, "settings", settings); |
| 398 } |
390 out << "};\n"; | 399 out << "};\n"; |
391 } | 400 } |
392 | 401 |
393 // PBXFileReference ----------------------------------------------------------- | 402 // PBXFileReference ----------------------------------------------------------- |
394 | 403 |
395 PBXFileReference::PBXFileReference(const std::string& name, | 404 PBXFileReference::PBXFileReference(const std::string& name, |
396 const std::string& path, | 405 const std::string& path, |
397 const std::string& type) | 406 const std::string& type) |
398 : name_(name), path_(path), type_(type) {} | 407 : name_(name), path_(path), type_(type) {} |
399 | 408 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 DCHECK(product_reference_); | 565 DCHECK(product_reference_); |
557 build_phases_.push_back(base::WrapUnique(new PBXSourcesBuildPhase)); | 566 build_phases_.push_back(base::WrapUnique(new PBXSourcesBuildPhase)); |
558 source_build_phase_ = | 567 source_build_phase_ = |
559 static_cast<PBXSourcesBuildPhase*>(build_phases_.back().get()); | 568 static_cast<PBXSourcesBuildPhase*>(build_phases_.back().get()); |
560 | 569 |
561 build_phases_.push_back(base::WrapUnique(new PBXFrameworksBuildPhase)); | 570 build_phases_.push_back(base::WrapUnique(new PBXFrameworksBuildPhase)); |
562 } | 571 } |
563 | 572 |
564 PBXNativeTarget::~PBXNativeTarget() {} | 573 PBXNativeTarget::~PBXNativeTarget() {} |
565 | 574 |
566 void PBXNativeTarget::AddFileForIndexing( | 575 void PBXNativeTarget::AddFileForIndexing(const PBXFileReference* file_reference, |
567 const PBXFileReference* file_reference) { | 576 const CompilerFlags compiler_flag) { |
568 DCHECK(file_reference); | 577 DCHECK(file_reference); |
569 source_build_phase_->AddBuildFile( | 578 source_build_phase_->AddBuildFile(base::MakeUnique<PBXBuildFile>( |
570 base::MakeUnique<PBXBuildFile>(file_reference, source_build_phase_)); | 579 file_reference, source_build_phase_, compiler_flag)); |
571 } | 580 } |
572 | 581 |
573 PBXObjectClass PBXNativeTarget::Class() const { | 582 PBXObjectClass PBXNativeTarget::Class() const { |
574 return PBXNativeTargetClass; | 583 return PBXNativeTargetClass; |
575 } | 584 } |
576 | 585 |
577 void PBXNativeTarget::Print(std::ostream& out, unsigned indent) const { | 586 void PBXNativeTarget::Print(std::ostream& out, unsigned indent) const { |
578 const std::string indent_str(indent, '\t'); | 587 const std::string indent_str(indent, '\t'); |
579 const IndentRules rules = {false, indent + 1}; | 588 const IndentRules rules = {false, indent + 1}; |
580 out << indent_str << Reference() << " = {\n"; | 589 out << indent_str << Reference() << " = {\n"; |
(...skipping 26 matching lines...) Expand all Loading... |
607 base::MakeUnique<PBXGroup>(std::string(), "Product"))); | 616 base::MakeUnique<PBXGroup>(std::string(), "Product"))); |
608 main_group_->AddChild(base::MakeUnique<PBXGroup>(std::string(), "Build")); | 617 main_group_->AddChild(base::MakeUnique<PBXGroup>(std::string(), "Build")); |
609 | 618 |
610 configurations_.reset(new XCConfigurationList(config_name, attributes, this)); | 619 configurations_.reset(new XCConfigurationList(config_name, attributes, this)); |
611 } | 620 } |
612 | 621 |
613 PBXProject::~PBXProject() {} | 622 PBXProject::~PBXProject() {} |
614 | 623 |
615 void PBXProject::AddSourceFileToIndexingTarget( | 624 void PBXProject::AddSourceFileToIndexingTarget( |
616 const std::string& navigator_path, | 625 const std::string& navigator_path, |
617 const std::string& source_path) { | 626 const std::string& source_path, |
| 627 const CompilerFlags compiler_flag) { |
618 if (!target_for_indexing_) { | 628 if (!target_for_indexing_) { |
619 AddIndexingTarget(); | 629 AddIndexingTarget(); |
620 } | 630 } |
621 AddSourceFile(navigator_path, source_path, target_for_indexing_); | 631 AddSourceFile(navigator_path, source_path, compiler_flag, |
| 632 target_for_indexing_); |
622 } | 633 } |
623 | 634 |
624 void PBXProject::AddSourceFile(const std::string& navigator_path, | 635 void PBXProject::AddSourceFile(const std::string& navigator_path, |
625 const std::string& source_path, | 636 const std::string& source_path, |
| 637 const CompilerFlags compiler_flag, |
626 PBXNativeTarget* target) { | 638 PBXNativeTarget* target) { |
627 PBXFileReference* file_reference = | 639 PBXFileReference* file_reference = |
628 sources_->AddSourceFile(navigator_path, source_path); | 640 sources_->AddSourceFile(navigator_path, source_path); |
629 base::StringPiece ext = FindExtension(&source_path); | 641 base::StringPiece ext = FindExtension(&source_path); |
630 if (!IsSourceFileForIndexing(ext)) | 642 if (!IsSourceFileForIndexing(ext)) |
631 return; | 643 return; |
632 | 644 |
633 DCHECK(target); | 645 DCHECK(target); |
634 target->AddFileForIndexing(file_reference); | 646 target->AddFileForIndexing(file_reference, compiler_flag); |
635 } | 647 } |
636 | 648 |
637 void PBXProject::AddAggregateTarget(const std::string& name, | 649 void PBXProject::AddAggregateTarget(const std::string& name, |
638 const std::string& shell_script) { | 650 const std::string& shell_script) { |
639 PBXAttributes attributes; | 651 PBXAttributes attributes; |
640 attributes["CODE_SIGNING_REQUIRED"] = "NO"; | 652 attributes["CODE_SIGNING_REQUIRED"] = "NO"; |
641 attributes["CONFIGURATION_BUILD_DIR"] = "."; | 653 attributes["CONFIGURATION_BUILD_DIR"] = "."; |
642 attributes["PRODUCT_NAME"] = name; | 654 attributes["PRODUCT_NAME"] = name; |
643 | 655 |
644 targets_.push_back(base::MakeUnique<PBXAggregateTarget>( | 656 targets_.push_back(base::MakeUnique<PBXAggregateTarget>( |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
877 const std::string indent_str(indent, '\t'); | 889 const std::string indent_str(indent, '\t'); |
878 const IndentRules rules = {false, indent + 1}; | 890 const IndentRules rules = {false, indent + 1}; |
879 out << indent_str << Reference() << " = {\n"; | 891 out << indent_str << Reference() << " = {\n"; |
880 PrintProperty(out, rules, "isa", ToString(Class())); | 892 PrintProperty(out, rules, "isa", ToString(Class())); |
881 PrintProperty(out, rules, "buildConfigurations", configurations_); | 893 PrintProperty(out, rules, "buildConfigurations", configurations_); |
882 PrintProperty(out, rules, "defaultConfigurationIsVisible", 1u); | 894 PrintProperty(out, rules, "defaultConfigurationIsVisible", 1u); |
883 PrintProperty(out, rules, "defaultConfigurationName", | 895 PrintProperty(out, rules, "defaultConfigurationName", |
884 configurations_[0]->Name()); | 896 configurations_[0]->Name()); |
885 out << indent_str << "};\n"; | 897 out << indent_str << "};\n"; |
886 } | 898 } |
OLD | NEW |