Skip to content

Commit 7d87296

Browse files
peterjc123fmassa
andauthored
Fix cmake cuda build for Windows & Enable cmake windows gpu build (#2754)
* Fix cmake cuda build for Windows * add gpu test jobs * Update .circleci/regenerate.py Co-authored-by: Francisco Massa <[email protected]>
1 parent c542137 commit 7d87296

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

.circleci/config.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,6 +1145,10 @@ workflows:
11451145
cu_version: cpu
11461146
name: cmake_windows_cpu
11471147
python_version: '3.8'
1148+
- cmake_windows_gpu:
1149+
cu_version: cu101
1150+
name: cmake_windows_gpu
1151+
python_version: '3.8'
11481152
- cmake_macos_cpu:
11491153
cu_version: cpu
11501154
name: cmake_macos_cpu

.circleci/regenerate.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,16 +191,16 @@ def cmake_workflows(indentation=6):
191191
jobs = []
192192
python_version = '3.8'
193193
for os_type in ['linux', 'windows', 'macos']:
194-
# Right now CMake builds are failling on Windows (GPU)
195-
device_types = ['cpu', 'gpu'] if os_type == 'linux' else ['cpu']
194+
# Skip OSX CUDA
195+
device_types = ['cpu', 'gpu'] if os_type != 'macos' else ['cpu']
196196
for device in device_types:
197197
job = {
198198
'name': f'cmake_{os_type}_{device}',
199199
'python_version': python_version
200200
}
201201

202202
job['cu_version'] = 'cu101' if device == 'gpu' else 'cpu'
203-
if device == 'gpu':
203+
if device == 'gpu' and os_type == 'linux':
204204
job['wheel_docker_image'] = 'pytorch/manylinux-cuda101'
205205
jobs.append({f'cmake_{os_type}_{device}': job})
206206
return indent(indentation, jobs)

CMakeLists.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ if(WITH_CUDA)
99
enable_language(CUDA)
1010
add_definitions(-D__CUDA_NO_HALF_OPERATORS__)
1111
add_definitions(-DWITH_CUDA)
12+
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr")
1213
endif()
1314

1415
find_package(Python3 COMPONENTS Development)
@@ -17,6 +18,15 @@ find_package(Torch REQUIRED)
1718
find_package(PNG REQUIRED)
1819
find_package(JPEG REQUIRED)
1920

21+
function(CUDA_CONVERT_FLAGS EXISTING_TARGET)
22+
get_property(old_flags TARGET ${EXISTING_TARGET} PROPERTY INTERFACE_COMPILE_OPTIONS)
23+
if(NOT "${old_flags}" STREQUAL "")
24+
string(REPLACE ";" "," CUDA_flags "${old_flags}")
25+
set_property(TARGET ${EXISTING_TARGET} PROPERTY INTERFACE_COMPILE_OPTIONS
26+
"$<$<BUILD_INTERFACE:$<COMPILE_LANGUAGE:CXX>>:${old_flags}>$<$<BUILD_INTERFACE:$<COMPILE_LANGUAGE:CUDA>>:-Xcompiler=${CUDA_flags}>"
27+
)
28+
endif()
29+
endfunction()
2030

2131
file(GLOB HEADERS torchvision/csrc/*.h)
2232
# Image extension
@@ -29,6 +39,26 @@ endif()
2939
file(GLOB MODELS_HEADERS torchvision/csrc/models/*.h)
3040
file(GLOB MODELS_SOURCES torchvision/csrc/models/*.h torchvision/csrc/models/*.cpp)
3141

42+
if(MSVC)
43+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4819")
44+
if(WITH_CUDA)
45+
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=/wd4819")
46+
foreach(diag cc_clobber_ignored integer_sign_change useless_using_declaration
47+
set_but_not_used field_without_dll_interface
48+
base_class_has_different_dll_interface
49+
dll_interface_conflict_none_assumed
50+
dll_interface_conflict_dllexport_assumed
51+
implicit_return_from_non_void_function
52+
unsigned_compare_with_zero
53+
declared_but_not_referenced
54+
bad_friend_decl)
55+
string(APPEND CMAKE_CUDA_FLAGS " -Xcudafe --diag_suppress=${diag}")
56+
endforeach()
57+
CUDA_CONVERT_FLAGS(torch_cpu)
58+
CUDA_CONVERT_FLAGS(torch_cuda)
59+
endif()
60+
endif()
61+
3262
add_library(${PROJECT_NAME} SHARED ${MODELS_SOURCES} ${OPERATOR_SOURCES} ${IMAGE_SOURCES})
3363
target_link_libraries(${PROJECT_NAME} PRIVATE ${TORCH_LIBRARIES} ${PNG_LIBRARY} ${JPEG_LIBRARIES} Python3::Python)
3464
set_target_properties(${PROJECT_NAME} PROPERTIES EXPORT_NAME TorchVision)

0 commit comments

Comments
 (0)