Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
06c1f9a3
Commit
06c1f9a3
authored
Oct 28, 2013
by
Vladislav Vinogradov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added own version of FindCUDA.cmake
parent
e5947f58
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
206 additions
and
185 deletions
+206
-185
FindCUDA.cmake
cmake/FindCUDA.cmake
+0
-0
make2cmake.cmake
cmake/FindCUDA/make2cmake.cmake
+93
-0
parse_cubin.cmake
cmake/FindCUDA/parse_cubin.cmake
+110
-0
run_nvcc.cmake
cmake/FindCUDA/run_nvcc.cmake
+0
-0
OpenCVDetectCUDA.cmake
cmake/OpenCVDetectCUDA.cmake
+3
-185
No files found.
cmake/FindCUDA.cmake
0 → 100644
View file @
06c1f9a3
This diff is collapsed.
Click to expand it.
cmake/FindCUDA/make2cmake.cmake
0 → 100644
View file @
06c1f9a3
# James Bigler, NVIDIA Corp (nvidia.com - jbigler)
# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
#
# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved.
#
# Copyright (c) 2007-2009
# Scientific Computing and Imaging Institute, University of Utah
#
# This code is licensed under the MIT License. See the FindCUDA.cmake script
# for the text of the license.
# The MIT License
#
# License for the specific language governing rights and limitations under
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
#######################################################################
# This converts a file written in makefile syntax into one that can be included
# by CMake.
file
(
READ
${
input_file
}
depend_text
)
if
(
${
depend_text
}
MATCHES
".+"
)
# message("FOUND DEPENDS")
# Remember, four backslashes is escaped to one backslash in the string.
string
(
REGEX REPLACE
"
\\\\
"
" "
depend_text
${
depend_text
}
)
# This works for the nvcc -M generated dependency files.
string
(
REGEX REPLACE
"^.* : "
""
depend_text
${
depend_text
}
)
string
(
REGEX REPLACE
"[
\\\\
]*
\n
"
";"
depend_text
${
depend_text
}
)
set
(
dependency_list
""
)
foreach
(
file
${
depend_text
}
)
string
(
REGEX REPLACE
"^ +"
""
file
${
file
}
)
# OK, now if we had a UNC path, nvcc has a tendency to only output the first '/'
# instead of '//'. Here we will test to see if the file exists, if it doesn't then
# try to prepend another '/' to the path and test again. If it still fails remove the
# path.
if
(
NOT EXISTS
"
${
file
}
"
)
if
(
EXISTS
"/
${
file
}
"
)
set
(
file
"/
${
file
}
"
)
else
()
message
(
WARNING
" Removing non-existent dependency file:
${
file
}
"
)
set
(
file
""
)
endif
()
endif
()
if
(
NOT IS_DIRECTORY
"
${
file
}
"
)
# If softlinks start to matter, we should change this to REALPATH. For now we need
# to flatten paths, because nvcc can generate stuff like /bin/../include instead of
# just /include.
get_filename_component
(
file_absolute
"
${
file
}
"
ABSOLUTE
)
list
(
APPEND dependency_list
"
${
file_absolute
}
"
)
endif
()
endforeach
()
else
()
# message("FOUND NO DEPENDS")
endif
()
# Remove the duplicate entries and sort them.
list
(
REMOVE_DUPLICATES dependency_list
)
list
(
SORT dependency_list
)
foreach
(
file
${
dependency_list
}
)
set
(
cuda_nvcc_depend
"
${
cuda_nvcc_depend
}
\"
${
file
}
\"\n
"
)
endforeach
()
file
(
WRITE
${
output_file
}
"# Generated by: make2cmake.cmake
\n
SET(CUDA_NVCC_DEPEND
\n
${
cuda_nvcc_depend
}
)
\n\n
"
)
cmake/FindCUDA/parse_cubin.cmake
0 → 100644
View file @
06c1f9a3
# James Bigler, NVIDIA Corp (nvidia.com - jbigler)
# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
#
# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved.
#
# Copyright (c) 2007-2009
# Scientific Computing and Imaging Institute, University of Utah
#
# This code is licensed under the MIT License. See the FindCUDA.cmake script
# for the text of the license.
# The MIT License
#
# License for the specific language governing rights and limitations under
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
#######################################################################
# Parses a .cubin file produced by nvcc and reports statistics about the file.
file
(
READ
${
input_file
}
file_text
)
if
(
${
file_text
}
MATCHES
".+"
)
# Remember, four backslashes is escaped to one backslash in the string.
string
(
REGEX REPLACE
";"
"
\\\\
;"
file_text
${
file_text
}
)
string
(
REGEX REPLACE
"
\n
code"
";code"
file_text
${
file_text
}
)
list
(
LENGTH file_text len
)
foreach
(
line
${
file_text
}
)
# Only look at "code { }" blocks.
if
(
line MATCHES
"^code"
)
# Break into individual lines.
string
(
REGEX REPLACE
"
\n
"
";"
line
${
line
}
)
foreach
(
entry
${
line
}
)
# Extract kernel names.
if
(
${
entry
}
MATCHES
"[^g]name = ([^ ]+)"
)
string
(
REGEX REPLACE
".* = ([^ ]+)"
"
\\
1"
entry
${
entry
}
)
# Check to see if the kernel name starts with "_"
set
(
skip FALSE
)
# if (${entry} MATCHES "^_")
# Skip the rest of this block.
# message("Skipping ${entry}")
# set(skip TRUE)
# else ()
message
(
"Kernel:
${
entry
}
"
)
# endif ()
endif
()
# Skip the rest of the block if necessary
if
(
NOT skip
)
# Registers
if
(
${
entry
}
MATCHES
"reg([ ]+)=([ ]+)([^ ]+)"
)
string
(
REGEX REPLACE
".*([ ]+)=([ ]+)([^ ]+)"
"
\\
3"
entry
${
entry
}
)
message
(
"Registers:
${
entry
}
"
)
endif
()
# Local memory
if
(
${
entry
}
MATCHES
"lmem([ ]+)=([ ]+)([^ ]+)"
)
string
(
REGEX REPLACE
".*([ ]+)=([ ]+)([^ ]+)"
"
\\
3"
entry
${
entry
}
)
message
(
"Local:
${
entry
}
"
)
endif
()
# Shared memory
if
(
${
entry
}
MATCHES
"smem([ ]+)=([ ]+)([^ ]+)"
)
string
(
REGEX REPLACE
".*([ ]+)=([ ]+)([^ ]+)"
"
\\
3"
entry
${
entry
}
)
message
(
"Shared:
${
entry
}
"
)
endif
()
if
(
${
entry
}
MATCHES
"^}"
)
message
(
""
)
endif
()
endif
()
endforeach
()
endif
()
endforeach
()
else
()
# message("FOUND NO DEPENDS")
endif
()
cmake/FindCUDA/run_nvcc.cmake
0 → 100644
View file @
06c1f9a3
This diff is collapsed.
Click to expand it.
cmake/OpenCVDetectCUDA.cmake
View file @
06c1f9a3
...
...
@@ -13,6 +13,8 @@ if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Cl
return
()
endif
()
set
(
CMAKE_MODULE_PATH
"
${
OpenCV_SOURCE_DIR
}
/cmake"
${
CMAKE_MODULE_PATH
}
)
find_host_package
(
CUDA 4.2 QUIET
)
if
(
CUDA_FOUND
)
...
...
@@ -26,188 +28,8 @@ if(CUDA_FOUND)
set
(
HAVE_CUBLAS 1
)
endif
()
##############################################################################################
# Hack for CUDA >5.5 support
#
# The patch was submitted to CMake and might be available
# in the next CMake release.
#
# In the future we should check CMake version here, like
# if(CMAKE_VERSION VERSION_LESS "2.8.13")
set
(
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER
)
set
(
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER
)
set
(
CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER
)
if
(
NOT
"
${
CUDA_TOOLKIT_ROOT_DIR
}
"
STREQUAL
"
${
OPENCV_CUDA_TOOLKIT_ROOT_DIR_INTERNAL
}
"
)
unset
(
CUDA_TOOLKIT_TARGET_DIR CACHE
)
endif
()
if
(
CUDA_VERSION VERSION_GREATER
"5.0"
AND CMAKE_CROSSCOMPILING AND
${
CMAKE_SYSTEM_PROCESSOR
}
MATCHES
"arm"
AND EXISTS
"
${
CUDA_TOOLKIT_ROOT_DIR
}
/targets/armv7-linux-gnueabihf"
)
set
(
CUDA_TOOLKIT_TARGET_DIR
"
${
CUDA_TOOLKIT_ROOT_DIR
}
/targets/armv7-linux-gnueabihf"
CACHE PATH
"Toolkit target location."
)
else
()
set
(
CUDA_TOOLKIT_TARGET_DIR
"
${
CUDA_TOOLKIT_ROOT_DIR
}
"
CACHE PATH
"Toolkit target location."
)
endif
()
if
(
NOT
"
${
CUDA_TOOLKIT_TARGET_DIR
}
"
STREQUAL
"
${
OPENCV_CUDA_TOOLKIT_TARGET_DIR_INTERNAL
}
"
)
unset
(
CUDA_TOOLKIT_INCLUDE CACHE
)
unset
(
CUDA_CUDART_LIBRARY CACHE
)
unset
(
CUDA_CUDA_LIBRARY CACHE
)
unset
(
CUDA_cupti_LIBRARY CACHE
)
unset
(
CUDA_cublas_LIBRARY CACHE
)
unset
(
CUDA_cublasemu_LIBRARY CACHE
)
unset
(
CUDA_cufft_LIBRARY CACHE
)
unset
(
CUDA_cufftemu_LIBRARY CACHE
)
unset
(
CUDA_curand_LIBRARY CACHE
)
unset
(
CUDA_cusparse_LIBRARY CACHE
)
unset
(
CUDA_npp_LIBRARY CACHE
)
unset
(
CUDA_nppc_LIBRARY CACHE
)
unset
(
CUDA_nppi_LIBRARY CACHE
)
unset
(
CUDA_npps_LIBRARY CACHE
)
unset
(
CUDA_nvcuvenc_LIBRARY CACHE
)
unset
(
CUDA_nvcuvid_LIBRARY CACHE
)
endif
()
# CUDA_TOOLKIT_INCLUDE
find_path
(
CUDA_TOOLKIT_INCLUDE
device_functions.h
# Header included in toolkit
PATHS
"
${
CUDA_TOOLKIT_TARGET_DIR
}
"
"
${
CUDA_TOOLKIT_ROOT_DIR
}
"
ENV CUDA_PATH
ENV CUDA_INC_PATH
PATH_SUFFIXES include
NO_DEFAULT_PATH
)
# Search default search paths, after we search our own set of paths.
find_path
(
CUDA_TOOLKIT_INCLUDE device_functions.h
)
mark_as_advanced
(
CUDA_TOOLKIT_INCLUDE
)
macro
(
opencv_cuda_find_library_local_first_with_path_ext _var _names _doc _path_ext
)
if
(
CMAKE_SIZEOF_VOID_P EQUAL 8
)
# CUDA 3.2+ on Windows moved the library directories, so we need the new
# and old paths.
set
(
_cuda_64bit_lib_dir
"
${
_path_ext
}
lib/x64"
"
${
_path_ext
}
lib64"
"
${
_path_ext
}
libx64"
)
endif
()
# CUDA 3.2+ on Windows moved the library directories, so we need to new
# (lib/Win32) and the old path (lib).
find_library
(
${
_var
}
NAMES
${
_names
}
PATHS
"
${
CUDA_TOOLKIT_TARGET_DIR
}
"
"
${
CUDA_TOOLKIT_ROOT_DIR
}
"
ENV CUDA_PATH
ENV CUDA_LIB_PATH
PATH_SUFFIXES
${
_cuda_64bit_lib_dir
}
"
${
_path_ext
}
lib/Win32"
"
${
_path_ext
}
lib"
"
${
_path_ext
}
libWin32"
DOC
${
_doc
}
NO_DEFAULT_PATH
)
# Search default search paths, after we search our own set of paths.
find_library
(
${
_var
}
NAMES
${
_names
}
DOC
${
_doc
}
)
endmacro
()
macro
(
opencv_cuda_find_library_local_first _var _names _doc
)
opencv_cuda_find_library_local_first_with_path_ext
(
"
${
_var
}
"
"
${
_names
}
"
"
${
_doc
}
"
""
)
endmacro
()
macro
(
opencv_find_library_local_first _var _names _doc
)
opencv_cuda_find_library_local_first
(
"
${
_var
}
"
"
${
_names
}
"
"
${
_doc
}
"
""
)
endmacro
()
# CUDA_LIBRARIES
opencv_cuda_find_library_local_first
(
CUDA_CUDART_LIBRARY cudart
"
\"
cudart
\"
library"
)
if
(
CUDA_VERSION VERSION_EQUAL
"3.0"
)
# The cudartemu library only existed for the 3.0 version of CUDA.
opencv_cuda_find_library_local_first
(
CUDA_CUDARTEMU_LIBRARY cudartemu
"
\"
cudartemu
\"
library"
)
mark_as_advanced
(
CUDA_CUDARTEMU_LIBRARY
)
endif
()
# CUPTI library showed up in cuda toolkit 4.0
if
(
NOT CUDA_VERSION VERSION_LESS
"4.0"
)
opencv_cuda_find_library_local_first_with_path_ext
(
CUDA_cupti_LIBRARY cupti
"
\"
cupti
\"
library"
"extras/CUPTI/"
)
mark_as_advanced
(
CUDA_cupti_LIBRARY
)
endif
()
# If we are using emulation mode and we found the cudartemu library then use
# that one instead of cudart.
if
(
CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY
)
set
(
CUDA_LIBRARIES
${
CUDA_CUDARTEMU_LIBRARY
}
)
else
()
set
(
CUDA_LIBRARIES
${
CUDA_CUDART_LIBRARY
}
)
endif
()
if
(
APPLE
)
# We need to add the path to cudart to the linker using rpath, since the
# library name for the cuda libraries is prepended with @rpath.
if
(
CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY
)
get_filename_component
(
_cuda_path_to_cudart
"
${
CUDA_CUDARTEMU_LIBRARY
}
"
PATH
)
else
()
get_filename_component
(
_cuda_path_to_cudart
"
${
CUDA_CUDART_LIBRARY
}
"
PATH
)
endif
()
if
(
_cuda_path_to_cudart
)
list
(
APPEND CUDA_LIBRARIES -Wl,-rpath
"-Wl,
${
_cuda_path_to_cudart
}
"
)
endif
()
endif
()
# 1.1 toolkit on linux doesn't appear to have a separate library on
# some platforms.
opencv_cuda_find_library_local_first
(
CUDA_CUDA_LIBRARY cuda
"
\"
cuda
\"
library (older versions only)."
)
mark_as_advanced
(
CUDA_CUDA_LIBRARY
CUDA_CUDART_LIBRARY
)
#######################
# Look for some of the toolkit helper libraries
macro
(
OPENCV_FIND_CUDA_HELPER_LIBS _name
)
opencv_cuda_find_library_local_first
(
CUDA_
${
_name
}
_LIBRARY
${
_name
}
"
\"
${
_name
}
\"
library"
)
mark_as_advanced
(
CUDA_
${
_name
}
_LIBRARY
)
endmacro
()
# Search for additional CUDA toolkit libraries.
if
(
CUDA_VERSION VERSION_LESS
"3.1"
)
# Emulation libraries aren't available in version 3.1 onward.
opencv_find_cuda_helper_libs
(
cufftemu
)
opencv_find_cuda_helper_libs
(
cublasemu
)
endif
()
opencv_find_cuda_helper_libs
(
cufft
)
opencv_find_cuda_helper_libs
(
cublas
)
if
(
NOT CUDA_VERSION VERSION_LESS
"3.2"
)
# cusparse showed up in version 3.2
opencv_find_cuda_helper_libs
(
cusparse
)
opencv_find_cuda_helper_libs
(
curand
)
if
(
WIN32
)
opencv_find_cuda_helper_libs
(
nvcuvenc
)
opencv_find_cuda_helper_libs
(
nvcuvid
)
endif
()
endif
()
if
(
CUDA_VERSION VERSION_GREATER
"5.0"
)
# In CUDA 5.5 NPP was splitted onto 3 separate libraries.
opencv_find_cuda_helper_libs
(
nppc
)
opencv_find_cuda_helper_libs
(
nppi
)
opencv_find_cuda_helper_libs
(
npps
)
set
(
CUDA_npp_LIBRARY
"
${
CUDA_nppc_LIBRARY
}
;
${
CUDA_nppi_LIBRARY
}
;
${
CUDA_npps_LIBRARY
}
"
)
elseif
(
NOT CUDA_VERSION VERSION_LESS
"4.0"
)
opencv_find_cuda_helper_libs
(
npp
)
endif
()
if
(
CUDA_BUILD_EMULATION
)
set
(
CUDA_CUFFT_LIBRARIES
${
CUDA_cufftemu_LIBRARY
}
)
set
(
CUDA_CUBLAS_LIBRARIES
${
CUDA_cublasemu_LIBRARY
}
)
else
()
set
(
CUDA_CUFFT_LIBRARIES
${
CUDA_cufft_LIBRARY
}
)
set
(
CUDA_CUBLAS_LIBRARIES
${
CUDA_cublas_LIBRARY
}
)
endif
()
set
(
OPENCV_CUDA_TOOLKIT_ROOT_DIR_INTERNAL
"
${
CUDA_TOOLKIT_ROOT_DIR
}
"
CACHE INTERNAL
"This is the value of the last time CUDA_TOOLKIT_ROOT_DIR was set successfully."
FORCE
)
set
(
OPENCV_CUDA_TOOLKIT_TARGET_DIR_INTERNAL
"
${
CUDA_TOOLKIT_TARGET_DIR
}
"
CACHE INTERNAL
"This is the value of the last time CUDA_TOOLKIT_TARGET_DIR was set successfully."
FORCE
)
# Hack for CUDA >5.5 support
##############################################################################################
if
(
WITH_NVCUVID
)
opencv_
find_cuda_helper_libs
(
nvcuvid
)
find_cuda_helper_libs
(
nvcuvid
)
set
(
HAVE_NVCUVID 1
)
endif
()
...
...
@@ -307,10 +129,6 @@ if(CUDA_FOUND)
set
(
OPENCV_CUDA_ARCH_FEATURES
"
${
OPENCV_CUDA_ARCH_FEATURES
}
${
ARCH
}
"
)
endforeach
()
if
(
${
CMAKE_SYSTEM_PROCESSOR
}
STREQUAL
"arm"
)
set
(
CUDA_NVCC_FLAGS
"
${
CUDA_NVCC_FLAGS
}
--target-cpu-architecture=ARM"
)
endif
()
# These vars will be processed in other scripts
set
(
CUDA_NVCC_FLAGS
${
CUDA_NVCC_FLAGS
}
${
NVCC_FLAGS_EXTRA
}
)
set
(
OpenCV_CUDA_CC
"
${
NVCC_FLAGS_EXTRA
}
"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment