| ##===----------------------------------------------------------------------===## |
| # |
| # 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}$") |
| if(LIBOMPTARGET_DEP_LIBELF_FOUND) |
| if(LIBOMPTARGET_DEP_LIBFFI_FOUND) |
| |
| libomptarget_say("Building ${tmachine_name} offloading plugin.") |
| |
| include_directories(${LIBOMPTARGET_DEP_LIBFFI_INCLUDE_DIR}) |
| include_directories(${LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIR}) |
| |
| # Define macro to be used as prefix of the runtime messages for this target. |
| add_definitions("-DTARGET_NAME=${tmachine_name}") |
| |
| # Define macro with the ELF ID for this target. |
| add_definitions("-DTARGET_ELF_ID=${elf_machine_id}") |
| |
| add_library("omptarget.rtl.${tmachine_libname}" SHARED |
| ${CMAKE_CURRENT_SOURCE_DIR}/../generic-elf-64bit/src/rtl.cpp) |
| |
| # Install plugin under the lib destination folder. |
| install(TARGETS "omptarget.rtl.${tmachine_libname}" |
| LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}") |
| |
| target_link_libraries( |
| "omptarget.rtl.${tmachine_libname}" |
| elf_common |
| ${LIBOMPTARGET_DEP_LIBFFI_LIBRARIES} |
| ${LIBOMPTARGET_DEP_LIBELF_LIBRARIES} |
| dl |
| ${OPENMP_PTHREAD_LIB} |
| "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/../exports") |
| |
| list(APPEND LIBOMPTARGET_TESTED_PLUGINS |
| "omptarget.rtl.${tmachine_libname}") |
| |
| # Report to the parent scope that we are building a plugin. |
| set(LIBOMPTARGET_SYSTEM_TARGETS |
| "${LIBOMPTARGET_SYSTEM_TARGETS} ${tmachine_triple}" PARENT_SCOPE) |
| set(LIBOMPTARGET_TESTED_PLUGINS |
| "${LIBOMPTARGET_TESTED_PLUGINS}" PARENT_SCOPE) |
| |
| else(LIBOMPTARGET_DEP_LIBFFI_FOUND) |
| libomptarget_say("Not building ${tmachine_name} offloading plugin: libffi dependency not found.") |
| endif(LIBOMPTARGET_DEP_LIBFFI_FOUND) |
| else(LIBOMPTARGET_DEP_LIBELF_FOUND) |
| libomptarget_say("Not building ${tmachine_name} offloading plugin: libelf dependency not found.") |
| endif(LIBOMPTARGET_DEP_LIBELF_FOUND) |
| else() |
| libomptarget_say("Not building ${tmachine_name} 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(ve) |
| add_subdirectory(x86_64) |
| add_subdirectory(remote) |
| |
| # 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) |
| |