aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-devel/DPC++/DPC++-2022.12.ebuild')
-rw-r--r--sys-devel/DPC++/DPC++-2022.12.ebuild184
1 files changed, 184 insertions, 0 deletions
diff --git a/sys-devel/DPC++/DPC++-2022.12.ebuild b/sys-devel/DPC++/DPC++-2022.12.ebuild
new file mode 100644
index 000000000..be9a59fec
--- /dev/null
+++ b/sys-devel/DPC++/DPC++-2022.12.ebuild
@@ -0,0 +1,184 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..12} )
+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.10.0" # Newer versions cause compile failure
+UR_COMMIT="fd711c920acc4434cb52ff18b078c082d9d7f44d"
+
+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
+ https://github.com/oneapi-src/unified-runtime/archive/${UR_COMMIT}.tar.gz -> ${P}-unified-runtime-${UR_COMMIT}.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/6" # Based on libsycl.so
+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
+ dev-build/libtool
+ esimd_emulator? ( dev-libs/libffi:= )
+ cuda? ( dev-util/nvidia-cuda-toolkit:= )
+ hip? ( dev-util/hip:= )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}/${P}-system-libs.patch"
+ "${FILESDIR}/${P}-gcc13.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}"
+ -DUNIFIED_RUNTIME_SOURCE_DIR="${WORKDIR}/unified-runtime-${UR_COMMIT}"
+ # 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
+
+ # Convienence symlinks
+ dosym "${LLVM_INTEL_DIR}/bin/clang" "/usr/bin/icx"
+ dosym "${LLVM_INTEL_DIR}/bin/clang++" "/usr/bin/icpx"
+
+ # 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_
+}