xref: /aosp_15_r20/external/pytorch/caffe2/CMakeLists.txt (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker# ---[ Generate and install header and cpp files
2*da0073e9SAndroid Build Coastguard Workerinclude(../cmake/Codegen.cmake)
3*da0073e9SAndroid Build Coastguard Worker
4*da0073e9SAndroid Build Coastguard Worker# ---[ Vulkan code gen
5*da0073e9SAndroid Build Coastguard Workerif(USE_VULKAN)
6*da0073e9SAndroid Build Coastguard Worker  include(../cmake/VulkanCodegen.cmake)
7*da0073e9SAndroid Build Coastguard Workerendif()
8*da0073e9SAndroid Build Coastguard Worker
9*da0073e9SAndroid Build Coastguard Worker# Debug messages - if you want to get a list of source files and examine
10*da0073e9SAndroid Build Coastguard Worker# target information, enable the following by -DPRINT_CMAKE_DEBUG_INFO=ON.
11*da0073e9SAndroid Build Coastguard Workerset(PRINT_CMAKE_DEBUG_INFO FALSE CACHE BOOL "print cmake debug information")
12*da0073e9SAndroid Build Coastguard Workerif(PRINT_CMAKE_DEBUG_INFO)
13*da0073e9SAndroid Build Coastguard Worker  include(../cmake/DebugHelper.cmake)
14*da0073e9SAndroid Build Coastguard Workerendif()
15*da0073e9SAndroid Build Coastguard Worker
16*da0073e9SAndroid Build Coastguard Worker# ATen parallelism settings
17*da0073e9SAndroid Build Coastguard Worker#  OMP - OpenMP for intra-op, native thread pool for inter-op parallelism
18*da0073e9SAndroid Build Coastguard Worker#  NATIVE - using native thread pool for intra- and inter-op parallelism
19*da0073e9SAndroid Build Coastguard Workerif(INTERN_BUILD_MOBILE)
20*da0073e9SAndroid Build Coastguard Worker  set(ATEN_THREADING "NATIVE" CACHE STRING "ATen parallel backend")
21*da0073e9SAndroid Build Coastguard Workerelse()
22*da0073e9SAndroid Build Coastguard Worker  if(USE_OPENMP)
23*da0073e9SAndroid Build Coastguard Worker    set(ATEN_THREADING "OMP" CACHE STRING "ATen parallel backend")
24*da0073e9SAndroid Build Coastguard Worker  else()
25*da0073e9SAndroid Build Coastguard Worker    set(ATEN_THREADING "NATIVE" CACHE STRING "ATen parallel backend")
26*da0073e9SAndroid Build Coastguard Worker  endif()
27*da0073e9SAndroid Build Coastguard Workerendif()
28*da0073e9SAndroid Build Coastguard Worker
29*da0073e9SAndroid Build Coastguard Workerset(AT_PARALLEL_OPENMP 0)
30*da0073e9SAndroid Build Coastguard Workerset(AT_PARALLEL_NATIVE 0)
31*da0073e9SAndroid Build Coastguard Worker
32*da0073e9SAndroid Build Coastguard Workermessage(STATUS "Using ATen parallel backend: ${ATEN_THREADING}")
33*da0073e9SAndroid Build Coastguard Workerif("${ATEN_THREADING}" STREQUAL "OMP")
34*da0073e9SAndroid Build Coastguard Worker  set(AT_PARALLEL_OPENMP 1)
35*da0073e9SAndroid Build Coastguard Workerelseif("${ATEN_THREADING}" STREQUAL "NATIVE")
36*da0073e9SAndroid Build Coastguard Worker  set(AT_PARALLEL_NATIVE 1)
37*da0073e9SAndroid Build Coastguard Workerelse()
38*da0073e9SAndroid Build Coastguard Worker  message(FATAL_ERROR "Unknown ATen parallel backend: ${ATEN_THREADING}")
39*da0073e9SAndroid Build Coastguard Workerendif()
40*da0073e9SAndroid Build Coastguard Worker
41*da0073e9SAndroid Build Coastguard Worker# ---[ Declare source file lists
42*da0073e9SAndroid Build Coastguard Worker
43*da0073e9SAndroid Build Coastguard Worker# ---[ ATen build
44*da0073e9SAndroid Build Coastguard Workerif(INTERN_BUILD_ATEN_OPS)
45*da0073e9SAndroid Build Coastguard Worker  set(__torch_CMAKE_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE})
46*da0073e9SAndroid Build Coastguard Worker  set(CMAKE_POSITION_INDEPENDENT_CODE ON)
47*da0073e9SAndroid Build Coastguard Worker  add_subdirectory(../aten aten)
48*da0073e9SAndroid Build Coastguard Worker  set(CMAKE_POSITION_INDEPENDENT_CODE ${__torch_CMAKE_POSITION_INDEPENDENT_CODE})
49*da0073e9SAndroid Build Coastguard Worker
50*da0073e9SAndroid Build Coastguard Worker  # Generate the headers wrapped by our operator
51*da0073e9SAndroid Build Coastguard Worker  file(GLOB_RECURSE torchgen_python "${PROJECT_SOURCE_DIR}/torchgen/*.py")
52*da0073e9SAndroid Build Coastguard Worker
53*da0073e9SAndroid Build Coastguard Worker
54*da0073e9SAndroid Build Coastguard Worker  # Add source, includes, and libs to lists
55*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_CPU_SRCS ${ATen_CPU_SRCS})
56*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_SRCS ${ATen_CUDA_CPP_SRCS})
57*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_XPU_SRCS ${ATen_XPU_SRCS})
58*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_XPU_INCLUDE ${ATen_XPU_INCLUDE})
59*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_XPU_DEPENDENCY_LIBS ${ATen_XPU_DEPENDENCY_LIBS})
60*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_SRCS_W_SORT_BY_KEY ${ATen_CUDA_SRCS_W_SORT_BY_KEY})
61*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_CU_SRCS ${ATen_CUDA_CU_SRCS})
62*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_CU_SRCS_W_SORT_BY_KEY ${ATen_CUDA_CU_SRCS_W_SORT_BY_KEY})
63*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_HIP_SRCS ${ATen_HIP_SRCS})
64*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_MPS_SRCS ${ATen_MPS_SRCS})
65*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_XPU_SRCS ${ATen_XPU_SRCS})
66*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_HIP_SRCS ${ATen_HIP_SRCS_W_SORT_BY_KEY})
67*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_CPU_TEST_SRCS ${ATen_CPU_TEST_SRCS})
68*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_MPS_TEST_SRCS ${ATen_MPS_TEST_SRCS})
69*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_TEST_SRCS ${ATen_CUDA_TEST_SRCS})
70*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_HIP_TEST_SRCS ${ATen_HIP_TEST_SRCS})
71*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_XPU_TEST_SRCS ${ATen_XPU_TEST_SRCS})
72*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_CPU_TEST_SRCS ${ATen_CORE_TEST_SRCS})
73*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_VULKAN_TEST_SRCS ${ATen_VULKAN_TEST_SRCS})
74*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_CPU_INCLUDE ${ATen_CPU_INCLUDE})
75*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_INCLUDE ${ATen_CUDA_INCLUDE})
76*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_HIP_INCLUDE ${ATen_HIP_INCLUDE})
77*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_XPU_INCLUDE ${ATen_XPU_INCLUDE})
78*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_VULKAN_INCLUDE ${ATen_VULKAN_INCLUDE})
79*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_DEPENDENCY_LIBS ${ATen_CPU_DEPENDENCY_LIBS})
80*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS ${ATen_CUDA_DEPENDENCY_LIBS})
81*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_HIP_DEPENDENCY_LIBS ${ATen_HIP_DEPENDENCY_LIBS})
82*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_DEPENDENCY_INCLUDE ${ATen_THIRD_PARTY_INCLUDE})
83*da0073e9SAndroid Build Coastguard Worker  set(Caffe2_CUDA_DEPENDENCY_LIBS ${Caffe2_CUDA_DEPENDENCY_LIBS} PARENT_SCOPE)
84*da0073e9SAndroid Build Coastguard Workerendif()
85*da0073e9SAndroid Build Coastguard Worker
86*da0073e9SAndroid Build Coastguard Worker# ---[ Caffe2 build
87*da0073e9SAndroid Build Coastguard Worker# Note: the folders that are being commented out have not been properly
88*da0073e9SAndroid Build Coastguard Worker# addressed yet.
89*da0073e9SAndroid Build Coastguard Worker
90*da0073e9SAndroid Build Coastguard Workerif(NOT MSVC AND USE_XNNPACK)
91*da0073e9SAndroid Build Coastguard Worker  if(NOT TARGET fxdiv)
92*da0073e9SAndroid Build Coastguard Worker    set(FXDIV_BUILD_TESTS OFF CACHE BOOL "")
93*da0073e9SAndroid Build Coastguard Worker    set(FXDIV_BUILD_BENCHMARKS OFF CACHE BOOL "")
94*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(
95*da0073e9SAndroid Build Coastguard Worker      "${FXDIV_SOURCE_DIR}"
96*da0073e9SAndroid Build Coastguard Worker      "${CMAKE_BINARY_DIR}/FXdiv")
97*da0073e9SAndroid Build Coastguard Worker  endif()
98*da0073e9SAndroid Build Coastguard Workerendif()
99*da0073e9SAndroid Build Coastguard Worker
100*da0073e9SAndroid Build Coastguard Workeradd_subdirectory(core)
101*da0073e9SAndroid Build Coastguard Workeradd_subdirectory(serialize)
102*da0073e9SAndroid Build Coastguard Workeradd_subdirectory(utils)
103*da0073e9SAndroid Build Coastguard Workerif(NOT USE_FBGEMM)
104*da0073e9SAndroid Build Coastguard Worker  add_subdirectory(perfkernels)
105*da0073e9SAndroid Build Coastguard Workerendif()
106*da0073e9SAndroid Build Coastguard Worker
107*da0073e9SAndroid Build Coastguard Worker# Advanced: if we have allow list specified, we will do intersections for all
108*da0073e9SAndroid Build Coastguard Worker# main lib srcs.
109*da0073e9SAndroid Build Coastguard Workerif(CAFFE2_ALLOWLISTED_FILES)
110*da0073e9SAndroid Build Coastguard Worker  caffe2_do_allowlist(Caffe2_CPU_SRCS CAFFE2_ALLOWLISTED_FILES)
111*da0073e9SAndroid Build Coastguard Worker  caffe2_do_allowlist(Caffe2_GPU_SRCS CAFFE2_ALLOWLISTED_FILES)
112*da0073e9SAndroid Build Coastguard Worker  caffe2_do_allowlist(Caffe2_XPU_SRCS CAFFE2_ALLOWLISTED_FILES)
113*da0073e9SAndroid Build Coastguard Worker  caffe2_do_allowlist(Caffe2_GPU_SRCS_W_SORT_BY_KEY CAFFE2_ALLOWLISTED_FILES)
114*da0073e9SAndroid Build Coastguard Worker  caffe2_do_allowlist(Caffe2_GPU_CU_SRCS CAFFE2_ALLOWLISTED_FILES)
115*da0073e9SAndroid Build Coastguard Worker  caffe2_do_allowlist(Caffe2_GPU_CU_SRCS_W_SORT_BY_KEY CAFFE2_ALLOWLISTED_FILES)
116*da0073e9SAndroid Build Coastguard Worker  caffe2_do_allowlist(Caffe2_HIP_SRCS CAFFE2_ALLOWLISTED_FILES)
117*da0073e9SAndroid Build Coastguard Workerendif()
118*da0073e9SAndroid Build Coastguard Worker
119*da0073e9SAndroid Build Coastguard Workerif(PRINT_CMAKE_DEBUG_INFO)
120*da0073e9SAndroid Build Coastguard Worker  message(STATUS "CPU sources: ")
121*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_CPU_SRCS})
122*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
123*da0073e9SAndroid Build Coastguard Worker  endforeach()
124*da0073e9SAndroid Build Coastguard Worker
125*da0073e9SAndroid Build Coastguard Worker  message(STATUS "GPU sources: (for torch_cuda_cpp)")
126*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_GPU_SRCS})
127*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
128*da0073e9SAndroid Build Coastguard Worker  endforeach()
129*da0073e9SAndroid Build Coastguard Worker
130*da0073e9SAndroid Build Coastguard Worker  message(STATUS "GPU sources: (for torch_cuda_cu)")
131*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_GPU_CU_SRCS})
132*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
133*da0073e9SAndroid Build Coastguard Worker  endforeach()
134*da0073e9SAndroid Build Coastguard Worker
135*da0073e9SAndroid Build Coastguard Worker  message(STATUS "torch_cuda_cu GPU sources (w/ sort by key): ")
136*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_GPU_CU_SRCS_W_SORT_BY_KEY})
137*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
138*da0073e9SAndroid Build Coastguard Worker  endforeach()
139*da0073e9SAndroid Build Coastguard Worker
140*da0073e9SAndroid Build Coastguard Worker  message(STATUS "torch_cuda_cpp GPU sources (w/ sort by key): ")
141*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_GPU_SRCS_W_SORT_BY_KEY})
142*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
143*da0073e9SAndroid Build Coastguard Worker  endforeach()
144*da0073e9SAndroid Build Coastguard Worker
145*da0073e9SAndroid Build Coastguard Worker  message(STATUS "CPU include: ")
146*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_CPU_INCLUDE})
147*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
148*da0073e9SAndroid Build Coastguard Worker  endforeach()
149*da0073e9SAndroid Build Coastguard Worker
150*da0073e9SAndroid Build Coastguard Worker  message(STATUS "GPU include: ")
151*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_GPU_INCLUDE})
152*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
153*da0073e9SAndroid Build Coastguard Worker  endforeach()
154*da0073e9SAndroid Build Coastguard Worker
155*da0073e9SAndroid Build Coastguard Worker  message(STATUS "CPU test sources: ")
156*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_CPU_TEST_SRCS})
157*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
158*da0073e9SAndroid Build Coastguard Worker  endforeach()
159*da0073e9SAndroid Build Coastguard Worker
160*da0073e9SAndroid Build Coastguard Worker  message(STATUS "GPU test sources: ")
161*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_GPU_TEST_SRCS})
162*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
163*da0073e9SAndroid Build Coastguard Worker  endforeach()
164*da0073e9SAndroid Build Coastguard Worker
165*da0073e9SAndroid Build Coastguard Worker  message(STATUS "HIP sources: ")
166*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_HIP_SRCS})
167*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
168*da0073e9SAndroid Build Coastguard Worker  endforeach()
169*da0073e9SAndroid Build Coastguard Worker
170*da0073e9SAndroid Build Coastguard Worker  message(STATUS "MPS sources: ")
171*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_MPS_SRCS})
172*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
173*da0073e9SAndroid Build Coastguard Worker  endforeach()
174*da0073e9SAndroid Build Coastguard Worker
175*da0073e9SAndroid Build Coastguard Worker  message(STATUS "XPU sources: ")
176*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_XPU_SRCS})
177*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
178*da0073e9SAndroid Build Coastguard Worker  endforeach()
179*da0073e9SAndroid Build Coastguard Worker
180*da0073e9SAndroid Build Coastguard Worker  message(STATUS "HIP test sources: ")
181*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${Caffe2_HIP_TEST_SRCS})
182*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
183*da0073e9SAndroid Build Coastguard Worker  endforeach()
184*da0073e9SAndroid Build Coastguard Worker
185*da0073e9SAndroid Build Coastguard Worker  message(STATUS "ATen CPU test sources: ")
186*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${ATen_CPU_TEST_SRCS})
187*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
188*da0073e9SAndroid Build Coastguard Worker  endforeach()
189*da0073e9SAndroid Build Coastguard Worker
190*da0073e9SAndroid Build Coastguard Worker  message(STATUS "ATen MPS test sources: ")
191*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${ATen_MPS_TEST_SRCS})
192*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
193*da0073e9SAndroid Build Coastguard Worker  endforeach()
194*da0073e9SAndroid Build Coastguard Worker
195*da0073e9SAndroid Build Coastguard Worker  message(STATUS "ATen CUDA test sources: ")
196*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${ATen_CUDA_TEST_SRCS})
197*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
198*da0073e9SAndroid Build Coastguard Worker  endforeach()
199*da0073e9SAndroid Build Coastguard Worker
200*da0073e9SAndroid Build Coastguard Worker  message(STATUS "ATen HIP test sources: ")
201*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${ATen_HIP_TEST_SRCS})
202*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
203*da0073e9SAndroid Build Coastguard Worker  endforeach()
204*da0073e9SAndroid Build Coastguard Worker
205*da0073e9SAndroid Build Coastguard Worker  message(STATUS "ATen XPU test sources: ")
206*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${ATen_XPU_TEST_SRCS})
207*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
208*da0073e9SAndroid Build Coastguard Worker  endforeach()
209*da0073e9SAndroid Build Coastguard Worker
210*da0073e9SAndroid Build Coastguard Worker  message(STATUS "ATen Vulkan test sources: ")
211*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${ATen_VULKAN_TEST_SRCS})
212*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
213*da0073e9SAndroid Build Coastguard Worker  endforeach()
214*da0073e9SAndroid Build Coastguard Worker
215*da0073e9SAndroid Build Coastguard Workerendif()
216*da0073e9SAndroid Build Coastguard Worker
217*da0073e9SAndroid Build Coastguard Worker# ==========================================================
218*da0073e9SAndroid Build Coastguard Worker# formerly-libtorch
219*da0073e9SAndroid Build Coastguard Worker# ==========================================================
220*da0073e9SAndroid Build Coastguard Worker
221*da0073e9SAndroid Build Coastguard Workerset(TORCH_SRC_DIR "${PROJECT_SOURCE_DIR}/torch")
222*da0073e9SAndroid Build Coastguard Workerset(TORCH_ROOT "${PROJECT_SOURCE_DIR}")
223*da0073e9SAndroid Build Coastguard Worker
224*da0073e9SAndroid Build Coastguard Workerif(NOT TORCH_INSTALL_BIN_DIR)
225*da0073e9SAndroid Build Coastguard Worker  set(TORCH_INSTALL_BIN_DIR bin)
226*da0073e9SAndroid Build Coastguard Workerendif()
227*da0073e9SAndroid Build Coastguard Worker
228*da0073e9SAndroid Build Coastguard Workerif(NOT TORCH_INSTALL_INCLUDE_DIR)
229*da0073e9SAndroid Build Coastguard Worker  set(TORCH_INSTALL_INCLUDE_DIR include)
230*da0073e9SAndroid Build Coastguard Workerendif()
231*da0073e9SAndroid Build Coastguard Worker
232*da0073e9SAndroid Build Coastguard Workerif(NOT TORCH_INSTALL_LIB_DIR)
233*da0073e9SAndroid Build Coastguard Worker  set(TORCH_INSTALL_LIB_DIR lib)
234*da0073e9SAndroid Build Coastguard Workerendif()
235*da0073e9SAndroid Build Coastguard Worker
236*da0073e9SAndroid Build Coastguard Workerset(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
237*da0073e9SAndroid Build Coastguard Worker
238*da0073e9SAndroid Build Coastguard Worker# Generate files
239*da0073e9SAndroid Build Coastguard Workerset(TOOLS_PATH "${TORCH_ROOT}/tools")
240*da0073e9SAndroid Build Coastguard Worker
241*da0073e9SAndroid Build Coastguard Workerconfigure_file("${TORCH_SRC_DIR}/_utils_internal.py"
242*da0073e9SAndroid Build Coastguard Worker  "${TOOLS_PATH}/shared/_utils_internal.py"
243*da0073e9SAndroid Build Coastguard Worker  COPYONLY)
244*da0073e9SAndroid Build Coastguard Worker
245*da0073e9SAndroid Build Coastguard Worker# Generate header with version info
246*da0073e9SAndroid Build Coastguard Workerconfigure_file("${TORCH_SRC_DIR}/csrc/api/include/torch/version.h.in"
247*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/api/include/torch/version.h"
248*da0073e9SAndroid Build Coastguard Worker  @ONLY)
249*da0073e9SAndroid Build Coastguard Worker
250*da0073e9SAndroid Build Coastguard Workerset(GENERATED_CXX_TORCH
251*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/Functions.cpp"
252*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/ViewFuncs.cpp"
253*da0073e9SAndroid Build Coastguard Worker  )
254*da0073e9SAndroid Build Coastguard Worker
255*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_DISABLE_AUTOGRAD AND NOT BUILD_LITE_INTERPRETER)
256*da0073e9SAndroid Build Coastguard Worker  list(APPEND GENERATED_CXX_TORCH
257*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/VariableType_0.cpp"
258*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/VariableType_1.cpp"
259*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/VariableType_2.cpp"
260*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/VariableType_3.cpp"
261*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/VariableType_4.cpp"
262*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/TraceType_0.cpp"
263*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/TraceType_1.cpp"
264*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/TraceType_2.cpp"
265*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/TraceType_3.cpp"
266*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/TraceType_4.cpp"
267*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/ADInplaceOrViewType_0.cpp"
268*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/ADInplaceOrViewType_1.cpp"
269*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/inductor/aoti_torch/generated/c_shim_cpu.cpp"
270*da0073e9SAndroid Build Coastguard Worker  )
271*da0073e9SAndroid Build Coastguard Worker  if(BUILD_LAZY_TS_BACKEND)
272*da0073e9SAndroid Build Coastguard Worker    list(APPEND GENERATED_CXX_TORCH
273*da0073e9SAndroid Build Coastguard Worker      "${TORCH_SRC_DIR}/csrc/lazy/generated/LazyNativeFunctions.cpp"
274*da0073e9SAndroid Build Coastguard Worker      "${TORCH_SRC_DIR}/csrc/lazy/generated/RegisterAutogradLazy.cpp"
275*da0073e9SAndroid Build Coastguard Worker      "${TORCH_SRC_DIR}/csrc/lazy/generated/RegisterLazy.cpp"
276*da0073e9SAndroid Build Coastguard Worker    )
277*da0073e9SAndroid Build Coastguard Worker  endif()
278*da0073e9SAndroid Build Coastguard Workerendif()
279*da0073e9SAndroid Build Coastguard Worker
280*da0073e9SAndroid Build Coastguard Workerset(GENERATED_H_TORCH
281*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/Functions.h"
282*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/variable_factories.h"
283*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/ViewFuncs.h"
284*da0073e9SAndroid Build Coastguard Worker  )
285*da0073e9SAndroid Build Coastguard Worker
286*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_DISABLE_AUTOGRAD)
287*da0073e9SAndroid Build Coastguard Worker  list(APPEND GENERATED_H_TORCH
288*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/autograd/generated/VariableType.h"
289*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/lazy/generated/LazyIr.h"
290*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/lazy/generated/LazyNonNativeIr.h"
291*da0073e9SAndroid Build Coastguard Worker    "${TORCH_SRC_DIR}/csrc/lazy/generated/LazyNativeFunctions.h"
292*da0073e9SAndroid Build Coastguard Worker  )
293*da0073e9SAndroid Build Coastguard Workerendif()
294*da0073e9SAndroid Build Coastguard Worker
295*da0073e9SAndroid Build Coastguard Workerset(GENERATED_CXX_PYTHON
296*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_functions_0.cpp"
297*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_functions_1.cpp"
298*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_functions_2.cpp"
299*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_functions_3.cpp"
300*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_functions_4.cpp"
301*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_variable_methods.cpp"
302*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_torch_functions_0.cpp"
303*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_torch_functions_1.cpp"
304*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_torch_functions_2.cpp"
305*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_nn_functions.cpp"
306*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_fft_functions.cpp"
307*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_linalg_functions.cpp"
308*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_nested_functions.cpp"
309*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_sparse_functions.cpp"
310*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_special_functions.cpp"
311*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_return_types.cpp"
312*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_enum_tag.cpp"
313*da0073e9SAndroid Build Coastguard Worker  )
314*da0073e9SAndroid Build Coastguard Worker
315*da0073e9SAndroid Build Coastguard Workerset(GENERATED_H_PYTHON
316*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_functions.h"
317*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/autograd/generated/python_return_types.h"
318*da0073e9SAndroid Build Coastguard Worker  )
319*da0073e9SAndroid Build Coastguard Worker
320*da0073e9SAndroid Build Coastguard Workerset(GENERATED_TESTING_PYTHON
321*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/testing/_internal/generated/annotated_fn_args.py"
322*da0073e9SAndroid Build Coastguard Worker  )
323*da0073e9SAndroid Build Coastguard Worker
324*da0073e9SAndroid Build Coastguard Workerset(GENERATED_CXX_TORCH_CUDA
325*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/csrc/inductor/aoti_torch/generated/c_shim_cuda.cpp"
326*da0073e9SAndroid Build Coastguard Worker  )
327*da0073e9SAndroid Build Coastguard Worker
328*da0073e9SAndroid Build Coastguard Workerset(TORCH_GENERATED_CODE
329*da0073e9SAndroid Build Coastguard Worker  ${GENERATED_CXX_TORCH}
330*da0073e9SAndroid Build Coastguard Worker  ${GENERATED_H_TORCH}
331*da0073e9SAndroid Build Coastguard Worker  ${GENERATED_CXX_PYTHON}
332*da0073e9SAndroid Build Coastguard Worker  ${GENERATED_H_PYTHON}
333*da0073e9SAndroid Build Coastguard Worker  ${GENERATED_TESTING_PYTHON}
334*da0073e9SAndroid Build Coastguard Worker  ${GENERATED_CXX_TORCH_CUDA}
335*da0073e9SAndroid Build Coastguard Worker  )
336*da0073e9SAndroid Build Coastguard Worker
337*da0073e9SAndroid Build Coastguard Workerset(GEN_PER_OPERATOR_FLAG)
338*da0073e9SAndroid Build Coastguard Workerif(USE_PER_OPERATOR_HEADERS)
339*da0073e9SAndroid Build Coastguard Worker  list(APPEND GEN_PER_OPERATOR_FLAG "--per_operator_headers")
340*da0073e9SAndroid Build Coastguard Workerendif()
341*da0073e9SAndroid Build Coastguard Worker
342*da0073e9SAndroid Build Coastguard Workerfile(GLOB_RECURSE autograd_python "${TOOLS_PATH}/autograd/*.py")
343*da0073e9SAndroid Build Coastguard Workerfile(GLOB_RECURSE autograd_yaml "${TOOLS_PATH}/autograd/*.yaml")
344*da0073e9SAndroid Build Coastguard Workerfile(GLOB_RECURSE autograd_templates "${TOOLS_PATH}/autograd/templates/*")
345*da0073e9SAndroid Build Coastguard Workeradd_custom_command(
346*da0073e9SAndroid Build Coastguard Worker  OUTPUT
347*da0073e9SAndroid Build Coastguard Worker  ${TORCH_GENERATED_CODE}
348*da0073e9SAndroid Build Coastguard Worker  COMMAND
349*da0073e9SAndroid Build Coastguard Worker  Python::Interpreter tools/setup_helpers/generate_code.py
350*da0073e9SAndroid Build Coastguard Worker    --native-functions-path "aten/src/ATen/native/native_functions.yaml"
351*da0073e9SAndroid Build Coastguard Worker    --tags-path "aten/src/ATen/native/tags.yaml"
352*da0073e9SAndroid Build Coastguard Worker    $<$<BOOL:${INTERN_DISABLE_AUTOGRAD}>:--disable-autograd>
353*da0073e9SAndroid Build Coastguard Worker    $<$<BOOL:${SELECTED_OP_LIST}>:--selected-op-list-path="${SELECTED_OP_LIST}">
354*da0073e9SAndroid Build Coastguard Worker    --force_schema_registration
355*da0073e9SAndroid Build Coastguard Worker    --gen_lazy_ts_backend
356*da0073e9SAndroid Build Coastguard Worker    ${GEN_PER_OPERATOR_FLAG}
357*da0073e9SAndroid Build Coastguard Worker  DEPENDS
358*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/native/native_functions.yaml"
359*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/native/tags.yaml"
360*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/native/ts_native_functions.yaml"
361*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/torch/csrc/lazy/core/shape_inference.h"
362*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/torch/csrc/lazy/ts_backend/ts_native_functions.cpp"
363*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/templates/DispatchKeyNativeFunctions.h"
364*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/templates/DispatchKeyNativeFunctions.cpp"
365*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/templates/LazyIr.h"
366*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/templates/LazyNonNativeIr.h"
367*da0073e9SAndroid Build Coastguard Worker    "${TORCH_ROOT}/aten/src/ATen/templates/RegisterDispatchKey.cpp"
368*da0073e9SAndroid Build Coastguard Worker    ${autograd_python}
369*da0073e9SAndroid Build Coastguard Worker    ${autograd_yaml}
370*da0073e9SAndroid Build Coastguard Worker    ${autograd_templates}
371*da0073e9SAndroid Build Coastguard Worker    ${torchgen_python}
372*da0073e9SAndroid Build Coastguard Worker  WORKING_DIRECTORY "${TORCH_ROOT}")
373*da0073e9SAndroid Build Coastguard Worker
374*da0073e9SAndroid Build Coastguard Worker
375*da0073e9SAndroid Build Coastguard Worker# Required workaround for libtorch_python.so build
376*da0073e9SAndroid Build Coastguard Worker# see https://samthursfield.wordpress.com/2015/11/21/cmake-dependencies-between-targets-and-files-and-custom-commands/#custom-commands-in-different-directories
377*da0073e9SAndroid Build Coastguard Workeradd_custom_target(
378*da0073e9SAndroid Build Coastguard Worker  generate-torch-sources
379*da0073e9SAndroid Build Coastguard Worker  DEPENDS ${TORCH_GENERATED_CODE}
380*da0073e9SAndroid Build Coastguard Worker  )
381*da0073e9SAndroid Build Coastguard Worker
382*da0073e9SAndroid Build Coastguard Workerset(TORCH_SRCS ${GENERATED_CXX_TORCH})
383*da0073e9SAndroid Build Coastguard Workerlist(APPEND TORCH_SRCS ${GENERATED_H_TORCH})
384*da0073e9SAndroid Build Coastguard Workerlist(APPEND LIBTORCH_CMAKE_SRCS "")
385*da0073e9SAndroid Build Coastguard Worker
386*da0073e9SAndroid Build Coastguard Workerlist(APPEND LITE_EAGER_SYMOBLICATION_SRCS "")
387*da0073e9SAndroid Build Coastguard Workerif(USE_SOURCE_DEBUG_ON_MOBILE)
388*da0073e9SAndroid Build Coastguard Worker  append_filelist("libtorch_lite_eager_symbolication" LITE_EAGER_SYMOBLICATION_SRCS)
389*da0073e9SAndroid Build Coastguard Worker  # For source debug on lite interpreter, we have to add dependency on pickling
390*da0073e9SAndroid Build Coastguard Worker  # but references to read/writeArchiveAndTensor is not built for mobile
391*da0073e9SAndroid Build Coastguard Worker  # so this condition specifically says we are building for source debug
392*da0073e9SAndroid Build Coastguard Worker  # on mobile.
393*da0073e9SAndroid Build Coastguard Worker  if(BUILD_LITE_INTERPRETER)
394*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${TORCH_SRC_DIR}/csrc/jit/serialization/pickle.cpp PROPERTIES COMPILE_FLAGS "-DC10_MOBILE -DFEATURE_TORCH_MOBILE")
395*da0073e9SAndroid Build Coastguard Worker  endif()
396*da0073e9SAndroid Build Coastguard Workerendif()
397*da0073e9SAndroid Build Coastguard Worker
398*da0073e9SAndroid Build Coastguard Workerlist(APPEND LITE_PROFILER_SRCS "")
399*da0073e9SAndroid Build Coastguard Workerif(USE_LITE_INTERPRETER_PROFILER)
400*da0073e9SAndroid Build Coastguard Worker  append_filelist("libtorch_edge_profiler_sources " LITE_PROFILER_SRCS)
401*da0073e9SAndroid Build Coastguard Workerendif()
402*da0073e9SAndroid Build Coastguard Worker
403*da0073e9SAndroid Build Coastguard Worker# Switch between the full jit interpreter and lite interpreter
404*da0073e9SAndroid Build Coastguard Workerif(BUILD_LITE_INTERPRETER)
405*da0073e9SAndroid Build Coastguard Worker  append_filelist("libtorch_lite_cmake_sources" LIBTORCH_CMAKE_SRCS)
406*da0073e9SAndroid Build Coastguard Worker  list(APPEND LIBTORCH_CMAKE_SRCS ${LITE_EAGER_SYMOBLICATION_SRCS})
407*da0073e9SAndroid Build Coastguard Worker  list(APPEND LIBTORCH_CMAKE_SRCS ${LITE_PROFILER_SRCS})
408*da0073e9SAndroid Build Coastguard Worker  if(USE_LITE_AOTI)
409*da0073e9SAndroid Build Coastguard Worker    append_filelist("inductor_core_resources" LIBTORCH_CMAKE_SRCS)
410*da0073e9SAndroid Build Coastguard Worker  endif()
411*da0073e9SAndroid Build Coastguard Worker  set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
412*da0073e9SAndroid Build Coastguard Workerelse()
413*da0073e9SAndroid Build Coastguard Worker  append_filelist("libtorch_cmake_sources" LIBTORCH_CMAKE_SRCS)
414*da0073e9SAndroid Build Coastguard Worker  list(APPEND LIBTORCH_CMAKE_SRCS ${LITE_EAGER_SYMOBLICATION_SRCS})
415*da0073e9SAndroid Build Coastguard Worker  if(BUILD_LAZY_TS_BACKEND)
416*da0073e9SAndroid Build Coastguard Worker    append_filelist("lazy_tensor_ts_sources" LIBTORCH_CMAKE_SRCS)
417*da0073e9SAndroid Build Coastguard Worker  endif()
418*da0073e9SAndroid Build Coastguard Worker  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
419*da0073e9SAndroid Build Coastguard Worker    # TODO: Delete this when https://github.com/pytorch/pytorch/issues/35026 is fixed
420*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(../torch/csrc/autograd/record_function_ops.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
421*da0073e9SAndroid Build Coastguard Worker  endif()
422*da0073e9SAndroid Build Coastguard Workerendif()
423*da0073e9SAndroid Build Coastguard Workerlist(APPEND TORCH_SRCS ${LIBTORCH_CMAKE_SRCS})
424*da0073e9SAndroid Build Coastguard Worker
425*da0073e9SAndroid Build Coastguard Workerif(PRINT_CMAKE_DEBUG_INFO)
426*da0073e9SAndroid Build Coastguard Worker  message(STATUS "Interpreter sources: ")
427*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${LIBTORCH_CMAKE_SRCS})
428*da0073e9SAndroid Build Coastguard Worker    message(STATUS "  " ${tmp})
429*da0073e9SAndroid Build Coastguard Worker  endforeach()
430*da0073e9SAndroid Build Coastguard Workerendif()
431*da0073e9SAndroid Build Coastguard Worker
432*da0073e9SAndroid Build Coastguard Worker# Mobile backend delegate srcs
433*da0073e9SAndroid Build Coastguard Workerif(INTERN_BUILD_MOBILE)
434*da0073e9SAndroid Build Coastguard Worker  set(DELEGATE_SRCS
435*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/backends/backend_debug_info.cpp
436*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/backends/backend_interface.cpp
437*da0073e9SAndroid Build Coastguard Worker  )
438*da0073e9SAndroid Build Coastguard Worker  list(APPEND TORCH_SRCS ${DELEGATE_SRCS})
439*da0073e9SAndroid Build Coastguard Worker  if(IOS AND USE_COREML_DELEGATE)
440*da0073e9SAndroid Build Coastguard Worker    set(COREML_DELEGATE_SRCS
441*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/jit/backends/coreml/cpp/context.cpp
442*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/jit/backends/coreml/objc/PTMCoreMLBackend.mm
443*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/jit/backends/coreml/objc/PTMCoreMLExecutor.mm
444*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/jit/backends/coreml/objc/PTMCoreMLCompiler.mm
445*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/jit/backends/coreml/objc/PTMCoreMLFeatureProvider.mm
446*da0073e9SAndroid Build Coastguard Worker    )
447*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${TORCH_SRC_DIR}/csrc/jit/backends/coreml/objc/PTMCoreMLBackend.mm PROPERTIES COMPILE_FLAGS "-fno-objc-arc")
448*da0073e9SAndroid Build Coastguard Worker    include_directories(${TORCH_ROOT}/third_party/nlohmann/single_include)
449*da0073e9SAndroid Build Coastguard Worker    list(APPEND TORCH_SRCS ${COREML_DELEGATE_SRCS})
450*da0073e9SAndroid Build Coastguard Worker  endif()
451*da0073e9SAndroid Build Coastguard Workerendif()
452*da0073e9SAndroid Build Coastguard Worker
453*da0073e9SAndroid Build Coastguard Worker# Required workaround for LLVM 9 includes.
454*da0073e9SAndroid Build Coastguard Workerif(NOT MSVC)
455*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${TORCH_SRC_DIR}/csrc/jit/tensorexpr/llvm_jit.cpp PROPERTIES COMPILE_FLAGS -Wno-noexcept-type)
456*da0073e9SAndroid Build Coastguard Workerendif()
457*da0073e9SAndroid Build Coastguard Worker# Disable certain warnings for GCC-9.X
458*da0073e9SAndroid Build Coastguard Workerif(CMAKE_COMPILER_IS_GNUCXX)
459*da0073e9SAndroid Build Coastguard Worker  # See https://github.com/pytorch/pytorch/issues/38856
460*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${TORCH_SRC_DIR}/csrc/jit/tensorexpr/llvm_jit.cpp PROPERTIES COMPILE_FLAGS "-Wno-redundant-move -Wno-noexcept-type")
461*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${TORCH_SRC_DIR}/csrc/jit/tensorexpr/llvm_codegen.cpp PROPERTIES COMPILE_FLAGS "-Wno-init-list-lifetime")
462*da0073e9SAndroid Build Coastguard Workerendif()
463*da0073e9SAndroid Build Coastguard Worker
464*da0073e9SAndroid Build Coastguard Worker# Enable conditional FP16 arithmetic intrinsics
465*da0073e9SAndroid Build Coastguard Workerif(CPU_AARCH64 AND LINUX)
466*da0073e9SAndroid Build Coastguard Workerset_source_files_properties(${TORCH_ROOT}/aten/src/ATen/native/BlasKernel.cpp PROPERTIES COMPILE_FLAGS "-march=armv8.2-a+fp16")
467*da0073e9SAndroid Build Coastguard Workerendif()
468*da0073e9SAndroid Build Coastguard Worker
469*da0073e9SAndroid Build Coastguard Worker
470*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_DISABLE_MOBILE_INTERP)
471*da0073e9SAndroid Build Coastguard Worker  set(MOBILE_SRCS
472*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/function.cpp
473*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/import.cpp
474*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/import_data.cpp
475*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/interpreter.cpp
476*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/compatibility/model_compatibility.cpp
477*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/module.cpp
478*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/flatbuffer_loader.cpp
479*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/observer.cpp
480*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/parse_bytecode.cpp
481*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/parse_operators.cpp
482*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/quantization.cpp
483*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/train/export_data.cpp
484*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/train/optim/sgd.cpp
485*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/train/random.cpp
486*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/train/sequential.cpp
487*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/mobile/upgrader_mobile.cpp
488*da0073e9SAndroid Build Coastguard Worker     ${TORCH_SRC_DIR}/csrc/jit/serialization/flatbuffer_serializer.cpp
489*da0073e9SAndroid Build Coastguard Worker     )
490*da0073e9SAndroid Build Coastguard Worker  list(APPEND TORCH_SRCS ${MOBILE_SRCS})
491*da0073e9SAndroid Build Coastguard Worker  list(APPEND TORCH_SRCS ${LITE_EAGER_SYMOBLICATION_SRCS})
492*da0073e9SAndroid Build Coastguard Workerendif()
493*da0073e9SAndroid Build Coastguard Worker
494*da0073e9SAndroid Build Coastguard Worker# This one needs to be unconditionally added as Functions.cpp is also unconditionally added
495*da0073e9SAndroid Build Coastguard Workerlist(APPEND TORCH_SRCS
496*da0073e9SAndroid Build Coastguard Worker  ${TORCH_SRC_DIR}/csrc/autograd/FunctionsManual.cpp
497*da0073e9SAndroid Build Coastguard Worker  ${TORCH_SRC_DIR}/csrc/utils/out_types.cpp
498*da0073e9SAndroid Build Coastguard Worker)
499*da0073e9SAndroid Build Coastguard Worker
500*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_DISABLE_AUTOGRAD AND NOT BUILD_LITE_INTERPRETER)
501*da0073e9SAndroid Build Coastguard Worker  list(APPEND TORCH_SRCS
502*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/autograd/TraceTypeManual.cpp
503*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/autograd/VariableTypeManual.cpp
504*da0073e9SAndroid Build Coastguard Worker  )
505*da0073e9SAndroid Build Coastguard Workerendif()
506*da0073e9SAndroid Build Coastguard Worker
507*da0073e9SAndroid Build Coastguard Workerif(${USE_ITT})
508*da0073e9SAndroid Build Coastguard Worker  list(APPEND TORCH_SRCS
509*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/itt_wrapper.cpp
510*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/profiler/stubs/itt.cpp
511*da0073e9SAndroid Build Coastguard Worker  )
512*da0073e9SAndroid Build Coastguard Workerendif()
513*da0073e9SAndroid Build Coastguard Worker
514*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_BUILD_MOBILE AND NOT BUILD_LITE_INTERPRETER)
515*da0073e9SAndroid Build Coastguard Worker  list(APPEND TORCH_SRCS
516*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/jit.cpp
517*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/mobile/compatibility/backport.cpp
518*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/mobile/compatibility/backport_manager.cpp
519*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/serialization/onnx.cpp
520*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/serialization/export.cpp
521*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/serialization/export_bytecode.cpp
522*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/serialization/export_module.cpp
523*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/serialization/flatbuffer_serializer.cpp
524*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/fuser/cpu/fused_kernel.cpp
525*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/api/module_save.cpp
526*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/utils/byte_order.cpp
527*da0073e9SAndroid Build Coastguard Worker  )
528*da0073e9SAndroid Build Coastguard Worker
529*da0073e9SAndroid Build Coastguard Worker  if(USE_DISTRIBUTED)
530*da0073e9SAndroid Build Coastguard Worker    append_filelist("libtorch_distributed_base_sources" TORCH_SRCS)
531*da0073e9SAndroid Build Coastguard Worker    if(NOT WIN32)
532*da0073e9SAndroid Build Coastguard Worker      append_filelist("libtorch_distributed_extra_sources" TORCH_SRCS)
533*da0073e9SAndroid Build Coastguard Worker    endif()
534*da0073e9SAndroid Build Coastguard Worker  endif()
535*da0073e9SAndroid Build Coastguard Workerendif()
536*da0073e9SAndroid Build Coastguard Worker
537*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA OR USE_ROCM)
538*da0073e9SAndroid Build Coastguard Worker  append_filelist("libtorch_cuda_core_sources" Caffe2_GPU_HIP_JIT_FUSERS_SRCS)
539*da0073e9SAndroid Build Coastguard Workerendif()
540*da0073e9SAndroid Build Coastguard Worker
541*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA)
542*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_CU_SRCS ${Caffe2_GPU_HIP_JIT_FUSERS_SRCS})
543*da0073e9SAndroid Build Coastguard Worker  add_library(caffe2_nvrtc SHARED ${ATen_NVRTC_STUB_SRCS})
544*da0073e9SAndroid Build Coastguard Worker  if(MSVC)
545*da0073e9SAndroid Build Coastguard Worker    # Delay load nvcuda.dll so we can import torch compiled with cuda on a CPU-only machine
546*da0073e9SAndroid Build Coastguard Worker    set(DELAY_LOAD_FLAGS "-DELAYLOAD:nvcuda.dll;delayimp.lib")
547*da0073e9SAndroid Build Coastguard Worker  else()
548*da0073e9SAndroid Build Coastguard Worker    set(DELAY_LOAD_FLAGS "")
549*da0073e9SAndroid Build Coastguard Worker  endif()
550*da0073e9SAndroid Build Coastguard Worker
551*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(caffe2_nvrtc PRIVATE caffe2::nvrtc ${DELAY_LOAD_FLAGS})
552*da0073e9SAndroid Build Coastguard Worker  install(TARGETS caffe2_nvrtc DESTINATION "${TORCH_INSTALL_LIB_DIR}")
553*da0073e9SAndroid Build Coastguard Worker  if(USE_NCCL)
554*da0073e9SAndroid Build Coastguard Worker    list(APPEND Caffe2_GPU_SRCS
555*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/cuda/nccl.cpp)
556*da0073e9SAndroid Build Coastguard Worker  endif()
557*da0073e9SAndroid Build Coastguard Worker  if(USE_DISTRIBUTED)
558*da0073e9SAndroid Build Coastguard Worker    append_filelist("libtorch_cuda_distributed_base_sources" Caffe2_GPU_SRCS)
559*da0073e9SAndroid Build Coastguard Worker    if(NOT WIN32)
560*da0073e9SAndroid Build Coastguard Worker      append_filelist("libtorch_cuda_distributed_extra_sources" Caffe2_GPU_SRCS)
561*da0073e9SAndroid Build Coastguard Worker      set_source_files_properties(
562*da0073e9SAndroid Build Coastguard Worker        ${TORCH_SRC_DIR}/csrc/distributed/c10d/intra_node_comm.cpp
563*da0073e9SAndroid Build Coastguard Worker        ${TORCH_SRC_DIR}/csrc/distributed/c10d/CudaDMAConnectivity.cpp
564*da0073e9SAndroid Build Coastguard Worker        ${TORCH_SRC_DIR}/csrc/distributed/c10d/CUDASymmetricMemory.cu
565*da0073e9SAndroid Build Coastguard Worker        PROPERTIES COMPILE_FLAGS "-DPYTORCH_C10_DRIVER_API_SUPPORTED=1"
566*da0073e9SAndroid Build Coastguard Worker      )
567*da0073e9SAndroid Build Coastguard Worker    endif()
568*da0073e9SAndroid Build Coastguard Worker  endif()
569*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(
570*da0073e9SAndroid Build Coastguard Worker    ${TORCH_ROOT}/aten/src/ATen/cuda/detail/LazyNVRTC.cpp
571*da0073e9SAndroid Build Coastguard Worker    PROPERTIES COMPILE_DEFINITIONS "NVRTC_SHORTHASH=${CUDA_NVRTC_SHORTHASH}"
572*da0073e9SAndroid Build Coastguard Worker  )
573*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${TORCH_SRC_DIR}/csrc/jit/passes/frozen_conv_add_relu_fusion.cpp PROPERTIES COMPILE_FLAGS "-DUSE_CUDA=1")
574*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${TORCH_SRC_DIR}/csrc/jit/codegen/cuda/interface.cpp PROPERTIES COMPILE_FLAGS "-DUSE_CUDA=1")
575*da0073e9SAndroid Build Coastguard Workerendif()
576*da0073e9SAndroid Build Coastguard Worker
577*da0073e9SAndroid Build Coastguard Workerif(BUILD_ONEDNN_GRAPH)
578*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_CPU_SRCS
579*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/LlgaTensorImpl.cpp
580*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/graph_fuser.cpp
581*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/graph_rewriter.cpp
582*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/graph_helper.cpp
583*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/register_interface.cpp
584*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/decompose_silu.cpp
585*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/interface.cpp
586*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/kernel.cpp
587*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/defer_size_check.cpp
588*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/layout_propagation.cpp
589*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/prepare_binary.cpp
590*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/jit/codegen/onednn/guard_shape.cpp
591*da0073e9SAndroid Build Coastguard Worker  )
592*da0073e9SAndroid Build Coastguard Workerendif()
593*da0073e9SAndroid Build Coastguard Worker
594*da0073e9SAndroid Build Coastguard Workerif(USE_ROCM)
595*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_HIP_SRCS ${Caffe2_GPU_HIP_JIT_FUSERS_SRCS})
596*da0073e9SAndroid Build Coastguard Worker  if(USE_NCCL)
597*da0073e9SAndroid Build Coastguard Worker    list(APPEND Caffe2_HIP_SRCS
598*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/cuda/nccl.cpp)
599*da0073e9SAndroid Build Coastguard Worker  endif()
600*da0073e9SAndroid Build Coastguard Worker  if(USE_DISTRIBUTED)
601*da0073e9SAndroid Build Coastguard Worker    append_filelist("libtorch_cuda_distributed_base_sources" Caffe2_HIP_SRCS)
602*da0073e9SAndroid Build Coastguard Worker    if(NOT WIN32)
603*da0073e9SAndroid Build Coastguard Worker      append_filelist("libtorch_cuda_distributed_extra_sources" Caffe2_HIP_SRCS)
604*da0073e9SAndroid Build Coastguard Worker    endif()
605*da0073e9SAndroid Build Coastguard Worker  endif()
606*da0073e9SAndroid Build Coastguard Worker  # caffe2_nvrtc's stubs to driver APIs are useful for HIP.
607*da0073e9SAndroid Build Coastguard Worker  # See NOTE [ ATen NVRTC Stub and HIP ]
608*da0073e9SAndroid Build Coastguard Worker  add_library(caffe2_nvrtc SHARED ${ATen_NVRTC_STUB_SRCS})
609*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(caffe2_nvrtc ${PYTORCH_HIP_LIBRARIES} ${ROCM_HIPRTC_LIB})
610*da0073e9SAndroid Build Coastguard Worker  target_include_directories(caffe2_nvrtc PRIVATE ${CMAKE_BINARY_DIR})
611*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(caffe2_nvrtc PRIVATE USE_ROCM __HIP_PLATFORM_AMD__)
612*da0073e9SAndroid Build Coastguard Worker  install(TARGETS caffe2_nvrtc DESTINATION "${TORCH_INSTALL_LIB_DIR}")
613*da0073e9SAndroid Build Coastguard Workerendif()
614*da0073e9SAndroid Build Coastguard Worker
615*da0073e9SAndroid Build Coastguard Workerif(NOT NO_API AND NOT BUILD_LITE_INTERPRETER)
616*da0073e9SAndroid Build Coastguard Worker  list(APPEND TORCH_SRCS
617*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/cuda.cpp
618*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/data/datasets/mnist.cpp
619*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/data/samplers/distributed.cpp
620*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/data/samplers/random.cpp
621*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/data/samplers/sequential.cpp
622*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/data/samplers/stream.cpp
623*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/enum.cpp
624*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/imethod.cpp
625*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/serialize.cpp
626*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/jit.cpp
627*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/mps.cpp
628*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/init.cpp
629*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/module.cpp
630*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/_functions.cpp
631*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/activation.cpp
632*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/adaptive.cpp
633*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/batchnorm.cpp
634*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/normalization.cpp
635*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/instancenorm.cpp
636*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/conv.cpp
637*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/dropout.cpp
638*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/distance.cpp
639*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/embedding.cpp
640*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/fold.cpp
641*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/linear.cpp
642*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/loss.cpp
643*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/padding.cpp
644*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/pixelshuffle.cpp
645*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/pooling.cpp
646*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/rnn.cpp
647*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/upsampling.cpp
648*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/transformer.cpp
649*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/modules/container/functional.cpp
650*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/activation.cpp
651*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/adaptive.cpp
652*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/batchnorm.cpp
653*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/embedding.cpp
654*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/instancenorm.cpp
655*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/normalization.cpp
656*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/conv.cpp
657*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/dropout.cpp
658*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/linear.cpp
659*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/padding.cpp
660*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/pooling.cpp
661*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/rnn.cpp
662*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/vision.cpp
663*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/nn/options/transformer.cpp
664*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/adagrad.cpp
665*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/adam.cpp
666*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/adamw.cpp
667*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/lbfgs.cpp
668*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/optimizer.cpp
669*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/rmsprop.cpp
670*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/serialize.cpp
671*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/sgd.cpp
672*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/schedulers/lr_scheduler.cpp
673*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/schedulers/step_lr.cpp
674*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/optim/schedulers/reduce_on_plateau_scheduler.cpp
675*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/serialize/input-archive.cpp
676*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/serialize/output-archive.cpp
677*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/src/xpu.cpp
678*da0073e9SAndroid Build Coastguard Worker  )
679*da0073e9SAndroid Build Coastguard Workerendif()
680*da0073e9SAndroid Build Coastguard Worker
681*da0073e9SAndroid Build Coastguard Workerlist(APPEND Caffe2_CPU_SRCS ${TORCH_SRCS})
682*da0073e9SAndroid Build Coastguard Worker
683*da0073e9SAndroid Build Coastguard Workerif(USE_MPS)
684*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_CPU_SRCS ${Caffe2_MPS_SRCS})
685*da0073e9SAndroid Build Coastguard Workerendif()
686*da0073e9SAndroid Build Coastguard Worker
687*da0073e9SAndroid Build Coastguard Worker# NOTE [ Linking AVX and non-AVX files ]
688*da0073e9SAndroid Build Coastguard Worker#
689*da0073e9SAndroid Build Coastguard Worker# Regardless of the CPU capabilities, we build some files with AVX2, and AVX512
690*da0073e9SAndroid Build Coastguard Worker# instruction set. If the host CPU doesn't support those, we simply ignore their
691*da0073e9SAndroid Build Coastguard Worker# functions at runtime during dispatch.
692*da0073e9SAndroid Build Coastguard Worker#
693*da0073e9SAndroid Build Coastguard Worker# We must make sure that those files are at the end of the input list when
694*da0073e9SAndroid Build Coastguard Worker# linking the torch_cpu library. Otherwise, the following error scenario might
695*da0073e9SAndroid Build Coastguard Worker# occur:
696*da0073e9SAndroid Build Coastguard Worker# 1. A non-AVX2 and an AVX2 file both call a function defined with the `inline`
697*da0073e9SAndroid Build Coastguard Worker#    keyword
698*da0073e9SAndroid Build Coastguard Worker# 2. The compiler decides not to inline this function
699*da0073e9SAndroid Build Coastguard Worker# 3. Two different versions of the machine code are generated for this function:
700*da0073e9SAndroid Build Coastguard Worker#    one without AVX2 instructions and one with AVX2.
701*da0073e9SAndroid Build Coastguard Worker# 4. When linking, the AVX2 version is found earlier in the input object files,
702*da0073e9SAndroid Build Coastguard Worker#    so the linker makes the entire library use it, even in code not guarded by
703*da0073e9SAndroid Build Coastguard Worker#    the dispatcher.
704*da0073e9SAndroid Build Coastguard Worker# 5. A CPU without AVX2 support executes this function, encounters an AVX2
705*da0073e9SAndroid Build Coastguard Worker#    instruction and crashes.
706*da0073e9SAndroid Build Coastguard Worker#
707*da0073e9SAndroid Build Coastguard Worker# Thus we organize the input files in the following order:
708*da0073e9SAndroid Build Coastguard Worker# 1. All files with no AVX-n support
709*da0073e9SAndroid Build Coastguard Worker# 2. All files with AVX2 support ('*AVX2.cpp')
710*da0073e9SAndroid Build Coastguard Worker# 3. All files with AVX512 support ('*AVX512.cpp')
711*da0073e9SAndroid Build Coastguard Workerset(Caffe2_CPU_SRCS_NON_AVX)
712*da0073e9SAndroid Build Coastguard Workerset(Caffe2_CPU_SRCS_AVX2)
713*da0073e9SAndroid Build Coastguard Workerset(Caffe2_CPU_SRCS_AVX512)
714*da0073e9SAndroid Build Coastguard Workerforeach(input_filename ${Caffe2_CPU_SRCS})
715*da0073e9SAndroid Build Coastguard Worker  if(${input_filename} MATCHES "AVX2\\.cpp")
716*da0073e9SAndroid Build Coastguard Worker    list(APPEND Caffe2_CPU_SRCS_AVX2 ${input_filename})
717*da0073e9SAndroid Build Coastguard Worker  elseif(${input_filename} MATCHES "AVX512\\.cpp")
718*da0073e9SAndroid Build Coastguard Worker    list(APPEND Caffe2_CPU_SRCS_AVX512 ${input_filename})
719*da0073e9SAndroid Build Coastguard Worker  else()
720*da0073e9SAndroid Build Coastguard Worker    list(APPEND Caffe2_CPU_SRCS_NON_AVX ${input_filename})
721*da0073e9SAndroid Build Coastguard Worker  endif()
722*da0073e9SAndroid Build Coastguard Workerendforeach(input_filename)
723*da0073e9SAndroid Build Coastguard Workerset(Caffe2_CPU_SRCS ${Caffe2_CPU_SRCS_NON_AVX} ${Caffe2_CPU_SRCS_AVX2} ${Caffe2_CPU_SRCS_AVX512})
724*da0073e9SAndroid Build Coastguard Worker
725*da0073e9SAndroid Build Coastguard Worker# ==========================================================
726*da0073e9SAndroid Build Coastguard Worker# END formerly-libtorch sources
727*da0073e9SAndroid Build Coastguard Worker# ==========================================================
728*da0073e9SAndroid Build Coastguard Worker
729*da0073e9SAndroid Build Coastguard Workerif(BUILD_LIBTORCHLESS)
730*da0073e9SAndroid Build Coastguard Worker  find_library(TORCH_LIB torch PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
731*da0073e9SAndroid Build Coastguard Worker  find_library(TORCH_CPU_LIB torch_cpu PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
732*da0073e9SAndroid Build Coastguard Worker
733*da0073e9SAndroid Build Coastguard Worker  if(USE_CUDA)
734*da0073e9SAndroid Build Coastguard Worker    find_library(TORCH_CUDA_LIB torch_cuda PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
735*da0073e9SAndroid Build Coastguard Worker  endif()
736*da0073e9SAndroid Build Coastguard Worker
737*da0073e9SAndroid Build Coastguard Worker  if(USE_ROCM)
738*da0073e9SAndroid Build Coastguard Worker    find_library(TORCH_HIP_LIB torch_hip PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
739*da0073e9SAndroid Build Coastguard Worker  endif()
740*da0073e9SAndroid Build Coastguard Worker
741*da0073e9SAndroid Build Coastguard Worker  if(USE_XPU)
742*da0073e9SAndroid Build Coastguard Worker    find_library(TORCH_XPU_LIB torch_xpu PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
743*da0073e9SAndroid Build Coastguard Worker  endif()
744*da0073e9SAndroid Build Coastguard Worker  add_subdirectory(../torch torch)
745*da0073e9SAndroid Build Coastguard Worker  # ---[ Torch python bindings build
746*da0073e9SAndroid Build Coastguard Worker  set(TORCH_PYTHON_COMPILE_OPTIONS ${TORCH_PYTHON_COMPILE_OPTIONS} PARENT_SCOPE)
747*da0073e9SAndroid Build Coastguard Worker  set(TORCH_PYTHON_LINK_FLAGS ${TORCH_PYTHON_LINK_FLAGS} PARENT_SCOPE)
748*da0073e9SAndroid Build Coastguard Workerelse()
749*da0073e9SAndroid Build Coastguard Worker  set(TORCH_LIB torch)
750*da0073e9SAndroid Build Coastguard Worker  set(TORCH_CPU_LIB torch_cpu)
751*da0073e9SAndroid Build Coastguard Worker  set(TORCH_CUDA_LIB torch_cuda)
752*da0073e9SAndroid Build Coastguard Worker  set(TORCH_HIP_LIB torch_hip)
753*da0073e9SAndroid Build Coastguard Worker  set(TORCH_XPU_LIB torch_xpu)
754*da0073e9SAndroid Build Coastguard Workerendif()
755*da0073e9SAndroid Build Coastguard Worker
756*da0073e9SAndroid Build Coastguard Worker
757*da0073e9SAndroid Build Coastguard Workerif(NOT BUILD_LIBTORCHLESS)
758*da0073e9SAndroid Build Coastguard Workeradd_library(torch_cpu ${Caffe2_CPU_SRCS})
759*da0073e9SAndroid Build Coastguard Workerif(HAVE_SOVERSION)
760*da0073e9SAndroid Build Coastguard Worker  set_target_properties(torch_cpu PROPERTIES
761*da0073e9SAndroid Build Coastguard Worker      VERSION ${TORCH_VERSION} SOVERSION ${TORCH_SOVERSION})
762*da0073e9SAndroid Build Coastguard Workerendif()
763*da0073e9SAndroid Build Coastguard Workertorch_compile_options(torch_cpu)  # see cmake/public/utils.cmake
764*da0073e9SAndroid Build Coastguard Worker
765*da0073e9SAndroid Build Coastguard Worker# Ignore Wdeprecated-XXX errors from third-party libraries
766*da0073e9SAndroid Build Coastguard Workerif(NOT MSVC)
767*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${PROJECT_SOURCE_DIR}/torch/csrc/distributed/c10d/socket.cpp PROPERTIES COMPILE_OPTIONS "-Wno-error=deprecated")
768*da0073e9SAndroid Build Coastguard Workerendif()
769*da0073e9SAndroid Build Coastguard Worker
770*da0073e9SAndroid Build Coastguard Workerif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND NOT USE_IOS AND NOT USE_COREML_DELEGATE)
771*da0073e9SAndroid Build Coastguard Worker  target_compile_options_if_supported(torch_cpu "-Wmissing-prototypes")
772*da0073e9SAndroid Build Coastguard Worker  target_compile_options_if_supported(torch_cpu "-Werror=missing-prototypes")
773*da0073e9SAndroid Build Coastguard Worker  get_target_property(TORCH_CPU_SOURCES torch_cpu SOURCES)
774*da0073e9SAndroid Build Coastguard Worker  foreach(generated_file IN LISTS GENERATED_CXX_TORCH)
775*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${generated_file} PROPERTIES COMPILE_OPTIONS "-Wno-missing-prototypes;-Wno-error=missing-prototypes")
776*da0073e9SAndroid Build Coastguard Worker  endforeach()
777*da0073e9SAndroid Build Coastguard Worker  foreach(source_file IN LISTS TORCH_CPU_SOURCES)
778*da0073e9SAndroid Build Coastguard Worker    get_filename_component(source_file "${source_file}" REALPATH)
779*da0073e9SAndroid Build Coastguard Worker    string(FIND "${source_file}" "${CMAKE_BINARY_DIR}" res)
780*da0073e9SAndroid Build Coastguard Worker    if(res GREATER -1)
781*da0073e9SAndroid Build Coastguard Worker      set_source_files_properties(${source_file} PROPERTIES COMPILE_OPTIONS "-Wno-missing-prototypes;-Wno-error=missing-prototypes")
782*da0073e9SAndroid Build Coastguard Worker      continue()
783*da0073e9SAndroid Build Coastguard Worker    endif()
784*da0073e9SAndroid Build Coastguard Worker    string(FIND "${source_file}" "caffe2" res)
785*da0073e9SAndroid Build Coastguard Worker    if(res GREATER -1)
786*da0073e9SAndroid Build Coastguard Worker      set_source_files_properties(${source_file} PROPERTIES COMPILE_OPTIONS "-Wno-missing-prototypes;-Wno-error=missing-prototypes")
787*da0073e9SAndroid Build Coastguard Worker    endif()
788*da0073e9SAndroid Build Coastguard Worker  endforeach()
789*da0073e9SAndroid Build Coastguard Workerendif()
790*da0073e9SAndroid Build Coastguard Worker
791*da0073e9SAndroid Build Coastguard Workeroption(TORCH_USE_IWYU "Use include-what-you-use to clean up header inclusion" OFF)
792*da0073e9SAndroid Build Coastguard Workerif(TORCH_USE_IWYU)
793*da0073e9SAndroid Build Coastguard Worker  find_program(iwyu NAMES include-what-you-use)
794*da0073e9SAndroid Build Coastguard Worker  if(iwyu)
795*da0073e9SAndroid Build Coastguard Worker    set(iwyu_cmd
796*da0073e9SAndroid Build Coastguard Worker        "include-what-you-use"
797*da0073e9SAndroid Build Coastguard Worker        "-Xiwyu"
798*da0073e9SAndroid Build Coastguard Worker        "--transitive_includes_only"
799*da0073e9SAndroid Build Coastguard Worker        "-Xiwyu"
800*da0073e9SAndroid Build Coastguard Worker        "--no_fwd_decls"
801*da0073e9SAndroid Build Coastguard Worker        "-Xiwyu"
802*da0073e9SAndroid Build Coastguard Worker        "--prefix_header_includes=keep"
803*da0073e9SAndroid Build Coastguard Worker        "-Xiwyu"
804*da0073e9SAndroid Build Coastguard Worker        "--mapping_file=${CMAKE_CURRENT_LIST_DIR}/../tools/iwyu/all.imp"
805*da0073e9SAndroid Build Coastguard Worker        )
806*da0073e9SAndroid Build Coastguard Worker    set_property(TARGET torch_cpu PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${iwyu_cmd})
807*da0073e9SAndroid Build Coastguard Worker  endif()
808*da0073e9SAndroid Build Coastguard Workerendif()
809*da0073e9SAndroid Build Coastguard Worker
810*da0073e9SAndroid Build Coastguard Workerset_property(SOURCE ${ATen_CORE_SRCS} APPEND
811*da0073e9SAndroid Build Coastguard Worker    PROPERTY COMPILE_DEFINITIONS "TORCH_ASSERT_ONLY_METHOD_OPERATORS")
812*da0073e9SAndroid Build Coastguard Workerset_property(SOURCE ${ATen_ATTENTION_KERNEL_SRCS} APPEND
813*da0073e9SAndroid Build Coastguard Worker    PROPERTY COMPILE_DEFINITIONS "TORCH_ASSERT_NO_OPERATORS")
814*da0073e9SAndroid Build Coastguard Worker
815*da0073e9SAndroid Build Coastguard Workerif(USE_MPS OR USE_PYTORCH_METAL)
816*da0073e9SAndroid Build Coastguard Worker  enable_language(OBJC OBJCXX)
817*da0073e9SAndroid Build Coastguard Workerendif()
818*da0073e9SAndroid Build Coastguard Worker
819*da0073e9SAndroid Build Coastguard Workerif(USE_PRECOMPILED_HEADERS)
820*da0073e9SAndroid Build Coastguard Worker  target_precompile_headers(torch_cpu PRIVATE
821*da0073e9SAndroid Build Coastguard Worker      "$<$<COMPILE_LANGUAGE:CXX>:ATen/core/ATen_pch.h>")
822*da0073e9SAndroid Build Coastguard Worker  # Exclude some files from using PCH
823*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(
824*da0073e9SAndroid Build Coastguard Worker      # Not built with OpenMP, so PCH is invalid
825*da0073e9SAndroid Build Coastguard Worker      ${Torch_SOURCE_DIR}/aten/src/ATen/MapAllocator.cpp
826*da0073e9SAndroid Build Coastguard Worker      # Builds with incompatible compiler flags
827*da0073e9SAndroid Build Coastguard Worker      ${Caffe2_CPU_SRCS_AVX2}
828*da0073e9SAndroid Build Coastguard Worker      ${Caffe2_CPU_SRCS_AVX512}
829*da0073e9SAndroid Build Coastguard Worker      PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
830*da0073e9SAndroid Build Coastguard Workerendif()
831*da0073e9SAndroid Build Coastguard Worker
832*da0073e9SAndroid Build Coastguard Worker# Pass path to PocketFFT
833*da0073e9SAndroid Build Coastguard Workerif(AT_POCKETFFT_ENABLED)
834*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(
835*da0073e9SAndroid Build Coastguard Worker      "${PROJECT_SOURCE_DIR}/aten/src/ATen/native/mkl/SpectralOps.cpp"
836*da0073e9SAndroid Build Coastguard Worker      PROPERTIES INCLUDE_DIRECTORIES "${POCKETFFT_INCLUDE_DIR}")
837*da0073e9SAndroid Build Coastguard Workerendif()
838*da0073e9SAndroid Build Coastguard Worker
839*da0073e9SAndroid Build Coastguard Workerif(CMAKE_COMPILER_IS_GNUCXX AND BUILD_LIBTORCH_CPU_WITH_DEBUG)
840*da0073e9SAndroid Build Coastguard Worker  # To enable debug fission we need to build libtorch_cpu with debug info on,
841*da0073e9SAndroid Build Coastguard Worker  # but this increases link time and peak memory usage if we use the
842*da0073e9SAndroid Build Coastguard Worker  # REL_WITH_DEB_INFO env var since that enables it for everything, but it's
843*da0073e9SAndroid Build Coastguard Worker  # only really necessary for libtorch_cpu.
844*da0073e9SAndroid Build Coastguard Worker  target_compile_options(torch_cpu PRIVATE "-g")
845*da0073e9SAndroid Build Coastguard Workerendif()
846*da0073e9SAndroid Build Coastguard Worker
847*da0073e9SAndroid Build Coastguard Workerif(USE_LLVM AND LLVM_FOUND)
848*da0073e9SAndroid Build Coastguard Worker  llvm_map_components_to_libnames(LLVM_LINK_LIBS
849*da0073e9SAndroid Build Coastguard Worker    support core analysis executionengine instcombine
850*da0073e9SAndroid Build Coastguard Worker    scalaropts transformutils ${LLVM_TARGETS_TO_BUILD} orcjit)
851*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_cpu PRIVATE ${LLVM_LINK_LIBS})
852*da0073e9SAndroid Build Coastguard Worker  if(APPLE)
853*da0073e9SAndroid Build Coastguard Worker    set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/unexported_symbols.lds")
854*da0073e9SAndroid Build Coastguard Worker    set_target_properties(torch_cpu PROPERTIES LINK_DEPENDS ${LINKER_SCRIPT})
855*da0073e9SAndroid Build Coastguard Worker    set_target_properties(torch_cpu PROPERTIES LINK_FLAGS "-Wl,-unexported_symbols_list,${LINKER_SCRIPT}")
856*da0073e9SAndroid Build Coastguard Worker  elseif(UNIX)
857*da0073e9SAndroid Build Coastguard Worker    set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/version_script.lds")
858*da0073e9SAndroid Build Coastguard Worker    set_target_properties(torch_cpu PROPERTIES LINK_DEPENDS ${LINKER_SCRIPT})
859*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cpu PRIVATE "-Wl,--version-script=${LINKER_SCRIPT}")
860*da0073e9SAndroid Build Coastguard Worker  endif()
861*da0073e9SAndroid Build Coastguard Workerendif(USE_LLVM AND LLVM_FOUND)
862*da0073e9SAndroid Build Coastguard Worker
863*da0073e9SAndroid Build Coastguard Worker# This is required for older versions of CMake, which don't allow
864*da0073e9SAndroid Build Coastguard Worker# specifying add_library() without a list of source files
865*da0073e9SAndroid Build Coastguard Workerset(DUMMY_EMPTY_FILE ${CMAKE_BINARY_DIR}/empty.cpp)
866*da0073e9SAndroid Build Coastguard Worker
867*da0073e9SAndroid Build Coastguard Workerif(MSVC)
868*da0073e9SAndroid Build Coastguard Worker  set(DUMMY_FILE_CONTENT "__declspec(dllexport) int ignore_this_library_placeholder(){return 0\\;}")
869*da0073e9SAndroid Build Coastguard Workerelse()
870*da0073e9SAndroid Build Coastguard Worker  set(DUMMY_FILE_CONTENT "")
871*da0073e9SAndroid Build Coastguard Workerendif()
872*da0073e9SAndroid Build Coastguard Worker
873*da0073e9SAndroid Build Coastguard Workerfile(WRITE ${DUMMY_EMPTY_FILE} ${DUMMY_FILE_CONTENT})
874*da0073e9SAndroid Build Coastguard Worker
875*da0073e9SAndroid Build Coastguard Worker# Wrapper library for people who link against torch and expect both CPU and CUDA support
876*da0073e9SAndroid Build Coastguard Worker# Contains "torch_cpu" and "torch_cuda"
877*da0073e9SAndroid Build Coastguard Workeradd_library(torch ${DUMMY_EMPTY_FILE})
878*da0073e9SAndroid Build Coastguard Workerif(HAVE_SOVERSION)
879*da0073e9SAndroid Build Coastguard Worker  set_target_properties(torch PROPERTIES
880*da0073e9SAndroid Build Coastguard Worker      VERSION ${TORCH_VERSION} SOVERSION ${TORCH_SOVERSION})
881*da0073e9SAndroid Build Coastguard Workerendif()
882*da0073e9SAndroid Build Coastguard Worker
883*da0073e9SAndroid Build Coastguard Workerif(USE_ROCM)
884*da0073e9SAndroid Build Coastguard Worker  filter_list(__caffe2_hip_srcs_cpp Caffe2_HIP_SRCS "\\.(cu|hip)$")
885*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${__caffe2_hip_srcs_cpp} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
886*da0073e9SAndroid Build Coastguard Workerendif()
887*da0073e9SAndroid Build Coastguard Worker
888*da0073e9SAndroid Build Coastguard Worker# Compile exposed libraries.
889*da0073e9SAndroid Build Coastguard Workerif(USE_ROCM)
890*da0073e9SAndroid Build Coastguard Worker  set(CUDA_LINK_LIBRARIES_KEYWORD PRIVATE)
891*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_HIP_SRCS ${GENERATED_CXX_TORCH_CUDA})
892*da0073e9SAndroid Build Coastguard Worker  hip_add_library(torch_hip ${Caffe2_HIP_SRCS})
893*da0073e9SAndroid Build Coastguard Worker  if(USE_FLASH_ATTENTION)
894*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_hip PRIVATE __caffe2_aotriton)
895*da0073e9SAndroid Build Coastguard Worker  endif()
896*da0073e9SAndroid Build Coastguard Worker  set(CUDA_LINK_LIBRARIES_KEYWORD)
897*da0073e9SAndroid Build Coastguard Worker  torch_compile_options(torch_hip)  # see cmake/public/utils.cmake
898*da0073e9SAndroid Build Coastguard Worker  # TODO: Not totally sure if this is live or not
899*da0073e9SAndroid Build Coastguard Worker  if(USE_NCCL)
900*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_hip PRIVATE __caffe2_nccl)
901*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_hip PRIVATE USE_NCCL)
902*da0073e9SAndroid Build Coastguard Worker  endif()
903*da0073e9SAndroid Build Coastguard Worker
904*da0073e9SAndroid Build Coastguard Worker  if(USE_PRECOMPILED_HEADERS)
905*da0073e9SAndroid Build Coastguard Worker    target_precompile_headers(torch_hip PRIVATE
906*da0073e9SAndroid Build Coastguard Worker        "$<$<COMPILE_LANGUAGE:CXX>:ATen/core/ATen_pch.h>")
907*da0073e9SAndroid Build Coastguard Worker  endif()
908*da0073e9SAndroid Build Coastguard Workerelseif(USE_CUDA)
909*da0073e9SAndroid Build Coastguard Worker  set(CUDA_LINK_LIBRARIES_KEYWORD PRIVATE)
910*da0073e9SAndroid Build Coastguard Worker  list(APPEND Caffe2_GPU_SRCS ${GENERATED_CXX_TORCH_CUDA})
911*da0073e9SAndroid Build Coastguard Worker  if(CUDA_SEPARABLE_COMPILATION)
912*da0073e9SAndroid Build Coastguard Worker    # Separate compilation fails when kernels using `thrust::sort_by_key`
913*da0073e9SAndroid Build Coastguard Worker    # are linked with the rest of CUDA code. Workaround by linking them separately.
914*da0073e9SAndroid Build Coastguard Worker    add_library(torch_cuda ${Caffe2_GPU_SRCS} ${Caffe2_GPU_CU_SRCS})
915*da0073e9SAndroid Build Coastguard Worker    set_property(TARGET torch_cuda PROPERTY CUDA_SEPARABLE_COMPILATION ON)
916*da0073e9SAndroid Build Coastguard Worker
917*da0073e9SAndroid Build Coastguard Worker    add_library(torch_cuda_w_sort_by_key OBJECT
918*da0073e9SAndroid Build Coastguard Worker        ${Caffe2_GPU_SRCS_W_SORT_BY_KEY}
919*da0073e9SAndroid Build Coastguard Worker        ${Caffe2_GPU_CU_SRCS_W_SORT_BY_KEY})
920*da0073e9SAndroid Build Coastguard Worker    set_property(TARGET torch_cuda_w_sort_by_key PROPERTY CUDA_SEPARABLE_COMPILATION OFF)
921*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda PRIVATE torch_cuda_w_sort_by_key)
922*da0073e9SAndroid Build Coastguard Worker  else()
923*da0073e9SAndroid Build Coastguard Worker    add_library(torch_cuda
924*da0073e9SAndroid Build Coastguard Worker        ${Caffe2_GPU_SRCS} ${Caffe2_GPU_SRCS_W_SORT_BY_KEY}
925*da0073e9SAndroid Build Coastguard Worker        ${Caffe2_GPU_CU_SRCS} ${Caffe2_GPU_CU_SRCS_W_SORT_BY_KEY})
926*da0073e9SAndroid Build Coastguard Worker  endif()
927*da0073e9SAndroid Build Coastguard Worker  set(CUDA_LINK_LIBRARIES_KEYWORD)
928*da0073e9SAndroid Build Coastguard Worker  torch_compile_options(torch_cuda)  # see cmake/public/utils.cmake
929*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_cuda PRIVATE USE_CUDA)
930*da0073e9SAndroid Build Coastguard Worker
931*da0073e9SAndroid Build Coastguard Worker  if(USE_CUFILE)
932*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda PRIVATE torch::cufile)
933*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cuda PRIVATE USE_CUFILE)
934*da0073e9SAndroid Build Coastguard Worker  endif()
935*da0073e9SAndroid Build Coastguard Worker  if(USE_CUSPARSELT)
936*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_cuda PRIVATE torch::cusparselt)
937*da0073e9SAndroid Build Coastguard Worker      target_compile_definitions(torch_cuda PRIVATE USE_CUSPARSELT)
938*da0073e9SAndroid Build Coastguard Worker  endif()
939*da0073e9SAndroid Build Coastguard Worker  if(USE_CUDSS)
940*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda PRIVATE torch::cudss)
941*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cuda PRIVATE USE_CUDSS)
942*da0073e9SAndroid Build Coastguard Worker  endif()
943*da0073e9SAndroid Build Coastguard Worker  if(USE_NCCL)
944*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda PRIVATE __caffe2_nccl)
945*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cuda PRIVATE USE_NCCL)
946*da0073e9SAndroid Build Coastguard Worker  endif()
947*da0073e9SAndroid Build Coastguard Worker  if(USE_UCC)
948*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda PRIVATE __caffe2_ucc)
949*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cuda PRIVATE USE_UCC)
950*da0073e9SAndroid Build Coastguard Worker  endif()
951*da0073e9SAndroid Build Coastguard Worker  if(USE_FLASH_ATTENTION)
952*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cuda PRIVATE USE_FLASH_ATTENTION)
953*da0073e9SAndroid Build Coastguard Worker  endif()
954*da0073e9SAndroid Build Coastguard Worker  if(USE_MEM_EFF_ATTENTION)
955*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cuda PRIVATE USE_MEM_EFF_ATTENTION)
956*da0073e9SAndroid Build Coastguard Worker  endif()
957*da0073e9SAndroid Build Coastguard Worker  if(BUILD_LAZY_CUDA_LINALG)
958*da0073e9SAndroid Build Coastguard Worker    add_library(torch_cuda_linalg ${ATen_CUDA_LINALG_SRCS})
959*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cuda_linalg PRIVATE USE_CUDA BUILD_LAZY_CUDA_LINALG)
960*da0073e9SAndroid Build Coastguard Worker    # Library order is important during static linking
961*da0073e9SAndroid Build Coastguard Worker    # `torch::magma` should be mentioned before other CUDA
962*da0073e9SAndroid Build Coastguard Worker    # to transitively include all symbols present in torch_cuda/torch_cpu
963*da0073e9SAndroid Build Coastguard Worker    if(USE_MAGMA)
964*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_cuda_linalg PRIVATE torch::magma)
965*da0073e9SAndroid Build Coastguard Worker      # CUDAHooks reports version of MAGMA PyTorch was compiled against, i.e. needs to be able to include magma headers
966*da0073e9SAndroid Build Coastguard Worker      get_target_property(HOOKS_INCLUDE_DIRECTORIES torch_cuda INCLUDE_DIRECTORIES)
967*da0073e9SAndroid Build Coastguard Worker      if(NOT "${MAGMA_INCLUDE_DIR}" IN_LIST HOOKS_INCLUDE_DIRECTORIES)
968*da0073e9SAndroid Build Coastguard Worker        set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/cuda/detail/CUDAHooks.cpp PROPERTIES INCLUDE_DIRECTORIES  "${MAGMA_INCLUDE_DIR}")
969*da0073e9SAndroid Build Coastguard Worker      endif()
970*da0073e9SAndroid Build Coastguard Worker    endif()
971*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda_linalg PRIVATE
972*da0073e9SAndroid Build Coastguard Worker        torch_cpu
973*da0073e9SAndroid Build Coastguard Worker        torch_cuda
974*da0073e9SAndroid Build Coastguard Worker    )
975*da0073e9SAndroid Build Coastguard Worker    if($ENV{ATEN_STATIC_CUDA})
976*da0073e9SAndroid Build Coastguard Worker      if(CUDA_VERSION_MAJOR LESS_EQUAL 11)
977*da0073e9SAndroid Build Coastguard Worker        target_link_libraries(torch_cuda_linalg PRIVATE
978*da0073e9SAndroid Build Coastguard Worker            CUDA::cusolver_static
979*da0073e9SAndroid Build Coastguard Worker            ${CUDAToolkit_LIBRARY_DIR}/liblapack_static.a     # needed for libcusolver_static
980*da0073e9SAndroid Build Coastguard Worker        )
981*da0073e9SAndroid Build Coastguard Worker      elseif(CUDA_VERSION_MAJOR GREATER_EQUAL 12)
982*da0073e9SAndroid Build Coastguard Worker        target_link_libraries(torch_cuda_linalg PRIVATE
983*da0073e9SAndroid Build Coastguard Worker            CUDA::cusolver_static
984*da0073e9SAndroid Build Coastguard Worker            ${CUDAToolkit_LIBRARY_DIR}/libcusolver_lapack_static.a     # needed for libcusolver_static
985*da0073e9SAndroid Build Coastguard Worker        )
986*da0073e9SAndroid Build Coastguard Worker      endif()
987*da0073e9SAndroid Build Coastguard Worker    else()
988*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_cuda_linalg PRIVATE
989*da0073e9SAndroid Build Coastguard Worker          CUDA::cusolver
990*da0073e9SAndroid Build Coastguard Worker      )
991*da0073e9SAndroid Build Coastguard Worker    endif()
992*da0073e9SAndroid Build Coastguard Worker    # NS: TODO, is this really necessary?
993*da0073e9SAndroid Build Coastguard Worker    if(USE_MAGMA AND CAFFE2_STATIC_LINK_CUDA)
994*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_cuda_linalg PRIVATE
995*da0073e9SAndroid Build Coastguard Worker          CUDA::culibos ${CMAKE_DL_LIBS})
996*da0073e9SAndroid Build Coastguard Worker    endif()
997*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/native/cuda/LinearAlgebraStubs.cpp PROPERTIES COMPILE_FLAGS "-DBUILD_LAZY_CUDA_LINALG")
998*da0073e9SAndroid Build Coastguard Worker    install(TARGETS torch_cuda_linalg DESTINATION "${TORCH_INSTALL_LIB_DIR}")
999*da0073e9SAndroid Build Coastguard Worker  endif()
1000*da0073e9SAndroid Build Coastguard Worker
1001*da0073e9SAndroid Build Coastguard Worker  if(USE_PRECOMPILED_HEADERS)
1002*da0073e9SAndroid Build Coastguard Worker    target_precompile_headers(torch_cuda PRIVATE
1003*da0073e9SAndroid Build Coastguard Worker        "$<$<COMPILE_LANGUAGE:CXX>:ATen/core/ATen_pch.h>")
1004*da0073e9SAndroid Build Coastguard Worker  endif()
1005*da0073e9SAndroid Build Coastguard Worker
1006*da0073e9SAndroid Build Coastguard Worker  # Apply suggestion from comment https://github.com/pytorch/pytorch/issues/113053#issuecomment-2115375714
1007*da0073e9SAndroid Build Coastguard Worker  if(LINUX)
1008*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/cuda/CUDASparseDescriptors.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1009*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/cuda/CUDASparseBlas.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1010*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1011*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/native/sparse/cuda/SparseBlasImpl.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1012*da0073e9SAndroid Build Coastguard Worker  endif()
1013*da0073e9SAndroid Build Coastguard Workerendif()
1014*da0073e9SAndroid Build Coastguard Worker
1015*da0073e9SAndroid Build Coastguard Workerif(USE_XPU)
1016*da0073e9SAndroid Build Coastguard Worker  add_library(torch_xpu ${Caffe2_XPU_SRCS})
1017*da0073e9SAndroid Build Coastguard Worker  torch_compile_options(torch_xpu)  # see cmake/public/utils.cmake
1018*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_xpu PRIVATE USE_XPU)
1019*da0073e9SAndroid Build Coastguard Worker
1020*da0073e9SAndroid Build Coastguard Worker  # ATen XPU implementation
1021*da0073e9SAndroid Build Coastguard Worker  set(TORCH_XPU_OPS_DIR ${TORCH_ROOT}/third_party/torch-xpu-ops)
1022*da0073e9SAndroid Build Coastguard Worker  set(TORCH_XPU_OPS_REPO_URL https://github.com/intel/torch-xpu-ops.git)
1023*da0073e9SAndroid Build Coastguard Worker  file(READ "${TORCH_ROOT}/third_party/xpu.txt" TORCH_XPU_OPS_COMMIT)
1024*da0073e9SAndroid Build Coastguard Worker  string(REGEX REPLACE "\n$" "" TORCH_XPU_OPS_COMMIT "${TORCH_XPU_OPS_COMMIT}")
1025*da0073e9SAndroid Build Coastguard Worker  if(NOT EXISTS "${TORCH_XPU_OPS_DIR}/.git")
1026*da0073e9SAndroid Build Coastguard Worker    execute_process(
1027*da0073e9SAndroid Build Coastguard Worker      COMMAND git clone --quiet ${TORCH_XPU_OPS_REPO_URL} ${TORCH_XPU_OPS_DIR}
1028*da0073e9SAndroid Build Coastguard Worker      RESULT_VARIABLE _exitcode)
1029*da0073e9SAndroid Build Coastguard Worker    if(NOT _exitcode EQUAL 0)
1030*da0073e9SAndroid Build Coastguard Worker      message(FATAL_ERROR "Fail to clone ${TORCH_XPU_OPS_REPO_URL}")
1031*da0073e9SAndroid Build Coastguard Worker    endif()
1032*da0073e9SAndroid Build Coastguard Worker  endif()
1033*da0073e9SAndroid Build Coastguard Worker  execute_process(
1034*da0073e9SAndroid Build Coastguard Worker    COMMAND git fetch --quiet
1035*da0073e9SAndroid Build Coastguard Worker    WORKING_DIRECTORY ${TORCH_XPU_OPS_DIR}
1036*da0073e9SAndroid Build Coastguard Worker    RESULT_VARIABLE _exitcode)
1037*da0073e9SAndroid Build Coastguard Worker  if(NOT _exitcode EQUAL 0)
1038*da0073e9SAndroid Build Coastguard Worker    message(FATAL_ERROR "Fail to fetch ${TORCH_XPU_OPS_REPO_URL}")
1039*da0073e9SAndroid Build Coastguard Worker  endif()
1040*da0073e9SAndroid Build Coastguard Worker  execute_process(
1041*da0073e9SAndroid Build Coastguard Worker    COMMAND git checkout --quiet ${TORCH_XPU_OPS_COMMIT}
1042*da0073e9SAndroid Build Coastguard Worker    WORKING_DIRECTORY ${TORCH_XPU_OPS_DIR}
1043*da0073e9SAndroid Build Coastguard Worker    RESULT_VARIABLE _exitcode)
1044*da0073e9SAndroid Build Coastguard Worker  if(NOT _exitcode EQUAL 0)
1045*da0073e9SAndroid Build Coastguard Worker    message(FATAL_ERROR "Fail to checkout ${TORCH_XPU_OPS_REPO_URL} to ${TORCH_XPU_OPS_COMMIT}")
1046*da0073e9SAndroid Build Coastguard Worker  endif()
1047*da0073e9SAndroid Build Coastguard Worker
1048*da0073e9SAndroid Build Coastguard Worker  set(TORCH_XPU_OPS_INCLUDE_DIRS
1049*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/api
1050*da0073e9SAndroid Build Coastguard Worker      ${TORCH_SRC_DIR}/csrc/api/include
1051*da0073e9SAndroid Build Coastguard Worker      ${Caffe2_CPU_INCLUDE}
1052*da0073e9SAndroid Build Coastguard Worker      ${Caffe2_XPU_INCLUDE})
1053*da0073e9SAndroid Build Coastguard Worker  # Pass the target as a dependency so that ATen headers generation
1054*da0073e9SAndroid Build Coastguard Worker  # could be followed by torch-xpu-ops build.
1055*da0073e9SAndroid Build Coastguard Worker  # 1. Sources in torch-xpu-ops depend on generated ATen headers.
1056*da0073e9SAndroid Build Coastguard Worker  # 2. Using add_custom_command in torch-xpu-ops to define sycl device sources
1057*da0073e9SAndroid Build Coastguard Worker  #    compilation. add_custom_command requires an explicit dependency.
1058*da0073e9SAndroid Build Coastguard Worker  list(APPEND ${Caffe2_XPU_INCLUDE} ${TORCH_XPU_OPS_DIR}/src/ATen/)
1059*da0073e9SAndroid Build Coastguard Worker  set(TORCH_XPU_OPS_PYTORCH_DEPS ATEN_CPU_FILES_GEN_TARGET)
1060*da0073e9SAndroid Build Coastguard Worker
1061*da0073e9SAndroid Build Coastguard Worker  add_subdirectory(${TORCH_ROOT}/third_party/torch-xpu-ops
1062*da0073e9SAndroid Build Coastguard Worker      ${CMAKE_BINARY_DIR}/caffe2/aten_xpu)
1063*da0073e9SAndroid Build Coastguard Worker  if(NOT TARGET torch_xpu_ops)
1064*da0073e9SAndroid Build Coastguard Worker    message(WARNING "Failed to include ATen XPU implementation target")
1065*da0073e9SAndroid Build Coastguard Worker  else()
1066*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_xpu PRIVATE torch_xpu_ops)
1067*da0073e9SAndroid Build Coastguard Worker    if(MSVC)
1068*da0073e9SAndroid Build Coastguard Worker      # Windows
1069*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_xpu PRIVATE
1070*da0073e9SAndroid Build Coastguard Worker      "-WHOLEARCHIVE:\"$<TARGET_FILE:torch_xpu_ops>\"")
1071*da0073e9SAndroid Build Coastguard Worker    else()
1072*da0073e9SAndroid Build Coastguard Worker      # Linux
1073*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_xpu PRIVATE
1074*da0073e9SAndroid Build Coastguard Worker        "-Wl,--whole-archive,\"$<TARGET_FILE:torch_xpu_ops>\" -Wl,--no-whole-archive")
1075*da0073e9SAndroid Build Coastguard Worker    endif()
1076*da0073e9SAndroid Build Coastguard Worker
1077*da0073e9SAndroid Build Coastguard Worker    # Set cached ${ATen_XPU_INCLUDE_DIRS} to torch
1078*da0073e9SAndroid Build Coastguard Worker    include_directories(SYSTEM ${ATen_XPU_INCLUDE_DIRS})
1079*da0073e9SAndroid Build Coastguard Worker
1080*da0073e9SAndroid Build Coastguard Worker  endif()
1081*da0073e9SAndroid Build Coastguard Workerendif()
1082*da0073e9SAndroid Build Coastguard Worker
1083*da0073e9SAndroid Build Coastguard Workerif(NOT MSVC AND USE_XNNPACK)
1084*da0073e9SAndroid Build Coastguard Worker  TARGET_LINK_LIBRARIES(torch_cpu PRIVATE fxdiv)
1085*da0073e9SAndroid Build Coastguard Workerendif()
1086*da0073e9SAndroid Build Coastguard Worker
1087*da0073e9SAndroid Build Coastguard Worker# ==========================================================
1088*da0073e9SAndroid Build Coastguard Worker# formerly-libtorch flags
1089*da0073e9SAndroid Build Coastguard Worker# ==========================================================
1090*da0073e9SAndroid Build Coastguard Worker
1091*da0073e9SAndroid Build Coastguard Worker
1092*da0073e9SAndroid Build Coastguard Worker# Build model tracer for tracing-based selective build
1093*da0073e9SAndroid Build Coastguard Workerif(TRACING_BASED AND NOT BUILD_LITE_INTERPRETER AND NOT INTERN_BUILD_MOBILE)
1094*da0073e9SAndroid Build Coastguard Worker  add_subdirectory(
1095*da0073e9SAndroid Build Coastguard Worker    ${TORCH_ROOT}/torch/csrc/jit/mobile/model_tracer
1096*da0073e9SAndroid Build Coastguard Worker    ${CMAKE_BINARY_DIR}/model_tracer
1097*da0073e9SAndroid Build Coastguard Worker  )
1098*da0073e9SAndroid Build Coastguard Worker  string(APPEND CMAKE_CXX_FLAGS " -DENABLE_RECORD_KERNEL_FUNCTION_DTYPE")
1099*da0073e9SAndroid Build Coastguard Workerendif()
1100*da0073e9SAndroid Build Coastguard Worker
1101*da0073e9SAndroid Build Coastguard Worker# Codegen selected_mobile_ops.h for template selective build
1102*da0073e9SAndroid Build Coastguard Workerif(BUILD_LITE_INTERPRETER AND SELECTED_OP_LIST)
1103*da0073e9SAndroid Build Coastguard Worker  message("running gen_selected_mobile_ops_header for:  '${SELECTED_OP_LIST}'")
1104*da0073e9SAndroid Build Coastguard Worker  file(GLOB lite_interpreter_python "${TOOLS_PATH}/lite_interpreter/*.py")
1105*da0073e9SAndroid Build Coastguard Worker  if(${TRACING_BASED})
1106*da0073e9SAndroid Build Coastguard Worker    file(GLOB code_analyzer_python "${TOOLS_PATH}/code_analyzer/*.py")
1107*da0073e9SAndroid Build Coastguard Worker    add_custom_command(
1108*da0073e9SAndroid Build Coastguard Worker      OUTPUT ${CMAKE_BINARY_DIR}/aten/src/ATen/selected_mobile_ops.h
1109*da0073e9SAndroid Build Coastguard Worker      COMMAND
1110*da0073e9SAndroid Build Coastguard Worker        Python::Interpreter
1111*da0073e9SAndroid Build Coastguard Worker        -m tools.code_analyzer.gen_oplist
1112*da0073e9SAndroid Build Coastguard Worker        --model_file_list_path "${SELECTED_OP_LIST}"
1113*da0073e9SAndroid Build Coastguard Worker        --output_dir "${CMAKE_BINARY_DIR}/aten/src/ATen"
1114*da0073e9SAndroid Build Coastguard Worker      DEPENDS
1115*da0073e9SAndroid Build Coastguard Worker        ${torchgen_python}
1116*da0073e9SAndroid Build Coastguard Worker        ${lite_interpreter_python}
1117*da0073e9SAndroid Build Coastguard Worker        ${code_analyzer_python}
1118*da0073e9SAndroid Build Coastguard Worker        "${SELECTED_OP_LIST}"
1119*da0073e9SAndroid Build Coastguard Worker        "${TORCH_ROOT}/aten/src/ATen/native/native_functions.yaml"
1120*da0073e9SAndroid Build Coastguard Worker      WORKING_DIRECTORY "${TORCH_ROOT}")
1121*da0073e9SAndroid Build Coastguard Worker  else()
1122*da0073e9SAndroid Build Coastguard Worker    add_custom_command(
1123*da0073e9SAndroid Build Coastguard Worker      OUTPUT ${CMAKE_BINARY_DIR}/aten/src/ATen/selected_mobile_ops.h
1124*da0073e9SAndroid Build Coastguard Worker      COMMAND
1125*da0073e9SAndroid Build Coastguard Worker        Python::Interpreter
1126*da0073e9SAndroid Build Coastguard Worker        -m tools.lite_interpreter.gen_selected_mobile_ops_header
1127*da0073e9SAndroid Build Coastguard Worker        --yaml_file_path "${SELECTED_OP_LIST}"
1128*da0073e9SAndroid Build Coastguard Worker        --output_file_path "${CMAKE_BINARY_DIR}/aten/src/ATen"
1129*da0073e9SAndroid Build Coastguard Worker      DEPENDS
1130*da0073e9SAndroid Build Coastguard Worker        ${torchgen_python}
1131*da0073e9SAndroid Build Coastguard Worker        ${lite_interpreter_python}
1132*da0073e9SAndroid Build Coastguard Worker        "${SELECTED_OP_LIST}"
1133*da0073e9SAndroid Build Coastguard Worker        "${TORCH_ROOT}/aten/src/ATen/native/native_functions.yaml"
1134*da0073e9SAndroid Build Coastguard Worker      WORKING_DIRECTORY "${TORCH_ROOT}")
1135*da0073e9SAndroid Build Coastguard Worker  endif()
1136*da0073e9SAndroid Build Coastguard Worker
1137*da0073e9SAndroid Build Coastguard Worker  add_custom_target(
1138*da0073e9SAndroid Build Coastguard Worker    __selected_mobile_ops_header_gen
1139*da0073e9SAndroid Build Coastguard Worker    DEPENDS ${CMAKE_BINARY_DIR}/aten/src/ATen/selected_mobile_ops.h)
1140*da0073e9SAndroid Build Coastguard Worker  add_dependencies(torch_cpu __selected_mobile_ops_header_gen)
1141*da0073e9SAndroid Build Coastguard Workerendif()
1142*da0073e9SAndroid Build Coastguard Worker
1143*da0073e9SAndroid Build Coastguard Workerif(NOT NO_API)
1144*da0073e9SAndroid Build Coastguard Worker  target_include_directories(torch_cpu PRIVATE
1145*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api
1146*da0073e9SAndroid Build Coastguard Worker    ${TORCH_SRC_DIR}/csrc/api/include)
1147*da0073e9SAndroid Build Coastguard Workerendif()
1148*da0073e9SAndroid Build Coastguard Worker
1149*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA AND MSVC)
1150*da0073e9SAndroid Build Coastguard Worker  # -INCLUDE is used to ensure torch_cuda is linked against in a project that relies on them.
1151*da0073e9SAndroid Build Coastguard Worker  # Related issue: https://github.com/pytorch/pytorch/issues/31611
1152*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_cuda INTERFACE "-INCLUDE:?warp_size@cuda@at@@YAHXZ")
1153*da0073e9SAndroid Build Coastguard Workerendif()
1154*da0073e9SAndroid Build Coastguard Worker
1155*da0073e9SAndroid Build Coastguard Workerif(NOT BUILD_LITE_INTERPRETER)
1156*da0073e9SAndroid Build Coastguard Worker  set(TH_CPU_INCLUDE
1157*da0073e9SAndroid Build Coastguard Worker    # dense
1158*da0073e9SAndroid Build Coastguard Worker    aten/src/TH
1159*da0073e9SAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}/aten/src/TH
1160*da0073e9SAndroid Build Coastguard Worker    ${TORCH_ROOT}/aten/src
1161*da0073e9SAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}/aten/src
1162*da0073e9SAndroid Build Coastguard Worker
1163*da0073e9SAndroid Build Coastguard Worker    ${CMAKE_BINARY_DIR}/aten/src)
1164*da0073e9SAndroid Build Coastguard Worker    target_include_directories(torch_cpu PRIVATE ${TH_CPU_INCLUDE})
1165*da0073e9SAndroid Build Coastguard Workerendif()
1166*da0073e9SAndroid Build Coastguard Worker
1167*da0073e9SAndroid Build Coastguard Workerset(ATen_CPU_INCLUDE
1168*da0073e9SAndroid Build Coastguard Worker  ${TORCH_ROOT}/aten/src
1169*da0073e9SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/../aten/src
1170*da0073e9SAndroid Build Coastguard Worker  ${CMAKE_BINARY_DIR}/aten/src)
1171*da0073e9SAndroid Build Coastguard Worker
1172*da0073e9SAndroid Build Coastguard Workerif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
1173*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/native/QuantizedLinear.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1174*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/native/RNN.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1175*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/native/quantized/cpu/qlinear_prepack.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1176*da0073e9SAndroid Build Coastguard Worker  set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/../aten/src/ATen/native/quantized/qlinear_unpack.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1177*da0073e9SAndroid Build Coastguard Workerendif()
1178*da0073e9SAndroid Build Coastguard Worker
1179*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu PRIVATE ${ATen_CPU_INCLUDE})
1180*da0073e9SAndroid Build Coastguard Worker
1181*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu PRIVATE
1182*da0073e9SAndroid Build Coastguard Worker  ${TORCH_SRC_DIR}/csrc)
1183*da0073e9SAndroid Build Coastguard Worker
1184*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu PRIVATE
1185*da0073e9SAndroid Build Coastguard Worker  ${TORCH_ROOT}/third_party/miniz-2.1.0)
1186*da0073e9SAndroid Build Coastguard Worker
1187*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu PRIVATE
1188*da0073e9SAndroid Build Coastguard Worker  ${TORCH_ROOT}/third_party/kineto/libkineto/include)
1189*da0073e9SAndroid Build Coastguard Worker
1190*da0073e9SAndroid Build Coastguard Workerif(USE_KINETO)
1191*da0073e9SAndroid Build Coastguard Worker  target_include_directories(torch_cpu PRIVATE
1192*da0073e9SAndroid Build Coastguard Worker    ${TORCH_ROOT}/third_party/kineto/libkineto/src)
1193*da0073e9SAndroid Build Coastguard Workerendif()
1194*da0073e9SAndroid Build Coastguard Worker
1195*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu PRIVATE
1196*da0073e9SAndroid Build Coastguard Worker  ${TORCH_ROOT}/third_party/cpp-httplib)
1197*da0073e9SAndroid Build Coastguard Worker
1198*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu PRIVATE
1199*da0073e9SAndroid Build Coastguard Worker  ${TORCH_ROOT}/third_party/nlohmann/include)
1200*da0073e9SAndroid Build Coastguard Worker
1201*da0073e9SAndroid Build Coastguard Workerinstall(DIRECTORY "${TORCH_SRC_DIR}/csrc"
1202*da0073e9SAndroid Build Coastguard Worker  DESTINATION ${TORCH_INSTALL_INCLUDE_DIR}/torch
1203*da0073e9SAndroid Build Coastguard Worker  FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")
1204*da0073e9SAndroid Build Coastguard Workerinstall(FILES
1205*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/script.h"
1206*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/extension.h"
1207*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/custom_class.h"
1208*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/library.h"
1209*da0073e9SAndroid Build Coastguard Worker  "${TORCH_SRC_DIR}/custom_class_detail.h"
1210*da0073e9SAndroid Build Coastguard Worker  DESTINATION ${TORCH_INSTALL_INCLUDE_DIR}/torch)
1211*da0073e9SAndroid Build Coastguard Workerif(BUILD_TEST)
1212*da0073e9SAndroid Build Coastguard Worker  if(BUILD_EXECUTORCH)
1213*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(
1214*da0073e9SAndroid Build Coastguard Worker            ${TORCH_ROOT}/test/edge
1215*da0073e9SAndroid Build Coastguard Worker            ${CMAKE_BINARY_DIR}/test_edge_op_registration
1216*da0073e9SAndroid Build Coastguard Worker    )
1217*da0073e9SAndroid Build Coastguard Worker  endif()
1218*da0073e9SAndroid Build Coastguard Worker  if(BUILD_LITE_INTERPRETER)
1219*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(
1220*da0073e9SAndroid Build Coastguard Worker      ${TORCH_ROOT}/test/cpp/lite_interpreter_runtime
1221*da0073e9SAndroid Build Coastguard Worker      ${CMAKE_BINARY_DIR}/test_lite_interpreter_runtime
1222*da0073e9SAndroid Build Coastguard Worker    )
1223*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(
1224*da0073e9SAndroid Build Coastguard Worker      ${TORCH_ROOT}/test/mobile/lightweight_dispatch
1225*da0073e9SAndroid Build Coastguard Worker      ${CMAKE_BINARY_DIR}/test_codegen_unboxing
1226*da0073e9SAndroid Build Coastguard Worker    )
1227*da0073e9SAndroid Build Coastguard Worker  else()
1228*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(${TORCH_ROOT}/test/cpp/jit ${CMAKE_BINARY_DIR}/test_jit)
1229*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(${TORCH_ROOT}/test/inductor ${CMAKE_BINARY_DIR}/test_inductor)
1230*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(
1231*da0073e9SAndroid Build Coastguard Worker      ${TORCH_ROOT}/test/cpp/tensorexpr
1232*da0073e9SAndroid Build Coastguard Worker      ${CMAKE_BINARY_DIR}/test_tensorexpr
1233*da0073e9SAndroid Build Coastguard Worker    )
1234*da0073e9SAndroid Build Coastguard Worker    if(USE_DISTRIBUTED)
1235*da0073e9SAndroid Build Coastguard Worker      add_subdirectory(${TORCH_ROOT}/test/cpp/c10d ${CMAKE_BINARY_DIR}/test_cpp_c10d)
1236*da0073e9SAndroid Build Coastguard Worker      if(NOT WIN32)
1237*da0073e9SAndroid Build Coastguard Worker        add_subdirectory(${TORCH_ROOT}/test/cpp/dist_autograd ${CMAKE_BINARY_DIR}/dist_autograd)
1238*da0073e9SAndroid Build Coastguard Worker        add_subdirectory(${TORCH_ROOT}/test/cpp/rpc ${CMAKE_BINARY_DIR}/test_cpp_rpc)
1239*da0073e9SAndroid Build Coastguard Worker      endif()
1240*da0073e9SAndroid Build Coastguard Worker    endif()
1241*da0073e9SAndroid Build Coastguard Worker    if(NOT NO_API)
1242*da0073e9SAndroid Build Coastguard Worker      add_subdirectory(${TORCH_ROOT}/test/cpp/api ${CMAKE_BINARY_DIR}/test_api)
1243*da0073e9SAndroid Build Coastguard Worker    endif()
1244*da0073e9SAndroid Build Coastguard Worker
1245*da0073e9SAndroid Build Coastguard Worker    if(USE_LLVM AND LLVM_FOUND)
1246*da0073e9SAndroid Build Coastguard Worker      add_subdirectory(
1247*da0073e9SAndroid Build Coastguard Worker        ${TORCH_ROOT}/test/mobile/nnc
1248*da0073e9SAndroid Build Coastguard Worker        ${CMAKE_BINARY_DIR}/test_mobile_nnc
1249*da0073e9SAndroid Build Coastguard Worker      )
1250*da0073e9SAndroid Build Coastguard Worker    endif()
1251*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(${TORCH_ROOT}/test/cpp/lazy
1252*da0073e9SAndroid Build Coastguard Worker                     ${CMAKE_BINARY_DIR}/test_lazy)
1253*da0073e9SAndroid Build Coastguard Worker  endif()
1254*da0073e9SAndroid Build Coastguard Worker  if(BUILD_AOT_INDUCTOR_TEST)
1255*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(
1256*da0073e9SAndroid Build Coastguard Worker      ${TORCH_ROOT}/test/cpp/aoti_abi_check
1257*da0073e9SAndroid Build Coastguard Worker      ${CMAKE_BINARY_DIR}/test_aoti_abi_check)
1258*da0073e9SAndroid Build Coastguard Worker    add_subdirectory(
1259*da0073e9SAndroid Build Coastguard Worker      ${TORCH_ROOT}/test/cpp/aoti_inference
1260*da0073e9SAndroid Build Coastguard Worker      ${CMAKE_BINARY_DIR}/test_aoti_inference)
1261*da0073e9SAndroid Build Coastguard Worker  endif()
1262*da0073e9SAndroid Build Coastguard Workerendif()
1263*da0073e9SAndroid Build Coastguard Worker
1264*da0073e9SAndroid Build Coastguard Workerif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
1265*da0073e9SAndroid Build Coastguard Worker  include(../cmake/CheckAbi.cmake)
1266*da0073e9SAndroid Build Coastguard Workerendif()
1267*da0073e9SAndroid Build Coastguard Worker
1268*da0073e9SAndroid Build Coastguard Worker# CMake config for external projects.
1269*da0073e9SAndroid Build Coastguard Workerconfigure_file(
1270*da0073e9SAndroid Build Coastguard Worker  ${PROJECT_SOURCE_DIR}/cmake/TorchConfigVersion.cmake.in
1271*da0073e9SAndroid Build Coastguard Worker  ${PROJECT_BINARY_DIR}/TorchConfigVersion.cmake
1272*da0073e9SAndroid Build Coastguard Worker  @ONLY)
1273*da0073e9SAndroid Build Coastguard Workerconfigure_file(
1274*da0073e9SAndroid Build Coastguard Worker  ${TORCH_ROOT}/cmake/TorchConfig.cmake.in
1275*da0073e9SAndroid Build Coastguard Worker  ${PROJECT_BINARY_DIR}/TorchConfig.cmake
1276*da0073e9SAndroid Build Coastguard Worker  @ONLY)
1277*da0073e9SAndroid Build Coastguard Workerinstall(FILES
1278*da0073e9SAndroid Build Coastguard Worker  ${PROJECT_BINARY_DIR}/TorchConfigVersion.cmake
1279*da0073e9SAndroid Build Coastguard Worker  ${PROJECT_BINARY_DIR}/TorchConfig.cmake
1280*da0073e9SAndroid Build Coastguard Worker  DESTINATION share/cmake/Torch)
1281*da0073e9SAndroid Build Coastguard Worker
1282*da0073e9SAndroid Build Coastguard Worker# ---[ Torch python bindings build
1283*da0073e9SAndroid Build Coastguard Workeradd_subdirectory(../torch torch)
1284*da0073e9SAndroid Build Coastguard Workerset(TORCH_PYTHON_COMPILE_OPTIONS ${TORCH_PYTHON_COMPILE_OPTIONS} PARENT_SCOPE)
1285*da0073e9SAndroid Build Coastguard Workerset(TORCH_PYTHON_LINK_FLAGS ${TORCH_PYTHON_LINK_FLAGS} PARENT_SCOPE)
1286*da0073e9SAndroid Build Coastguard Worker# ==========================================================
1287*da0073e9SAndroid Build Coastguard Worker# END formerly-libtorch flags
1288*da0073e9SAndroid Build Coastguard Worker# ==========================================================
1289*da0073e9SAndroid Build Coastguard Worker
1290*da0073e9SAndroid Build Coastguard Workerif(NOT NO_API)
1291*da0073e9SAndroid Build Coastguard Worker  target_include_directories(torch_cpu PUBLIC
1292*da0073e9SAndroid Build Coastguard Worker    $<BUILD_INTERFACE:${TORCH_SRC_DIR}/csrc/api>
1293*da0073e9SAndroid Build Coastguard Worker    $<BUILD_INTERFACE:${TORCH_SRC_DIR}/csrc/api/include>)
1294*da0073e9SAndroid Build Coastguard Workerendif()
1295*da0073e9SAndroid Build Coastguard Worker
1296*da0073e9SAndroid Build Coastguard Workerif(USE_ROCM)
1297*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_hip PRIVATE
1298*da0073e9SAndroid Build Coastguard Worker    USE_ROCM
1299*da0073e9SAndroid Build Coastguard Worker    __HIP_PLATFORM_AMD__
1300*da0073e9SAndroid Build Coastguard Worker    )
1301*da0073e9SAndroid Build Coastguard Worker  # NB: Massive hack.  torch/csrc/jit/codegen/fuser/codegen.cpp includes
1302*da0073e9SAndroid Build Coastguard Worker  # torch/csrc/jit/codegen/fuser/cuda/resource_strings.h which changes the
1303*da0073e9SAndroid Build Coastguard Worker  # strings depending on if you're __HIP_PLATFORM_AMD__ or not.
1304*da0073e9SAndroid Build Coastguard Worker  # But that file is in torch_cpu!  So, against all odds, this macro
1305*da0073e9SAndroid Build Coastguard Worker  # has to be set on torch_cpu too.  I also added it to torch for
1306*da0073e9SAndroid Build Coastguard Worker  # better luck
1307*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_cpu PRIVATE
1308*da0073e9SAndroid Build Coastguard Worker    USE_ROCM
1309*da0073e9SAndroid Build Coastguard Worker    __HIP_PLATFORM_AMD__
1310*da0073e9SAndroid Build Coastguard Worker    )
1311*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch PRIVATE
1312*da0073e9SAndroid Build Coastguard Worker    USE_ROCM
1313*da0073e9SAndroid Build Coastguard Worker    __HIP_PLATFORM_AMD__
1314*da0073e9SAndroid Build Coastguard Worker    )
1315*da0073e9SAndroid Build Coastguard Worker
1316*da0073e9SAndroid Build Coastguard Worker  if(NOT ROCM_SOURCE_DIR)
1317*da0073e9SAndroid Build Coastguard Worker    set(ROCM_SOURCE_DIR "$ENV{ROCM_SOURCE_DIR}")
1318*da0073e9SAndroid Build Coastguard Worker  endif()
1319*da0073e9SAndroid Build Coastguard Worker  if($ROCM_SOURCE_DIR STREQUAL "")
1320*da0073e9SAndroid Build Coastguard Worker    set(ROCM_SOURCE_DIR "/opt/rocm")
1321*da0073e9SAndroid Build Coastguard Worker  endif()
1322*da0073e9SAndroid Build Coastguard Worker  message(INFO "caffe2 ROCM_SOURCE_DIR = ${ROCM_SOURCE_DIR}")
1323*da0073e9SAndroid Build Coastguard Worker  target_include_directories(torch_hip PRIVATE
1324*da0073e9SAndroid Build Coastguard Worker    ${ROCM_SOURCE_DIR}/include
1325*da0073e9SAndroid Build Coastguard Worker    ${ROCM_SOURCE_DIR}/hcc/include
1326*da0073e9SAndroid Build Coastguard Worker    ${ROCM_SOURCE_DIR}/rocblas/include
1327*da0073e9SAndroid Build Coastguard Worker    ${ROCM_SOURCE_DIR}/hipsparse/include
1328*da0073e9SAndroid Build Coastguard Worker    )
1329*da0073e9SAndroid Build Coastguard Worker  if(USE_FLASH_ATTENTION)
1330*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_hip PRIVATE USE_FLASH_ATTENTION)
1331*da0073e9SAndroid Build Coastguard Worker  endif()
1332*da0073e9SAndroid Build Coastguard Worker  if(USE_MEM_EFF_ATTENTION)
1333*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_hip PRIVATE USE_MEM_EFF_ATTENTION)
1334*da0073e9SAndroid Build Coastguard Worker  endif()
1335*da0073e9SAndroid Build Coastguard Workerendif()
1336*da0073e9SAndroid Build Coastguard Worker
1337*da0073e9SAndroid Build Coastguard Workerif(BUILD_LITE_INTERPRETER)
1338*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_cpu PRIVATE BUILD_LITE_INTERPRETER)
1339*da0073e9SAndroid Build Coastguard Worker  # Enable template selective build only when SELECTED_OP_LIST is provided.
1340*da0073e9SAndroid Build Coastguard Worker  if(SELECTED_OP_LIST)
1341*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cpu PRIVATE TEMPLATE_SELECTIVE_BUILD)
1342*da0073e9SAndroid Build Coastguard Worker  endif()
1343*da0073e9SAndroid Build Coastguard Workerendif()
1344*da0073e9SAndroid Build Coastguard Worker
1345*da0073e9SAndroid Build Coastguard Worker
1346*da0073e9SAndroid Build Coastguard Worker# Pass USE_DISTRIBUTED to torch_cpu, as some codes in jit/pickler.cpp and
1347*da0073e9SAndroid Build Coastguard Worker# jit/unpickler.cpp need to be compiled only when USE_DISTRIBUTED is set
1348*da0073e9SAndroid Build Coastguard Workerif(USE_DISTRIBUTED)
1349*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_cpu PUBLIC USE_DISTRIBUTED)
1350*da0073e9SAndroid Build Coastguard Worker  if(USE_GLOO AND USE_C10D_GLOO)
1351*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cpu PUBLIC USE_C10D_GLOO)
1352*da0073e9SAndroid Build Coastguard Worker  endif()
1353*da0073e9SAndroid Build Coastguard Worker  if(USE_UCC AND USE_C10D_UCC)
1354*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cpu PUBLIC USE_C10D_UCC)
1355*da0073e9SAndroid Build Coastguard Worker    if(USE_CUDA)
1356*da0073e9SAndroid Build Coastguard Worker      target_compile_definitions(torch_cuda PUBLIC USE_C10D_UCC)
1357*da0073e9SAndroid Build Coastguard Worker    endif()
1358*da0073e9SAndroid Build Coastguard Worker  endif()
1359*da0073e9SAndroid Build Coastguard Worker  if(USE_NCCL AND USE_C10D_NCCL)
1360*da0073e9SAndroid Build Coastguard Worker    if(USE_ROCM)
1361*da0073e9SAndroid Build Coastguard Worker      target_compile_definitions(torch_hip PUBLIC USE_C10D_NCCL)
1362*da0073e9SAndroid Build Coastguard Worker    else()
1363*da0073e9SAndroid Build Coastguard Worker      target_compile_definitions(torch_cuda PUBLIC USE_C10D_NCCL)
1364*da0073e9SAndroid Build Coastguard Worker    endif()
1365*da0073e9SAndroid Build Coastguard Worker  endif()
1366*da0073e9SAndroid Build Coastguard Worker  if(USE_MPI AND USE_C10D_MPI)
1367*da0073e9SAndroid Build Coastguard Worker    if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
1368*da0073e9SAndroid Build Coastguard Worker      set_source_files_properties(
1369*da0073e9SAndroid Build Coastguard Worker        "${TORCH_SRC_DIR}/csrc/distributed/c10d/ProcessGroupMPI.cpp"
1370*da0073e9SAndroid Build Coastguard Worker        PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations)
1371*da0073e9SAndroid Build Coastguard Worker    endif()
1372*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cpu PUBLIC USE_C10D_MPI)
1373*da0073e9SAndroid Build Coastguard Worker  endif()
1374*da0073e9SAndroid Build Coastguard Worker  # Pass USE_RPC in order to reduce use of
1375*da0073e9SAndroid Build Coastguard Worker  # #if defined(USE_DISTRIBUTED) && !defined(_WIN32)
1376*da0073e9SAndroid Build Coastguard Worker  # need to be removed when RPC is supported
1377*da0073e9SAndroid Build Coastguard Worker  if(NOT WIN32)
1378*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cpu PUBLIC USE_RPC)
1379*da0073e9SAndroid Build Coastguard Worker  endif()
1380*da0073e9SAndroid Build Coastguard Worker  # Pass USE_TENSORPIPE to torch_cpu as some parts of rpc/utils.cpp
1381*da0073e9SAndroid Build Coastguard Worker  # can only be compiled with USE_TENSORPIPE is set.
1382*da0073e9SAndroid Build Coastguard Worker  if(USE_TENSORPIPE)
1383*da0073e9SAndroid Build Coastguard Worker    target_compile_definitions(torch_cpu PUBLIC USE_TENSORPIPE)
1384*da0073e9SAndroid Build Coastguard Worker  endif()
1385*da0073e9SAndroid Build Coastguard Workerendif()
1386*da0073e9SAndroid Build Coastguard Worker
1387*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_BUILD_MOBILE)
1388*da0073e9SAndroid Build Coastguard Worker  if(${CAFFE2_LINK_LOCAL_PROTOBUF})
1389*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cpu INTERFACE protobuf::libprotobuf)
1390*da0073e9SAndroid Build Coastguard Worker  else()
1391*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cpu PUBLIC protobuf::libprotobuf)
1392*da0073e9SAndroid Build Coastguard Worker  endif()
1393*da0073e9SAndroid Build Coastguard Workerendif()
1394*da0073e9SAndroid Build Coastguard Worker
1395*da0073e9SAndroid Build Coastguard Workerif($ENV{TH_BINARY_BUILD})
1396*da0073e9SAndroid Build Coastguard Worker  if(NOT MSVC AND USE_CUDA AND NOT APPLE)
1397*da0073e9SAndroid Build Coastguard Worker    # Note [Extra MKL symbols for MAGMA in torch_cpu]
1398*da0073e9SAndroid Build Coastguard Worker    #
1399*da0073e9SAndroid Build Coastguard Worker    # When we build CUDA libraries and link against MAGMA, MAGMA makes use of
1400*da0073e9SAndroid Build Coastguard Worker    # some BLAS symbols in its CPU fallbacks when it has no GPU versions
1401*da0073e9SAndroid Build Coastguard Worker    # of kernels.  Previously, we ensured the BLAS symbols were filled in by
1402*da0073e9SAndroid Build Coastguard Worker    # MKL by linking torch_cuda with BLAS, but when we are statically linking
1403*da0073e9SAndroid Build Coastguard Worker    # against MKL (when we do wheel builds), this actually ends up pulling in a
1404*da0073e9SAndroid Build Coastguard Worker    # decent chunk of MKL into torch_cuda, inflating our torch_cuda binary
1405*da0073e9SAndroid Build Coastguard Worker    # size by 8M.  torch_cpu exposes most of the MKL symbols we need, but
1406*da0073e9SAndroid Build Coastguard Worker    # empirically we determined that there are four which it doesn't provide.  If
1407*da0073e9SAndroid Build Coastguard Worker    # we link torch_cpu with these --undefined symbols, we can ensure they
1408*da0073e9SAndroid Build Coastguard Worker    # do get pulled in, and then we can avoid statically linking in MKL to
1409*da0073e9SAndroid Build Coastguard Worker    # torch_cuda at all!
1410*da0073e9SAndroid Build Coastguard Worker    #
1411*da0073e9SAndroid Build Coastguard Worker    # We aren't really optimizing for binary size on Windows (and this link
1412*da0073e9SAndroid Build Coastguard Worker    # line doesn't work on Windows), so don't do it there.
1413*da0073e9SAndroid Build Coastguard Worker    #
1414*da0073e9SAndroid Build Coastguard Worker    # These linker commands do not work on OS X, do not attempt this there.
1415*da0073e9SAndroid Build Coastguard Worker    # (It shouldn't matter anyway, though, because OS X has dropped CUDA support)
1416*da0073e9SAndroid Build Coastguard Worker    foreach(_symb  slaed0 daled0 dormql sormql zheevd cheevd)
1417*da0073e9SAndroid Build Coastguard Worker    STRING(APPEND _undefined_link_flags " -Wl,--undefined=mkl_lapack_${_symb}")
1418*da0073e9SAndroid Build Coastguard Worker    endforeach(_symb)
1419*da0073e9SAndroid Build Coastguard Worker    set_target_properties(torch_cpu PROPERTIES LINK_FLAGS  ${_undefined_link_flags})
1420*da0073e9SAndroid Build Coastguard Worker
1421*da0073e9SAndroid Build Coastguard Worker  endif()
1422*da0073e9SAndroid Build Coastguard Workerendif()
1423*da0073e9SAndroid Build Coastguard Worker
1424*da0073e9SAndroid Build Coastguard Workertarget_link_libraries(torch_cpu PUBLIC c10)
1425*da0073e9SAndroid Build Coastguard Workertarget_link_libraries(torch_cpu PUBLIC ${Caffe2_PUBLIC_DEPENDENCY_LIBS})
1426*da0073e9SAndroid Build Coastguard Workertarget_link_libraries(torch_cpu PRIVATE ${Caffe2_DEPENDENCY_LIBS})
1427*da0073e9SAndroid Build Coastguard Workertarget_link_libraries(torch_cpu PRIVATE ${Caffe2_DEPENDENCY_WHOLE_LINK_LIBS})
1428*da0073e9SAndroid Build Coastguard Workerif(USE_MPI)
1429*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_cpu PRIVATE MPI::MPI_CXX)
1430*da0073e9SAndroid Build Coastguard Workerendif()
1431*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu INTERFACE $<INSTALL_INTERFACE:include>)
1432*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu PRIVATE ${Caffe2_CPU_INCLUDE})
1433*da0073e9SAndroid Build Coastguard Workertarget_include_directories(torch_cpu SYSTEM PRIVATE "${Caffe2_DEPENDENCY_INCLUDE}")
1434*da0073e9SAndroid Build Coastguard Worker
1435*da0073e9SAndroid Build Coastguard Workertarget_compile_definitions(torch_cpu PRIVATE CAFFE2_BUILD_MAIN_LIB)
1436*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA)
1437*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_cuda PRIVATE TORCH_CUDA_BUILD_MAIN_LIB)
1438*da0073e9SAndroid Build Coastguard Workerelseif(USE_ROCM)
1439*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_hip PRIVATE TORCH_HIP_BUILD_MAIN_LIB)
1440*da0073e9SAndroid Build Coastguard Workerendif()
1441*da0073e9SAndroid Build Coastguard Worker
1442*da0073e9SAndroid Build Coastguard Workerif(USE_XPU)
1443*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_xpu PRIVATE TORCH_XPU_BUILD_MAIN_LIB)
1444*da0073e9SAndroid Build Coastguard Workerendif()
1445*da0073e9SAndroid Build Coastguard Worker
1446*da0073e9SAndroid Build Coastguard Workerset(EXPERIMENTAL_SINGLE_THREAD_POOL "0" CACHE STRING
1447*da0073e9SAndroid Build Coastguard Worker  "Experimental option to use a single thread pool for inter- and intra-op parallelism")
1448*da0073e9SAndroid Build Coastguard Workerif("${EXPERIMENTAL_SINGLE_THREAD_POOL}")
1449*da0073e9SAndroid Build Coastguard Worker  target_compile_definitions(torch_cpu PUBLIC "-DAT_EXPERIMENTAL_SINGLE_THREAD_POOL=1")
1450*da0073e9SAndroid Build Coastguard Workerendif()
1451*da0073e9SAndroid Build Coastguard Worker
1452*da0073e9SAndroid Build Coastguard Workerif(MSVC AND BUILD_SHARED_LIBS)
1453*da0073e9SAndroid Build Coastguard Worker  # ONNX is linked statically and needs to be exported from this library
1454*da0073e9SAndroid Build Coastguard Worker  # to be used externally. Make sure that references match the export.
1455*da0073e9SAndroid Build Coastguard Worker  target_compile_options(torch_cpu PRIVATE "-DONNX_BUILD_MAIN_LIB")
1456*da0073e9SAndroid Build Coastguard Workerendif()
1457*da0073e9SAndroid Build Coastguard Worker
1458*da0073e9SAndroid Build Coastguard Workercaffe2_interface_library(torch_cpu torch_cpu_library)
1459*da0073e9SAndroid Build Coastguard Worker
1460*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA)
1461*da0073e9SAndroid Build Coastguard Worker  caffe2_interface_library(torch_cuda torch_cuda_library)
1462*da0073e9SAndroid Build Coastguard Workerelseif(USE_ROCM)
1463*da0073e9SAndroid Build Coastguard Worker  caffe2_interface_library(torch_hip torch_hip_library)
1464*da0073e9SAndroid Build Coastguard Workerelseif(USE_XPU)
1465*da0073e9SAndroid Build Coastguard Worker  caffe2_interface_library(torch_xpu torch_xpu_library)
1466*da0073e9SAndroid Build Coastguard Workerendif()
1467*da0073e9SAndroid Build Coastguard Worker
1468*da0073e9SAndroid Build Coastguard Workercaffe2_interface_library(torch torch_library)
1469*da0073e9SAndroid Build Coastguard Worker
1470*da0073e9SAndroid Build Coastguard Workerinstall(TARGETS torch_cpu torch_cpu_library EXPORT Caffe2Targets DESTINATION "${TORCH_INSTALL_LIB_DIR}")
1471*da0073e9SAndroid Build Coastguard Worker
1472*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA)
1473*da0073e9SAndroid Build Coastguard Worker  install(TARGETS torch_cuda torch_cuda_library EXPORT Caffe2Targets DESTINATION "${TORCH_INSTALL_LIB_DIR}")
1474*da0073e9SAndroid Build Coastguard Workerelseif(USE_ROCM)
1475*da0073e9SAndroid Build Coastguard Worker  install(TARGETS torch_hip torch_hip_library EXPORT Caffe2Targets DESTINATION "${TORCH_INSTALL_LIB_DIR}")
1476*da0073e9SAndroid Build Coastguard Workerelseif(USE_XPU)
1477*da0073e9SAndroid Build Coastguard Worker  install(TARGETS torch_xpu torch_xpu_library EXPORT Caffe2Targets DESTINATION "${TORCH_INSTALL_LIB_DIR}")
1478*da0073e9SAndroid Build Coastguard Workerendif()
1479*da0073e9SAndroid Build Coastguard Worker
1480*da0073e9SAndroid Build Coastguard Workerinstall(TARGETS torch torch_library EXPORT Caffe2Targets DESTINATION "${TORCH_INSTALL_LIB_DIR}")
1481*da0073e9SAndroid Build Coastguard Worker
1482*da0073e9SAndroid Build Coastguard Workertarget_link_libraries(torch PUBLIC torch_cpu_library)
1483*da0073e9SAndroid Build Coastguard Worker
1484*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA)
1485*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch PUBLIC torch_cuda_library)
1486*da0073e9SAndroid Build Coastguard Workerelseif(USE_ROCM)
1487*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch PUBLIC torch_hip_library)
1488*da0073e9SAndroid Build Coastguard Workerendif()
1489*da0073e9SAndroid Build Coastguard Worker
1490*da0073e9SAndroid Build Coastguard Workerif(USE_XPU)
1491*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch PUBLIC torch_xpu_library)
1492*da0073e9SAndroid Build Coastguard Workerendif()
1493*da0073e9SAndroid Build Coastguard Worker
1494*da0073e9SAndroid Build Coastguard Workerif(PRINT_CMAKE_DEBUG_INFO)
1495*da0073e9SAndroid Build Coastguard Worker  print_target_properties(torch)
1496*da0073e9SAndroid Build Coastguard Worker  print_target_properties(torch_cpu)
1497*da0073e9SAndroid Build Coastguard Workerendif()
1498*da0073e9SAndroid Build Coastguard Worker
1499*da0073e9SAndroid Build Coastguard Worker# Install PDB files for MSVC builds
1500*da0073e9SAndroid Build Coastguard Workerif(MSVC AND BUILD_SHARED_LIBS)
1501*da0073e9SAndroid Build Coastguard Worker  install(FILES $<TARGET_PDB_FILE:torch_cpu> DESTINATION "${TORCH_INSTALL_LIB_DIR}" OPTIONAL)
1502*da0073e9SAndroid Build Coastguard Worker  if(USE_CUDA)
1503*da0073e9SAndroid Build Coastguard Worker    install(FILES $<TARGET_PDB_FILE:torch_cuda> DESTINATION "${TORCH_INSTALL_LIB_DIR}" OPTIONAL)
1504*da0073e9SAndroid Build Coastguard Worker  elseif(USE_ROCM)
1505*da0073e9SAndroid Build Coastguard Worker    install(FILES $<TARGET_PDB_FILE:torch_hip> DESTINATION "${TORCH_INSTALL_LIB_DIR}" OPTIONAL)
1506*da0073e9SAndroid Build Coastguard Worker  endif()
1507*da0073e9SAndroid Build Coastguard Workerendif()
1508*da0073e9SAndroid Build Coastguard Worker
1509*da0073e9SAndroid Build Coastguard Worker# ---[ CUDA library.
1510*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA)
1511*da0073e9SAndroid Build Coastguard Worker  # FIXME: If kineto is linked with CUPTI it pollutes torch_cpu with CUDA dependencies
1512*da0073e9SAndroid Build Coastguard Worker  # Even worse, it never declares that it depends on cudart, but calls the API, see
1513*da0073e9SAndroid Build Coastguard Worker  # https://github.com/pytorch/kineto/blob/aef2f5c0f15e3be52406ac0b885e8689de6bc9f6/libkineto/src/CudaDeviceProperties.cpp#L24
1514*da0073e9SAndroid Build Coastguard Worker  if(USE_KINETO AND NOT MSVC AND NOT LIBKINETO_NOCUPTI)
1515*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cpu PRIVATE torch::cudart)
1516*da0073e9SAndroid Build Coastguard Worker  endif()
1517*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_cuda INTERFACE torch::cudart)
1518*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_cuda PUBLIC c10_cuda)
1519*da0073e9SAndroid Build Coastguard Worker  if(TARGET torch::nvtx3)
1520*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda PRIVATE torch::nvtx3)
1521*da0073e9SAndroid Build Coastguard Worker  else()
1522*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cuda PUBLIC torch::nvtoolsext)
1523*da0073e9SAndroid Build Coastguard Worker  endif()
1524*da0073e9SAndroid Build Coastguard Worker
1525*da0073e9SAndroid Build Coastguard Worker  target_include_directories(
1526*da0073e9SAndroid Build Coastguard Worker      torch_cuda INTERFACE $<INSTALL_INTERFACE:include>)
1527*da0073e9SAndroid Build Coastguard Worker  target_include_directories(
1528*da0073e9SAndroid Build Coastguard Worker      torch_cuda PRIVATE ${Caffe2_GPU_INCLUDE})
1529*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(
1530*da0073e9SAndroid Build Coastguard Worker      torch_cuda PRIVATE ${Caffe2_CUDA_DEPENDENCY_LIBS})
1531*da0073e9SAndroid Build Coastguard Worker
1532*da0073e9SAndroid Build Coastguard Worker  # These public dependencies must go after the previous dependencies, as the
1533*da0073e9SAndroid Build Coastguard Worker  # order of the libraries in the linker call matters here when statically
1534*da0073e9SAndroid Build Coastguard Worker  # linking; libculibos and cublas must be last.
1535*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_cuda PUBLIC torch_cpu_library ${Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS})
1536*da0073e9SAndroid Build Coastguard Workerendif()
1537*da0073e9SAndroid Build Coastguard Worker
1538*da0073e9SAndroid Build Coastguard Worker# ---[ XPU library.
1539*da0073e9SAndroid Build Coastguard Workerif(USE_XPU)
1540*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_xpu INTERFACE torch::xpurt)
1541*da0073e9SAndroid Build Coastguard Worker
1542*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_xpu PUBLIC c10_xpu)
1543*da0073e9SAndroid Build Coastguard Worker
1544*da0073e9SAndroid Build Coastguard Worker  target_include_directories(
1545*da0073e9SAndroid Build Coastguard Worker      torch_xpu INTERFACE $<INSTALL_INTERFACE:include>)
1546*da0073e9SAndroid Build Coastguard Worker  target_include_directories(
1547*da0073e9SAndroid Build Coastguard Worker      torch_xpu PRIVATE ${Caffe2_XPU_INCLUDE})
1548*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(
1549*da0073e9SAndroid Build Coastguard Worker      torch_xpu PRIVATE ${Caffe2_XPU_DEPENDENCY_LIBS})
1550*da0073e9SAndroid Build Coastguard Worker
1551*da0073e9SAndroid Build Coastguard Worker  # Ensure that torch_cpu is ready before being linked by torch_xpu.
1552*da0073e9SAndroid Build Coastguard Worker  add_dependencies(torch_xpu torch_cpu)
1553*da0073e9SAndroid Build Coastguard Worker
1554*da0073e9SAndroid Build Coastguard Worker  if(MSVC)
1555*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_xpu PUBLIC torch_cpu_library)
1556*da0073e9SAndroid Build Coastguard Worker  else()
1557*da0073e9SAndroid Build Coastguard Worker    include(CheckLinkerFlag)
1558*da0073e9SAndroid Build Coastguard Worker
1559*da0073e9SAndroid Build Coastguard Worker    # Check whether the compiler supports '--no-as-needed' and '--as-needed'
1560*da0073e9SAndroid Build Coastguard Worker    check_linker_flag(CXX "-Wl,--no-as-needed" HAVE_NO_AS_NEEDED)
1561*da0073e9SAndroid Build Coastguard Worker    check_linker_flag(CXX "-Wl,--as-needed" HAVE_AS_NEEDED)
1562*da0073e9SAndroid Build Coastguard Worker
1563*da0073e9SAndroid Build Coastguard Worker    if(HAVE_NO_AS_NEEDED AND HAVE_AS_NEEDED)
1564*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_xpu PRIVATE
1565*da0073e9SAndroid Build Coastguard Worker          "-Wl,--no-as-needed,\"$<TARGET_FILE:torch_cpu>\" -Wl,--as-needed")
1566*da0073e9SAndroid Build Coastguard Worker    else()
1567*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_xpu PRIVATE "$<TARGET_FILE:torch_cpu>")
1568*da0073e9SAndroid Build Coastguard Worker    endif()
1569*da0073e9SAndroid Build Coastguard Worker  endif()
1570*da0073e9SAndroid Build Coastguard Workerendif()
1571*da0073e9SAndroid Build Coastguard Worker
1572*da0073e9SAndroid Build Coastguard Worker# ---[ Metal(OSX) modification
1573*da0073e9SAndroid Build Coastguard Workerif(APPLE AND USE_PYTORCH_METAL)
1574*da0073e9SAndroid Build Coastguard Worker  if(NOT INTERN_BUILD_MOBILE)
1575*da0073e9SAndroid Build Coastguard Worker    include(../cmake/Metal.cmake)
1576*da0073e9SAndroid Build Coastguard Worker    # We need to link the system frameworks explicitly
1577*da0073e9SAndroid Build Coastguard Worker    find_library(metal NAMES Metal)
1578*da0073e9SAndroid Build Coastguard Worker    find_library(mps NAMES MetalPerformanceShaders)
1579*da0073e9SAndroid Build Coastguard Worker    find_library(foundation NAMES Foundation)
1580*da0073e9SAndroid Build Coastguard Worker    find_library(accelerate NAMES Accelerate)
1581*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_cpu PUBLIC ${metal} ${mps} ${foundation} ${accelerate})
1582*da0073e9SAndroid Build Coastguard Worker  endif()
1583*da0073e9SAndroid Build Coastguard Workerendif()
1584*da0073e9SAndroid Build Coastguard Worker
1585*da0073e9SAndroid Build Coastguard Worker
1586*da0073e9SAndroid Build Coastguard Workertarget_link_libraries(torch_cpu PRIVATE flatbuffers)
1587*da0073e9SAndroid Build Coastguard Worker
1588*da0073e9SAndroid Build Coastguard Worker# Note [Global dependencies]
1589*da0073e9SAndroid Build Coastguard Worker# Some libraries (e.g. OpenMPI) like to dlopen plugins after they're initialized,
1590*da0073e9SAndroid Build Coastguard Worker# and they assume that all of their symbols will be available in the global namespace.
1591*da0073e9SAndroid Build Coastguard Worker# On the other hand we try to be good citizens and avoid polluting the symbol
1592*da0073e9SAndroid Build Coastguard Worker# namespaces, so libtorch is loaded with all its dependencies in a local scope.
1593*da0073e9SAndroid Build Coastguard Worker# That usually leads to missing symbol errors at run-time, so to avoid a situation like
1594*da0073e9SAndroid Build Coastguard Worker# this we have to preload those libs in a global namespace.
1595*da0073e9SAndroid Build Coastguard Workerif(BUILD_SHARED_LIBS)
1596*da0073e9SAndroid Build Coastguard Worker  add_library(torch_global_deps SHARED ${TORCH_SRC_DIR}/csrc/empty.c)
1597*da0073e9SAndroid Build Coastguard Worker  if(HAVE_SOVERSION)
1598*da0073e9SAndroid Build Coastguard Worker    set_target_properties(torch_global_deps PROPERTIES
1599*da0073e9SAndroid Build Coastguard Worker        VERSION ${TORCH_VERSION} SOVERSION ${TORCH_SOVERSION})
1600*da0073e9SAndroid Build Coastguard Worker  endif()
1601*da0073e9SAndroid Build Coastguard Worker  set_target_properties(torch_global_deps PROPERTIES LINKER_LANGUAGE C)
1602*da0073e9SAndroid Build Coastguard Worker  if(USE_MPI)
1603*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_global_deps MPI::MPI_CXX)
1604*da0073e9SAndroid Build Coastguard Worker  endif()
1605*da0073e9SAndroid Build Coastguard Worker  if(CAFFE2_USE_MKL)
1606*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_global_deps caffe2::mkl)
1607*da0073e9SAndroid Build Coastguard Worker  endif()
1608*da0073e9SAndroid Build Coastguard Worker  # The CUDA libraries are linked here for a different reason: in some
1609*da0073e9SAndroid Build Coastguard Worker  # cases we load these libraries with ctypes, and if they weren't opened
1610*da0073e9SAndroid Build Coastguard Worker  # with RTLD_GLOBAL, we'll do the "normal" search process again (and
1611*da0073e9SAndroid Build Coastguard Worker  # not find them, because they're usually in non-standard locations)
1612*da0073e9SAndroid Build Coastguard Worker  if(USE_CUDA)
1613*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_global_deps ${Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS})
1614*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_global_deps torch::cudart)
1615*da0073e9SAndroid Build Coastguard Worker    if(TARGET torch::nvtoolsext)
1616*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(torch_global_deps torch::nvtoolsext)
1617*da0073e9SAndroid Build Coastguard Worker    endif()
1618*da0073e9SAndroid Build Coastguard Worker  endif()
1619*da0073e9SAndroid Build Coastguard Worker  install(TARGETS torch_global_deps DESTINATION "${TORCH_INSTALL_LIB_DIR}")
1620*da0073e9SAndroid Build Coastguard Workerendif()
1621*da0073e9SAndroid Build Coastguard Worker
1622*da0073e9SAndroid Build Coastguard Worker# ---[ Caffe2 HIP sources.
1623*da0073e9SAndroid Build Coastguard Workerif(USE_ROCM)
1624*da0073e9SAndroid Build Coastguard Worker  # Call again since Caffe2_HIP_INCLUDE is extended with ATen include dirs.
1625*da0073e9SAndroid Build Coastguard Worker  # Get Compile Definitions from the directory (FindHIP.cmake bug)
1626*da0073e9SAndroid Build Coastguard Worker  get_directory_property(MY_DEFINITIONS COMPILE_DEFINITIONS)
1627*da0073e9SAndroid Build Coastguard Worker  if(MY_DEFINITIONS)
1628*da0073e9SAndroid Build Coastguard Worker    foreach(_item ${MY_DEFINITIONS})
1629*da0073e9SAndroid Build Coastguard Worker      list(APPEND HIP_CLANG_FLAGS "-D${_item}")
1630*da0073e9SAndroid Build Coastguard Worker    endforeach()
1631*da0073e9SAndroid Build Coastguard Worker  endif()
1632*da0073e9SAndroid Build Coastguard Worker
1633*da0073e9SAndroid Build Coastguard Worker  # Call again since Caffe2_HIP_INCLUDE is extended with ATen include dirs.
1634*da0073e9SAndroid Build Coastguard Worker  hip_include_directories(${Caffe2_HIP_INCLUDE})
1635*da0073e9SAndroid Build Coastguard Worker
1636*da0073e9SAndroid Build Coastguard Worker  # Since PyTorch files contain HIP headers, these flags are required for the necessary definitions to be added.
1637*da0073e9SAndroid Build Coastguard Worker  target_compile_options(torch_hip PUBLIC ${HIP_CXX_FLAGS})  # experiment
1638*da0073e9SAndroid Build Coastguard Worker
1639*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_hip PUBLIC c10_hip)
1640*da0073e9SAndroid Build Coastguard Worker
1641*da0073e9SAndroid Build Coastguard Worker  if(NOT INTERN_BUILD_MOBILE)
1642*da0073e9SAndroid Build Coastguard Worker    # TODO: Cut this over to ATEN_HIP_FILES_GEN_LIB.  At the moment, we
1643*da0073e9SAndroid Build Coastguard Worker    # only generate CUDA files
1644*da0073e9SAndroid Build Coastguard Worker    # NB: This dependency must be PRIVATE, because we don't install
1645*da0073e9SAndroid Build Coastguard Worker    # ATEN_CUDA_FILES_GEN_LIB (it's a synthetic target just to get the
1646*da0073e9SAndroid Build Coastguard Worker    # correct dependency from generated files.)
1647*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(torch_hip PRIVATE ATEN_CUDA_FILES_GEN_LIB)
1648*da0073e9SAndroid Build Coastguard Worker  endif()
1649*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_hip PUBLIC torch_cpu_library ${Caffe2_PUBLIC_HIP_DEPENDENCY_LIBS})
1650*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(torch_hip PRIVATE ${Caffe2_HIP_DEPENDENCY_LIBS})
1651*da0073e9SAndroid Build Coastguard Worker
1652*da0073e9SAndroid Build Coastguard Worker  # Since PyTorch files contain HIP headers, this is also needed to capture the includes.
1653*da0073e9SAndroid Build Coastguard Worker  target_include_directories(torch_hip PRIVATE ${Caffe2_HIP_INCLUDE})
1654*da0073e9SAndroid Build Coastguard Worker  target_include_directories(torch_hip INTERFACE $<INSTALL_INTERFACE:include>)
1655*da0073e9SAndroid Build Coastguard Workerendif()
1656*da0073e9SAndroid Build Coastguard Worker
1657*da0073e9SAndroid Build Coastguard Workerif(BUILD_STATIC_RUNTIME_BENCHMARK)
1658*da0073e9SAndroid Build Coastguard Worker  add_subdirectory(${TORCH_ROOT}/benchmarks/static_runtime ${PROJECT_BINARY_DIR}/bin)
1659*da0073e9SAndroid Build Coastguard Worker  add_executable(static_runtime_bench "${STATIC_RUNTIME_BENCHMARK_SRCS}")
1660*da0073e9SAndroid Build Coastguard Worker  add_executable(static_runtime_test "${STATIC_RUNTIME_TEST_SRCS}")
1661*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(static_runtime_bench torch_library benchmark)
1662*da0073e9SAndroid Build Coastguard Worker  target_link_libraries(static_runtime_test torch_library gtest_main)
1663*da0073e9SAndroid Build Coastguard Workerendif()
1664*da0073e9SAndroid Build Coastguard Worker
1665*da0073e9SAndroid Build Coastguard Workerif(BUILD_MOBILE_BENCHMARK)
1666*da0073e9SAndroid Build Coastguard Worker  foreach(benchmark_src ${ATen_MOBILE_BENCHMARK_SRCS})
1667*da0073e9SAndroid Build Coastguard Worker    get_filename_component(benchmark_name ${benchmark_src} NAME_WE)
1668*da0073e9SAndroid Build Coastguard Worker    add_executable(${benchmark_name} "${benchmark_src}")
1669*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(${benchmark_name} torch_library benchmark)
1670*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${benchmark_name} PRIVATE $<INSTALL_INTERFACE:include>)
1671*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${benchmark_name} PRIVATE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
1672*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${benchmark_name} PRIVATE ${ATen_CPU_INCLUDE})
1673*da0073e9SAndroid Build Coastguard Worker    target_link_options(${benchmark_name} PRIVATE "LINKER:--allow-multiple-definition")
1674*da0073e9SAndroid Build Coastguard Worker  endforeach()
1675*da0073e9SAndroid Build Coastguard Workerendif()
1676*da0073e9SAndroid Build Coastguard Worker
1677*da0073e9SAndroid Build Coastguard Workerif(BUILD_MOBILE_TEST)
1678*da0073e9SAndroid Build Coastguard Worker  foreach(test_src ${ATen_MOBILE_TEST_SRCS})
1679*da0073e9SAndroid Build Coastguard Worker    get_filename_component(test_name ${test_src} NAME_WE)
1680*da0073e9SAndroid Build Coastguard Worker    add_executable(${test_name} "${test_src}")
1681*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(${test_name} torch_library gtest_main)
1682*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
1683*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${test_name} PRIVATE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
1684*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${test_name} PRIVATE ${ATen_CPU_INCLUDE})
1685*da0073e9SAndroid Build Coastguard Worker    add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
1686*da0073e9SAndroid Build Coastguard Worker  endforeach()
1687*da0073e9SAndroid Build Coastguard Workerendif()
1688*da0073e9SAndroid Build Coastguard Worker
1689*da0073e9SAndroid Build Coastguard Worker# ---[ Test binaries.
1690*da0073e9SAndroid Build Coastguard Workerif(BUILD_TEST)
1691*da0073e9SAndroid Build Coastguard Worker
1692*da0073e9SAndroid Build Coastguard Worker  foreach(test_src ${ATen_VEC_TEST_SRCS})
1693*da0073e9SAndroid Build Coastguard Worker    foreach(i RANGE ${NUM_CPU_CAPABILITY_NAMES})
1694*da0073e9SAndroid Build Coastguard Worker        get_filename_component(test_name ${test_src} NAME_WE)
1695*da0073e9SAndroid Build Coastguard Worker        list(GET CPU_CAPABILITY_NAMES ${i} CPU_CAPABILITY)
1696*da0073e9SAndroid Build Coastguard Worker        list(GET CPU_CAPABILITY_FLAGS ${i} FLAGS)
1697*da0073e9SAndroid Build Coastguard Worker        separate_arguments(FLAGS UNIX_COMMAND "${FLAGS}")
1698*da0073e9SAndroid Build Coastguard Worker        # Build vec with minimal dependencies on all platforms but Windows
1699*da0073e9SAndroid Build Coastguard Worker        if(NOT MSVC)
1700*da0073e9SAndroid Build Coastguard Worker          add_executable(${test_name}_${CPU_CAPABILITY} "${test_src}" ../aten/src/ATen/native/quantized/AffineQuantizerBase.cpp)
1701*da0073e9SAndroid Build Coastguard Worker          # TODO: Get rid of c10 dependency (which is only needed for the implementation of AT_ERROR)
1702*da0073e9SAndroid Build Coastguard Worker          target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 sleef gtest_main nlohmann)
1703*da0073e9SAndroid Build Coastguard Worker          if(USE_FBGEMM)
1704*da0073e9SAndroid Build Coastguard Worker            target_link_libraries(${test_name}_${CPU_CAPABILITY} fbgemm)
1705*da0073e9SAndroid Build Coastguard Worker          endif()
1706*da0073e9SAndroid Build Coastguard Worker          if(USE_ASAN)
1707*da0073e9SAndroid Build Coastguard Worker            if(TARGET Sanitizer::address)
1708*da0073e9SAndroid Build Coastguard Worker              target_link_libraries(${test_name}_${CPU_CAPABILITY} Sanitizer::address)
1709*da0073e9SAndroid Build Coastguard Worker            endif()
1710*da0073e9SAndroid Build Coastguard Worker            if(TARGET Sanitizer::undefined)
1711*da0073e9SAndroid Build Coastguard Worker              target_link_libraries(${test_name}_${CPU_CAPABILITY} Sanitizer::undefined)
1712*da0073e9SAndroid Build Coastguard Worker            endif()
1713*da0073e9SAndroid Build Coastguard Worker          endif()
1714*da0073e9SAndroid Build Coastguard Worker        else()
1715*da0073e9SAndroid Build Coastguard Worker          add_executable(${test_name}_${CPU_CAPABILITY} "${test_src}")
1716*da0073e9SAndroid Build Coastguard Worker          target_link_libraries(${test_name}_${CPU_CAPABILITY} torch_library sleef gtest_main)
1717*da0073e9SAndroid Build Coastguard Worker        endif()
1718*da0073e9SAndroid Build Coastguard Worker        target_include_directories(${test_name}_${CPU_CAPABILITY} PRIVATE $<INSTALL_INTERFACE:include>)
1719*da0073e9SAndroid Build Coastguard Worker        target_include_directories(${test_name}_${CPU_CAPABILITY} PRIVATE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
1720*da0073e9SAndroid Build Coastguard Worker        target_include_directories(${test_name}_${CPU_CAPABILITY} PRIVATE ${ATen_CPU_INCLUDE})
1721*da0073e9SAndroid Build Coastguard Worker        target_compile_definitions(${test_name}_${CPU_CAPABILITY} PRIVATE CPU_CAPABILITY=${CPU_CAPABILITY}  CPU_CAPABILITY_${CPU_CAPABILITY})
1722*da0073e9SAndroid Build Coastguard Worker        target_compile_options(${test_name}_${CPU_CAPABILITY} PRIVATE  ${FLAGS})
1723*da0073e9SAndroid Build Coastguard Worker        if(NOT MSVC)
1724*da0073e9SAndroid Build Coastguard Worker              target_compile_options(${test_name}_${CPU_CAPABILITY} PRIVATE -Wno-ignored-qualifiers)
1725*da0073e9SAndroid Build Coastguard Worker        endif(NOT MSVC)
1726*da0073e9SAndroid Build Coastguard Worker        add_test(NAME ${test_name}_${CPU_CAPABILITY} COMMAND $<TARGET_FILE:${test_name}_${CPU_CAPABILITY}>)
1727*da0073e9SAndroid Build Coastguard Worker    endforeach()
1728*da0073e9SAndroid Build Coastguard Worker  endforeach()
1729*da0073e9SAndroid Build Coastguard Worker
1730*da0073e9SAndroid Build Coastguard Worker  foreach(test_src ${Caffe2_CPU_TEST_SRCS})
1731*da0073e9SAndroid Build Coastguard Worker    get_filename_component(test_name ${test_src} NAME_WE)
1732*da0073e9SAndroid Build Coastguard Worker    add_executable(${test_name} "${test_src}")
1733*da0073e9SAndroid Build Coastguard Worker    target_link_libraries(${test_name} torch_library gtest_main)
1734*da0073e9SAndroid Build Coastguard Worker    if(NOT MSVC)
1735*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(${test_name} stdc++)
1736*da0073e9SAndroid Build Coastguard Worker    endif()
1737*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
1738*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${test_name} PRIVATE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
1739*da0073e9SAndroid Build Coastguard Worker    target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
1740*da0073e9SAndroid Build Coastguard Worker    add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
1741*da0073e9SAndroid Build Coastguard Worker    if(INSTALL_TEST)
1742*da0073e9SAndroid Build Coastguard Worker      install(TARGETS ${test_name} DESTINATION test)
1743*da0073e9SAndroid Build Coastguard Worker      # Install PDB files for MSVC builds
1744*da0073e9SAndroid Build Coastguard Worker      if(MSVC AND BUILD_SHARED_LIBS)
1745*da0073e9SAndroid Build Coastguard Worker        install(FILES $<TARGET_PDB_FILE:${test_name}> DESTINATION test OPTIONAL)
1746*da0073e9SAndroid Build Coastguard Worker      endif()
1747*da0073e9SAndroid Build Coastguard Worker    endif()
1748*da0073e9SAndroid Build Coastguard Worker  endforeach()
1749*da0073e9SAndroid Build Coastguard Worker
1750*da0073e9SAndroid Build Coastguard Worker  if(USE_MPS)
1751*da0073e9SAndroid Build Coastguard Worker    foreach(test_src ${Caffe2_MPS_TEST_SRCS})
1752*da0073e9SAndroid Build Coastguard Worker      get_filename_component(test_name ${test_src} NAME_WE)
1753*da0073e9SAndroid Build Coastguard Worker      add_executable(${test_name} "${test_src}")
1754*da0073e9SAndroid Build Coastguard Worker      find_library(metal NAMES Metal)
1755*da0073e9SAndroid Build Coastguard Worker      find_library(foundation NAMES Foundation)
1756*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(${test_name} torch_library gtest_main ${metal} ${foundation})
1757*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
1758*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
1759*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
1760*da0073e9SAndroid Build Coastguard Worker      add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
1761*da0073e9SAndroid Build Coastguard Worker      if(INSTALL_TEST)
1762*da0073e9SAndroid Build Coastguard Worker        install(TARGETS ${test_name} DESTINATION test)
1763*da0073e9SAndroid Build Coastguard Worker        # Install PDB files for MSVC builds
1764*da0073e9SAndroid Build Coastguard Worker        if(MSVC AND BUILD_SHARED_LIBS)
1765*da0073e9SAndroid Build Coastguard Worker          install(FILES $<TARGET_PDB_FILE:${test_name}> DESTINATION test OPTIONAL)
1766*da0073e9SAndroid Build Coastguard Worker        endif()
1767*da0073e9SAndroid Build Coastguard Worker      endif()
1768*da0073e9SAndroid Build Coastguard Worker    endforeach()
1769*da0073e9SAndroid Build Coastguard Worker  endif()
1770*da0073e9SAndroid Build Coastguard Worker
1771*da0073e9SAndroid Build Coastguard Worker  if(USE_CUDA)
1772*da0073e9SAndroid Build Coastguard Worker    foreach(test_src ${Caffe2_GPU_TEST_SRCS})
1773*da0073e9SAndroid Build Coastguard Worker      get_filename_component(test_name ${test_src} NAME_WE)
1774*da0073e9SAndroid Build Coastguard Worker      add_executable(${test_name} "${test_src}")
1775*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(${test_name} torch_library gtest_main)
1776*da0073e9SAndroid Build Coastguard Worker      if(USE_CUDNN AND ${test_name} MATCHES "cudnn")
1777*da0073e9SAndroid Build Coastguard Worker        target_link_libraries(${test_name} torch::cudnn)
1778*da0073e9SAndroid Build Coastguard Worker      endif()
1779*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
1780*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
1781*da0073e9SAndroid Build Coastguard Worker      add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
1782*da0073e9SAndroid Build Coastguard Worker      if(INSTALL_TEST)
1783*da0073e9SAndroid Build Coastguard Worker        install(TARGETS ${test_name} DESTINATION test)
1784*da0073e9SAndroid Build Coastguard Worker        # Install PDB files for MSVC builds
1785*da0073e9SAndroid Build Coastguard Worker        if(MSVC AND BUILD_SHARED_LIBS)
1786*da0073e9SAndroid Build Coastguard Worker          install(FILES $<TARGET_PDB_FILE:${test_name}> DESTINATION test OPTIONAL)
1787*da0073e9SAndroid Build Coastguard Worker        endif()
1788*da0073e9SAndroid Build Coastguard Worker      endif()
1789*da0073e9SAndroid Build Coastguard Worker    endforeach()
1790*da0073e9SAndroid Build Coastguard Worker    if(TARGET context_gpu_test)
1791*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(context_gpu_test caffe2::curand caffe2::cublas)
1792*da0073e9SAndroid Build Coastguard Worker    endif()
1793*da0073e9SAndroid Build Coastguard Worker  endif()
1794*da0073e9SAndroid Build Coastguard Worker
1795*da0073e9SAndroid Build Coastguard Worker  if(USE_XPU)
1796*da0073e9SAndroid Build Coastguard Worker    foreach(test_src ${Caffe2_XPU_TEST_SRCS})
1797*da0073e9SAndroid Build Coastguard Worker      get_filename_component(test_name ${test_src} NAME_WE)
1798*da0073e9SAndroid Build Coastguard Worker      add_executable(${test_name} "${test_src}")
1799*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(${test_name} torch_library gtest_main)
1800*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
1801*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
1802*da0073e9SAndroid Build Coastguard Worker      add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
1803*da0073e9SAndroid Build Coastguard Worker      if(INSTALL_TEST)
1804*da0073e9SAndroid Build Coastguard Worker        install(TARGETS ${test_name} DESTINATION test)
1805*da0073e9SAndroid Build Coastguard Worker      endif()
1806*da0073e9SAndroid Build Coastguard Worker    endforeach()
1807*da0073e9SAndroid Build Coastguard Worker  endif()
1808*da0073e9SAndroid Build Coastguard Worker
1809*da0073e9SAndroid Build Coastguard Worker  if(USE_VULKAN)
1810*da0073e9SAndroid Build Coastguard Worker    foreach(test_src ${Caffe2_VULKAN_TEST_SRCS})
1811*da0073e9SAndroid Build Coastguard Worker      get_filename_component(test_name ${test_src} NAME_WE)
1812*da0073e9SAndroid Build Coastguard Worker      add_executable(${test_name} "${test_src}")
1813*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(${test_name} torch_library gtest_main)
1814*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
1815*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE})
1816*da0073e9SAndroid Build Coastguard Worker      add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
1817*da0073e9SAndroid Build Coastguard Worker      if(INSTALL_TEST)
1818*da0073e9SAndroid Build Coastguard Worker        install(TARGETS ${test_name} DESTINATION test)
1819*da0073e9SAndroid Build Coastguard Worker        # Install PDB files for MSVC builds
1820*da0073e9SAndroid Build Coastguard Worker        if(MSVC AND BUILD_SHARED_LIBS)
1821*da0073e9SAndroid Build Coastguard Worker          install(FILES $<TARGET_PDB_FILE:${test_name}> DESTINATION test OPTIONAL)
1822*da0073e9SAndroid Build Coastguard Worker        endif()
1823*da0073e9SAndroid Build Coastguard Worker      endif()
1824*da0073e9SAndroid Build Coastguard Worker    endforeach()
1825*da0073e9SAndroid Build Coastguard Worker  endif()
1826*da0073e9SAndroid Build Coastguard Worker
1827*da0073e9SAndroid Build Coastguard Worker  if(USE_ROCM)
1828*da0073e9SAndroid Build Coastguard Worker    foreach(test_src ${Caffe2_HIP_TEST_SRCS})
1829*da0073e9SAndroid Build Coastguard Worker      get_filename_component(test_name ${test_src} NAME_WE)
1830*da0073e9SAndroid Build Coastguard Worker      add_executable(${test_name} "${test_src}")
1831*da0073e9SAndroid Build Coastguard Worker      target_link_libraries(${test_name} torch_library gtest_main)
1832*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE $<INSTALL_INTERFACE:include>)
1833*da0073e9SAndroid Build Coastguard Worker      target_include_directories(${test_name} PRIVATE ${Caffe2_CPU_INCLUDE} ${Caffe2_HIP_INCLUDE})
1834*da0073e9SAndroid Build Coastguard Worker      target_compile_options(${test_name} PRIVATE ${HIP_CXX_FLAGS})
1835*da0073e9SAndroid Build Coastguard Worker      add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
1836*da0073e9SAndroid Build Coastguard Worker      if(INSTALL_TEST)
1837*da0073e9SAndroid Build Coastguard Worker        install(TARGETS ${test_name} DESTINATION test)
1838*da0073e9SAndroid Build Coastguard Worker      endif()
1839*da0073e9SAndroid Build Coastguard Worker    endforeach()
1840*da0073e9SAndroid Build Coastguard Worker  endif()
1841*da0073e9SAndroid Build Coastguard Workerendif()
1842*da0073e9SAndroid Build Coastguard Worker
1843*da0073e9SAndroid Build Coastguard Workerif(MSVC)
1844*da0073e9SAndroid Build Coastguard Worker  # This is used to enable the conforming lambda processor in MSVC
1845*da0073e9SAndroid Build Coastguard Worker  # Which allows us to capture constexpr in lambdas
1846*da0073e9SAndroid Build Coastguard Worker  # Note that this will be turned on by default for std=c++20 and above
1847*da0073e9SAndroid Build Coastguard Worker  # This should be applied globally when https://github.com/pytorch/pytorch/issues/92600 is fixed
1848*da0073e9SAndroid Build Coastguard Worker  foreach(tmp ${MEM_EFF_ATTENTION_CUDA_SOURCES})
1849*da0073e9SAndroid Build Coastguard Worker    # MEM_EFF_ATTENTION_CUDA is populated in pytorch/aten/src/ATen/CMakeLists.txt
1850*da0073e9SAndroid Build Coastguard Worker    # We iterate over these files, updating paths and adding the compile flag
1851*da0073e9SAndroid Build Coastguard Worker    FILE(RELATIVE_PATH tmp_path "${PROJECT_SOURCE_DIR}" "${tmp}")
1852*da0073e9SAndroid Build Coastguard Worker    SET(tmp_path "../${tmp_path}")
1853*da0073e9SAndroid Build Coastguard Worker    set_source_files_properties(${tmp_path} PROPERTIES COMPILE_FLAGS "-Xcompiler /Zc:lambda")
1854*da0073e9SAndroid Build Coastguard Worker  endforeach()
1855*da0073e9SAndroid Build Coastguard Workerendif()
1856*da0073e9SAndroid Build Coastguard Workerendif()
1857