| // Copyright (c) 2013 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_TARGET_MANAGER_H_ |
| #define TOOLS_GN_TARGET_MANAGER_H_ |
| |
| #include <set> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/containers/hash_tables.h" |
| #include "base/synchronization/lock.h" |
| #include "tools/gn/target.h" |
| |
| class BuildSettings; |
| class Err; |
| class ItemTree; |
| class LocationRange; |
| class ToolchainManager; |
| class Value; |
| |
| // Manages all the targets in the system. This integrates with the ItemTree |
| // to manage the target-specific rules and creation. |
| // |
| // This class is threadsafe. |
| class TargetManager { |
| public: |
| explicit TargetManager(const BuildSettings* settings); |
| ~TargetManager(); |
| |
| // Gets a reference to a named target. The given target name is created if |
| // it doesn't exist. |
| // |
| // The label should be fully specified in that it should include an |
| // explicit toolchain. |
| // |
| // |specified_from_here| should indicate the dependency or the target |
| // generator causing this access for error message generation. |
| // |
| // |dep_from| should be set when a target is getting a dep that it depends |
| // on. |dep_from| indicates the target that specified the dependency. It |
| // will be used to track outstanding dependencies so we can know when the |
| // target and all of its dependencies are complete. It should be null when |
| // getting a target for other reasons. |
| // |
| // On failure, |err| will be set. |
| // |
| // The returned pointer must not be dereferenced until it's generated, since |
| // it could be being generated on another thread. |
| Target* GetTarget(const Label& label, |
| const LocationRange& specified_from_here, |
| Target* dep_from, |
| Err* err); |
| |
| // Called by a target when it has been loaded from the .gin file. Its |
| // dependencies may or may not be resolved yet. |
| void TargetGenerationComplete(const Label& label); |
| |
| // Returns a list of all targets. |
| void GetAllTargets(std::vector<const Target*>* all_targets) const; |
| |
| private: |
| bool ScheduleInvocationLocked(const LocationRange& specified_from_here, |
| const Label& label, |
| Err* err); |
| |
| const BuildSettings* build_settings_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TargetManager); |
| }; |
| |
| #endif // TOOLS_GN_TARGET_MANAGER_H |