1 //===- Config.h -------------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLD_MACHO_CONFIG_H 10 #define LLD_MACHO_CONFIG_H 11 12 #include "llvm/ADT/DenseMap.h" 13 #include "llvm/ADT/StringRef.h" 14 #include "llvm/BinaryFormat/MachO.h" 15 #include "llvm/TextAPI/MachO/Architecture.h" 16 17 #include <vector> 18 19 namespace lld { 20 namespace macho { 21 22 class Symbol; 23 struct SymbolPriorityEntry; 24 25 struct Configuration { 26 Symbol *entry; 27 bool hasReexports = false; 28 llvm::StringRef installName; 29 llvm::StringRef outputFile; 30 llvm::MachO::Architecture arch; 31 llvm::MachO::HeaderFileType outputType; 32 std::vector<llvm::StringRef> librarySearchPaths; 33 // TODO: use the framework search paths 34 std::vector<llvm::StringRef> frameworkSearchPaths; 35 llvm::DenseMap<llvm::StringRef, SymbolPriorityEntry> priorities; 36 }; 37 38 // The symbol with the highest priority should be ordered first in the output 39 // section (modulo input section contiguity constraints). Using priority 40 // (highest first) instead of order (lowest first) has the convenient property 41 // that the default-constructed zero priority -- for symbols/sections without a 42 // user-defined order -- naturally ends up putting them at the end of the 43 // output. 44 struct SymbolPriorityEntry { 45 // The priority given to a matching symbol, regardless of which object file 46 // it originated from. 47 size_t anyObjectFile = 0; 48 // The priority given to a matching symbol from a particular object file. 49 llvm::DenseMap<llvm::StringRef, size_t> objectFiles; 50 }; 51 52 extern Configuration *config; 53 54 } // namespace macho 55 } // namespace lld 56 57 #endif 58