The purpose of this patch is to Implement registration of callback functions in the generic plugin by looking up corresponding callbacks in libomptarget. The overall design document is https://rice.app.box.com/s/pf3gix2hs4d4o1aatwir1set05xmjljc Defined an object of type OmptDeviceCallbacksTy in the amdgpu plugin for holding the tool-provided callback functions. Implemented a global constructor in the plugin that creates a connector object to connect with libomptarget. The callbacks that are already registered with libomptarget are looked up and registered with the plugin. Combined with an internal patch from Dhruva Chakrabarti, which fixes the OMPT initialization ordering. Achieved through removal of the constructor attribute from ompt_init. Patch from John Mellor-Crummey <johnmc@rice.edu> With contributions from: Dhruva Chakrabarti <Dhruva.Chakrabarti@amd.com> Michael Halkenhaeuser <MichaelGerald.Halkenhauser@amd.com> Reviewed By: dhruvachak, tianshilei1992 Differential Revision: https://reviews.llvm.org/D124070
83 lines
2.1 KiB
CMake
83 lines
2.1 KiB
CMake
##===----------------------------------------------------------------------===##
|
|
#
|
|
# 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
|
|
#
|
|
##===----------------------------------------------------------------------===##
|
|
#
|
|
# Common parts which can be used by all plugins
|
|
#
|
|
##===----------------------------------------------------------------------===##
|
|
|
|
# NOTE: Don't try to build `PluginInterface` using `add_llvm_library` because we
|
|
# don't want to export `PluginInterface` while `add_llvm_library` requires that.
|
|
add_library(PluginInterface OBJECT
|
|
PluginInterface.cpp GlobalHandler.cpp JIT.cpp)
|
|
|
|
# Only enable JIT for those targets that LLVM can support.
|
|
string(TOUPPER "${LLVM_TARGETS_TO_BUILD}" TargetsSupported)
|
|
foreach(Target ${TargetsSupported})
|
|
target_compile_definitions(PluginInterface PRIVATE "LIBOMPTARGET_JIT_${Target}")
|
|
endforeach()
|
|
|
|
# This is required when using LLVM libraries.
|
|
llvm_update_compile_flags(PluginInterface)
|
|
|
|
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(PluginInterface
|
|
PUBLIC
|
|
${llvm_libs}
|
|
elf_common
|
|
MemoryManager
|
|
)
|
|
|
|
if ((OMPT_TARGET_DEFAULT) AND (LIBOMPTARGET_OMPT_SUPPORT))
|
|
target_link_libraries(PluginInterface PUBLIC OMPT)
|
|
endif()
|
|
|
|
# Define the TARGET_NAME and DEBUG_PREFIX.
|
|
target_compile_definitions(PluginInterface PRIVATE
|
|
TARGET_NAME="PluginInterface"
|
|
DEBUG_PREFIX="PluginInterface"
|
|
)
|
|
|
|
target_include_directories(PluginInterface
|
|
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
|
|
PRIVATE ${LIBOMPTARGET_INCLUDE_DIR}
|
|
)
|
|
|
|
set_target_properties(PluginInterface PROPERTIES
|
|
POSITION_INDEPENDENT_CODE ON
|
|
CXX_VISIBILITY_PRESET protected)
|