llvm-project/lld/MachO/CMakeLists.txt
Fangrui Song e0c7f081f1
[lld-macho] Refactor BPSectionOrderer with CRTP. NFC
PR #117514 refactored BPSectionOrderer to be used by the ELF port
but introduced some inefficiency:

* BPSectionBase/BPSymbol are wrappers around a single pointer.
  The numbers of sections and symbols could be huge, and the extra
  allocations are memory inefficient.
* Reconstructing the returned DenseMap (since BPSectionBase != InputSectin)
  is wasteful.

This patch refactors BPSectionOrderer with Curiously Recurring Template
Pattern and eliminates the inefficiency. In addition,
`symbolToSectionIdxs` is removed and `rootSymbolToSectionIdxs` building
is moved to lld/MachO: while getting sections for symbols is cheap in
Mach-O, it is awkward and inefficient in the ELF port.

While here, add a file-level comment and replace some `StringMap<*>`
(which copies strings) with `DenseMap<CachedHashStringRef, *>`.

Pull Request: https://github.com/llvm/llvm-project/pull/124482
2025-01-27 18:24:59 -08:00

66 lines
1.0 KiB
CMake

set(LLVM_TARGET_DEFINITIONS Options.td)
tablegen(LLVM Options.inc -gen-opt-parser-defs)
add_public_tablegen_target(MachOOptionsTableGen)
include_directories(${LLVM_MAIN_SRC_DIR}/../libunwind/include)
add_lld_library(lldMachO
Arch/ARM64.cpp
Arch/ARM64Common.cpp
Arch/ARM64_32.cpp
Arch/X86_64.cpp
ConcatOutputSection.cpp
Driver.cpp
DriverUtils.cpp
Dwarf.cpp
EhFrame.cpp
ExportTrie.cpp
ICF.cpp
InputFiles.cpp
InputSection.cpp
LTO.cpp
MapFile.cpp
MarkLive.cpp
ObjC.cpp
OutputSection.cpp
OutputSegment.cpp
Relocations.cpp
BPSectionOrderer.cpp
SectionPriorities.cpp
Sections.cpp
SymbolTable.cpp
Symbols.cpp
SyntheticSections.cpp
Target.cpp
UnwindInfoSection.cpp
Writer.cpp
LINK_COMPONENTS
${LLVM_TARGETS_TO_BUILD}
BinaryFormat
BitReader
BitWriter
CGData
Core
DebugInfoDWARF
Demangle
LTO
MC
ObjCARCOpts
Object
Option
Passes
ProfileData
Support
TargetParser
TextAPI
LINK_LIBS
lldCommon
${LLVM_PTHREAD_LIB}
DEPENDS
MachOOptionsTableGen
${tablegen_deps}
)