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>
