SDL_gpu_shadercross: cmake: install PDB's and build in RelWithDebInfo on ci

From 54973dbb25b2243bff8d2905ffdc63c558702254 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sun, 10 Nov 2024 02:13:21 +0100
Subject: [PATCH] cmake: install PDB's and build in RelWithDebInfo on ci

---
 .github/workflows/main.yml      | 11 ++++++-----
 CMakeLists.txt                  | 15 +++++++++++++++
 cmake/PrivateSdlFunctions.cmake | 24 +++++++++++++++---------
 3 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 656ae17..29988ee 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -47,6 +47,7 @@ jobs:
         id: sdl
         uses: libsdl-org/setup-sdl@main
         with:
+          build-type: RelWithDebInfo
           cmake-generator: Ninja
           version: 3-head
           sdl-test: true
@@ -78,7 +79,7 @@ jobs:
         if: ${{ matrix.platform.build-spirv-cross }}
         run: |
           cmake -S external/SPIRV-Cross -B spirv_cross_build -GNinja \
-            -DCMAKE_BUILD_TYPE=Release \
+            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
             -DSPIRV_CROSS_SHARED=ON \
             -DSPIRV_CROSS_STATIC=ON \
             -DCMAKE_INSTALL_PREFIX=${PWD}/spirv_cross_prefix
@@ -94,7 +95,7 @@ jobs:
       - name: Configure (CMake)
         run: |
           cmake -S . -B build -GNinja \
-            -DCMAKE_BUILD_TYPE=Release \
+            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
             -DSDLGPUSHADERCROSS_SHARED=ON \
             -DSDLGPUSHADERCROSS_STATIC=ON \
             -DSDLGPUSHADERCROSS_VENDORED=${{ matrix.platform.vendored }} \
@@ -108,12 +109,12 @@ jobs:
       - name: Build (CMake)
         id: build
         run: |
-          cmake --build build --config Release --parallel --verbose
+          cmake --build build --config RelWithDebInfo --parallel --verbose
       - name: Install (CMake)
         id: install
         if: ${{ always() && steps.build.outcome == 'success' }}
         run: |
-          cmake --install build/ --config Release
+          cmake --install build/ --config RelWithDebInfo
           echo "SDL3_gpu_shadercross_ROOT=${PWD}/prefix" >>${GITHUB_ENV}
       - name: Package (CPack)
         id: package
@@ -125,7 +126,7 @@ jobs:
         if: ${{ always() && steps.install.outcome == 'success' }}
         run: |
           cmake -S cmake/test -B cmake_config_build -GNinja \
-            -DCMAKE_BUILD_TYPE=Release
+            -DCMAKE_BUILD_TYPE=RelWithDebInfo
           cmake --build cmake_config_build --verbose
 
       - uses: actions/upload-artifact@v4
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8c5e51e..235b84f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -270,6 +270,9 @@ if(SDLGPUSHADERCROSS_INSTALL)
 			DESTINATION "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR}"
 			COMPONENT devel
 		)
+		if(MSVC)
+			SDL_install_pdb(SDL3_gpu_shadercross-shared "${CMAKE_INSTALL_BINDIR}")
+		endif()
 	endif()
 	if(TARGET SDL3_gpu_shadercross-static)
 		install(TARGETS SDL3_gpu_shadercross-static EXPORT SDL3_gpu_shadercross-static-export
@@ -282,6 +285,9 @@ if(SDLGPUSHADERCROSS_INSTALL)
 			DESTINATION "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR}"
 			COMPONENT devel
 		)
+		if(MSVC)
+			SDL_install_pdb(SDL3_gpu_shadercross-static "${CMAKE_INSTALL_LIBDIR}")
+		endif()
 	endif()
 	if(install_extra_targets)
 		install(TARGETS ${install_extra_targets} EXPORT SDL3_gpu_shadercross-vendored
@@ -295,6 +301,9 @@ if(SDLGPUSHADERCROSS_INSTALL)
 			DESTINATION "${SDLGPUSHADERCROSS_INSTALL_CMAKEDIR}"
 			COMPONENT devel
 		)
+		if(MSVC)
+			SDL_install_pdb(shadercross "${CMAKE_INSTALL_BINDIR}")
+		endif()
 	endif()
 	install(
 		FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/SDL3_gpu_shadercross/SDL_gpu_shadercross.h"
@@ -302,6 +311,9 @@ if(SDLGPUSHADERCROSS_INSTALL)
 	)
 	if(SDLGPUSHADERCROSS_CLI)
 		install(TARGETS shadercross RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
+		if(MSVC)
+			SDL_install_pdb(shadercross "${CMAKE_INSTALL_BINDIR}")
+		endif()
 	endif()
 
 	include(CMakePackageConfigHelpers)
@@ -393,6 +405,9 @@ if(SDLGPUSHADERCROSS_INSTALL_RUNTIME)
 	# Install SDL3
 	if(SDLGPUSHADERCROSS_CLI AND NOT SDLGPUSHADERCROSS_CLI_STATIC)
 		install(IMPORTED_RUNTIME_ARTIFACTS SDL3::SDL3-shared RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+		if(MSVC)
+			SDL_install_pdb(SDL3::SDL3-shared "${CMAKE_INSTALL_BINDIR}")
+		endif()
 	endif()
 	include(ExternalProject)
 
diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake
index 0bd77bb..5ad736f 100644
--- a/cmake/PrivateSdlFunctions.cmake
+++ b/cmake/PrivateSdlFunctions.cmake
@@ -341,15 +341,21 @@ function(sdl_get_git_revision_hash VARNAME)
 endfunction()
 
 function(SDL_install_pdb TARGET DIRECTORY)
-    get_property(type TARGET ${TARGET} PROPERTY TYPE)
-    if(type MATCHES "^(SHARED_LIBRARY|EXECUTABLE)$")
-        install(FILES $<TARGET_PDB_FILE:${TARGET}> DESTINATION "${DIRECTORY}" OPTIONAL)
-    elseif(type STREQUAL "STATIC_LIBRARY")
-        # FIXME: Use $<TARGET_COMPILE_PDB_FILE:${TARGET} once it becomes available (https://gitlab.kitware.com/cmake/cmake/-/issues/25244)
-        if(CMAKE_GENERATOR MATCHES "^Visual Studio.*")
-            install(CODE "file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${DIRECTORY}\" TYPE FILE OPTIONAL FILES \"${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}/${TARGET}.pdb\")")
-        else()
-            install(CODE "file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${DIRECTORY}\" TYPE FILE OPTIONAL FILES \"${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/${TARGET}.pdb\")")
+    get_property(imported TARGET ${TARGET} PROPERTY IMPORTED)
+    if(imported)
+        install(FILES "$<TARGET_FILE_DIR:${TARGET}>/$<TARGET_FILE_BASE_NAME:${TARGET}>.pdb" DESTINATION "${DIRECTORY}" OPTIONAL)
+    else()
+        get_property(type TARGET ${TARGET} PROPERTY TYPE)
+        if(type MATCHES "^(SHARED_LIBRARY|EXECUTABLE)$")
+            install(FILES $<TARGET_PDB_FILE:${TARGET}> DESTINATION "${DIRECTORY}" OPTIONAL)
+        elseif(type STREQUAL "STATIC_LIBRARY")
+            # FIXME: Use $<TARGET_COMPILE_PDB_FILE:${TARGET} once it becomes available (https://gitlab.kitware.com/cmake/cmake/-/issues/25244)
+            if(CMAKE_GENERATOR MATCHES "^Visual Studio.*")
+                set(pdb_path "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}/${TARGET}.pdb")
+            else()
+                set(pdb_path "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/${TARGET}.pdb")
+            endif()
+            install(CODE "file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${DIRECTORY}\" TYPE FILE OPTIONAL FILES \"${pdb_path}\")")
         endif()
     endif()
 endfunction()