##===----------------------------------------------------------------------===## # # 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(PluginCommon OBJECT src/PluginInterface.cpp src/GlobalHandler.cpp src/JIT.cpp src/RPC.cpp src/Utils/ELF.cpp ) # Only enable JIT for those targets that LLVM can support. string(TOUPPER "${LLVM_TARGETS_TO_BUILD}" TargetsSupported) foreach(Target ${TargetsSupported}) target_compile_definitions(PluginCommon PRIVATE "LIBOMPTARGET_JIT_${Target}") endforeach() # This is required when using LLVM libraries. llvm_update_compile_flags(PluginCommon) 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(PluginCommon PUBLIC ${llvm_libs} ) # Include the RPC server from the `libc` project if availible. if(TARGET llvmlibc_rpc_server AND ${LIBOMPTARGET_GPU_LIBC_SUPPORT}) target_link_libraries(PluginCommon PRIVATE llvmlibc_rpc_server) target_compile_definitions(PluginCommon PRIVATE LIBOMPTARGET_RPC_SUPPORT) elseif(${LIBOMPTARGET_GPU_LIBC_SUPPORT}) find_library(llvmlibc_rpc_server NAMES llvmlibc_rpc_server PATHS ${LIBOMPTARGET_LLVM_LIBRARY_DIR} NO_DEFAULT_PATH) if(llvmlibc_rpc_server) target_link_libraries(PluginCommon PRIVATE llvmlibc_rpc_server) target_compile_definitions(PluginCommon PRIVATE LIBOMPTARGET_RPC_SUPPORT) endif() endif() if ((OMPT_TARGET_DEFAULT) AND (LIBOMPTARGET_OMPT_SUPPORT)) target_link_libraries(PluginCommon PUBLIC OMPT) endif() # Define the TARGET_NAME and DEBUG_PREFIX. target_compile_definitions(PluginCommon PRIVATE TARGET_NAME="PluginInterface" DEBUG_PREFIX="PluginInterface" ) target_compile_options(PluginCommon PUBLIC ${offload_compile_flags}) target_link_options(PluginCommon PUBLIC ${offload_link_flags}) target_include_directories(PluginCommon PRIVATE ${LIBOMPTARGET_INCLUDE_DIR} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) set_target_properties(PluginCommon PROPERTIES POSITION_INDEPENDENT_CODE ON CXX_VISIBILITY_PRESET protected) add_subdirectory(OMPT)