Build tool
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DepNode.h 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #pragma once
  2. #include <vector>
  3. #include <memory>
  4. #include <mutex>
  5. #include <string>
  6. #include <ostream>
  7. #include <atomic>
  8. #include <condition_variable>
  9. #include "compdb.h"
  10. class DepNode {
  11. public:
  12. virtual ~DepNode() = default;
  13. const std::vector<std::shared_ptr<DepNode>> &children() { return deps_; }
  14. void addChild(std::shared_ptr<DepNode> node);
  15. bool hasChanged(const std::string &outDir);
  16. void startBuild(const std::string &outDir);
  17. void joinBuild();
  18. void writeCompDB(const std::string &outDir, compdb::Writer &w);
  19. virtual std::vector<std::string> publicLDFlags(const std::string &outDir);
  20. virtual std::vector<std::string> publicLDLibs(const std::string &outDir);
  21. virtual std::vector<std::string> publicObjects(const std::string &outDir);
  22. protected:
  23. enum class TriState {
  24. UNKNOWN, FALSE, TRUE,
  25. };
  26. virtual bool checkHasChanged(const std::string &outDir) = 0;
  27. virtual void doBuild(const std::string &outDir) = 0;
  28. virtual void doWriteCompDB(const std::string &outDir, compdb::Writer &w) {}
  29. virtual std::vector<std::string> getPublicLDFlags(const std::string &outDir) { return {}; }
  30. virtual std::vector<std::string> getPublicLDLibs(const std::string &outDir) { return {}; }
  31. virtual std::vector<std::string> getPublicObjects(const std::string &outDir) { return {}; }
  32. TriState has_changed_ = TriState::UNKNOWN;
  33. bool build_complete_ = false;
  34. bool build_started_ = false;
  35. std::mutex mut_;
  36. std::condition_variable build_cond_;
  37. std::vector<std::shared_ptr<DepNode>> deps_;
  38. };