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

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