| CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) |
| CMAKE_POLICY(VERSION 2.8) |
| |
| SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) |
| |
| IF(NOT Torch_FOUND) |
| FIND_PACKAGE(Torch) |
| ENDIF() |
| IF(NOT CUDA_FOUND) |
| FIND_PACKAGE(CUDA 5.5 REQUIRED) |
| ENDIF() |
| IF(NOT MAGMA_FOUND) |
| FIND_PACKAGE(MAGMA) |
| ENDIF() |
| |
| if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.9.3") |
| if(CUDA_VERSION VERSION_LESS "8.0") |
| MESSAGE(STATUS "Found gcc >=5 and CUDA <= 7.5, adding workaround C++ flags") |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES -D_MWAITXINTRIN_H_INCLUDED -D__STRICT_ANSI__") |
| endif(CUDA_VERSION VERSION_LESS "8.0") |
| endif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.9.3") |
| endif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| |
| if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.7" OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.7" ) |
| # add c++11 flag |
| set_source_files_properties(THCCachingAllocator.cpp PROPERTIES COMPILE_FLAGS -std=c++11) |
| else() |
| # add c++0x flag |
| set_source_files_properties(THCCachingAllocator.cpp PROPERTIES COMPILE_FLAGS -std=c++0x) |
| endif() |
| else() |
| SET(CMAKE_CXX_STANDARD 11) |
| endif() |
| |
| |
| INCLUDE_DIRECTORIES(${CUDA_INCLUDE_DIRS}) |
| INCLUDE_DIRECTORIES("${CUDA_SDK_ROOT_DIR}/common/inc") |
| |
| IF(MAGMA_FOUND) |
| INCLUDE_DIRECTORIES(${MAGMA_INCLUDE_DIR}) |
| SET(CMAKE_REQUIRED_INCLUDES "${MAGMA_INCLUDE_DIR};${CUDA_INCLUDE_DIRS}") |
| INCLUDE(CheckPrototypeDefinition) |
| check_prototype_definition(magma_get_sgeqrf_nb |
| "magma_int_t magma_get_sgeqrf_nb( magma_int_t m, magma_int_t n );" |
| "0" |
| "magma.h" |
| MAGMA_V2) |
| IF (MAGMA_V2) |
| add_definitions(-DMAGMA_V2) |
| ENDIF (MAGMA_V2) |
| |
| SET(USE_MAGMA 1) |
| MESSAGE(STATUS "Compiling with MAGMA support") |
| MESSAGE(STATUS "MAGMA INCLUDE DIRECTORIES: ${MAGMA_INCLUDE_DIR}") |
| MESSAGE(STATUS "MAGMA LIBRARIES: ${MAGMA_LIBRARIES}") |
| MESSAGE(STATUS "MAGMA V2 check: ${MAGMA_V2}") |
| ELSE(MAGMA_FOUND) |
| MESSAGE(STATUS "MAGMA not found. Compiling without MAGMA support") |
| ENDIF(MAGMA_FOUND) |
| |
| IF ($ENV{TH_BINARY_BUILD}) |
| MESSAGE(STATUS "TH_BINARY_BUILD detected. Statically linking libstdc++") |
| SET(CMAKE_CXX_FLAGS "-static-libstdc++ ${CMAKE_CXX_FLAGS}") |
| ENDIF() |
| |
| IF(APPLE) |
| IF(${CUDA_VERSION} LESS 6.0) |
| # work around for mac os x bug: |
| # http://stackoverflow.com/questions/16286588/cuda-5-0-cmake-and-make-failing-on-osx-10-8-3 |
| if (NOT DEFINED CUDA_HOST_COMPILER AND CMAKE_C_COMPILER_ID STREQUAL "Clang" AND EXISTS /usr/bin/gcc) |
| set(CUDA_HOST_COMPILER /usr/bin/gcc CACHE FILEPATH "Host side compiler used by NVCC") |
| message(STATUS "Setting CMAKE_HOST_COMPILER to /usr/bin/gcc instead of ${CMAKE_C_COMPILER}.") |
| endif() |
| |
| # bug on Apple |
| LINK_DIRECTORIES("/usr/local/cuda/lib/") |
| ELSEIF(${CUDA_VERSION} LESS 7.0) |
| SET(CUDA_HOST_COMPILER clang) |
| LIST(APPEND CUDA_NVCC_FLAGS "-Xcompiler -stdlib=libstdc++ -Xlinker -stdlib=libstdc++") |
| IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") |
| ENDIF() |
| ENDIF() |
| # CUDA 7 supports clang and libc++ so no need to change anything |
| ENDIF(APPLE) |
| |
| # Detect CUDA architecture and get best NVCC flags |
| IF(NOT COMMAND CUDA_SELECT_NVCC_ARCH_FLAGS) |
| INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/select_compute_arch.cmake) |
| ENDIF() |
| LIST(APPEND CUDA_NVCC_FLAGS $ENV{TORCH_NVCC_FLAGS}) |
| CUDA_SELECT_NVCC_ARCH_FLAGS(NVCC_FLAGS_EXTRA $ENV{TORCH_CUDA_ARCH_LIST}) |
| LIST(APPEND CUDA_NVCC_FLAGS ${NVCC_FLAGS_EXTRA}) |
| |
| IF(NOT THC_INSTALL_BIN_SUBDIR |
| OR NOT THC_INSTALL_LIB_SUBDIR |
| OR NOT THC_INSTALL_INCLUDE_SUBDIR |
| OR NOT THC_INSTALL_CMAKE_SUBDIR) |
| |
| INCLUDE_DIRECTORIES(${TH_INCLUDE_PATH} ${TH_INCLUDE_PATH}/TH) |
| LINK_DIRECTORIES(${TH_LIB_PATH}) |
| |
| SET(THC_INSTALL_BIN_SUBDIR "bin" CACHE PATH "THC install binary subdirectory") |
| SET(THC_INSTALL_LIB_SUBDIR "lib" CACHE PATH "THC install library subdirectory") |
| SET(THC_INSTALL_INCLUDE_SUBDIR "include" CACHE PATH "THC install include subdirectory") |
| SET(THC_INSTALL_CMAKE_SUBDIR "share/cmake/THC" CACHE PATH "THC install cmake subdirectory") |
| ELSE() |
| SET(THC_INSTALL_BIN_SUBDIR ${Torch_INSTALL_BIN_SUBDIR}) |
| SET(THC_INSTALL_LIB_SUBDIR ${Torch_INSTALL_LIB_SUBDIR}) |
| SET(THC_INSTALL_INCLUDE_SUBDIR ${Torch_INSTALL_INCLUDE_SUBDIR}) |
| SET(THC_INSTALL_CMAKE_SUBDIR ${Torch_INSTALL_CMAKE_SUBDIR}) |
| ENDIF() |
| |
| INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}") |
| INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") |
| CONFIGURE_FILE(THCGeneral.h.in "${CMAKE_CURRENT_BINARY_DIR}/THCGeneral.h") |
| |
| IF(MSVC) |
| LIST(APPEND CUDA_NVCC_FLAGS "-Xcompiler /wd4819") |
| ELSE() |
| SET(CMAKE_C_FLAGS "-std=c99 ${CMAKE_C_FLAGS}") |
| ENDIF() |
| |
| SET(src |
| THCCachingAllocator.cpp |
| THCGeneral.c |
| THCStorageCopy.c |
| THCStream.c |
| THCTensor.c |
| THCTensorCopy.c |
| THCThreadLocal.c |
| ) |
| |
| SET(src-cuda |
| THCReduceApplyUtils.cu |
| THCBlas.cu |
| THCStorage.cu |
| THCStorageCopy.cu |
| THCTensor.cu |
| THCTensorCopy.cu |
| THCTensorMath.cu |
| THCTensorMath2.cu |
| THCTensorMathBlas.cu |
| THCTensorMathMagma.cu |
| THCTensorMathPairwise.cu |
| THCTensorMathReduce.cu |
| THCTensorMathScan.cu |
| THCTensorIndex.cu |
| THCTensorConv.cu |
| THCTensorRandom.cu |
| THCTensorScatterGather.cu |
| THCTensorTopK.cu |
| THCTensorSort.cu |
| THCTensorTypeUtils.cu |
| ) |
| |
| # loop over all types |
| foreach(THC_TYPE Byte Char Short Int Long Half Float Double) |
| # loop over files which need to be split between types (because of long compile times) |
| foreach(THC_FILE TensorSort TensorMathCompareT TensorMathPointwise TensorMathCompare TensorMathReduce TensorMasked) |
| if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/generated/THC${THC_FILE}${THC_TYPE}.cu") |
| FILE(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/generated/THC${THC_FILE}${THC_TYPE}.cu" |
| "#include \"../THC${THC_FILE}.cuh\"\n#include \"../generic/THC${THC_FILE}.cu\"\n#include \"../THCGenerate${THC_TYPE}Type.h\"\n") |
| endif() |
| LIST(APPEND src-cuda "${CMAKE_CURRENT_SOURCE_DIR}/generated/THC${THC_FILE}${THC_TYPE}.cu") |
| endforeach() |
| endforeach() |
| |
| MESSAGE(STATUS "got cuda version " ${CUDA_VERSION}) |
| |
| IF(CUDA_HAS_FP16 OR NOT ${CUDA_VERSION} LESS 7.5) |
| MESSAGE(STATUS "Found CUDA with FP16 support, compiling with torch.CudaHalfTensor") |
| LIST(APPEND src-cuda THCHalf.cu) |
| LIST(APPEND CUDA_NVCC_FLAGS "-DCUDA_HAS_FP16=1") |
| SET(CMAKE_C_FLAGS "-DCUDA_HAS_FP16=1 ${CMAKE_C_FLAGS}") |
| ELSE(CUDA_HAS_FP16 OR NOT ${CUDA_VERSION} LESS 7.5) |
| MESSAGE(STATUS "Could not find CUDA with FP16 support, compiling without torch.CudaHalfTensor") |
| ENDIF(CUDA_HAS_FP16 OR NOT ${CUDA_VERSION} LESS 7.5) |
| |
| MESSAGE(STATUS "CUDA_NVCC_FLAGS: ${CUDA_NVCC_FLAGS}") |
| |
| CUDA_ADD_LIBRARY(THC SHARED ${src} ${src-cuda}) |
| CUDA_ADD_CUBLAS_TO_TARGET(THC) |
| TARGET_LINK_LIBRARIES(THC TH ${CUDA_curand_LIBRARY}) |
| |
| IF(USE_MAGMA) |
| TARGET_LINK_LIBRARIES(THC ${MAGMA_LIBRARIES} ${CUDA_cusparse_LIBRARY}) |
| ENDIF(USE_MAGMA) |
| |
| INSTALL(TARGETS THC |
| RUNTIME DESTINATION "${THC_INSTALL_BIN_SUBDIR}" |
| LIBRARY DESTINATION "${THC_INSTALL_LIB_SUBDIR}" |
| ARCHIVE DESTINATION "${THC_INSTALL_LIB_SUBDIR}") |
| |
| INSTALL(FILES |
| THC.h |
| ${CMAKE_CURRENT_BINARY_DIR}/THCGeneral.h |
| THCBlas.h |
| THCStorage.h |
| THCStorageCopy.h |
| THCStream.h |
| THCThreadLocal.h |
| THCTensor.h |
| THCTensorCopy.h |
| THCTensorRandom.h |
| THCTensorMath.h |
| THCTensorConv.h |
| THCTensorTopK.h |
| THCApply.cuh |
| THCReduce.cuh |
| THCReduceAll.cuh |
| THCReduceApplyUtils.cuh |
| THCAsmUtils.cuh |
| THCAtomics.cuh |
| THCScanUtils.cuh |
| THCSortUtils.cuh |
| THCAllocator.h |
| THCCachingAllocator.h |
| THCDeviceUtils.cuh |
| THCDeviceTensor.cuh |
| THCDeviceTensor-inl.cuh |
| THCDeviceTensorUtils.cuh |
| THCDeviceTensorUtils-inl.cuh |
| THCGenerateAllTypes.h |
| THCGenerateByteType.h |
| THCGenerateCharType.h |
| THCGenerateShortType.h |
| THCGenerateIntType.h |
| THCGenerateLongType.h |
| THCGenerateHalfType.h |
| THCGenerateFloatType.h |
| THCGenerateFloatTypes.h |
| THCGenerateDoubleType.h |
| THCHalf.h |
| THCNumerics.cuh |
| THCTensorSort.cuh |
| THCTensorInfo.cuh |
| THCTensorTypeUtils.cuh |
| THCTensorRandom.cuh |
| THCTensorMathMagma.cuh |
| DESTINATION "${THC_INSTALL_INCLUDE_SUBDIR}/THC") |
| |
| INSTALL(FILES |
| generic/THCStorage.c |
| generic/THCStorage.cu |
| generic/THCStorage.h |
| generic/THCTensor.c |
| generic/THCTensor.cu |
| generic/THCTensor.h |
| generic/THCStorageCopy.c |
| generic/THCStorageCopy.cu |
| generic/THCStorageCopy.h |
| generic/THCTensorCopy.c |
| generic/THCTensorCopy.cu |
| generic/THCTensorCopy.h |
| generic/THCTensorMasked.h |
| generic/THCTensorMasked.cu |
| generic/THCTensorMath.h |
| generic/THCTensorMath.cu |
| generic/THCTensorMathBlas.cu |
| generic/THCTensorMathBlas.h |
| generic/THCTensorMathCompare.h |
| generic/THCTensorMathCompare.cu |
| generic/THCTensorMathCompareT.h |
| generic/THCTensorMathCompareT.cu |
| generic/THCTensorMathMagma.h |
| generic/THCTensorMathMagma.cu |
| generic/THCTensorMathPairwise.h |
| generic/THCTensorMathPairwise.cu |
| generic/THCTensorMathPointwise.h |
| generic/THCTensorMathPointwise.cu |
| generic/THCTensorMathReduce.h |
| generic/THCTensorMathReduce.cu |
| generic/THCTensorMathScan.h |
| generic/THCTensorMathScan.cu |
| generic/THCTensorScatterGather.h |
| generic/THCTensorScatterGather.cu |
| generic/THCTensorIndex.h |
| generic/THCTensorIndex.cu |
| generic/THCTensorSort.h |
| generic/THCTensorSort.cu |
| generic/THCDeviceTensorUtils.cu |
| generic/THCTensorRandom.h |
| generic/THCTensorRandom.cu |
| DESTINATION "${THC_INSTALL_INCLUDE_SUBDIR}/THC/generic") |