|
| 1 | +# PI Level0 plugin library |
| 2 | + |
| 3 | +if (NOT DEFINED L0_LIBRARY OR NOT DEFINED L0_INCLUDE_DIR) |
| 4 | + message(STATUS "Download Level Zero loader and headers from github.com") |
| 5 | + if(MSVC) |
| 6 | + set(L0_LIBRARY |
| 7 | + "${LLVM_LIBRARY_OUTPUT_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ze_loader${CMAKE_STATIC_LIBRARY_SUFFIX}") |
| 8 | + else() |
| 9 | + set(L0_LIBRARY |
| 10 | + "${LLVM_LIBRARY_OUTPUT_INTDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}ze_loader${CMAKE_SHARED_LIBRARY_SUFFIX}") |
| 11 | + endif() |
| 12 | + if (CMAKE_C_COMPILER) |
| 13 | + list(APPEND AUX_CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}) |
| 14 | + endif() |
| 15 | + if (CMAKE_CXX_COMPILER) |
| 16 | + list(APPEND AUX_CMAKE_FLAGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) |
| 17 | + endif() |
| 18 | + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/l0_loader_build) |
| 19 | + ExternalProject_Add(l0-loader |
| 20 | + GIT_REPOSITORY https://github.com/oneapi-src/level-zero.git |
| 21 | + GIT_TAG origin/master |
| 22 | + SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/Level0/l0_loader" |
| 23 | + BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/l0_loader_build" |
| 24 | + INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/l0_loader_install" |
| 25 | + CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} |
| 26 | + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} |
| 27 | + -DOpenCL_INCLUDE_DIR=${OpenCL_INCLUDE_DIRS} |
| 28 | + -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> |
| 29 | + -DCMAKE_INSTALL_LIBDIR:PATH=lib${LLVM_LIBDIR_SUFFIX} |
| 30 | + ${AUX_CMAKE_FLAGS} |
| 31 | + STEP_TARGETS configure,build,install |
| 32 | + DEPENDS ocl-headers |
| 33 | + BUILD_BYPRODUCTS ${L0_LIBRARY} |
| 34 | + ) |
| 35 | + ExternalProject_Add_Step(l0-loader llvminstall |
| 36 | + COMMAND ${CMAKE_COMMAND} -E copy_directory <INSTALL_DIR>/ ${LLVM_BINARY_DIR} |
| 37 | + COMMENT "Installing l0-loader into the LLVM binary directory" |
| 38 | + DEPENDEES install |
| 39 | + ) |
| 40 | + |
| 41 | + install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/l0_loader_install/" |
| 42 | + DESTINATION "." |
| 43 | + COMPONENT l0-loader |
| 44 | + ) |
| 45 | + |
| 46 | + list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS l0-loader) |
| 47 | +else() |
| 48 | + include_directories("${L0_INCLUDE_DIR}") |
| 49 | +endif() |
| 50 | + |
| 51 | +include_directories("${sycl_inc_dir}") |
| 52 | +include_directories(${OPENCL_INCLUDE}) |
| 53 | + |
| 54 | +add_library(pi_level0 SHARED |
| 55 | + "${sycl_inc_dir}/CL/sycl/detail/pi.h" |
| 56 | + "${CMAKE_CURRENT_SOURCE_DIR}/pi_level0.cpp" |
| 57 | + "${CMAKE_CURRENT_SOURCE_DIR}/pi_level0.hpp" |
| 58 | +) |
| 59 | + |
| 60 | +if (MSVC) |
| 61 | + # by defining __SYCL_BUILD_SYCL_DLL, we can use __declspec(dllexport) |
| 62 | + # which are individually tagged for all pi* symbols in pi.h |
| 63 | + target_compile_definitions(pi_level0 PRIVATE __SYCL_BUILD_SYCL_DLL) |
| 64 | +else() |
| 65 | + # we set the visibility of all symbols 'hidden' by default. |
| 66 | + # In pi.h file, we set exported symbols with visibility==default individually |
| 67 | + target_compile_options(pi_level0 PUBLIC -fvisibility=hidden) |
| 68 | + |
| 69 | + # This script file is used to allow exporting pi* symbols only. |
| 70 | + # All other symbols are regarded as local (hidden) |
| 71 | + set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/../ld-version-script.txt") |
| 72 | + |
| 73 | + # Filter symbols based on the scope defined in the script file, |
| 74 | + # and export pi* function symbols in the library. |
| 75 | + target_link_libraries( pi_level0 |
| 76 | + PRIVATE "-Wl,--version-script=${linker_script}" |
| 77 | + ) |
| 78 | +endif() |
| 79 | + |
| 80 | +if (TARGET l0-loader) |
| 81 | + add_dependencies(pi_level0 l0-loader) |
| 82 | +endif() |
| 83 | + add_dependencies(sycl-toolchain pi_level0) |
| 84 | + |
| 85 | +target_link_libraries(pi_level0 PRIVATE "${L0_LIBRARY}") |
| 86 | +if (UNIX) |
| 87 | + target_link_libraries(pi_level0 PRIVATE pthread) |
| 88 | +endif() |
| 89 | + |
| 90 | +add_common_options(pi_level0) |
| 91 | + |
| 92 | +install(TARGETS pi_level0 |
| 93 | + LIBRARY DESTINATION "lib" COMPONENT pi_level0 |
| 94 | + RUNTIME DESTINATION "bin" COMPONENT pi_level0) |
0 commit comments