| ##===----------------------------------------------------------------------===## |
| # |
| # 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. |
| # |
| ##===----------------------------------------------------------------------===## |
| |
| add_subdirectory(common) |
| |
| # void build_generic_elf64(string tmachine, string tmachine_name, string tmachine_libname, string elf_machine_id); |
| # - build a plugin for an ELF based generic 64-bit target based on libffi. |
| # - tmachine: name of the machine processor as used in the cmake build system. |
| # - tmachine_name: name of the machine to be printed with the debug messages. |
| # - tmachine_libname: machine name to be appended to the plugin library name. |
| macro(build_generic_elf64 tmachine tmachine_name tmachine_libname tmachine_triple elf_machine_id) |
| if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$") |
| # Define macro to be used as prefix of the runtime messages for this target. |
| add_definitions("-DTARGET_NAME=${tmachine_name}") |
| |
| # Define debug prefix. TODO: This should be automatized in the Debug.h but |
| # it requires changing the original plugins. |
| add_definitions(-DDEBUG_PREFIX="TARGET ${tmachine_name} RTL") |
| |
| # Define the macro with the ELF e_machine for this target. |
| add_definitions("-DTARGET_ELF_ID=${elf_machine_id}") |
| |
| # Define target triple |
| add_definitions("-DLIBOMPTARGET_NEXTGEN_GENERIC_PLUGIN_TRIPLE=${tmachine}") |
| |
| add_llvm_library("omptarget.rtl.${tmachine_libname}" |
| SHARED |
| |
| ${CMAKE_CURRENT_SOURCE_DIR}/../generic-elf-64bit/src/rtl.cpp |
| |
| ADDITIONAL_HEADER_DIRS |
| ${LIBOMPTARGET_INCLUDE_DIR} |
| |
| LINK_LIBS |
| PRIVATE |
| PluginCommon |
| ${OPENMP_PTHREAD_LIB} |
| |
| NO_INSTALL_RPATH |
| BUILDTREE_ONLY |
| ) |
| |
| if(LIBOMPTARGET_DEP_LIBFFI_FOUND) |
| libomptarget_say("Building ${tmachine_libname} plugin linked with libffi") |
| if(FFI_STATIC_LIBRARIES) |
| target_link_libraries( |
| "omptarget.rtl.${tmachine_libname}" PRIVATE FFI::ffi_static) |
| else() |
| target_link_libraries( |
| "omptarget.rtl.${tmachine_libname}" PRIVATE FFI::ffi) |
| endif() |
| else() |
| libomptarget_say("Building ${tmachine_libname} plugin for dlopened libffi") |
| target_sources("omptarget.rtl.${tmachine_libname}" PRIVATE |
| ${CMAKE_CURRENT_SOURCE_DIR}/../generic-elf-64bit/dynamic_ffi/ffi.cpp) |
| target_include_directories("omptarget.rtl.${tmachine_libname}" PRIVATE |
| ${CMAKE_CURRENT_SOURCE_DIR}/../generic-elf-64bit/dynamic_ffi) |
| endif() |
| |
| if(OMPT_TARGET_DEFAULT AND LIBOMPTARGET_OMPT_SUPPORT) |
| target_link_libraries("omptarget.rtl.${tmachine_libname}" PRIVATE OMPT) |
| endif() |
| |
| if(LIBOMP_HAVE_VERSION_SCRIPT_FLAG) |
| target_link_libraries("omptarget.rtl.${tmachine_libname}" PRIVATE |
| "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports") |
| endif() |
| |
| # Install plugin under the lib destination folder. |
| install(TARGETS "omptarget.rtl.${tmachine_libname}" |
| LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}") |
| set_target_properties("omptarget.rtl.${tmachine_libname}" PROPERTIES |
| INSTALL_RPATH "$ORIGIN" BUILD_RPATH "$ORIGIN:${CMAKE_CURRENT_BINARY_DIR}/.." |
| POSITION_INDEPENDENT_CODE ON |
| CXX_VISIBILITY_PRESET protected) |
| |
| target_include_directories("omptarget.rtl.${tmachine_libname}" PRIVATE |
| ${LIBOMPTARGET_INCLUDE_DIR}) |
| |
| if(LIBOMPTARGET_DEP_LIBFFI_FOUND) |
| list(APPEND LIBOMPTARGET_TESTED_PLUGINS "omptarget.rtl.${tmachine_libname}") |
| set(LIBOMPTARGET_TESTED_PLUGINS |
| "${LIBOMPTARGET_TESTED_PLUGINS}" PARENT_SCOPE) |
| set(LIBOMPTARGET_SYSTEM_TARGETS |
| "${LIBOMPTARGET_SYSTEM_TARGETS} ${tmachine_triple} |
| ${tmachine_triple}-LTO" PARENT_SCOPE) |
| else() |
| libomptarget_say("Not generating ${tmachine_name} tests. LibFFI not found.") |
| endif() |
| else() |
| libomptarget_say("Not building ${tmachine_name} NextGen offloading plugin: machine not found in the system.") |
| endif() |
| endmacro() |
| |
| add_subdirectory(aarch64) |
| add_subdirectory(amdgpu) |
| add_subdirectory(cuda) |
| add_subdirectory(ppc64) |
| add_subdirectory(ppc64le) |
| add_subdirectory(x86_64) |
| add_subdirectory(s390x) |
| |
| # 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) |