commit:     12f7d85386a6700e529a14cd7d98ec44f875603a
Author:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
AuthorDate: Thu Dec  1 20:35:07 2022 +0000
Commit:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
CommitDate: Thu Dec  1 21:39:30 2022 +0000
URL:        https://gitweb.gentoo.org/proj/sci.git/commit/?id=12f7d853

sys-devel/DPC++: new package, add 2022.09

See-also: https://github.com/gentoo/sci/pull/1040
Signed-off-by: Andrew Ammerlaan <andrewammerlaan <AT> gentoo.org>

 sys-devel/DPC++/DPC++-2022.09.ebuild               | 176 +++++++++++++++++
 .../DPC++/files/DPC++-2022.09-system-libs.patch    | 217 +++++++++++++++++++++
 sys-devel/DPC++/metadata.xml                       |  16 ++
 3 files changed, 409 insertions(+)

diff --git a/sys-devel/DPC++/DPC++-2022.09.ebuild 
b/sys-devel/DPC++/DPC++-2022.09.ebuild
new file mode 100644
index 000000000..fc7ebb76d
--- /dev/null
+++ b/sys-devel/DPC++/DPC++-2022.09.ebuild
@@ -0,0 +1,176 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{8..11} )
+inherit cmake python-any-r1
+DOCS_BUILDER="doxygen"
+DOCS_DIR="build/docs"
+DOCS_CONFIG_NAME="doxygen.cfg"
+DOCS_DEPEND="
+       media-gfx/graphviz
+       virtual/latex-base
+       $(python_gen_any_dep '
+               dev-python/sphinx[${PYTHON_USEDEP}]
+               dev-python/recommonmark[${PYTHON_USEDEP}]
+               dev-python/myst_parser[${PYTHON_USEDEP}]
+       ')
+"
+inherit docs
+
+# We cannot unbundle this because it has to be compiled with the clang/llvm
+# that we are building here. Otherwise we run into problems running the 
compiler.
+CPU_EMUL_PV="2022-08-22"
+VC_INTR_PV="0.8.1" # Newer versions cause compile failure
+
+DESCRIPTION="oneAPI Data Parallel C++ compiler"
+HOMEPAGE="https://github.com/intel/llvm";
+SRC_URI="
+       https://github.com/intel/llvm/archive/refs/tags/${PV//./-}.tar.gz -> 
${P}.tar.gz
+       
https://github.com/intel/vc-intrinsics/archive/refs/tags/v${VC_INTR_PV}.tar.gz 
-> ${P}-vc-intrinsics-${VC_INTR_PV}.tar.gz
+       esimd_emulator? ( 
https://github.com/intel/cm-cpu-emulation/archive/refs/tags/v${CPU_EMUL_PV}.tar.gz
 -> ${P}-cm-cpu-emulation-${CPU_EMUL_PV}.tar.gz )
+"
+S="${WORKDIR}/llvm-${PV//./-}"
+CMAKE_USE_DIR="${S}/llvm"
+BUILD_DIR="${S}/build"
+
+LICENSE="Apache-2.0 MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM AVR BPF Hexagon Lanai Mips MSP430
+       NVPTX PowerPC RISCV Sparc SystemZ WebAssembly X86 XCore )
+ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
+LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
+
+IUSE="cuda hip test esimd_emulator ${ALL_LLVM_TARGETS[*]}"
+REQUIRED_USE="
+       ?? ( cuda hip )
+       cuda? ( llvm_targets_NVPTX )
+       hip? ( llvm_targets_AMDGPU )
+"
+RESTRICT="!test? ( test )"
+
+BDEPEND="virtual/pkgconfig"
+
+DEPEND="
+       dev-libs/boost:=
+       dev-libs/level-zero:=
+       dev-libs/opencl-icd-loader
+       dev-util/opencl-headers
+       dev-util/spirv-headers
+       dev-util/spirv-tools
+       media-libs/libva
+       sys-devel/libtool
+       esimd_emulator? ( dev-libs/libffi:= )
+       cuda? ( dev-util/nvidia-cuda-toolkit:= )
+       hip? ( dev-util/hip:= )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+       "${FILESDIR}/${P}-system-libs.patch"
+)
+
+src_configure() {
+       # Extracted from buildbot/configure.py
+       local mycmakeargs=(
+               -DLLVM_ENABLE_ASSERTIONS=ON
+               -DLLVM_TARGETS_TO_BUILD="${LLVM_TARGETS// /;}"
+               
-DLLVM_EXTERNAL_PROJECTS="sycl;llvm-spirv;opencl;libdevice;xpti;xptifw"
+               -DLLVM_EXTERNAL_SYCL_SOURCE_DIR="${S}/sycl"
+               -DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR="${S}/llvm-spirv"
+               -DLLVM_EXTERNAL_XPTI_SOURCE_DIR="${S}/xpti"
+               -DXPTI_SOURCE_DIR="${S}/xpti"
+               -DLLVM_EXTERNAL_XPTIFW_SOURCE_DIR="${S}/xptifw"
+               -DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR="${S}/libdevice"
+               
-DLLVM_ENABLE_PROJECTS="clang;sycl;llvm-spirv;opencl;libdevice;xpti;xptifw"
+               -DLLVM_BUILD_TOOLS=ON
+               -DSYCL_ENABLE_WERROR=OFF
+               -DSYCL_INCLUDE_TESTS="$(usex test)"
+               -DCLANG_INCLUDE_TESTS="$(usex test)"
+               -DLLVM_INCLUDE_TESTS="$(usex test)"
+               -DLLVM_SPIRV_INCLUDE_TESTS="$(usex test)"
+               -DLLVM_ENABLE_DOXYGEN="$(usex doc)"
+               -DLLVM_ENABLE_SPHINX="$(usex doc)"
+               -DLLVM_BUILD_DOCS="$(usex doc)"
+               -DSYCL_ENABLE_XPTI_TRACING=ON
+               -DLLVM_ENABLE_LLD=OFF
+               -DXPTI_ENABLE_WERROR=OFF
+               -DSYCL_ENABLE_PLUGINS="level_zero;opencl;$(usev 
esimd_emulator);$(usev hip);$(usev cuda)"
+               -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR="${ESYSROOT}/usr"
+               -DBOOST_MP11_SOURCE_DIR="${ESYSROOT}/usr "
+               -DLEVEL_ZERO_LIBRARY="${ESYSROOT}/usr/lib64/libze_loader.so"
+               -DLEVEL_ZERO_INCLUDE_DIR="${ESYSROOT}/usr/include"
+               
-DLLVMGenXIntrinsics_SOURCE_DIR="${WORKDIR}/vc-intrinsics-${VC_INTR_PV}"
+               -DSYCL_CLANG_EXTRA_FLAGS="${CXXFLAGS}"
+               # The sycl part of the build system insists on installing 
during compiling
+               # Install it to some temporary directory
+               -DCMAKE_INSTALL_PREFIX="${BUILD_DIR}/install"
+               -DCMAKE_INSTALL_MANDIR="${BUILD_DIR}/install/share/man"
+               -DCMAKE_INSTALL_INFODIR="${BUILD_DIR}/install/share/info"
+               -DCMAKE_INSTALL_DOCDIR="${BUILD_DIR}/install/share/doc/${PF}"
+       )
+
+       if use hip; then
+               mycmakeargs+=(
+                       -DSYCL_BUILD_PI_HIP_PLATFORM=AMD
+                       -DLIBCLC_GENERATE_REMANGLED_VARIANTS=ON
+                       -DLIBCLC_TARGETS_TO_BUILD=";amdgcn--;amdgcn--amdhsa"
+               )
+       fi
+
+       if use cuda; then
+               mycmakeargs+=(
+                       -DLIBCLC_GENERATE_REMANGLED_VARIANTS=ON
+                       -DLIBCLC_TARGETS_TO_BUILD=";nvptx64--;nvptx64--nvidiacl"
+               )
+       fi
+
+       if use esimd_emulator; then
+               mycmakeargs+=(
+                       
-DLibFFI_INCLUDE_DIR="${ESYSROOT}/usr/lib64/libffi/include"
+                       
-DUSE_LOCAL_CM_EMU_SOURCE="${WORKDIR}/cm-cpu-emulation-${CPU_EMUL_PV}"
+               )
+       fi
+
+       if use doc; then
+               mycmakeargs+=( -DSPHINX_WARNINGS_AS_ERRORS=OFF )
+       fi
+
+       cmake_src_configure
+}
+
+src_compile() {
+       # Build sycl (this also installs some stuff already)
+       cmake_build deploy-sycl-toolchain
+
+       use doc && cmake_build doxygen-sycl
+
+       # Install all other files into the same temporary directory
+       cmake_build install
+}
+
+src_test() {
+       cmake_build check
+}
+
+src_install() {
+       einstalldocs
+
+       local LLVM_INTEL_DIR="/usr/lib/llvm/intel"
+       dodir "${LLVM_INTEL_DIR}"
+
+       # Copy our temporary directory to the image directory
+       mv "${BUILD_DIR}/install"/* "${ED}/${LLVM_INTEL_DIR}" || die
+
+       # Copied from llvm ebuild, put env file last so we don't overwrite main 
llvm/clang
+       newenvd - "60llvm-intel" <<-_EOF_
+               PATH="${EPREFIX}${LLVM_INTEL_DIR}/bin"
+               # we need to duplicate it in ROOTPATH for Portage to respect...
+               ROOTPATH="${EPREFIX}${LLVM_INTEL_DIR}/bin"
+               MANPATH="${EPREFIX}${LLVM_INTEL_DIR}/share/man"
+               
LDPATH="${EPREFIX}${LLVM_INTEL_DIR}/lib:${EPREFIX}${LLVM_INTEL_DIR}/lib64"
+       _EOF_
+}

diff --git a/sys-devel/DPC++/files/DPC++-2022.09-system-libs.patch 
b/sys-devel/DPC++/files/DPC++-2022.09-system-libs.patch
new file mode 100644
index 000000000..7d2cdc823
--- /dev/null
+++ b/sys-devel/DPC++/files/DPC++-2022.09-system-libs.patch
@@ -0,0 +1,217 @@
+diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt
+index 954317fe2..ba3bf19d3 100644
+--- a/opencl/CMakeLists.txt
++++ b/opencl/CMakeLists.txt
+@@ -23,29 +23,8 @@ set(OCL_LOADER_REPO
+ set(OCL_HEADERS_TAG dcd5bede6859d26833cd85f0d6bbcee7382dc9b3)
+ set(OCL_LOADER_TAG 792682ad3d877ab38573b997808bab3b43902b70)
+ 
+-# OpenCL Headers
+-if(NOT OpenCL_HEADERS)
+-  message(STATUS "Will fetch OpenCL headers from ${OCL_HEADERS_REPO}")
+-
+-  FetchContent_Declare(ocl-headers
+-    GIT_REPOSITORY    ${OCL_HEADERS_REPO}
+-    GIT_TAG           ${OCL_HEADERS_TAG}
+-  )
+-else()
+-  message(STATUS "OpenCL headers are added manually ${OpenCL_HEADERS}")
+-
+-  FetchContent_Declare(ocl-headers
+-    URL               ${OpenCL_HEADERS}
+-  )
+-endif()
+-
+-FetchContent_MakeAvailable(ocl-headers)
+-FetchContent_GetProperties(ocl-headers)
+ set(OpenCL_INCLUDE_DIR
+-  ${ocl-headers_SOURCE_DIR} CACHE PATH "Path to OpenCL Headers")
+-
+-target_compile_definitions(Headers INTERFACE -DCL_TARGET_OPENCL_VERSION=220)
+-add_library(OpenCL-Headers ALIAS Headers)
++  /usr/include CACHE PATH "Path to OpenCL Headers")
+ 
+ # OpenCL Library (ICD Loader)
+ 
+@@ -57,25 +36,4 @@ set(OPENCL_ICD_LOADER_HEADERS_DIR
+ # library.
+ set(BUILD_SHARED_LIBS ON)
+ 
+-if(NOT OpenCL_LIBRARY_SRC)
+-  message(STATUS "Will fetch OpenCL ICD Loader from ${OCL_LOADER_REPO}")
+-
+-  FetchContent_Declare(ocl-icd
+-    GIT_REPOSITORY    ${OCL_LOADER_REPO}
+-    GIT_TAG           ${OCL_LOADER_TAG}
+-  )
+-else()
+-  # TODO: add possibility to use prebuilt OpenCL library rather than building
+-  #       together with llvm.
+-  message(STATUS
+-    "OpenCL ICD Loader sources added manually ${OpenCL_LIBRARY_SRC}")
+-
+-  FetchContent_Declare(ocl-icd
+-    URL               ${OpenCL_LIBRARY_SRC}
+-  )
+-endif()
+-
+-FetchContent_MakeAvailable(ocl-icd)
+-add_library(OpenCL-ICD ALIAS OpenCL)
+-
+ add_subdirectory(opencl-aot)
+diff --git a/opencl/opencl-aot/CMakeLists.txt 
b/opencl/opencl-aot/CMakeLists.txt
+index ff905fd88..b673f79a4 100644
+--- a/opencl/opencl-aot/CMakeLists.txt
++++ b/opencl/opencl-aot/CMakeLists.txt
+@@ -19,5 +19,5 @@ endif()
+ 
+ target_link_libraries(${OPENCL_AOT_PROJECT_NAME}
+   PRIVATE
+-    OpenCL-Headers
+-    OpenCL-ICD)
++    OpenCL
++)
+diff --git a/sycl/cmake/modules/AddSYCL.cmake 
b/sycl/cmake/modules/AddSYCL.cmake
+index aa0cfcadd..9cfa5aadd 100644
+--- a/sycl/cmake/modules/AddSYCL.cmake
++++ b/sycl/cmake/modules/AddSYCL.cmake
+@@ -47,7 +47,7 @@ function(add_sycl_plugin PLUGIN_NAME)
+       ${sycl_inc_dir}
+     LIBRARIES
+       ${ARG_LIBRARIES}
+-      OpenCL-Headers
++      OpenCL
+   )
+ 
+   install(TARGETS pi_${PLUGIN_NAME}
+diff --git a/sycl/cmake/modules/AddSYCLUnitTest.cmake 
b/sycl/cmake/modules/AddSYCLUnitTest.cmake
+index 9f5e6dc30..fe0e18b2f 100644
+--- a/sycl/cmake/modules/AddSYCLUnitTest.cmake
++++ b/sycl/cmake/modules/AddSYCLUnitTest.cmake
+@@ -53,7 +53,7 @@ macro(add_sycl_unittest test_dirname link_variant)
+   target_link_libraries(${test_dirname}
+     PRIVATE
+       LLVMTestingSupport
+-      OpenCL-Headers
++      OpenCL
+       ${SYCL_LINK_LIBS}
+     )
+   target_include_directories(${test_dirname}
+diff --git a/sycl/plugins/esimd_emulator/CMakeLists.txt 
b/sycl/plugins/esimd_emulator/CMakeLists.txt
+index 0b32c3925..e8b8616bc 100755
+--- a/sycl/plugins/esimd_emulator/CMakeLists.txt
++++ b/sycl/plugins/esimd_emulator/CMakeLists.txt
+@@ -58,6 +58,7 @@ if ((DEFINED USE_DEFAULT_CM_EMU_SOURCE) OR (DEFINED 
USE_LOCAL_CM_EMU_SOURCE))
+       INSTALL_DIR       ${CMAKE_CURRENT_BINARY_DIR}/cm-emu_install
+       CMAKE_ARGS        -DLIBVA_INSTALL_PATH=/usr
+                         -D__SYCL_EXPLICIT_SIMD_PLUGIN__=true
++                        -DLibFFI_INCLUDE_DIR=${LibFFI_INCLUDE_DIR}
+                         -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+       BUILD_BYPRODUCTS  ${LIBCM} ${LIBIGFXCMRT_EMU}
+     )
+diff --git a/sycl/plugins/level_zero/CMakeLists.txt 
b/sycl/plugins/level_zero/CMakeLists.txt
+index 9391ff1e5..aa823e8fa 100755
+--- a/sycl/plugins/level_zero/CMakeLists.txt
++++ b/sycl/plugins/level_zero/CMakeLists.txt
+@@ -82,7 +82,7 @@ else()
+       COMMAND
+         ${CMAKE_COMMAND} -E copy ${LEVEL_ZERO_LIBRARY_SRC} 
${LLVM_LIBRARY_OUTPUT_INTDIR}
+       COMMAND
+-        ${CMAKE_COMMAND} -E copy_directory ${LEVEL_ZERO_INCLUDE_DIR} 
${LLVM_BINARY_DIR}/include/sycl
++        ${CMAKE_COMMAND} -E copy_directory 
${LEVEL_ZERO_INCLUDE_DIR}/level_zero ${LLVM_BINARY_DIR}/include/sycl/level_zero
+       DEPENDS
+         ${LEVEL_ZERO_LIBRARY}
+           ${LEVEL_ZERO_INCLUDE_DIR}
+diff --git a/sycl/plugins/opencl/CMakeLists.txt 
b/sycl/plugins/opencl/CMakeLists.txt
+index 9943827e4..29fae166e 100644
+--- a/sycl/plugins/opencl/CMakeLists.txt
++++ b/sycl/plugins/opencl/CMakeLists.txt
+@@ -15,7 +15,7 @@ add_sycl_plugin(opencl
+     "${sycl_inc_dir}/sycl/detail/pi.h"
+     "pi_opencl.cpp"
+   LIBRARIES
+-    OpenCL-ICD
++    OpenCL
+ )
+ 
+ set_target_properties(pi_opencl PROPERTIES LINKER_LANGUAGE CXX)
+diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt
+index 23b161480..4a5c48625 100644
+--- a/sycl/source/CMakeLists.txt
++++ b/sycl/source/CMakeLists.txt
+@@ -82,7 +82,7 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME)
+   )
+   #TODO: Remove dependency on opencl headers.
+   target_link_libraries(${LIB_OBJ_NAME}
+-    PRIVATE OpenCL-Headers
++    PRIVATE OpenCL
+   )
+ 
+   find_package(Threads REQUIRED)
+diff --git a/sycl/tools/CMakeLists.txt b/sycl/tools/CMakeLists.txt
+index eb62c48e1..6a7ff9aef 100644
+--- a/sycl/tools/CMakeLists.txt
++++ b/sycl/tools/CMakeLists.txt
+@@ -38,9 +38,8 @@ endif()
+ 
+ target_link_libraries(get_device_count_by_type
+   PRIVATE
+-    OpenCL-Headers
++    OpenCL
+     LevelZeroLoader::Headers
+-    OpenCL-ICD
+     ${LEVEL_ZERO_LIBRARY}
+     # The CUDA and HIP for NVIDA plugins need cudadrv
+     
$<$<OR:$<BOOL:${SYCL_BUILD_PI_CUDA}>,$<AND:$<BOOL:${SYCL_BUILD_PI_HIP}>,$<STREQUAL:${SYCL_BUILD_PI_HIP_PLATFORM},NVIDIA>>>:cudadrv>
+diff --git a/sycl/tools/sycl-ls/CMakeLists.txt 
b/sycl/tools/sycl-ls/CMakeLists.txt
+index f5909cf49..f9c52e3a3 100644
+--- a/sycl/tools/sycl-ls/CMakeLists.txt
++++ b/sycl/tools/sycl-ls/CMakeLists.txt
+@@ -11,7 +11,7 @@ endif()
+ target_link_libraries(sycl-ls
+   PRIVATE
+     ${sycl_lib}
+-    OpenCL-Headers
++    OpenCL
+ )
+ install(TARGETS sycl-ls
+   RUNTIME DESTINATION "bin" COMPONENT sycl-ls)
+diff --git a/sycl/tools/sycl-prof/CMakeLists.txt 
b/sycl/tools/sycl-prof/CMakeLists.txt
+index 09586c1b8..ff708db67 100644
+--- a/sycl/tools/sycl-prof/CMakeLists.txt
++++ b/sycl/tools/sycl-prof/CMakeLists.txt
+@@ -16,7 +16,7 @@ add_library(sycl_profiler_collector SHARED collector.cpp)
+ target_compile_definitions(sycl_profiler_collector PRIVATE 
XPTI_CALLBACK_API_EXPORTS)
+ target_link_libraries(sycl_profiler_collector PRIVATE xptifw)
+ if (TARGET OpenCL-Headers)
+-  target_link_libraries(sycl_profiler_collector PRIVATE OpenCL-Headers)
++  target_link_libraries(sycl_profiler_collector PRIVATE OpenCL)
+ endif()
+ target_include_directories(sycl_profiler_collector PRIVATE
+     "${sycl_inc_dir}"
+diff --git a/sycl/tools/sycl-sanitize/CMakeLists.txt 
b/sycl/tools/sycl-sanitize/CMakeLists.txt
+index 16e7a1a49..e27b2cb21 100644
+--- a/sycl/tools/sycl-sanitize/CMakeLists.txt
++++ b/sycl/tools/sycl-sanitize/CMakeLists.txt
+@@ -14,7 +14,7 @@ add_library(sycl_sanitizer_collector SHARED collector.cpp)
+ target_compile_definitions(sycl_sanitizer_collector PRIVATE 
XPTI_CALLBACK_API_EXPORTS)
+ target_link_libraries(sycl_sanitizer_collector PRIVATE xptifw)
+ if (TARGET OpenCL-Headers)
+-  target_link_libraries(sycl_sanitizer_collector PRIVATE OpenCL-Headers)
++  target_link_libraries(sycl_sanitizer_collector PRIVATE OpenCL)
+ endif()
+ 
+ target_include_directories(sycl_sanitizer_collector PRIVATE
+diff --git a/sycl/tools/sycl-trace/CMakeLists.txt 
b/sycl/tools/sycl-trace/CMakeLists.txt
+index 385a348f6..721e29125 100644
+--- a/sycl/tools/sycl-trace/CMakeLists.txt
++++ b/sycl/tools/sycl-trace/CMakeLists.txt
+@@ -46,7 +46,7 @@ add_custom_target(ze-pretty-printers
+ target_compile_definitions(sycl_pi_trace_collector PRIVATE 
XPTI_CALLBACK_API_EXPORTS)
+ target_link_libraries(sycl_pi_trace_collector PRIVATE xptifw)
+ if (TARGET OpenCL-Headers)
+-  target_link_libraries(sycl_pi_trace_collector PRIVATE OpenCL-Headers)
++  target_link_libraries(sycl_pi_trace_collector PRIVATE OpenCL)
+ endif()
+ 
+ target_include_directories(sycl_pi_trace_collector PRIVATE

diff --git a/sys-devel/DPC++/metadata.xml b/sys-devel/DPC++/metadata.xml
new file mode 100644
index 000000000..771c45a25
--- /dev/null
+++ b/sys-devel/DPC++/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="project">
+               <email>[email protected]</email>
+               <name>Gentoo Science Project</name>
+       </maintainer>
+       <upstream>
+               <remote-id type="github">intel/llvm</remote-id>
+       </upstream>
+       <use>
+               <flag name="cuda">use the cuda backend</flag>
+               <flag name="esimd_emulator">enable ESIMD CPU emulation</flag>
+               <flag name="hip">use the HIP backend</flag>
+       </use>
+</pkgmetadata>

Reply via email to