Browse Source

link with $CC if there's no C++

feature/new-parser
Martin Dørum 3 years ago
parent
commit
48dd7abee7
4 changed files with 17 additions and 1 deletions
  1. 1
    0
      lib/CompileStep.h
  2. 4
    0
      lib/DepNode.h
  3. 11
    1
      lib/LinkStep.cc
  4. 1
    0
      lib/LinkStep.h

+ 1
- 0
lib/CompileStep.h View File

toolchain::FileType type_; toolchain::FileType type_;


bool checkHasChanged(const std::string &outDir) override; bool checkHasChanged(const std::string &outDir) override;
toolchain::FileType doGetLinkType() override { return type_; }
void doBuild(const std::string &outDir) override; void doBuild(const std::string &outDir) override;
void doWriteCompDB(const std::string &outDir, compdb::Writer &w) override; void doWriteCompDB(const std::string &outDir, compdb::Writer &w) override;
std::vector<std::string> getPublicLDFlags(const std::string &outDir) override; std::vector<std::string> getPublicLDFlags(const std::string &outDir) override;

+ 4
- 0
lib/DepNode.h View File

#include <condition_variable> #include <condition_variable>


#include "compdb.h" #include "compdb.h"
#include "toolchain.h"


class DepNode { class DepNode {
public: public:
virtual ~DepNode() = default; virtual ~DepNode() = default;


const std::vector<std::shared_ptr<DepNode>> &children() { return deps_; } const std::vector<std::shared_ptr<DepNode>> &children() { return deps_; }
toolchain::FileType linkType() { return doGetLinkType(); }
void addChild(std::shared_ptr<DepNode> node); void addChild(std::shared_ptr<DepNode> node);
bool hasChanged(const std::string &outDir); bool hasChanged(const std::string &outDir);
void startBuild(const std::string &outDir); void startBuild(const std::string &outDir);
void joinBuild(); void joinBuild();
void writeCompDB(const std::string &outDir, compdb::Writer &w); void writeCompDB(const std::string &outDir, compdb::Writer &w);

virtual std::vector<std::string> publicLDFlags(const std::string &outDir); virtual std::vector<std::string> publicLDFlags(const std::string &outDir);
virtual std::vector<std::string> publicLDLibs(const std::string &outDir); virtual std::vector<std::string> publicLDLibs(const std::string &outDir);
virtual std::vector<std::string> publicObjects(const std::string &outDir); virtual std::vector<std::string> publicObjects(const std::string &outDir);
}; };


virtual bool checkHasChanged(const std::string &outDir) = 0; virtual bool checkHasChanged(const std::string &outDir) = 0;
virtual toolchain::FileType doGetLinkType() = 0;
virtual void doBuild(const std::string &outDir) = 0; virtual void doBuild(const std::string &outDir) = 0;
virtual void doWriteCompDB(const std::string &outDir, compdb::Writer &w) {} virtual void doWriteCompDB(const std::string &outDir, compdb::Writer &w) {}
virtual std::vector<std::string> getPublicLDFlags(const std::string &outDir) { return {}; } virtual std::vector<std::string> getPublicLDFlags(const std::string &outDir) { return {}; }

+ 11
- 1
lib/LinkStep.cc View File

sys::execute(command, conf); sys::execute(command, conf);
} }


toolchain::FileType LinkStep::doGetLinkType() {
for (auto &child: children()) {
if (child->linkType() == toolchain::FileType::CXX) {
return toolchain::FileType::CXX;
}
}

return toolchain::FileType::C;
}

std::vector<std::string> &LinkStep::linkCommand(const std::string &outDir) { std::vector<std::string> &LinkStep::linkCommand(const std::string &outDir) {
if (hasLinkCommand_) { if (hasLinkCommand_) {
return linkCommand_; return linkCommand_;
// TODO: Don't use FileType::CXX hard-coded here // TODO: Don't use FileType::CXX hard-coded here
linkCommand_ = toolchain::getLinkCommand( linkCommand_ = toolchain::getLinkCommand(
publicLDFlags(outDir), publicLDLibs(outDir), publicLDFlags(outDir), publicLDLibs(outDir),
toolchain::FileType::CXX, type_, objs, path_, outDir);
linkType(), type_, objs, path_, outDir);
hasLinkCommand_ = true; hasLinkCommand_ = true;
return linkCommand_; return linkCommand_;
} }

+ 1
- 0
lib/LinkStep.h View File

toolchain::TargetType type_; toolchain::TargetType type_;


bool checkHasChanged(const std::string &outDir) override; bool checkHasChanged(const std::string &outDir) override;
toolchain::FileType doGetLinkType() override;
void doBuild(const std::string &outDir) override; void doBuild(const std::string &outDir) override;


bool hasLinkCommand_ = false; bool hasLinkCommand_ = false;

Loading…
Cancel
Save