60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- LTO.h ----------------------------------------------------*- C++ -*-===//
 | 
						|
//
 | 
						|
//                             The LLVM Linker
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file provides a way to combine bitcode files into one ELF
 | 
						|
// file by compiling them using LLVM.
 | 
						|
//
 | 
						|
// If LTO is in use, your input files are not in regular ELF files
 | 
						|
// but instead LLVM bitcode files. In that case, the linker has to
 | 
						|
// convert bitcode files into the native format so that we can create
 | 
						|
// an ELF file that contains native code. This file provides that
 | 
						|
// functionality.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLD_ELF_LTO_H
 | 
						|
#define LLD_ELF_LTO_H
 | 
						|
 | 
						|
#include "lld/Common/LLVM.h"
 | 
						|
#include "llvm/ADT/DenseSet.h"
 | 
						|
#include "llvm/ADT/SmallString.h"
 | 
						|
#include <memory>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
namespace lto {
 | 
						|
class LTO;
 | 
						|
}
 | 
						|
} // namespace llvm
 | 
						|
 | 
						|
namespace lld {
 | 
						|
namespace elf {
 | 
						|
 | 
						|
class BitcodeFile;
 | 
						|
class InputFile;
 | 
						|
 | 
						|
class BitcodeCompiler {
 | 
						|
public:
 | 
						|
  BitcodeCompiler();
 | 
						|
  ~BitcodeCompiler();
 | 
						|
 | 
						|
  void add(BitcodeFile &F);
 | 
						|
  std::vector<InputFile *> compile();
 | 
						|
 | 
						|
private:
 | 
						|
  std::unique_ptr<llvm::lto::LTO> LTOObj;
 | 
						|
  std::vector<SmallString<0>> Buff;
 | 
						|
  std::vector<std::unique_ptr<MemoryBuffer>> Files;
 | 
						|
  llvm::DenseSet<StringRef> UsedStartStop;
 | 
						|
};
 | 
						|
} // namespace elf
 | 
						|
} // namespace lld
 | 
						|
 | 
						|
#endif
 |