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.1KB

1234567891011121314151617181920212223242526272829303132333435
  1. #pragma once
  2. #include <vector>
  3. #include <memory>
  4. #include <mutex>
  5. #include <string>
  6. class DepNode {
  7. public:
  8. void addChild(std::shared_ptr<DepNode> node);
  9. bool hasChanged(const std::string &outDir);
  10. void build(const std::string &outDir);
  11. virtual std::vector<std::string> publicLDFlags(const std::string &outDir);
  12. virtual std::vector<std::string> publicLDLibs(const std::string &outDir);
  13. virtual std::vector<std::string> publicObjects(const std::string &outDir);
  14. protected:
  15. enum class TriState {
  16. UNKNOWN, FALSE, TRUE,
  17. };
  18. virtual bool checkHasChanged(const std::string &outDir) = 0;
  19. virtual void doBuild(const std::string &outDir) = 0;
  20. virtual std::vector<std::string> getPublicLDFlags(const std::string &outDir) { return {}; }
  21. virtual std::vector<std::string> getPublicLDLibs(const std::string &outDir) { return {}; }
  22. virtual std::vector<std::string> getPublicObjects(const std::string &outDir) { return {}; }
  23. bool haveDepsChanged(const std::string &outDir);
  24. std::mutex mut_;
  25. TriState has_changed_ = TriState::UNKNOWN;
  26. bool was_rebuilt_ = false;
  27. bool was_prepared_ = false;
  28. std::vector<std::shared_ptr<DepNode>> deps_;
  29. };