blob: dbd82ac945171e6d81de871818e1cd898b1839a3 [file] [log] [blame]
##===----------------------------------------------------------------------===##
#
# 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
#
##===----------------------------------------------------------------------===##
#
# Build plugins for the user system if available.
#
##===----------------------------------------------------------------------===##
# Common interface to handle creating a plugin library.
set(common_dir ${CMAKE_CURRENT_SOURCE_DIR}/common)
add_subdirectory(common)
function(add_target_library target_name lib_name)
add_llvm_library(${target_name} SHARED
LINK_COMPONENTS
${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
NO_INSTALL_RPATH
BUILDTREE_ONLY
)
llvm_update_compile_flags(${target_name})
target_link_libraries(${target_name} PRIVATE
PluginCommon ${OPENMP_PTHREAD_LIB})
target_compile_definitions(${target_name} PRIVATE TARGET_NAME=${lib_name})
target_compile_definitions(${target_name} PRIVATE
DEBUG_PREFIX="TARGET ${lib_name} RTL")
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
# On FreeBSD, the 'environ' symbol is undefined at link time, but resolved by
# the dynamic linker at runtime. Therefore, allow the symbol to be undefined
# when creating a shared library.
target_link_libraries(${target_name} PRIVATE "-Wl,--allow-shlib-undefined")
else()
target_link_libraries(${target_name} PRIVATE "-Wl,-z,defs")
endif()
if(LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
target_link_libraries(${target_name} PRIVATE
"-Wl,--version-script=${common_dir}/../exports")
endif()
set_target_properties(${target_name} PROPERTIES CXX_VISIBILITY_PRESET protected)
endfunction()
add_subdirectory(amdgpu)
add_subdirectory(cuda)
add_subdirectory(host)
# Make sure the parent scope can see the plugins that will be created.
set(LIBOMPTARGET_SYSTEM_TARGETS "${LIBOMPTARGET_SYSTEM_TARGETS}" PARENT_SCOPE)
set(LIBOMPTARGET_TESTED_PLUGINS "${LIBOMPTARGET_TESTED_PLUGINS}" PARENT_SCOPE)