set(LLVM_LINK_COMPONENTS
  DebugInfoDWARF
  DWP
  ExecutionEngine
  MC
  Object
  Support
  TargetParser
  )

set(TARGET_LINK_LIBRARIES
  LLVMBOLTCore
  LLVMBOLTPasses
  LLVMBOLTProfile
  LLVMBOLTRuntimeLibs
  LLVMBOLTUtils
  )

if ("AArch64" IN_LIST LLVM_TARGETS_TO_BUILD)
  list(APPEND TARGET_LINK_LIBRARIES LLVMBOLTTargetAArch64)
  set(BOLT_AArch64 On)
endif()

if ("X86" IN_LIST LLVM_TARGETS_TO_BUILD)
  list(APPEND TARGET_LINK_LIBRARIES LLVMBOLTTargetX86)
  set(BOLT_X64 On)
endif()

add_llvm_library(LLVMBOLTRewrite
  BinaryPassManager.cpp
  BoltDiff.cpp
  DWARFRewriter.cpp
  ExecutableFileMemoryManager.cpp
  MachORewriteInstance.cpp
  RewriteInstance.cpp

  DISABLE_LLVM_LINK_LLVM_DYLIB

  LINK_LIBS
  ${LLVM_PTHREAD_LIB}
  )

target_link_libraries(LLVMBOLTRewrite
  PRIVATE
  ${TARGET_LINK_LIBRARIES}
  )

if (DEFINED BOLT_AArch64)
  target_compile_definitions(LLVMBOLTRewrite PRIVATE AARCH64_AVAILABLE)
endif()

if (DEFINED BOLT_X64)
  target_compile_definitions(LLVMBOLTRewrite PRIVATE X86_AVAILABLE)
endif()
