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

Unified Diff: tools/gn/xcode_object.h

Issue 1827103005: [GN] Add support for generating Xcode projects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Improve comment about "assert(product_type != "")" Created 4 years, 8 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/visual_studio_writer.cc ('k') | tools/gn/xcode_object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/xcode_object.h
diff --git a/tools/gn/xcode_object.h b/tools/gn/xcode_object.h
new file mode 100644
index 0000000000000000000000000000000000000000..25f2415f516887e8279d9f01a842b75c1f2e6723
--- /dev/null
+++ b/tools/gn/xcode_object.h
@@ -0,0 +1,392 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TOOLS_GN_XCODE_OBJECT_H_
+#define TOOLS_GN_XCODE_OBJECT_H_
+
+#include <iosfwd>
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+
+// Helper classes to generate Xcode project files.
+//
+// This code is based on gyp xcodeproj_file.py generator. It does not support
+// all features of Xcode project but instead just enough to implement a hybrid
+// mode where Xcode uses external scripts to perform the compilation steps.
+//
+// See https://chromium.googlesource.com/external/gyp/+/master/pylib/gyp/xcodeproj_file.py
+// for more information on Xcode project file format.
+
+// PBXObjectClass -------------------------------------------------------------
+
+enum PBXObjectClass {
+ // Those values needs to stay sorted in alphabetic order.
+ PBXAggregateTargetClass,
+ PBXBuildFileClass,
+ PBXFileReferenceClass,
+ PBXFrameworksBuildPhaseClass,
+ PBXGroupClass,
+ PBXNativeTargetClass,
+ PBXProjectClass,
+ PBXShellScriptBuildPhaseClass,
+ PBXSourcesBuildPhaseClass,
+ XCBuildConfigurationClass,
+ XCConfigurationListClass,
+};
+
+const char* ToString(PBXObjectClass cls);
+
+// Forward-declarations -------------------------------------------------------
+
+class PBXAggregateTarget;
+class PBXBuildFile;
+class PBXFileReference;
+class PBXBuildPhase;
+class PBXFrameworksBuildPhase;
+class PBXGroup;
+class PBXNativeTarget;
+class PBXObject;
+class PBXProject;
+class PBXShellScriptBuildPhase;
+class PBXSourcesBuildPhase;
+class PBXTarget;
+class XCBuildConfiguration;
+class XCConfigurationList;
+
+using PBXAttributes = std::map<std::string, std::string>;
+
+// PBXObjectVisitor -----------------------------------------------------------
+
+class PBXObjectVisitor {
+ public:
+ PBXObjectVisitor();
+ virtual ~PBXObjectVisitor();
+ virtual void Visit(PBXObject* object) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PBXObjectVisitor);
+};
+
+// PBXObject ------------------------------------------------------------------
+
+class PBXObject {
+ public:
+ PBXObject();
+ virtual ~PBXObject();
+
+ const std::string id() const { return id_; }
+ void SetId(const std::string& id);
+
+ std::string Reference() const;
+
+ virtual PBXObjectClass Class() const = 0;
+ virtual std::string Name() const = 0;
+ virtual std::string Comment() const;
+ virtual void Visit(PBXObjectVisitor& visitor);
+ virtual void Print(std::ostream& out, unsigned indent) const = 0;
+
+ private:
+ std::string id_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXObject);
+};
+
+// PBXBuildPhase --------------------------------------------------------------
+
+class PBXBuildPhase : public PBXObject {
+ public:
+ PBXBuildPhase();
+ ~PBXBuildPhase() override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PBXBuildPhase);
+};
+
+// PBXTarget ------------------------------------------------------------------
+
+class PBXTarget : public PBXObject {
+ public:
+ PBXTarget(const std::string& name,
+ const std::string& shell_script,
+ const std::string& config_name,
+ const PBXAttributes& attributes);
+ ~PBXTarget() override;
+
+ // PXBObject implementation.
+ std::string Name() const override;
+ void Visit(PBXObjectVisitor& visitor) override;
+
+ protected:
+ std::unique_ptr<XCConfigurationList> configurations_;
+ std::vector<std::unique_ptr<PBXBuildPhase>> build_phases_;
+ PBXSourcesBuildPhase* source_build_phase_;
+ std::string name_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PBXTarget);
+};
+
+// PBXAggregateTarget ---------------------------------------------------------
+
+class PBXAggregateTarget : public PBXTarget {
+ public:
+ PBXAggregateTarget(const std::string& name,
+ const std::string& shell_script,
+ const std::string& config_name,
+ const PBXAttributes& attributes);
+ ~PBXAggregateTarget() override;
+
+ // PXBObject implementation.
+ PBXObjectClass Class() const override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PBXAggregateTarget);
+};
+
+// PBXBuildFile ---------------------------------------------------------------
+
+class PBXBuildFile : public PBXObject {
+ public:
+ PBXBuildFile(const PBXFileReference* file_reference,
+ const PBXSourcesBuildPhase* build_phase);
+ ~PBXBuildFile() override;
+
+ // PXBObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ const PBXFileReference* file_reference_;
+ const PBXSourcesBuildPhase* build_phase_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXBuildFile);
+};
+
+// PBXFileReference -----------------------------------------------------------
+
+class PBXFileReference : public PBXObject {
+ public:
+ PBXFileReference(const std::string& name,
+ const std::string& path,
+ const std::string& type);
+ ~PBXFileReference() override;
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ std::string name_;
+ std::string path_;
+ std::string type_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXFileReference);
+};
+
+// PBXFrameworksBuildPhase ----------------------------------------------------
+
+class PBXFrameworksBuildPhase : public PBXBuildPhase {
+ public:
+ PBXFrameworksBuildPhase();
+ ~PBXFrameworksBuildPhase() override;
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PBXFrameworksBuildPhase);
+};
+
+// PBXGroup -------------------------------------------------------------------
+
+class PBXGroup : public PBXObject {
+ public:
+ explicit PBXGroup(const std::string& path = std::string(),
+ const std::string& name = std::string());
+ ~PBXGroup() override;
+
+ const std::string& path() const { return path_; }
+
+ PBXObject* AddChild(std::unique_ptr<PBXObject> child);
+ PBXFileReference* AddSourceFile(const std::string& source_path);
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Visit(PBXObjectVisitor& visitor) override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ std::vector<std::unique_ptr<PBXObject>> children_;
+ std::string name_;
+ std::string path_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXGroup);
+};
+
+// PBXNativeTarget ------------------------------------------------------------
+
+class PBXNativeTarget : public PBXTarget {
+ public:
+ PBXNativeTarget(const std::string& name,
+ const std::string& shell_script,
+ const std::string& config_name,
+ const PBXAttributes& attributes,
+ const std::string& product_type,
+ const PBXFileReference* product_reference);
+ ~PBXNativeTarget() override;
+
+ void AddFileForIndexing(const PBXFileReference* file_reference);
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ const PBXFileReference* product_reference_;
+ std::string product_type_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXNativeTarget);
+};
+
+// PBXProject -----------------------------------------------------------------
+
+class PBXProject : public PBXObject {
+ public:
+ PBXProject(const std::string& name,
+ const std::string& config_name,
+ const std::string& source_path,
+ const PBXAttributes& attributes);
+ ~PBXProject() override;
+
+ void AddSourceFile(const std::string& source_path);
+ void AddAggregateTarget(const std::string& name,
+ const std::string& shell_script);
+ void AddNativeTarget(const std::string& name,
+ const std::string& type,
+ const std::string& output_name,
+ const std::string& output_type,
+ const std::string& shell_script);
+
+ void SetProjectDirPath(const std::string& project_dir_path);
+ void SetProjectRoot(const std::string& project_root);
+ void AddTarget(std::unique_ptr<PBXTarget> target);
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ std::string Comment() const override;
+ void Visit(PBXObjectVisitor& visitor) override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ PBXAttributes attributes_;
+ std::unique_ptr<XCConfigurationList> configurations_;
+ std::unique_ptr<PBXGroup> main_group_;
+ std::string project_dir_path_;
+ std::string project_root_;
+ std::vector<std::unique_ptr<PBXTarget>> targets_;
+ std::string name_;
+ std::string config_name_;
+
+ PBXGroup* sources_;
+ PBXGroup* products_;
+ PBXNativeTarget* target_for_indexing_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXProject);
+};
+
+// PBXShellScriptBuildPhase ---------------------------------------------------
+
+class PBXShellScriptBuildPhase : public PBXBuildPhase {
+ public:
+ PBXShellScriptBuildPhase(const std::string& name,
+ const std::string& shell_script);
+ ~PBXShellScriptBuildPhase() override;
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ std::string name_;
+ std::string shell_script_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXShellScriptBuildPhase);
+};
+
+// PBXSourcesBuildPhase -------------------------------------------------------
+
+class PBXSourcesBuildPhase : public PBXBuildPhase {
+ public:
+ PBXSourcesBuildPhase();
+ ~PBXSourcesBuildPhase() override;
+
+ void AddBuildFile(std::unique_ptr<PBXBuildFile> build_file);
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Visit(PBXObjectVisitor& visitor) override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ std::vector<std::unique_ptr<PBXBuildFile>> files_;
+
+ DISALLOW_COPY_AND_ASSIGN(PBXSourcesBuildPhase);
+};
+
+// XCBuildConfiguration -------------------------------------------------------
+
+class XCBuildConfiguration : public PBXObject {
+ public:
+ XCBuildConfiguration(const std::string& name,
+ const PBXAttributes& attributes);
+ ~XCBuildConfiguration() override;
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ PBXAttributes attributes_;
+ std::string name_;
+
+ DISALLOW_COPY_AND_ASSIGN(XCBuildConfiguration);
+};
+
+// XCConfigurationList --------------------------------------------------------
+
+class XCConfigurationList : public PBXObject {
+ public:
+ XCConfigurationList(const std::string& name,
+ const PBXAttributes& attributes,
+ const PBXObject* owner_reference);
+ ~XCConfigurationList() override;
+
+ // PBXObject implementation.
+ PBXObjectClass Class() const override;
+ std::string Name() const override;
+ void Visit(PBXObjectVisitor& visitor) override;
+ void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+ std::vector<std::unique_ptr<XCBuildConfiguration>> configurations_;
+ const PBXObject* owner_reference_;
+
+ DISALLOW_COPY_AND_ASSIGN(XCConfigurationList);
+};
+
+#endif // TOOLS_GN_XCODE_OBJECT_H_
« no previous file with comments | « tools/gn/visual_studio_writer.cc ('k') | tools/gn/xcode_object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698