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 12bdd1243dSDimitry Andric #include "lld/Common/LLVM.h" 13bdd1243dSDimitry Andric #include "llvm/ADT/DenseSet.h" 14e8d8bef9SDimitry Andric #include "llvm/ADT/SmallString.h" 15fe6060f1SDimitry Andric #include "llvm/Support/MemoryBuffer.h" 16bdd1243dSDimitry Andric #include "llvm/Support/raw_ostream.h" 17e8d8bef9SDimitry Andric #include <memory> 18e8d8bef9SDimitry Andric #include <vector> 19e8d8bef9SDimitry Andric 20bdd1243dSDimitry Andric namespace llvm::lto { 21e8d8bef9SDimitry Andric class LTO; 22bdd1243dSDimitry Andric } // namespace llvm::lto 23e8d8bef9SDimitry Andric 24bdd1243dSDimitry Andric namespace lld::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; 39fe6060f1SDimitry Andric std::vector<std::unique_ptr<llvm::MemoryBuffer>> files; 40bdd1243dSDimitry Andric std::unique_ptr<llvm::raw_fd_ostream> indexFile; 41bdd1243dSDimitry Andric llvm::DenseSet<StringRef> thinIndices; 42*06c3fb27SDimitry Andric bool hasFiles = false; 43e8d8bef9SDimitry Andric }; 44e8d8bef9SDimitry Andric 45bdd1243dSDimitry Andric } // namespace lld::macho 46e8d8bef9SDimitry Andric 47e8d8bef9SDimitry Andric #endif 48