##===----------------------------------------------------------------------===##
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
##===----------------------------------------------------------------------===##
#
# Aggregation of parts which can be used by OpenMP tools
#
##===----------------------------------------------------------------------===##

# NOTE: Don't try to build `OMPT` using `add_llvm_library` because we
# don't want to export `OMPT` while `add_llvm_library` requires that.
add_library(OMPT OBJECT
  OmptCallback.cpp)

# This is required when using LLVM libraries.
llvm_update_compile_flags(OMPT)

if (LLVM_LINK_LLVM_DYLIB)
  set(llvm_libs LLVM)
else()
  llvm_map_components_to_libnames(llvm_libs
    ${LLVM_TARGETS_TO_BUILD}
    AggressiveInstCombine
    Analysis
    BinaryFormat
    BitReader
    BitWriter
    CodeGen
    Core
    Extensions
    InstCombine
    Instrumentation
    IPO
    IRReader
    Linker
    MC
    Object
    Passes
    Remarks
    ScalarOpts
    Support
    Target
    TargetParser
    TransformUtils
    Vectorize
  )
endif()

target_link_libraries(OMPT
  PUBLIC
    ${llvm_libs}
)

# Define the TARGET_NAME and DEBUG_PREFIX.
target_compile_definitions(OMPT PRIVATE
  TARGET_NAME="OMPT"
  DEBUG_PREFIX="OMPT"
)

target_include_directories(OMPT
  INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
  PRIVATE ${LIBOMPTARGET_INCLUDE_DIR}
)

set_target_properties(OMPT PROPERTIES
  POSITION_INDEPENDENT_CODE ON
  CXX_VISIBILITY_PRESET protected)
