#ifndef __LTO_FILE_H__
#define __LTO_FILE_H__
#include "ld.hpp"
namespace lto {
extern const char* version();
extern bool libLTOisLoaded();
extern const char* archName(const uint8_t* fileContent, uint64_t fileLength);
extern bool isObjectFile(const uint8_t* fileContent, uint64_t fileLength, cpu_type_t architecture, cpu_subtype_t subarch);
extern ld::relocatable::File* parse(const uint8_t* fileContent, uint64_t fileLength,
const char* path, time_t modTime, uint32_t ordinal,
cpu_type_t architecture, cpu_subtype_t subarch, bool logAllFiles);
struct OptimizeOptions {
const char* outputFilePath;
const char* tmpObjectFilePath;
bool allGlobalsAReDeadStripRoots;
bool verbose;
bool saveTemps;
bool pie;
bool mainExecutable;
bool staticExecutable;
bool relocatable;
bool allowTextRelocs;
bool linkerDeadStripping;
cpu_type_t arch;
const std::vector<const char*>* llvmOptions;
};
extern bool optimize( const std::vector<const ld::Atom*>& allAtoms,
ld::Internal& state,
uint32_t nextInputOrdinal,
const OptimizeOptions& options,
ld::File::AtomHandler& handler,
std::vector<const ld::Atom*>& newAtoms,
std::vector<const char*>& additionalUndefines);
}
#endif // __LTO_FILE_H__