diff options
author | bartus | 2018-03-11 11:40:42 +0100 |
---|---|---|
committer | bartus | 2018-03-11 11:40:42 +0100 |
commit | 60cf727d906383059f7a4886a8830d8480e0d59b (patch) | |
tree | 9ecb90987b6370fc1e9cfe9df9fe8abbf23d6eee | |
parent | ea19020d24ad6050c98fc49c5707972550001f67 (diff) | |
download | aur-60cf727d906383059f7a4886a8830d8480e0d59b.tar.gz |
use cmake internal SelectCudaCompyteArch
-rw-r--r-- | .SRCINFO | 6 | ||||
-rw-r--r-- | PKGBUILD | 8 | ||||
-rw-r--r-- | SelectCudaComputeArch.cmake.patch | 232 | ||||
-rw-r--r-- | SelectCudaComputeArch.patch | 15 |
4 files changed, 22 insertions, 239 deletions
@@ -1,6 +1,6 @@ pkgbase = blender-2.8-git pkgdesc = Development version of Blender 2.8 branch - pkgver = 2.8_r74298.2adece9fbb6 + pkgver = 2.8_r74406.7ecc7c46af4 pkgrel = 1 url = http://blender.org/ install = blender.install @@ -38,7 +38,7 @@ pkgbase = blender-2.8-git source = blender-translations.git::git://git.blender.org/blender-translations.git source = blender-dev-tools.git::git://git.blender.org/blender-dev-tools.git source = blender-2.8.desktop - source = SelectCudaComputeArch.cmake.patch + source = SelectCudaComputeArch.patch source = openvdb4.revert.patch md5sums = SKIP md5sums = SKIP @@ -46,7 +46,7 @@ pkgbase = blender-2.8-git md5sums = SKIP md5sums = SKIP md5sums = cd108dca1c77607c6a7cc45aa284ea97 - md5sums = d1ee53ea71d0617c28caba2774eaf3e0 + md5sums = 9454ff7e994f72ead5027356e227cbd2 md5sums = 449373d2fdf2af6b357101fc10e3d573 pkgname = blender-2.8-git @@ -2,7 +2,7 @@ pkgname=blender-2.8-git -pkgver=2.8_r74298.2adece9fbb6 +pkgver=2.8_r74406.7ecc7c46af4 pkgrel=1 pkgdesc="Development version of Blender 2.8 branch" arch=('i686' 'x86_64') @@ -27,7 +27,7 @@ source=('git://git.blender.org/blender.git#branch=blender2.8' \ 'blender-translations.git::git://git.blender.org/blender-translations.git' \ 'blender-dev-tools.git::git://git.blender.org/blender-dev-tools.git' \ blender-2.8.desktop \ - SelectCudaComputeArch.cmake.patch \ + SelectCudaComputeArch.patch \ openvdb4.revert.patch) md5sums=('SKIP' 'SKIP' @@ -35,7 +35,7 @@ md5sums=('SKIP' 'SKIP' 'SKIP' 'cd108dca1c77607c6a7cc45aa284ea97' - 'd1ee53ea71d0617c28caba2774eaf3e0' + '9454ff7e994f72ead5027356e227cbd2' '449373d2fdf2af6b357101fc10e3d573') # determine whether we can precompile CUDA kernels @@ -56,7 +56,7 @@ prepare() { git submodule update --init --recursive git submodule foreach git checkout master git submodule foreach git pull --rebase origin master -# patch -Np1 -i ../SelectCudaComputeArch.cmake.patch + patch -Np1 -i ../SelectCudaComputeArch.patch patch -Np1 -i ../openvdb4.revert.patch } diff --git a/SelectCudaComputeArch.cmake.patch b/SelectCudaComputeArch.cmake.patch index 9e0cead49008..94139e29da66 100644 --- a/SelectCudaComputeArch.cmake.patch +++ b/SelectCudaComputeArch.cmake.patch @@ -1,234 +1,3 @@ -diff --git a/build_files/cmake/SelectCudaComputeArch.cmake b/build_files/cmake/SelectCudaComputeArch.cmake -new file mode 100644 -index 00000000000..c3bf8639460 ---- /dev/null -+++ b/build_files/cmake/SelectCudaComputeArch.cmake -@@ -0,0 +1,225 @@ -+# CMake - Cross Platform Makefile Generator -+# Copyright 2000-2017 Kitware, Inc. and Contributors -+# All rights reserved. -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions -+# are met: -+# -+# * Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# -+# * Redistributions in binary form must reproduce the above copyright -+# notice, this list of conditions and the following disclaimer in the -+# documentation and/or other materials provided with the distribution. -+# -+# * Neither the name of Kitware, Inc. nor the names of Contributors -+# may be used to endorse or promote products derived from this -+# software without specific prior written permission. -+# -+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ -+# Synopsis: -+# CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable [target_CUDA_architectures]) -+# -- Selects GPU arch flags for nvcc based on target_CUDA_architectures -+# target_CUDA_architectures : Auto | Common | All | LIST(ARCH_AND_PTX ...) -+# - "Auto" detects local machine GPU compute arch at runtime. -+# - "Common" and "All" cover common and entire subsets of architectures -+# ARCH_AND_PTX : NAME | NUM.NUM | NUM.NUM(NUM.NUM) | NUM.NUM+PTX -+# NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal -+# NUM: Any number. Only those pairs are currently accepted by NVCC though: -+# 2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2 -+# Returns LIST of flags to be added to CUDA_NVCC_FLAGS in ${out_variable} -+# Additionally, sets ${out_variable}_readable to the resulting numeric list -+# Example: -+# CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS 3.0 3.5+PTX 5.2(5.0) Maxwell) -+# LIST(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS}) -+# -+# More info on CUDA architectures: https://en.wikipedia.org/wiki/CUDA -+# -+ -+# This list will be used for CUDA_ARCH_NAME = All option -+set(CUDA_KNOWN_GPU_ARCHITECTURES "Fermi" "Kepler" "Maxwell") -+ -+# This list will be used for CUDA_ARCH_NAME = Common option (enabled by default) -+set(CUDA_COMMON_GPU_ARCHITECTURES "3.0" "3.5" "5.0") -+ -+if (CUDA_VERSION VERSION_GREATER "6.5") -+ list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Kepler+Tegra" "Kepler+Tesla" "Maxwell+Tegra") -+ list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "5.2") -+endif () -+ -+if (CUDA_VERSION VERSION_GREATER "7.5") -+ list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Pascal") -+ list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "6.0" "6.1" "6.1+PTX") -+else() -+ list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "5.2+PTX") -+endif () -+ -+ -+ -+################################################################################################ -+# A function for automatic detection of GPUs installed (if autodetection is enabled) -+# Usage: -+# CUDA_DETECT_INSTALLED_GPUS(OUT_VARIABLE) -+# -+function(CUDA_DETECT_INSTALLED_GPUS OUT_VARIABLE) -+ if(NOT CUDA_GPU_DETECT_OUTPUT) -+ set(cufile ${PROJECT_BINARY_DIR}/detect_cuda_archs.cu) -+ -+ file(WRITE ${cufile} "" -+ "#include <cstdio>\n" -+ "int main()\n" -+ "{\n" -+ " int count = 0;\n" -+ " if (cudaSuccess != cudaGetDeviceCount(&count)) return -1;\n" -+ " if (count == 0) return -1;\n" -+ " for (int device = 0; device < count; ++device)\n" -+ " {\n" -+ " cudaDeviceProp prop;\n" -+ " if (cudaSuccess == cudaGetDeviceProperties(&prop, device))\n" -+ " std::printf(\"%d.%d \", prop.major, prop.minor);\n" -+ " }\n" -+ " return 0;\n" -+ "}\n") -+ -+ execute_process(COMMAND "${CUDA_NVCC_EXECUTABLE}" "--run" "${cufile}" -+ WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/CMakeFiles/" -+ RESULT_VARIABLE nvcc_res OUTPUT_VARIABLE nvcc_out -+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) -+ -+ if(nvcc_res EQUAL 0) -+ string(REPLACE "2.1" "2.1(2.0)" nvcc_out "${nvcc_out}") -+ set(CUDA_GPU_DETECT_OUTPUT ${nvcc_out} CACHE INTERNAL "Returned GPU architetures from detect_gpus tool" FORCE) -+ endif() -+ endif() -+ -+ if(NOT CUDA_GPU_DETECT_OUTPUT) -+ message(STATUS "Automatic GPU detection failed. Building for common architectures.") -+ set(${OUT_VARIABLE} ${CUDA_COMMON_GPU_ARCHITECTURES} PARENT_SCOPE) -+ else() -+ set(${OUT_VARIABLE} ${CUDA_GPU_DETECT_OUTPUT} PARENT_SCOPE) -+ endif() -+endfunction() -+ -+ -+################################################################################################ -+# Function for selecting GPU arch flags for nvcc based on CUDA architectures from parameter list -+# Usage: -+# SELECT_NVCC_ARCH_FLAGS(out_variable [list of CUDA compute archs]) -+function(CUDA_SELECT_NVCC_ARCH_FLAGS out_variable) -+ set(CUDA_ARCH_LIST "${ARGN}") -+ -+ if("X${CUDA_ARCH_LIST}" STREQUAL "X" ) -+ set(CUDA_ARCH_LIST "Auto") -+ endif() -+ -+ set(cuda_arch_bin) -+ set(cuda_arch_ptx) -+ -+ if("${CUDA_ARCH_LIST}" STREQUAL "All") -+ set(CUDA_ARCH_LIST ${CUDA_KNOWN_GPU_ARCHITECTURES}) -+ elseif("${CUDA_ARCH_LIST}" STREQUAL "Common") -+ set(CUDA_ARCH_LIST ${CUDA_COMMON_GPU_ARCHITECTURES}) -+ elseif("${CUDA_ARCH_LIST}" STREQUAL "Auto") -+ CUDA_DETECT_INSTALLED_GPUS(CUDA_ARCH_LIST) -+ endif() -+ -+ # Now process the list and look for names -+ string(REGEX REPLACE "[ \t]+" ";" CUDA_ARCH_LIST "${CUDA_ARCH_LIST}") -+ list(REMOVE_DUPLICATES CUDA_ARCH_LIST) -+ foreach(arch_name ${CUDA_ARCH_LIST}) -+ set(arch_bin) -+ set(add_ptx FALSE) -+ # Check to see if we are compiling PTX -+ if(arch_name MATCHES "(.*)\\+PTX$") -+ set(add_ptx TRUE) -+ set(arch_name ${CMAKE_MATCH_1}) -+ endif() -+ if(arch_name MATCHES "^([0-9]\\.[0-9](\\([0-9]\\.[0-9]\\))?)$") -+ set(arch_bin ${CMAKE_MATCH_1}) -+ set(arch_ptx ${arch_bin}) -+ else() -+ # Look for it in our list of known architectures -+ if(${arch_name} STREQUAL "Fermi") -+ set(arch_bin 2.0 "2.1(2.0)") -+ elseif(${arch_name} STREQUAL "Kepler+Tegra") -+ set(arch_bin 3.2) -+ elseif(${arch_name} STREQUAL "Kepler+Tesla") -+ set(arch_bin 3.7) -+ elseif(${arch_name} STREQUAL "Kepler") -+ set(arch_bin 3.0 3.5) -+ set(arch_ptx 3.5) -+ elseif(${arch_name} STREQUAL "Maxwell+Tegra") -+ set(arch_bin 5.3) -+ elseif(${arch_name} STREQUAL "Maxwell") -+ set(arch_bin 5.0 5.2) -+ set(arch_ptx 5.2) -+ elseif(${arch_name} STREQUAL "Pascal") -+ set(arch_bin 6.0 6.1) -+ set(arch_ptx 6.1) -+ else() -+ message(SEND_ERROR "Unknown CUDA Architecture Name ${arch_name} in CUDA_SELECT_NVCC_ARCH_FLAGS") -+ endif() -+ endif() -+ if(NOT arch_bin) -+ message(SEND_ERROR "arch_bin wasn't set for some reason") -+ endif() -+ list(APPEND cuda_arch_bin ${arch_bin}) -+ if(add_ptx) -+ if (NOT arch_ptx) -+ set(arch_ptx ${arch_bin}) -+ endif() -+ list(APPEND cuda_arch_ptx ${arch_ptx}) -+ endif() -+ endforeach() -+ -+ # remove dots and convert to lists -+ string(REGEX REPLACE "\\." "" cuda_arch_bin "${cuda_arch_bin}") -+ string(REGEX REPLACE "\\." "" cuda_arch_ptx "${cuda_arch_ptx}") -+ string(REGEX MATCHALL "[0-9()]+" cuda_arch_bin "${cuda_arch_bin}") -+ string(REGEX MATCHALL "[0-9]+" cuda_arch_ptx "${cuda_arch_ptx}") -+ -+ if(cuda_arch_bin) -+ list(REMOVE_DUPLICATES cuda_arch_bin) -+ endif() -+ if(cuda_arch_ptx) -+ list(REMOVE_DUPLICATES cuda_arch_ptx) -+ endif() -+ -+ set(nvcc_flags "") -+ set(nvcc_archs_readable "") -+ -+ # Tell NVCC to add binaries for the specified GPUs -+ foreach(arch ${cuda_arch_bin}) -+ if(arch MATCHES "([0-9]+)\\(([0-9]+)\\)") -+ # User explicitly specified ARCH for the concrete CODE -+ list(APPEND nvcc_flags -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1}) -+ list(APPEND nvcc_archs_readable sm_${CMAKE_MATCH_1}) -+ else() -+ # User didn't explicitly specify ARCH for the concrete CODE, we assume ARCH=CODE -+ list(APPEND nvcc_flags -gencode arch=compute_${arch},code=sm_${arch}) -+ list(APPEND nvcc_archs_readable sm_${arch}) -+ endif() -+ endforeach() -+ -+ # Tell NVCC to add PTX intermediate code for the specified architectures -+ foreach(arch ${cuda_arch_ptx}) -+ list(APPEND nvcc_flags -gencode arch=compute_${arch},code=compute_${arch}) -+ list(APPEND nvcc_archs_readable compute_${arch}) -+ endforeach() -+ -+ string(REPLACE ";" " " nvcc_archs_readable "${nvcc_archs_readable}") -+ set(${out_variable} ${nvcc_flags} PARENT_SCOPE) -+ set(${out_variable}_readable ${nvcc_archs_readable} PARENT_SCOPE) -+endfunction() diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake index df88b91f5ac..4b3335122b2 100644 --- a/intern/cycles/cmake/external_libs.cmake @@ -238,7 +7,6 @@ index df88b91f5ac..4b3335122b2 100644 if(CUDA_FOUND) message(STATUS "CUDA nvcc = ${CUDA_NVCC_EXECUTABLE}") + -+ include(${CMAKE_SOURCE_DIR}/build_files/cmake/SelectCudaComputeArch.cmake) + CUDA_SELECT_NVCC_ARCH_FLAGS(CUDA_ARCH_FLAGS Auto) + set(CYCLES_CUDA_BINARIES_ARCH "${CUDA_ARCH_FLAGS_readable}") + message(STATUS "Enabling CUDA support (version: ${CUDA_VERSION_STRING}," diff --git a/SelectCudaComputeArch.patch b/SelectCudaComputeArch.patch new file mode 100644 index 000000000000..540d50f0bcc3 --- /dev/null +++ b/SelectCudaComputeArch.patch @@ -0,0 +1,15 @@ +diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake +index 8d04025e6fd..a6949c99f60 100644 +--- a/intern/cycles/cmake/external_libs.cmake ++++ b/intern/cycles/cmake/external_libs.cmake +@@ -41,6 +41,10 @@ if(WITH_CYCLES_CUDA_BINARIES OR NOT WITH_CUDA_DYNLOAD) + find_package(CUDA) # Try to auto locate CUDA toolkit + if(CUDA_FOUND) + message(STATUS "CUDA nvcc = ${CUDA_NVCC_EXECUTABLE}") ++ CUDA_SELECT_NVCC_ARCH_FLAGS(CUDA_ARCH_FLAGS Auto) ++ set(CYCLES_CUDA_BINARIES_ARCH "${CUDA_ARCH_FLAGS_readable}") ++ message(STATUS "Enabling CUDA support (version: ${CUDA_VERSION_STRING}," ++ " archs: ${CUDA_ARCH_FLAGS_readable})") + else() + message(STATUS "CUDA compiler not found, disabling WITH_CYCLES_CUDA_BINARIES") + set(WITH_CYCLES_CUDA_BINARIES OFF) |