1e8d8bef9SDimitry Andric //===- LTO.h ----------------------------------------------------*- C++ -*-===// 2e8d8bef9SDimitry Andric // 3e8d8bef9SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e8d8bef9SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5e8d8bef9SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e8d8bef9SDimitry Andric // 7e8d8bef9SDimitry Andric //===----------------------------------------------------------------------===// 8e8d8bef9SDimitry Andric 9e8d8bef9SDimitry Andric #ifndef LLD_MACHO_LTO_H 10e8d8bef9SDimitry Andric #define LLD_MACHO_LTO_H 11e8d8bef9SDimitry Andric 12e8d8bef9SDimitry Andric #include "llvm/ADT/SmallString.h" 13*fe6060f1SDimitry Andric #include "llvm/Support/MemoryBuffer.h" 14e8d8bef9SDimitry Andric #include <memory> 15e8d8bef9SDimitry Andric #include <vector> 16e8d8bef9SDimitry Andric 17e8d8bef9SDimitry Andric namespace llvm { 18e8d8bef9SDimitry Andric namespace lto { 19e8d8bef9SDimitry Andric class LTO; 20e8d8bef9SDimitry Andric } // namespace lto 21e8d8bef9SDimitry Andric } // namespace llvm 22e8d8bef9SDimitry Andric 23e8d8bef9SDimitry Andric namespace lld { 24e8d8bef9SDimitry Andric namespace macho { 25e8d8bef9SDimitry Andric 26e8d8bef9SDimitry Andric class BitcodeFile; 27e8d8bef9SDimitry Andric class ObjFile; 28e8d8bef9SDimitry Andric 29e8d8bef9SDimitry Andric class BitcodeCompiler { 30e8d8bef9SDimitry Andric public: 31e8d8bef9SDimitry Andric BitcodeCompiler(); 32e8d8bef9SDimitry Andric 33e8d8bef9SDimitry Andric void add(BitcodeFile &f); 34e8d8bef9SDimitry Andric std::vector<ObjFile *> compile(); 35e8d8bef9SDimitry Andric 36e8d8bef9SDimitry Andric private: 37e8d8bef9SDimitry Andric std::unique_ptr<llvm::lto::LTO> ltoObj; 38e8d8bef9SDimitry Andric std::vector<llvm::SmallString<0>> buf; 39*fe6060f1SDimitry Andric std::vector<std::unique_ptr<llvm::MemoryBuffer>> files; 40e8d8bef9SDimitry Andric }; 41e8d8bef9SDimitry Andric 42e8d8bef9SDimitry Andric } // namespace macho 43e8d8bef9SDimitry Andric } // namespace lld 44e8d8bef9SDimitry Andric 45e8d8bef9SDimitry Andric #endif 46