OSDN Git Service

CUDA
[eos/hostdependX86LINUX64.git] / util / X86LINUX64 / cuda-6.5 / nvvm / libnvvm-samples / CMakeLists.txt
1 ################################################################################
2 #
3 # Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
4 #
5 # NOTICE TO USER:   
6 #
7 # This source code is subject to NVIDIA ownership rights under U.S. and 
8 # international Copyright laws.  
9 #
10 # NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE 
11 # CODE FOR ANY PURPOSE.  IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR 
12 # IMPLIED WARRANTY OF ANY KIND.  NVIDIA DISCLAIMS ALL WARRANTIES WITH 
13 # REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF 
14 # MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.   
15 # IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, 
16 # OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS 
17 # OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
18 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE 
19 # OR PERFORMANCE OF THIS SOURCE CODE.  
20 #
21 # U.S. Government End Users.  This source code is a "commercial item" as 
22 # that term is defined at 48 C.F.R. 2.101 (OCT 1995), consisting  of 
23 # "commercial computer software" and "commercial computer software 
24 # documentation" as such terms are used in 48 C.F.R. 12.212 (SEPT 1995) 
25 # and is provided to the U.S. Government only as a commercial end item.  
26 # Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through 
27 # 227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the 
28 # source code with only those rights set forth herein.
29 #
30 ################################################################################
31
32 cmake_minimum_required(VERSION 2.8)
33
34 project(libnvvm-samples)
35
36
37 if (DEFINED ENV{CUDA_HOME})
38   set(CUDA_HOME "$ENV{CUDA_HOME}")
39   set(CUDA_HOME "$ENV{CUDA_HOME}" CACHE PATH "Path to CUDA Toolkit.")
40 elseif (NOT DEFINED CUDA_HOME)
41   # There was no CUDA_HOME explicitly given, so try to determine it from
42   # locating nvcc in PATH.
43   find_program(NVCC nvcc)
44   if (NOT NVCC)
45     message(FATAL_ERROR "CUDA_HOME not set, and could not find nvcc in "
46                         "your PATH.  Please either set CUDA_HOME to a "
47                         "installation path for the CUDA Toolkit or "
48                         "add nvcc to your PATH.")
49   endif()
50   get_filename_component(CUDA_HOME "${NVCC}" PATH)
51   get_filename_component(CUDA_HOME "${CUDA_HOME}/.." ABSOLUTE)
52   set(CUDA_HOME "${CUDA_HOME}" CACHE PATH "Path to CUDA Toolkit.")
53 endif()
54
55 message(STATUS "Using CUDA_HOME: ${CUDA_HOME}")
56
57 # libNVVM
58 if(NOT DEFINED ENV{LIBNVVM_HOME})
59   set(LIBNVVM_HOME "${CUDA_HOME}/nvvm" CACHE PATH "Path to NVVM.")
60 else()
61   set(LIBNVVM_HOME "$ENV{LIBNVVM_HOME}" CACHE PATH "Path to NVVM.")
62 endif()
63 message(STATUS "Using LIBNVVM_HOME: ${LIBNVVM_HOME}")
64
65 # LLVM
66 if(DEFINED ENV{LLVM_HOME})
67   set(LLVM_HOME "$ENV{LLVM_HOME}")
68   set(LLVM_HOME "${LLVM_HOME}" CACHE PATH "Path to LLVM 3.2.")
69 else()
70   set(LLVM_HOME "" CACHE PATH "Path to LLVM 3.2.")  
71 endif()
72 message(STATUS "Using LLVM_HOME: ${LLVM_HOME}")
73
74 if (CMAKE_SIZEOF_VOID_P STREQUAL "8")
75   if (WIN32)
76     set (CUDA_LIB_SEARCH_PATH "${CUDA_HOME}/lib/x64")
77     set (NVVM_DLL_NAME nvvm64_20_0.dll)
78   else ()
79     set (CUDA_LIB_SEARCH_PATH "")
80   endif()
81 else()
82   if (WIN32)
83     set (CUDA_LIB_SEARCH_PATH "${CUDA_HOME}/lib/Win32")
84     set (NVVM_DLL_NAME nvvm32_20_0.dll)
85   else()
86     set (CUDA_LIB_SEARCH_PATH "")
87   endif()
88 endif()
89
90 ### Find CUDA libs/tools
91 find_library(CUDA_LIB cuda ${CUDA_LIB_SEARCH_PATH})
92 if(NOT CUDA_LIB)
93   message(FATAL_ERROR "Unable to locate CUDA library/framework")
94 endif()
95 find_file(CUDA_H cuda.h PATHS "${CUDA_HOME}" "${CUDA_HOME}/include" /usr/local/cuda/include)
96 if(CUDA_H)
97   get_filename_component(CUDA_INCLUDE_DIR ${CUDA_H} PATH)
98   include_directories(${CUDA_INCLUDE_DIR})
99 else()
100   message(FATAL_ERROR "Unable to locate cuda.h")
101 endif()
102 message(STATUS "Using cuda header: ${CUDA_H}")
103
104 # On Mac, we may also need the headers installed to /usr/local/cuda
105 if (APPLE)
106   include_directories(/usr/local/cuda/include)
107 endif ()
108
109 find_program(NVCC nvcc PATHS "${CUDA_HOME}" "${CUDA_HOME}/bin")
110 if (NOT NVCC)
111   message(FATAL_ERROR "Cannot find nvcc.  Please set CUDA_HOME to a CUDA Toolkit directory")
112 endif()
113 message(STATUS "Using nvcc: ${NVCC}")
114
115
116 ### Find libNVVM
117 # The directory structure for nvvm is a bit complex.
118 # On Windows:
119 #   32-bit -- nvvm/lib/Win32
120 #   64-bit -- nvvm/lib/x64
121 # On Linux:
122 #   32-bit -- nvvm/lib
123 #   64-bit -- nvvm/lib64
124 # On Mac:
125 #   Universal -- nvvm/lib
126 if (CMAKE_SIZEOF_VOID_P STREQUAL "8")
127   if (WIN32)
128     set (LIB_ARCH_SUFFIX "/x64")
129   elseif (APPLE)
130     set (LIB_ARCH_SUFFIX "")
131   else ()
132     set (LIB_ARCH_SUFFIX "64")
133   endif()
134 else()
135   if (WIN32)
136     set (LIB_ARCH_SUFFIX "/Win32")
137   else()
138     set (LIB_ARCH_SUFFIX "")
139   endif()
140 endif()
141 find_library(NVVM_LIB nvvm PATHS "${LIBNVVM_HOME}/lib${LIB_ARCH_SUFFIX}")
142 find_file(NVVM_H nvvm.h PATHS "${LIBNVVM_HOME}/include")
143 if(NVVM_LIB AND NVVM_H)
144   get_filename_component(NVVM_INCLUDE_DIR ${NVVM_H} PATH)
145 else()
146   message(FATAL_ERROR "Unable to find libNVVM")
147 endif()
148 include_directories(${NVVM_INCLUDE_DIR})
149 message(STATUS "Using libnvvm header path: ${NVVM_INCLUDE_DIR}")
150 message(STATUS "Using libnvvm library: ${NVVM_LIB}")
151 set(LIBNVVM_RPATH "${LIBNVVM_HOME}/lib${LIB_ARCH_SUFFIX}")
152 set(CMAKE_INSTALL_RPATH ${LIBNVVM_RPATH})
153
154 # On Windows, locate nvvm.dll so we can install it
155 if (WIN32)
156   find_file(NVVM_DLL ${NVVM_DLL_NAME} PATHS "${LIBNVVM_HOME}/bin")
157   if(NOT NVVM_DLL)
158     message(FATAL_ERROR "Found nvvm .h/.lib, but not .dll")
159   endif()
160   install(FILES ${NVVM_DLL} DESTINATION bin)
161 endif (WIN32)
162
163 add_definitions(-DLIBDEVICE_MAJOR_VERSION=1)
164 add_definitions(-DLIBDEVICE_MINOR_VERSION=0)
165
166 ### Find LLVM
167 # LLVM is a bit tricky if we don't assume a CMake-based build
168 find_file(ADDLLVM_CMAKE AddLLVM.cmake PATHS "${LLVM_HOME}/share/llvm/cmake")
169 if(ADDLLVM_CMAKE)
170   list(APPEND CMAKE_MODULE_PATH "${LLVM_HOME}/share/llvm/cmake")
171   include(AddLLVM)
172   include("${LLVM_HOME}/share/llvm/cmake/LLVMConfig.cmake")
173   include(HandleLLVMOptions)
174   include_directories("${LLVM_HOME}/include")
175   link_directories("${LLVM_HOME}/lib")
176   if (NOT LLVM_VERSION_MAJOR STREQUAL "3" OR NOT LLVM_VERSION_MINOR STREQUAL "2")
177     message(STATUS "LLVM found, but version 3.2 is required.")
178     message(STATUS "cuda-c-linking sample will not be built!")
179   else()
180     set(HAVE_LLVM YES)
181     message(STATUS "Using LLVM install from ${LLVM_HOME}")
182   endif()
183 else()
184   message(STATUS "CMake-based LLVM install could not be found.")
185   message(STATUS "cuda-c-linking sample will not be built!")
186 endif()
187
188
189 ### Include common headers
190 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/common/include")
191
192
193 ### Samples
194 if(HAVE_LLVM)
195   add_subdirectory(cuda-c-linking)
196 endif()
197 add_subdirectory(ptxgen)
198 add_subdirectory(simple)