#pragma once #include #include #include "BXParser.h" namespace toolchain { enum class FileType { C, CXX, }; enum class TargetType { BINARY, SHARED_LIBRARY, STATIC_LIBRARY, }; std::string objectFilePath(const std::string &path, const std::string &outDir); std::string targetFilePath( TargetType type, const std::string &path, const std::string &outDir); void getFlags(const BXVariables &vars, FileType type, std::vector &flags); void getLDLibs(const BXVariables &vars, std::vector &flags); void getLDFlags(const BXVariables &vars, std::vector &flags); std::vector getDependencies( const std::vector &flags, FileType type, const std::string &path); std::vector getCompileCommand( const std::vector &flags, FileType type, const std::string &path, const std::string &outDir); // TODO: Don't rely on FileType, just use LD and let the dependency graph nodes // provide the necessary flags to link with libstdc++ std::vector getLinkCommand( const std::vector &ldFlags, const std::vector &ldLibs, FileType type, TargetType targetType, const std::vector &objs, const std::string &path, const std::string &outDir); }