|  | # | 
|  | #//===----------------------------------------------------------------------===// | 
|  | #// | 
|  | #//                     The LLVM Compiler Infrastructure | 
|  | #// | 
|  | #// This file is dual licensed under the MIT and the University of Illinois Open | 
|  | #// Source Licenses. See LICENSE.txt for details. | 
|  | #// | 
|  | #//===----------------------------------------------------------------------===// | 
|  | # | 
|  |  | 
|  | # Try to detect in the system several dependencies required by the different | 
|  | # components of libomptarget. These are the dependencies we have: | 
|  | # | 
|  | # libelf : required by some targets to handle the ELF files at runtime. | 
|  | # libffi : required to launch target kernels given function and argument | 
|  | #          pointers. | 
|  | # CUDA : required to control offloading to NVIDIA GPUs. | 
|  |  | 
|  | include (FindPackageHandleStandardArgs) | 
|  |  | 
|  | ################################################################################ | 
|  | # Looking for libelf... | 
|  | ################################################################################ | 
|  |  | 
|  | find_path ( | 
|  | LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIR | 
|  | NAMES | 
|  | libelf.h | 
|  | PATHS | 
|  | /usr/include | 
|  | /usr/local/include | 
|  | /opt/local/include | 
|  | /sw/include | 
|  | ENV CPATH | 
|  | PATH_SUFFIXES | 
|  | libelf) | 
|  |  | 
|  | find_library ( | 
|  | LIBOMPTARGET_DEP_LIBELF_LIBRARIES | 
|  | NAMES | 
|  | elf | 
|  | PATHS | 
|  | /usr/lib | 
|  | /usr/local/lib | 
|  | /opt/local/lib | 
|  | /sw/lib | 
|  | ENV LIBRARY_PATH | 
|  | ENV LD_LIBRARY_PATH) | 
|  |  | 
|  | set(LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIRS ${LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIR}) | 
|  | find_package_handle_standard_args( | 
|  | LIBOMPTARGET_DEP_LIBELF | 
|  | DEFAULT_MSG | 
|  | LIBOMPTARGET_DEP_LIBELF_LIBRARIES | 
|  | LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIRS) | 
|  |  | 
|  | mark_as_advanced( | 
|  | LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIRS | 
|  | LIBOMPTARGET_DEP_LIBELF_LIBRARIES) | 
|  |  | 
|  | ################################################################################ | 
|  | # Looking for libffi... | 
|  | ################################################################################ | 
|  | find_package(PkgConfig) | 
|  |  | 
|  | pkg_check_modules(LIBOMPTARGET_SEARCH_LIBFFI QUIET libffi) | 
|  |  | 
|  | find_path ( | 
|  | LIBOMPTARGET_DEP_LIBFFI_INCLUDE_DIR | 
|  | NAMES | 
|  | ffi.h | 
|  | HINTS | 
|  | ${LIBOMPTARGET_SEARCH_LIBFFI_INCLUDEDIR} | 
|  | ${LIBOMPTARGET_SEARCH_LIBFFI_INCLUDE_DIRS} | 
|  | PATHS | 
|  | /usr/include | 
|  | /usr/local/include | 
|  | /opt/local/include | 
|  | /sw/include | 
|  | ENV CPATH) | 
|  |  | 
|  | # Don't bother look for the library if the header files were not found. | 
|  | if (LIBOMPTARGET_DEP_LIBFFI_INCLUDE_DIR) | 
|  | find_library ( | 
|  | LIBOMPTARGET_DEP_LIBFFI_LIBRARIES | 
|  | NAMES | 
|  | ffi | 
|  | HINTS | 
|  | ${LIBOMPTARGET_SEARCH_LIBFFI_LIBDIR} | 
|  | ${LIBOMPTARGET_SEARCH_LIBFFI_LIBRARY_DIRS} | 
|  | PATHS | 
|  | /usr/lib | 
|  | /usr/local/lib | 
|  | /opt/local/lib | 
|  | /sw/lib | 
|  | ENV LIBRARY_PATH | 
|  | ENV LD_LIBRARY_PATH) | 
|  | endif() | 
|  |  | 
|  | set(LIBOMPTARGET_DEP_LIBFFI_INCLUDE_DIRS ${LIBOMPTARGET_DEP_LIBFFI_INCLUDE_DIR}) | 
|  | find_package_handle_standard_args( | 
|  | LIBOMPTARGET_DEP_LIBFFI | 
|  | DEFAULT_MSG | 
|  | LIBOMPTARGET_DEP_LIBFFI_LIBRARIES | 
|  | LIBOMPTARGET_DEP_LIBFFI_INCLUDE_DIRS) | 
|  |  | 
|  | mark_as_advanced( | 
|  | LIBOMPTARGET_DEP_LIBFFI_INCLUDE_DIRS | 
|  | LIBOMPTARGET_DEP_LIBFFI_LIBRARIES) | 
|  |  | 
|  | ################################################################################ | 
|  | # Looking for CUDA... | 
|  | ################################################################################ | 
|  | find_package(CUDA QUIET) | 
|  |  | 
|  | set(LIBOMPTARGET_DEP_CUDA_FOUND ${CUDA_FOUND}) | 
|  | set(LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS}) | 
|  |  | 
|  | mark_as_advanced( | 
|  | LIBOMPTARGET_DEP_CUDA_FOUND | 
|  | LIBOMPTARGET_DEP_CUDA_INCLUDE_DIRS) | 
|  |  | 
|  | ################################################################################ | 
|  | # Looking for CUDA Driver API... (needed for CUDA plugin) | 
|  | ################################################################################ | 
|  |  | 
|  | find_library ( | 
|  | LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES | 
|  | NAMES | 
|  | cuda | 
|  | PATHS | 
|  | /lib64) | 
|  |  | 
|  | # There is a libcuda.so in lib64/stubs that can be used for linking. | 
|  | if (NOT LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES AND CUDA_FOUND) | 
|  | # Since CMake 3.3 FindCUDA.cmake defaults to using static libraries. In this | 
|  | # case CUDA_LIBRARIES contains additional linker arguments which breaks | 
|  | # get_filename_component below. Fortunately, since that change the module | 
|  | # exports CUDA_cudart_static_LIBRARY which points to a single file in the | 
|  | # right directory. | 
|  | set(cuda_library ${CUDA_LIBRARIES}) | 
|  | if (DEFINED CUDA_cudart_static_LIBRARY) | 
|  | set(cuda_library ${CUDA_cudart_static_LIBRARY}) | 
|  | endif() | 
|  | get_filename_component(CUDA_LIBDIR ${cuda_library} DIRECTORY) | 
|  | find_library ( | 
|  | LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES | 
|  | NAMES | 
|  | cuda | 
|  | HINTS | 
|  | "${CUDA_LIBDIR}/stubs") | 
|  | endif() | 
|  |  | 
|  | find_package_handle_standard_args( | 
|  | LIBOMPTARGET_DEP_CUDA_DRIVER | 
|  | DEFAULT_MSG | 
|  | LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES) | 
|  |  | 
|  | mark_as_advanced(LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES) |