ya.make 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. RESOURCES_LIBRARY()
  2. # https://wiki.yandex-team.ru/devtools/cuda/
  3. OWNER(g:contrib somov)
  4. IF (NOT HAVE_CUDA)
  5. MESSAGE(FATAL_ERROR "No CUDA Toolkit for your build")
  6. ENDIF()
  7. IF (USE_ARCADIA_CUDA)
  8. IF (HOST_OS_LINUX AND HOST_ARCH_X86_64)
  9. IF (OS_LINUX AND ARCH_X86_64)
  10. IF (CUDA_VERSION == "11.4")
  11. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2410761119) # CUDA Toolkit 11.4.2 for Linux x86-64
  12. ELSEIF (CUDA_VERSION == "11.3")
  13. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2213063565) # CUDA Toolkit 11.3.1 for Linux x86-64
  14. ELSEIF (CUDA_VERSION == "11.2")
  15. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2073566375) # CUDA Toolkit 11.2.2 for Linux x86-64
  16. ELSEIF (CUDA_VERSION == "11.1")
  17. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1882836946) # CUDA Toolkit 11.1.1 for Linux x86-64
  18. ELSEIF (CUDA_VERSION == "11.0")
  19. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1647896014) # CUDA Toolkit 11.0.2 for Linux x86-64
  20. ELSEIF (CUDA_VERSION == "10.1")
  21. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2077988857) # CUDA Toolkit 10.1.168 for Linux x86-64
  22. ELSE()
  23. ENABLE(CUDA_NOT_FOUND)
  24. ENDIF()
  25. ELSEIF(OS_LINUX AND ARCH_AARCH64)
  26. IF (CUDA_VERSION == "11.3")
  27. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2227720086) # CUDA Toolkit 11.3.20210513 (11.3.1) for Linux x86-64 with linux-aarch64 support
  28. # host tools installer https://sandbox.yandex-team.ru/resource/2227828799/view
  29. # cross compile parts installer https://sandbox.yandex-team.ru/resource/2227885870/view
  30. ELSE()
  31. ENABLE(CUDA_NOT_FOUND)
  32. ENDIF()
  33. ELSE()
  34. ENABLE(CUDA_NOT_FOUND)
  35. ENDIF()
  36. ELSEIF (HOST_OS_LINUX AND HOST_ARCH_PPC64LE)
  37. IF (OS_LINUX AND ARCH_PPC64LE)
  38. IF (CUDA_VERSION == "10.1")
  39. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1586537264) # CUDA Toolkit 10.1.168 for Linux ppc64le
  40. ELSE()
  41. ENABLE(CUDA_NOT_FOUND)
  42. ENDIF()
  43. ELSE()
  44. ENABLE(CUDA_NOT_FOUND)
  45. ENDIF()
  46. ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_X86_64)
  47. IF (OS_DARWIN AND ARCH_X86_64)
  48. IF (CUDA_VERSION == "10.1")
  49. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:978727023) # CUDA Toolkit 10.1.168 for macOS x86-64
  50. ENDIF()
  51. ELSE()
  52. ENABLE(CUDA_NOT_FOUND)
  53. ENDIF()
  54. ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64)
  55. IF (OS_WINDOWS AND ARCH_X86_64)
  56. IF (CUDA_VERSION == "11.3")
  57. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2215101513) # CUDA Toolkit 11.3.1 for Windows x86-64
  58. ELSEIF (CUDA_VERSION == "11.1")
  59. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1896564605) # CUDA Toolkit 11.1.1 for Windows x86-64
  60. ELSEIF (CUDA_VERSION == "10.1")
  61. DECLARE_EXTERNAL_RESOURCE(CUDA sbr:978734165) # CUDA Toolkit 10.1.168 for Windows x86-64
  62. ELSE()
  63. ENABLE(CUDA_NOT_FOUND)
  64. ENDIF()
  65. ELSE()
  66. ENABLE(CUDA_NOT_FOUND)
  67. ENDIF()
  68. ELSE()
  69. ENABLE(CUDA_NOT_FOUND)
  70. ENDIF()
  71. ENDIF()
  72. IF (USE_ARCADIA_CUDA_HOST_COMPILER)
  73. IF (HOST_OS_LINUX AND HOST_ARCH_X86_64)
  74. IF (OS_LINUX AND ARCH_X86_64)
  75. DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:1886578148) # Clang 11.0.0 for linux-x86_64
  76. IF (CUDA_VERSION VERSION_LT "11.2")
  77. # Equivalent to nvcc -allow-unsupported-compiler (present since 11.0).
  78. CFLAGS(GLOBAL "-D__NV_NO_HOST_COMPILER_CHECK")
  79. ENDIF()
  80. ELSEIF(OS_LINUX AND ARCH_AARCH64)
  81. DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:1886578148) # Clang 11.0.0 for linux-x86_64
  82. ELSE()
  83. ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
  84. ENDIF()
  85. ELSEIF (HOST_OS_LINUX AND HOST_ARCH_PPC64LE)
  86. IF (OS_LINUX AND ARCH_PPC64LE)
  87. IF (CUDA_VERSION == "10.1")
  88. DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:1566513994) # Clang 7.0 for Linux ppc64le (not latest)
  89. ELSE()
  90. ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
  91. ENDIF()
  92. ELSE()
  93. ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
  94. ENDIF()
  95. ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_X86_64)
  96. IF (OS_DARWIN AND ARCH_X86_64)
  97. SET(__XCODE_RESOURCE_NAME CUDA_HOST_TOOLCHAIN)
  98. IF (CUDA_VERSION == "10.1")
  99. SET(__XCODE_TOOLCHAIN_VERSION "9.2") # (not latest)
  100. ELSE()
  101. SET(__XCODE_TOOLCHAIN_VERSION "")
  102. ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
  103. ENDIF()
  104. IF (__XCODE_TOOLCHAIN_VERSION)
  105. INCLUDE(${ARCADIA_ROOT}/build/platform/xcode/ya.make.inc)
  106. ENDIF()
  107. ELSE()
  108. ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
  109. ENDIF()
  110. ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64)
  111. IF (OS_WINDOWS AND ARCH_X86_64)
  112. # To create this toolchain, install MSVS on Windows and run:
  113. # devtools/tools_build/pack_sdk.py msvc out.tar
  114. # Note: it will contain patched "VC/Auxiliary/Build/vcvarsall.bat"
  115. # to prevent "nvcc fatal : Host compiler targets unsupported OS."
  116. IF (CUDA_HOST_MSVC_VERSION == "14.28.29910")
  117. DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:2153212401)
  118. ELSE()
  119. MESSAGE(FATAL_ERROR "Unexpected or unspecified Microsoft Visual C++ CUDA host compiler version")
  120. ENDIF()
  121. ELSE()
  122. ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
  123. ENDIF()
  124. ELSE()
  125. ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
  126. ENDIF()
  127. ENDIF()
  128. IF (CUDA_NOT_FOUND)
  129. MESSAGE(FATAL_ERROR "No CUDA Toolkit for the selected platform")
  130. ENDIF()
  131. IF (CUDA_HOST_COMPILER_NOT_FOUND)
  132. MESSAGE(FATAL_ERROR "No CUDA host compiler for the selected platform and CUDA Toolkit version ${CUDA_VERSION}")
  133. ENDIF()
  134. # Use thrust and cub from Arcadia, not from HPC SDK
  135. # NB:
  136. # it would be better to use PEERDIR instead,
  137. # but ymake does not allow PEERDIRs from RESOURCES_LIBRARY.
  138. ADDINCL(
  139. GLOBAL contrib/libs/nvidia/thrust
  140. GLOBAL contrib/libs/nvidia/cub
  141. )
  142. IF (HOST_OS_WINDOWS)
  143. SET_APPEND_WITH_GLOBAL(USER_CFLAGS GLOBAL "\"-I${CUDA_ROOT}/include\"")
  144. ELSE()
  145. CFLAGS(GLOBAL "-I${CUDA_ROOT}/include")
  146. ENDIF()
  147. IF (HOST_OS_WINDOWS)
  148. SET_APPEND(LDFLAGS_GLOBAL "\"/LIBPATH:${CUDA_ROOT}/lib/x64\"")
  149. ELSEIF(HOST_OS_LINUX AND OS_LINUX AND ARCH_AARCH64)
  150. LDFLAGS("-L${CUDA_ROOT}/targets/sbsa-linux/lib")
  151. ELSEIF(HOST_OS_LINUX)
  152. LDFLAGS("-L${CUDA_ROOT}/lib64")
  153. ELSE()
  154. LDFLAGS("-L${CUDA_ROOT}/lib")
  155. ENDIF()
  156. IF (CUDA_REQUIRED)
  157. IF(HOST_OS_LINUX)
  158. LDFLAGS("-L${CUDA_ROOT}/lib64/stubs")
  159. EXTRALIBS(-lcuda)
  160. ELSEIF(HOST_OS_DARWIN)
  161. LDFLAGS("-F${CUDA_ROOT}/lib/stubs -framework CUDA")
  162. ENDIF()
  163. ENDIF()
  164. IF (HOST_OS_WINDOWS)
  165. LDFLAGS(cudadevrt.lib cudart_static.lib)
  166. ELSE()
  167. EXTRALIBS(-lcudadevrt -lcudart_static -lculibos)
  168. ENDIF()
  169. END()