summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Qt3rdPartyLibraryHelpers.cmake1
-rw-r--r--cmake/QtModuleHelpers.cmake6
-rw-r--r--cmake/QtPluginHelpers.cmake1
-rw-r--r--cmake/QtTargetHelpers.cmake62
-rw-r--r--cmake/QtToolHelpers.cmake1
5 files changed, 71 insertions, 0 deletions
diff --git a/cmake/Qt3rdPartyLibraryHelpers.cmake b/cmake/Qt3rdPartyLibraryHelpers.cmake
index 41c4ad6fa7..9944d47daf 100644
--- a/cmake/Qt3rdPartyLibraryHelpers.cmake
+++ b/cmake/Qt3rdPartyLibraryHelpers.cmake
@@ -244,6 +244,7 @@ function(qt_internal_add_3rdparty_library target)
CONFIG_INSTALL_DIR "${config_install_dir}"
)
endif()
+ qt_internal_install_pdb_files("${target}" "${INSTALL_LIBDIR}")
endfunction()
function(qt_install_3rdparty_library_wrap_config_extra_file target)
diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake
index c9ef2397a9..dfafa7eec9 100644
--- a/cmake/QtModuleHelpers.cmake
+++ b/cmake/QtModuleHelpers.cmake
@@ -589,6 +589,12 @@ set(QT_CMAKE_EXPORT_NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE})")
qt_finalize_framework_headers_copy(${target})
endif()
+ set(pdb_install_dir "${INSTALL_BINDIR}")
+ if(NOT is_shared_lib)
+ set(pdb_install_dir "${INSTALL_LIBDIR}")
+ endif()
+ qt_internal_install_pdb_files(${target} "${pdb_install_dir}")
+
qt_describe_module(${target})
qt_add_list_file_finalizer(qt_finalize_module ${target} ${arg_INTERNAL_MODULE} ${header_module})
endfunction()
diff --git a/cmake/QtPluginHelpers.cmake b/cmake/QtPluginHelpers.cmake
index f00fcbd2a6..691735afe4 100644
--- a/cmake/QtPluginHelpers.cmake
+++ b/cmake/QtPluginHelpers.cmake
@@ -267,6 +267,7 @@ function(qt_internal_add_plugin target)
qt_internal_add_linker_version_script(${target})
qt_add_list_file_finalizer(qt_finalize_plugin ${target} "${install_directory}")
+ qt_internal_install_pdb_files(${target} "${install_directory}")
endfunction()
function(qt_finalize_plugin target install_directory)
diff --git a/cmake/QtTargetHelpers.cmake b/cmake/QtTargetHelpers.cmake
index d542eaafb8..bbcd768495 100644
--- a/cmake/QtTargetHelpers.cmake
+++ b/cmake/QtTargetHelpers.cmake
@@ -191,6 +191,7 @@ function(qt_set_common_target_properties target)
target_link_options(${target} INTERFACE "LINKER:-static")
endif()
endif()
+ qt_internal_set_compile_pdb_names("${target}")
endfunction()
# Set common, informational target properties.
@@ -479,3 +480,64 @@ function(qt_internal_create_tracepoints name tracepoints_file)
qt_configure_file(OUTPUT "${header_path}" CONTENT "#include <private/qtrace_p.h>\n")
endif()
endfunction()
+
+function(qt_internal_set_compile_pdb_names target)
+ if(MSVC)
+ get_target_property(target_type ${target} TYPE)
+ if(target_type STREQUAL "STATIC_LIBRARY")
+ set_target_properties(${target} PROPERTIES COMPILE_PDB_NAME "${INSTALL_CMAKE_NAMESPACE}${target}")
+ set_target_properties(${target} PROPERTIES COMPILE_PDB_NAME_DEBUG "${INSTALL_CMAKE_NAMESPACE}${target}d")
+ endif()
+ endif()
+endfunction()
+
+# Installs pdb files for given target into the specified install dir.
+#
+# MSVC generates 2 types of pdb files:
+# - compile-time generated pdb files (compile flag /Zi + /Fd<pdb_name>)
+# - link-time genereated pdb files (link flag /debug + /PDB:<pdb_name>)
+#
+# CMake allows changing the names of each of those pdb file types by setting
+# the COMPILE_PDB_NAME_<CONFIG> and PDB_NAME_<CONFIG> properties. If they are
+# left empty, CMake will compute the default names itself (or rather in certain cases
+# leave it up to te compiler), without actually setting the property values.
+#
+# For installation purposes, CMake only provides a generator expression to the
+# link time pdb file path, not the compile path one, which means we have to compute the
+# path to the compile path pdb files ourselves.
+# See https://gitlab.kitware.com/cmake/cmake/-/issues/18393 for details.
+#
+# For shared libraries and executables, we install the linker provided pdb file via the
+# TARGET_PDB_FILE generator expression.
+#
+# For static libraries there is no linker invocation, so we need to install the compile
+# time pdb file. We query the ARCHIVE_OUTPUT_DIRECTORY property of the target to get the
+# path to the pdb file, and reconstruct the file name. We use a generator expression
+# to append a possible debug suffix, in order to allow installation of all Release and
+# Debug pdb files when using Ninja Multi-Config.
+function(qt_internal_install_pdb_files target install_dir_path)
+ if(MSVC)
+ get_target_property(target_type ${target} TYPE)
+
+ if(target_type STREQUAL "SHARED_LIBRARY"
+ OR target_type STREQUAL "EXECUTABLE"
+ OR target_type STREQUAL "MODULE_LIBRARY")
+ qt_install(FILES "$<TARGET_PDB_FILE:${target}>"
+ DESTINATION "${install_dir_path}"
+ OPTIONAL)
+
+ elseif(target_type STREQUAL "STATIC_LIBRARY")
+ get_target_property(lib_dir "${target}" ARCHIVE_OUTPUT_DIRECTORY)
+ if(NOT lib_dir)
+ message(FATAL_ERROR
+ "Can't install pdb file for static library ${target}. "
+ "The ARCHIVE_OUTPUT_DIRECTORY path is not known.")
+ endif()
+ set(pdb_name "${INSTALL_CMAKE_NAMESPACE}${target}$<$<CONFIG:Debug>:d>.pdb")
+ qt_path_join(compile_time_pdb_file_path "${lib_dir}" "${pdb_name}")
+
+ qt_install(FILES "${compile_time_pdb_file_path}"
+ DESTINATION "${install_dir_path}" OPTIONAL)
+ endif()
+ endif()
+endfunction()
diff --git a/cmake/QtToolHelpers.cmake b/cmake/QtToolHelpers.cmake
index ac5412461d..5a812a3a45 100644
--- a/cmake/QtToolHelpers.cmake
+++ b/cmake/QtToolHelpers.cmake
@@ -197,6 +197,7 @@ function(qt_internal_add_tool target_name)
if(QT_FEATURE_separate_debug_info AND (UNIX OR MINGW))
qt_enable_separate_debug_info(${target_name} ${INSTALL_BINDIR})
endif()
+ qt_internal_install_pdb_files(${target_name} "${INSTALL_BINDIR}")
endfunction()
function(qt_export_tools module_name)