#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 bool hasObjCCategory(const uint8_t* fileContent, uint64_t fileLength);
extern ld::relocatable::File* parse(const uint8_t* fileContent, uint64_t fileLength,
const char* path, time_t modTime, ld::File::Ordinal ordinal,
cpu_type_t architecture, cpu_subtype_t subarch, bool logAllFiles,
bool verboseOptimizationHints);
struct OptimizeOptions {
const char* outputFilePath;
const char* tmpObjectFilePath;
const char* ltoCachePath;
int ltoPruneInterval;
int ltoPruneAfter;
unsigned ltoMaxCacheSize;
bool preserveAllGlobals;
bool verbose;
bool saveTemps;
bool ltoCodegenOnly;
bool pie;
bool mainExecutable;
bool staticExecutable;
bool preload;
bool relocatable;
bool allowTextRelocs;
bool linkerDeadStripping;
bool needsUnwindInfoSection;
bool keepDwarfUnwind;
bool verboseOptimizationHints;
bool armUsesZeroCostExceptions;
bool simulator;
bool ignoreMismatchPlatform;
bool bitcodeBundle;
uint8_t maxDefaultCommonAlignment;
cpu_type_t arch;
const char* mcpu;
Options::Platform platform;
uint32_t minOSVersion;
const std::vector<const char*>* llvmOptions;
const std::vector<const char*>* initialUndefines;
};
extern bool optimize( const std::vector<const ld::Atom*>& allAtoms,
ld::Internal& state,
const OptimizeOptions& options,
ld::File::AtomHandler& handler,
std::vector<const ld::Atom*>& newAtoms,
std::vector<const char*>& additionalUndefines);
}
#endif // __LTO_FILE_H__