diff --git a/dev-cpp/eigen/eigen-3.4.9999.ebuild b/dev-cpp/eigen/eigen-3.4.9999.ebuild index 7aeca7b126824..21ac6c0a075a1 100644 --- a/dev-cpp/eigen/eigen-3.4.9999.ebuild +++ b/dev-cpp/eigen/eigen-3.4.9999.ebuild @@ -114,6 +114,10 @@ REQUIRED_USE=" ) test? ( || ( ${IUSE_TEST_BACKENDS[*]} ) + cuda-clang? ( + !openmp + ${LLVM_REQUIRED_USE} + ) ) " @@ -193,7 +197,8 @@ DEPEND=" ) cuda-clang? ( $(llvm_gen_dep ' - llvm-core/clang:${LLVM_SLOT}[llvm_targets_NVPTX] + llvm-core/clang:${LLVM_SLOT} + llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp] ') ) ) @@ -239,16 +244,13 @@ cuda_set_CUDAHOSTCXX() { break fi CUDAHOSTCXX_test="$( - dirname "$( - realpath "$( - which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")" - )" - )" + which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")" )" version="<${version}" do ! echo "int main(){}" | nvcc "-ccbin ${CUDAHOSTCXX_test}" - -x cu &>/dev/null; done export CUDAHOSTCXX + echo "${CUDAHOSTCXX}" } pkg_pretend() { @@ -368,6 +370,14 @@ src_configure() { -DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions -DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default). + $(cmake_use_find_package adolc Adolc) $(cmake_use_find_package boost Boost) $(cmake_use_find_package cholmod CHOLMOD) @@ -437,48 +447,59 @@ src_configure() { ) fi - mycmakeargs+=( - -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests - -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests - - -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. - - # -DEIGEN_TEST_SYCL=no # Add Sycl support. - # -DEIGEN_SYCL_TRISYCL=no # Use the triSYCL Sycl implementation (ComputeCPP by default). - ) - if use cuda; then cuda_add_sandbox -w + if use cuda-clang; then local llvm_prefix llvm_prefix="$(get_llvm_prefix -b)" - export CC="${llvm_prefix}/bin/clang" - export CXX="${llvm_prefix}/bin/clang++" - export LIBRARY_PATH="${ESYSROOT}/usr/$(get_libdir)" + + # NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with + # error: unrecognized command-line option + if ! tc-is-clang; then + export CC="${CHOST}-clang-${LLVM_SLOT}" + export CXX="${CHOST}-clang++-${LLVM_SLOT}" + fi + + NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc" + mycmakeargs+=( - -DCUDA_HOST_COMPILER="${llvm_prefix}/bin/clang++" + -DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}" ) else cuda_set_CUDAHOSTCXX + mycmakeargs+=( -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" ) + if [[ -v CUDACXX ]]; then + mycmakeargs+=( + -DCUDA_NVCC_EXECUTABLE="${CUDACXX}" + -DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA + ) + fi fi + if [[ "${CUDA_VERBOSE}" == true ]]; then mycmakeargs+=( - -DCUDA_VERBOSE_BUILD=yes + -DCUDA_VERBOSE_BUILD="yes" ) NVCCFLAGS+=" -v" fi - export CUDAFLAGS="${NVCCFLAGS}" - - [[ -z "${CUDAARCHS}" ]] && einfo "trying to determine host CUDAARCHS" - : "${CUDAARCHS:=$(__nvcc_device_query)}" - export CUDAARCHS + if [[ -v CUDAARCHS ]]; then + mycmakeargs+=( + # TODO this needs to be lowest first for eigen + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + # CUDAFLAGS is used by cmake + # NVCCFLAGS is used by cuda.eclass mycmakeargs+=( - -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + -DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}" + + -DCUDA_USE_STATIC_CUDA_RUNTIME="no" ) fi diff --git a/dev-cpp/eigen/eigen-9999.ebuild b/dev-cpp/eigen/eigen-9999.ebuild index a7da9aab56530..5eccde3fc263e 100644 --- a/dev-cpp/eigen/eigen-9999.ebuild +++ b/dev-cpp/eigen/eigen-9999.ebuild @@ -114,6 +114,10 @@ REQUIRED_USE=" ) test? ( || ( ${IUSE_TEST_BACKENDS[*]} ) + cuda-clang? ( + !openmp + ${LLVM_REQUIRED_USE} + ) ) " @@ -193,7 +197,8 @@ DEPEND=" ) cuda-clang? ( $(llvm_gen_dep ' - llvm-core/clang:${LLVM_SLOT}[llvm_targets_NVPTX] + llvm-core/clang:${LLVM_SLOT} + llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp] ') ) ) @@ -236,16 +241,13 @@ cuda_set_CUDAHOSTCXX() { break fi CUDAHOSTCXX_test="$( - dirname "$( - realpath "$( - which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")" - )" - )" + which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")" )" version="<${version}" do ! echo "int main(){}" | nvcc "-ccbin ${CUDAHOSTCXX_test}" - -x cu &>/dev/null; done export CUDAHOSTCXX + echo "${CUDAHOSTCXX}" } pkg_pretend() { @@ -367,6 +369,14 @@ src_configure() { -DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions -DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default). + $(cmake_use_find_package adolc Adolc) $(cmake_use_find_package boost Boost) $(cmake_use_find_package cholmod CHOLMOD) @@ -439,48 +449,59 @@ src_configure() { ) fi - mycmakeargs+=( - -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests - -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests - - -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. - - # -DEIGEN_TEST_SYCL=no # Add Sycl support. - # -DEIGEN_SYCL_TRISYCL=no # Use the triSYCL Sycl implementation (ComputeCPP by default). - ) - if use cuda; then cuda_add_sandbox -w + if use cuda-clang; then local llvm_prefix llvm_prefix="$(get_llvm_prefix -b)" - export CC="${llvm_prefix}/bin/clang" - export CXX="${llvm_prefix}/bin/clang++" - export LIBRARY_PATH="${ESYSROOT}/usr/$(get_libdir)" + + # NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with + # error: unrecognized command-line option + if ! tc-is-clang; then + export CC="${CHOST}-clang-${LLVM_SLOT}" + export CXX="${CHOST}-clang++-${LLVM_SLOT}" + fi + + NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc" + mycmakeargs+=( - -DCUDA_HOST_COMPILER="${llvm_prefix}/bin/clang++" + -DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}" ) else cuda_set_CUDAHOSTCXX + mycmakeargs+=( -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" ) + if [[ -v CUDACXX ]]; then + mycmakeargs+=( + -DCUDA_NVCC_EXECUTABLE="${CUDACXX}" + -DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA + ) + fi fi + if [[ "${CUDA_VERBOSE}" == true ]]; then mycmakeargs+=( - -DCUDA_VERBOSE_BUILD=yes + -DCUDA_VERBOSE_BUILD="yes" ) NVCCFLAGS+=" -v" fi - export CUDAFLAGS="${NVCCFLAGS}" - - [[ -z "${CUDAARCHS}" ]] && einfo "trying to determine host CUDAARCHS" - : "${CUDAARCHS:=$(__nvcc_device_query)}" - export CUDAARCHS + if [[ -v CUDAARCHS ]]; then + mycmakeargs+=( + # TODO this needs to be lowest first for eigen + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + # CUDAFLAGS is used by cmake + # NVCCFLAGS is used by cuda.eclass mycmakeargs+=( - -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + -DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}" + + -DCUDA_USE_STATIC_CUDA_RUNTIME="no" ) fi diff --git a/dev-cpp/eigen/metadata.xml b/dev-cpp/eigen/metadata.xml index 0bc2f84f498ce..17014deef36d9 100644 --- a/dev-cpp/eigen/metadata.xml +++ b/dev-cpp/eigen/metadata.xml @@ -17,14 +17,14 @@ providing optimal speed with GCC. - Use clang for cuda units compilation - Use clang for cuda units compilation - Enable HIP GPU computing support Add test support for Adolc (sci-libs/adolc) Build the Eigen Blas library Add test support for Boost.Multiprecision (dev-libs/boost) Add test support for CHOLMOD (sci-libs/cholmod) + Use clang for cuda units compilation + Use clang for cuda units compilation Add test support for fftw (sci-libs/fftw) + Enable HIP GPU computing support Add test support for KLU (sci-libs/klu) Build the included Eigen LAPACK library Use MathJax for rendering math in HTML docs (dev-libs/mathjax)