mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
Generate PDB files for better debugging on Windows (#16008)
Summary: 1. Unify `build_pytorch_libs.bat`, `setup.py` and `torch/CMakeLists.txt` on the debugging flags with the `CMAKE_BUILD_TYPE` being `Debug`, `Release` and `RelWithDebInfo`. 2. Install PDBs through CMake if they are generated. Reference: 1. CMake PDB install: https://gitlab.kitware.com/cmake/cmake/issues/18393#note_459199 2. About debugging flags https://stackoverflow.com/a/4662345 3. MSDN page about /DEBUG flag: https://docs.microsoft.com/en-us/cpp/build/reference/debug-generate-debug-info?view=vs-2017 4. MSDN page about /Z{i/I/7}: https://docs.microsoft.com/en-us/cpp/build/reference/z7-zi-zi-debug-information-format?view=vs-2017 Work to do: - [x] Test the changes work in Release config through this PR - [ ] <del> Test debug build through https://github.com/pytorch/pytorch/pull/16009 </del> - [x] Test release build with debugging symbols through #16013 Difficulties: - [x] Replace /Zi flags with /Z7 (which will be added if DEBUG or RelWithDebInfo is used), as it is not supported by sccache - [x] Resolve `LINK : fatal error LNK1210: exceeded internal ILK size limit; link with /INCREMENTAL:NO` in the debug build - [ ] DEBUG build blocked by a MSVC bug. In order to resolve it, we'll need to update the MSVC in CI: https://developercommunity.visualstudio.com/content/problem/225957/fatal-error-lnk1318-unexpected-pdb-error-ok-0.html Pull Request resolved: https://github.com/pytorch/pytorch/pull/16008 Differential Revision: D13709527 Pulled By: ezyang fbshipit-source-id: e8365bc75d9ec64099093f7001f83d99a06b196b
This commit is contained in:
committed by
Facebook Github Bot
parent
0dfdc2cbdb
commit
f7733526aa
@ -52,6 +52,26 @@ if(APPLE)
|
||||
set(CMAKE_MACOSX_RPATH ON)
|
||||
endif()
|
||||
|
||||
# For MSVC,
|
||||
# 1. Replace /Zi and /ZI with /Z7
|
||||
# 2. Switch off incremental linking in debug builds
|
||||
if (MSVC)
|
||||
foreach(flag_var
|
||||
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
||||
if(${flag_var} MATCHES "/Z[iI]")
|
||||
string(REGEX REPLACE "/Z[iI]" "/Z7" ${flag_var} "${${flag_var}}")
|
||||
endif(${flag_var} MATCHES "/Z[iI]")
|
||||
endforeach(flag_var)
|
||||
foreach(flag_var
|
||||
CMAKE_SHARED_LINKER_FLAGS_DEBUG CMAKE_STATIC_LINKER_FLAGS_DEBUG
|
||||
CMAKE_EXE_LINKER_FLAGS_DEBUG CMAKE_MODULE_LINKER_FLAGS_DEBUG)
|
||||
if(${flag_var} MATCHES "/INCREMENTAL" AND NOT ${flag_var} MATCHES "/INCREMENTAL:NO")
|
||||
string(REGEX REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" ${flag_var} "${${flag_var}}")
|
||||
endif()
|
||||
endforeach(flag_var)
|
||||
endif(MSVC)
|
||||
|
||||
# ---[ Options.
|
||||
# Note to developers: if you add an option below, make sure you also add it to
|
||||
# cmake/Summary.cmake so that the summary prints out the option values.
|
||||
|
@ -99,3 +99,7 @@ install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${CMAKE_BINARY_DIR}/c10/macros/cmake_macros.h
|
||||
DESTINATION include/c10/macros)
|
||||
|
||||
if (MSVC AND C10_BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:c10> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
|
@ -67,3 +67,7 @@ foreach(file ${C10_CUDA_HEADERS})
|
||||
endforeach()
|
||||
install(FILES ${CMAKE_BINARY_DIR}/c10/cuda/impl/cuda_cmake_macros.h
|
||||
DESTINATION include/c10/cuda/impl)
|
||||
|
||||
if (MSVC AND C10_CUDA_BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:c10_cuda> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
|
@ -318,6 +318,10 @@ target_compile_options(caffe2 PRIVATE "$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWith
|
||||
install(TARGETS caffe2 EXPORT Caffe2Targets DESTINATION lib)
|
||||
caffe2_interface_library(caffe2 caffe2_library)
|
||||
list(APPEND Caffe2_MAIN_LIBS caffe2_library)
|
||||
# Install PDB files for MSVC builds
|
||||
if (MSVC AND BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
|
||||
# ---[ CUDA library.
|
||||
if(USE_CUDA)
|
||||
@ -360,6 +364,11 @@ if(USE_CUDA)
|
||||
install(TARGETS caffe2_gpu EXPORT Caffe2Targets DESTINATION lib)
|
||||
caffe2_interface_library(caffe2_gpu caffe2_gpu_library)
|
||||
list(APPEND Caffe2_MAIN_LIBS caffe2_gpu_library)
|
||||
|
||||
# Install PDB files for MSVC builds
|
||||
if (MSVC AND BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2_gpu> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ---[ Caffe2 HIP sources.
|
||||
@ -427,6 +436,10 @@ if (BUILD_TEST)
|
||||
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
||||
if (INSTALL_TEST)
|
||||
install(TARGETS ${test_name} DESTINATION test)
|
||||
# Install PDB files for MSVC builds
|
||||
if (MSVC AND BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:${test_name}> DESTINATION test OPTIONAL)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
@ -440,6 +453,10 @@ if (BUILD_TEST)
|
||||
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
||||
if (INSTALL_TEST)
|
||||
install(TARGETS ${test_name} DESTINATION test)
|
||||
# Install PDB files for MSVC builds
|
||||
if (MSVC AND BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:${test_name}> DESTINATION test OPTIONAL)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
@ -550,6 +567,9 @@ if (BUILD_PYTHON)
|
||||
caffe2_pybind11_state PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/caffe2/python)
|
||||
install(TARGETS caffe2_pybind11_state DESTINATION "${PYTHON_LIB_REL_PATH}/caffe2/python")
|
||||
if (MSVC AND BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2_pybind11_state> DESTINATION "${PYTHON_LIB_REL_PATH}/caffe2/python" OPTIONAL)
|
||||
endif()
|
||||
set_target_properties(caffe2_pybind11_state PROPERTIES INSTALL_RPATH "${caffe2_pybind11_rpath}")
|
||||
|
||||
if(USE_CUDA)
|
||||
@ -574,6 +594,9 @@ if (BUILD_PYTHON)
|
||||
caffe2_pybind11_state_gpu PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/caffe2/python)
|
||||
install(TARGETS caffe2_pybind11_state_gpu DESTINATION "${PYTHON_LIB_REL_PATH}/caffe2/python")
|
||||
if (MSVC AND BUILD_SHARED_LIBS)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2_pybind11_state_gpu> DESTINATION "${PYTHON_LIB_REL_PATH}/caffe2/python" OPTIONAL)
|
||||
endif()
|
||||
set_target_properties(caffe2_pybind11_state_gpu PROPERTIES INSTALL_RPATH "${caffe2_pybind11_rpath}")
|
||||
endif()
|
||||
|
||||
|
@ -25,6 +25,26 @@ if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# For MSVC,
|
||||
# 1. Replace /Zi and /ZI with /Z7
|
||||
# 2. Switch off incremental linking in debug builds
|
||||
if (MSVC)
|
||||
foreach(flag_var
|
||||
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
||||
if(${flag_var} MATCHES "/Z[iI]")
|
||||
string(REGEX REPLACE "/Z[iI]" "/Z7" ${flag_var} "${${flag_var}}")
|
||||
endif(${flag_var} MATCHES "/Z[iI]")
|
||||
endforeach(flag_var)
|
||||
foreach(flag_var
|
||||
CMAKE_SHARED_LINKER_FLAGS_DEBUG CMAKE_STATIC_LINKER_FLAGS_DEBUG
|
||||
CMAKE_EXE_LINKER_FLAGS_DEBUG CMAKE_MODULE_LINKER_FLAGS_DEBUG)
|
||||
if(${flag_var} MATCHES "/INCREMENTAL" AND NOT ${flag_var} MATCHES "/INCREMENTAL:NO")
|
||||
string(REGEX REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" ${flag_var} "${${flag_var}}")
|
||||
endif()
|
||||
endforeach(flag_var)
|
||||
endif(MSVC)
|
||||
|
||||
# ---[ Threads
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/public/threads.cmake)
|
||||
if (TARGET Threads::Threads)
|
||||
@ -1067,12 +1087,12 @@ if (NOT BUILD_ATEN_MOBILE)
|
||||
OPTION(NDEBUG "disable asserts (WARNING: this may result in silent UB e.g. with out-of-bound indices)")
|
||||
IF (NOT NDEBUG)
|
||||
MESSAGE(STATUS "Removing -DNDEBUG from compile flags")
|
||||
STRING(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS "" ${CMAKE_C_FLAGS})
|
||||
STRING(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_DEBUG "" ${CMAKE_C_FLAGS_DEBUG})
|
||||
STRING(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "" ${CMAKE_C_FLAGS_RELEASE})
|
||||
STRING(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS "" ${CMAKE_CXX_FLAGS})
|
||||
STRING(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "" ${CMAKE_CXX_FLAGS_DEBUG})
|
||||
STRING(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "" ${CMAKE_CXX_FLAGS_RELEASE})
|
||||
STRING(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_C_FLAGS "" ${CMAKE_C_FLAGS})
|
||||
STRING(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_C_FLAGS_DEBUG "" ${CMAKE_C_FLAGS_DEBUG})
|
||||
STRING(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "" ${CMAKE_C_FLAGS_RELEASE})
|
||||
STRING(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_CXX_FLAGS "" ${CMAKE_CXX_FLAGS})
|
||||
STRING(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "" ${CMAKE_CXX_FLAGS_DEBUG})
|
||||
STRING(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "" ${CMAKE_CXX_FLAGS_RELEASE})
|
||||
ENDIF()
|
||||
|
||||
# OpenMP support?
|
||||
|
@ -38,6 +38,16 @@ macro(custom_protobuf_find)
|
||||
set(__caffe2_CMAKE_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE})
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
if (MSVC)
|
||||
foreach(flag_var
|
||||
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
||||
if(${flag_var} MATCHES "/Z[iI]")
|
||||
string(REGEX REPLACE "/Z[iI]" "/Z7" ${flag_var} "${${flag_var}}")
|
||||
endif(${flag_var} MATCHES "/Z[iI]")
|
||||
endforeach(flag_var)
|
||||
endif(MSVC)
|
||||
|
||||
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/protobuf/cmake)
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ${__caffe2_CMAKE_POSITION_INDEPENDENT_CODE})
|
||||
|
@ -12,9 +12,15 @@ if (BUILD_CAFFE2_OPS)
|
||||
|
||||
target_link_libraries(caffe2_detectron_ops_gpu caffe2_gpu)
|
||||
install(TARGETS caffe2_detectron_ops_gpu DESTINATION lib)
|
||||
if (MSVC)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2_detectron_ops_gpu> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
elseif(NOT IOS_PLATFORM)
|
||||
add_library(caffe2_detectron_ops SHARED ${Detectron_CPU_SRCS})
|
||||
target_link_libraries(caffe2_detectron_ops caffe2)
|
||||
install(TARGETS caffe2_detectron_ops DESTINATION lib)
|
||||
if (MSVC)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2_detectron_ops> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
@ -12,4 +12,7 @@ if (BUILD_TEST)
|
||||
|
||||
target_link_libraries(caffe2_module_test_dynamic caffe2_library)
|
||||
install(TARGETS caffe2_module_test_dynamic DESTINATION lib)
|
||||
if (MSVC)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2_module_test_dynamic> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -19,6 +19,9 @@ target_include_directories(caffe2_observers PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/.
|
||||
target_compile_options(caffe2_observers PRIVATE "-DCAFFE2_BUILD_OBSERVER_LIB")
|
||||
install(TARGETS caffe2_observers DESTINATION lib)
|
||||
caffe2_interface_library(caffe2_observers caffe2_observers_library)
|
||||
if (MSVC)
|
||||
install(FILES $<TARGET_PDB_FILE:caffe2_observers> DESTINATION lib OPTIONAL)
|
||||
endif()
|
||||
|
||||
if (CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO)
|
||||
set(Caffe2_MODULES ${Caffe2_MODULES} caffe2_observers_library PARENT_SCOPE)
|
||||
|
8
setup.py
8
setup.py
@ -722,8 +722,11 @@ if DEBUG:
|
||||
extra_link_args += ['-O0', '-g']
|
||||
|
||||
if REL_WITH_DEB_INFO:
|
||||
extra_compile_args += ['-g']
|
||||
extra_link_args += ['-g']
|
||||
if IS_WINDOWS:
|
||||
extra_link_args.append('/DEBUG:FULL')
|
||||
else:
|
||||
extra_compile_args += ['-g']
|
||||
extra_link_args += ['-g']
|
||||
|
||||
|
||||
def make_relative_rpath(path):
|
||||
@ -841,6 +844,7 @@ if __name__ == '__main__':
|
||||
'lib/*.dylib*',
|
||||
'lib/*.dll',
|
||||
'lib/*.lib',
|
||||
'lib/*.pdb',
|
||||
'lib/torch_shm_manager',
|
||||
'lib/*.h',
|
||||
'lib/include/ATen/*.h',
|
||||
|
@ -20,7 +20,7 @@ set LDFLAGS=/LIBPATH:%INSTALL_DIR%/lib
|
||||
:: set TORCH_CUDA_ARCH_LIST=6.1
|
||||
|
||||
set C_FLAGS=%BASIC_C_FLAGS% /D_WIN32 /Z7 /EHa /DNOMINMAX
|
||||
set LINK_FLAGS=/DEBUG:FULL
|
||||
set LINK_FLAGS=
|
||||
: End cmake variables
|
||||
|
||||
if not exist torch\lib\tmp_install mkdir torch\lib\tmp_install
|
||||
@ -91,9 +91,11 @@ goto :process_args
|
||||
set BUILD_TYPE=Release
|
||||
IF "%DEBUG%"=="1" (
|
||||
set BUILD_TYPE=Debug
|
||||
set LINK_FLAGS=%LINK_FLAGS% /DEBUG:FULL
|
||||
)
|
||||
IF "%REL_WITH_DEB_INFO%"=="1" (
|
||||
set BUILD_TYPE=RelWithDebInfo
|
||||
set LINK_FLAGS=%LINK_FLAGS% /DEBUG:FULL
|
||||
)
|
||||
|
||||
:: sccache will fail if all cores are used for compiling
|
||||
|
@ -436,6 +436,10 @@ install(TARGETS torch
|
||||
LIBRARY DESTINATION "${TORCH_INSTALL_LIB_DIR}"
|
||||
ARCHIVE DESTINATION "${TORCH_INSTALL_LIB_DIR}")
|
||||
|
||||
if (MSVC AND NOT TORCH_STATIC)
|
||||
install(FILES $<TARGET_PDB_FILE:torch> DESTINATION "${TORCH_INSTALL_LIB_DIR}" OPTIONAL)
|
||||
endif()
|
||||
|
||||
if (BUILD_TEST AND NOT MSVC AND NOT USE_ROCM)
|
||||
add_subdirectory(${TORCH_ROOT}/test/cpp/jit ${CMAKE_BINARY_DIR}/test_jit)
|
||||
endif()
|
||||
@ -598,13 +602,16 @@ if (BUILD_PYTHON)
|
||||
|
||||
set(TORCH_PYTHON_COMPILE_OPTIONS)
|
||||
|
||||
set(TORCH_PYTHON_LINK_FLAGS)
|
||||
set(TORCH_PYTHON_LINK_FLAGS "")
|
||||
|
||||
if (MSVC)
|
||||
list(APPEND TORCH_PYTHON_LINK_FLAGS " /NODEFAULTLIB:LIBCMT.LIB")
|
||||
string(APPEND TORCH_PYTHON_LINK_FLAGS " /NODEFAULTLIB:LIBCMT.LIB")
|
||||
list(APPEND TORCH_PYTHON_LINK_LIBRARIES ${PYTHON_LIBRARIES})
|
||||
if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
|
||||
string(APPEND TORCH_PYTHON_LINK_FLAGS " /DEBUG:FULL")
|
||||
endif()
|
||||
elseif (APPLE)
|
||||
list(APPEND TORCH_PYTHON_LINK_FLAGS " -undefined dynamic_lookup")
|
||||
string(APPEND TORCH_PYTHON_LINK_FLAGS " -undefined dynamic_lookup")
|
||||
else()
|
||||
list(APPEND TORCH_PYTHON_COMPILE_OPTIONS
|
||||
-fno-strict-aliasing
|
||||
@ -628,7 +635,6 @@ if (BUILD_PYTHON)
|
||||
if(MSVC)
|
||||
list(APPEND TORCH_PYTHON_LINK_LIBRARIES ${NVTOOLEXT_HOME}/lib/x64/nvToolsExt64_1.lib)
|
||||
list(APPEND TORCH_PYTHON_INCLUDE_DIRECTORIES "${NVTOOLEXT_HOME}/include")
|
||||
list(APPEND TORCH_PYTHON_LINK_FLAGS " /FORCE:UNRESOLVED")
|
||||
elseif(APPLE)
|
||||
list(APPEND TORCH_PYTHON_LINK_LIBRARIES ${CUDA_TOOLKIT_ROOT_DIR}/lib/libnvToolsExt.dylib)
|
||||
else()
|
||||
@ -711,8 +717,8 @@ if (BUILD_PYTHON)
|
||||
|
||||
target_include_directories(torch_python PUBLIC ${TORCH_PYTHON_INCLUDE_DIRECTORIES})
|
||||
|
||||
if (TORCH_PYTHON_LINK_FLAGS)
|
||||
set_target_properties(torch_python PROPERTIES LINK_FLAGS "${TORCH_PYTHON_LINK_FLAGS}")
|
||||
if (NOT TORCH_PYTHON_LINK_FLAGS STREQUAL "")
|
||||
set_target_properties(torch_python PROPERTIES LINK_FLAGS ${TORCH_PYTHON_LINK_FLAGS})
|
||||
endif()
|
||||
|
||||
install(TARGETS torch_python
|
||||
|
@ -24,3 +24,7 @@ INSTALL(TARGETS shm
|
||||
LIBRARY DESTINATION "${LIBSHM_INSTALL_LIB_SUBDIR}"
|
||||
ARCHIVE DESTINATION "${LIBSHM_INSTALL_LIB_SUBDIR}")
|
||||
INSTALL(FILES libshm.h DESTINATION "include")
|
||||
|
||||
if (MSVC AND NOT TORCH_STATIC)
|
||||
INSTALL(FILES $<TARGET_PDB_FILE:shm> DESTINATION "${LIBSHM_INSTALL_LIB_SUBDIR}" OPTIONAL)
|
||||
endif()
|
||||
|
Reference in New Issue
Block a user