From a48fe55f94515307573ae39ce1d4bfceb8c38f36 Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Mon, 30 Jun 2025 20:21:21 -0400 Subject: [PATCH 01/14] feat: xbox one support --- include/sentry.h | 2 +- toolchains/xbox/CMakeGDKXboxOne.cmake | 231 ++++++++++++++++++++++++++ vendor/acutest.h | 2 +- 3 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 toolchains/xbox/CMakeGDKXboxOne.cmake diff --git a/include/sentry.h b/include/sentry.h index 34af7b44a..4f5cc8a5b 100644 --- a/include/sentry.h +++ b/include/sentry.h @@ -36,7 +36,7 @@ extern "C" { /* common platform detection */ #ifdef _WIN32 # define SENTRY_PLATFORM_WINDOWS -# ifdef _GAMING_XBOX_SCARLETT +# ifdef _GAMING_XBOX_SCARLETT || _GAMING_XBOX_XBOXONE # define SENTRY_PLATFORM_XBOX_SCARLETT # endif #elif defined(__APPLE__) diff --git a/toolchains/xbox/CMakeGDKXboxOne.cmake b/toolchains/xbox/CMakeGDKXboxOne.cmake new file mode 100644 index 000000000..2a9bbc4f3 --- /dev/null +++ b/toolchains/xbox/CMakeGDKXboxOne.cmake @@ -0,0 +1,231 @@ +# Adapted by Sentry from: +# https://raw.githubusercontent.com/microsoft/Xbox-GDK-Samples/710f4bd9095d3796d07505249a7b383857e8a23f/Samples/Tools/CMakeExample/CMake/CMakeGDKXboxOne.cmake +# +# CMakeGDKXboxOne.cmake : CMake definitions for Microsoft GDK targeting Xbox One/Xbox One S/Xbox One X +# +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +mark_as_advanced(CMAKE_TOOLCHAIN_FILE) + +if(_GDK_XBOX_ONE_TOOLCHAIN_) + return() +endif() + +set(XBOX_CONSOLE_TARGET "xboxone" CACHE STRING "") + +include("${CMAKE_CURRENT_LIST_DIR}/DetectGDK.cmake") + +message("XdkEditionTarget = ${XdkEditionTarget}") + +set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION BUILD_USING_BWOI) + +#--- Windows SDK +include("${CMAKE_CURRENT_LIST_DIR}/DetectWindowsSDK.cmake") + +set(CMAKE_SYSTEM_NAME WINDOWS) +set(CMAKE_SYSTEM_VERSION ${WINDOWS_SDK_VER}) +set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION ${WINDOWS_SDK_VER}) + +#--- Locate Visual Studio (needed for VC Runtime DLLs) + +if (NOT DEFINED VCInstallDir AND DEFINED ENV{VCINSTALLDIR}) + cmake_path(SET VCInstallDir "$ENV{VCINSTALLDIR}") +endif() + +if (NOT DEFINED VCInstallDir) + set(GDK_VS_EDITIONS "Community" "Professional" "Enterprise" "Preview" "BuildTools") + + if (MSVC_TOOLSET_VERSION MATCHES "143") + foreach(vsedition IN LISTS GDK_VS_EDITIONS) + cmake_path(SET VCInstallDir "$ENV{ProgramFiles}/Microsoft Visual Studio/2022/${vsedition}/VC") + if(EXISTS ${VCInstallDir}) + break() + endif() + endforeach() + else() + foreach(vsedition IN LISTS GDK_VS_EDITIONS) + cmake_path(SET VCInstallDir "$ENV{ProgramFiles\(x86\)}/Microsoft Visual Studio/2019/${vsedition}/VC") + if(EXISTS ${VCInstallDir}) + break() + endif() + endforeach() + + if (NOT EXISTS ${VCInstallDir}) + foreach(vsedition IN LISTS GDK_VS_EDITIONS) + cmake_path(SET VCInstallDir "$ENV{ProgramFiles}/Microsoft Visual Studio/2022/${vsedition}/VC") + if(EXISTS ${VCInstallDir}) + break() + endif() + endforeach() + endif() + endif() +endif() + +if(EXISTS ${VCInstallDir}) + message("VCInstallDir = ${VCInstallDir}") +else() + message(FATAL_ERROR "ERROR: Failed to locate Visual Studio 2019 or 2022 install") +endif() + +# Find VC toolset/runtime versions +file(STRINGS "${VCInstallDir}/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" VCToolsVersion) +message("VCToolsVersion = ${VCToolsVersion}") + +file(STRINGS "${VCInstallDir}/Auxiliary/Build/Microsoft.VCRedistVersion.default.txt" VCToolsRedistVersion) +message("VCToolsRedistVersion = ${VCToolsRedistVersion}") + +#--- GameRuntime and Extension Libraries +set(_GDK_XBOX_ ON) +include("${SENTRY_TOOLCHAINS_DIR}/xbox/GDK-targets.cmake") + +set(DurangoXdkInstallPath "${Console_SdkRoot}/${GDK_VERSION}") + +message("Microsoft GDK = ${DurangoXdkInstallPath}") + +#--- Windows SDK +if(EXISTS "${WINDOWS_SDK}/Include/${WINDOWS_SDK_VER}" ) + message("Windows SDK = v${WINDOWS_SDK_VER} in ${WINDOWS_SDK}") +else() + message(FATAL_ERROR "ERROR: Cannot locate Windows SDK (${WINDOWS_SDK_VER})") +endif() + + +if(EXISTS "${WindowsSdkDir}/Include/${SDKVersion}" ) + message("Windows SDK = v${SDKVersion} in ${WindowsSdkDir}") +else() + message(FATAL_ERROR "ERROR: Cannot locate Windows SDK (${SDKVersion})") +endif() + +#--- Headers +set(Console_EndpointIncludeRoot + "${DurangoXdkInstallPath}/GXDK/gameKit/Include" + "${DurangoXdkInstallPath}/GXDK/gameKit/Include/XboxOne" + "${DurangoXdkInstallPath}/GRDK/gameKit/Include") +set(Console_WindowsIncludeRoot ${WindowsSdkDir}/Include/${SDKVersion}) +set(Console_SdkIncludeRoot + "${Console_EndpointIncludeRoot}" + "${Console_WindowsIncludeRoot}/um" + "${Console_WindowsIncludeRoot}/shared" + "${Console_WindowsIncludeRoot}/winrt" + "${Console_WindowsIncludeRoot}/cppwinrt" + "${Console_WindowsIncludeRoot}/ucrt") + +#--- Libraries +# Don't link with onecore.lib, kernel32.lib, etc. +set(CMAKE_CXX_STANDARD_LIBRARIES "") +set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "") + +# Need to link with "onecore" versions of Visual C++ libraries ("msvc_x64_x64" environment uses desktop libpath) +set(VC_OneCore_LibPath "${VCInstallDir}/Tools/MSVC/${VCToolsVersion}/lib/onecore/x64") +if(NOT EXISTS ${VC_OneCore_LibPath}/msvcrt.lib) + message(FATAL_ERROR "ERROR: Cannot locate msvcrt.lib for the Visual C++ toolset (${VCToolsVersion})") +endif() + +set(Console_LibRoot ${WINDOWS_SDK}/Lib/${WINDOWS_SDK_VER}) +set(Console_EndpointLibRoot + "${DurangoXdkInstallPath}/GXDK/gameKit/Lib/amd64" + "${DurangoXdkInstallPath}/GXDK/gameKit/Lib/amd64/XboxOne" + "${DurangoXdkInstallPath}/GRDK/gameKit/Lib/amd64") +set(Console_SdkLibPath + "${Console_EndpointLibRoot}" + "${Console_LibRoot}/ucrt/x64" + "${Console_LibRoot}/um/x64") + +set(Console_Libs pixevt.lib d3d12_x.lib xgameplatform.lib xgameruntime.lib xmem.lib xg_x.lib) + +#--- Binaries +set(GameOSFilePath ${DurangoXdkInstallPath}/GXDK/sideload/gameos.xvd) + +set(Console_UCRTRedistDebug ${WINDOWS_SDK}/bin/${WINDOWS_SDK_VER}/x64/ucrt) +if(NOT EXISTS ${Console_UCRTRedistDebug}/ucrtbased.dll) + message(FATAL_ERROR "ERROR: Cannot locate ucrtbased.dll in the Windows SDK (${SDKVersion})") +endif() + +set(CRTPlatformToolset 143) +if (NOT EXISTS "${VCInstallDir}/redist/MSVC/${VCToolsRedistVersion}/onecore/x64/Microsoft.VC${CRTPlatformToolset}.CRT") + set(CRTPlatformToolset 142) +endif() + +message("CRT Platform Toolset = ${CRTPlatformToolset}") + +set(CppRuntimeFilesPath "${VCInstallDir}/redist/MSVC/${VCToolsRedistVersion}/onecore/x64/Microsoft.VC${CRTPlatformToolset}.CRT") +set(OpenMPRuntimeFilesPath "${VCInstallDir}/redist/MSVC/${VCToolsRedistVersion}/onecore/x64/Microsoft.VC${CRTPlatformToolset}.OpenMP") +if(CMAKE_BUILD_TYPE MATCHES "Debug") + set(DebugCppRuntimeFilesPath "${VCInstallDir}/redist/MSVC/${VCToolsRedistVersion}/onecore/Debug_NonRedist/x64/Microsoft.VC${CRTPlatformToolset}.DebugCRT") + set(DebugOpenMPRuntimeFilesPath "${VCInstallDir}/redist/MSVC/${VCToolsRedistVersion}/onecore/Debug_NonRedist/x64/Microsoft.VC${CRTPlatformToolset}.DebugOpenMP") +endif() + +#--- Tools +find_program(MAKEPKG_TOOL makepkg.exe + REQUIRED NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_DEFAULT_PATH + HINTS "${Console_SdkRoot}/bin") + +message("MGC Tool = ${MAKEPKG_TOOL}") + +find_program(DIRECTX_DXC_TOOL dxc.exe + REQUIRED NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_DEFAULT_PATH + HINTS "${DurangoXdkInstallPath}/GXDK/bin/XboxOne") + +message("DXC Compiler = ${DIRECTX_DXC_TOOL}") + +#--- Build options +# Required preprocessor defines +# WIN32 +# _WINDOWS + +# Standard Debug vs. Release preprocessor definitions +# (automatically defined by MSVC and MSVC-like compilers) +# _DEBUG (Debug) +# NDEBUG (Release without asserts) + +# Build as Unicode (see UTF-8 Everywhere article's Win32 recommendations) +set(Console_Defines _UNICODE UNICODE) + +# Game Core on Xbox preprocessor definitions +set(Console_Defines ${Console_Defines} WIN32_LEAN_AND_MEAN _GAMING_XBOX WINAPI_FAMILY=WINAPI_FAMILY_GAMES) + +# Preprocessor definition for Xbox One/Xbox One S/Xbox One X +set(Console_Defines ${Console_Defines} _GAMING_XBOX_XBOXONE) + +# Additional recommended preprocessor defines +set(Console_Defines ${Console_Defines} _CRT_USE_WINAPI_PARTITION_APP _UITHREADCTXT_SUPPORT=0 __WRL_CLASSIC_COM_STRICT__) + +# Default library controls +set(Console_Defines ${Console_Defines} _ATL_NO_DEFAULT_LIBS __WRL_NO_DEFAULT_LIB__) + +set(UnsupportedLibs advapi32.lib comctl32.lib comsupp.lib dbghelp.lib gdi32.lib gdiplus.lib guardcfw.lib kernel32.lib mmc.lib msimg32.lib msvcole.lib msvcoled.lib mswsock.lib ntstrsafe.lib ole2.lib ole2autd.lib ole2auto.lib ole2d.lib ole2ui.lib ole2uid.lib ole32.lib oleacc.lib oleaut32.lib oledlg.lib oledlgd.lib oldnames.lib runtimeobject.lib shell32.lib shlwapi.lib strsafe.lib urlmon.lib user32.lib userenv.lib wlmole.lib wlmoled.lib onecore.lib) + +# Required compiler switches: +# /MD or /MDd (VC Runtime DLL) +# /O? or /Od (Optimize code) + +# Required linker switches: +# /MACHINE:X64 /SUBSYSTEM:WINDOWS +# /DYNAMICBASE +# /NXCOMPAT +set(Console_LinkOptions /DYNAMICBASE /NXCOMPAT) + +# Prevent accidental use of libraries that are not supported by Game Core on Xbox +foreach(arg ${UnsupportedLibs}) + list(APPEND Console_LinkOptions "/NODEFAULTLIB:${arg}") +endforeach() + +if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # /favor:AMD64 + # /arch:AVX + set(Console_ArchOptions /favor:AMD64 /arch:AVX) + + # Xbox One titles should use this switch to optimize the vzeroupper codegen with VS 2022 + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.30) + set(Console_ArchOptions ${Console_ArchOptions} /d2vzeroupper-) + set(Console_ArchOptions_LTCG /d2:-vzeroupper-) + endif() + +endif() +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # -march=btver2 to target AMD Jaguar CPU + set(Console_ArchOptions -march=btver2) +endif() + +set(_GDK_XBOX_ONE_TOOLCHAIN_ ON) diff --git a/vendor/acutest.h b/vendor/acutest.h index 9ac9179c4..67da377e1 100644 --- a/vendor/acutest.h +++ b/vendor/acutest.h @@ -487,7 +487,7 @@ test_print_in_color__(int color, const char* fmt, ...) printf("\033[0m"); return n; } -#elif defined ACUTEST_WIN__ && !defined _GAMING_XBOX_SCARLETT +#elif defined ACUTEST_WIN__ && (!defined _GAMING_XBOX_SCARLETT || !defined _GAMING_XBOX_XBOXONE) { HANDLE h; CONSOLE_SCREEN_BUFFER_INFO info; From 6726fe698f32c374b9be7133daaec3a237e77555 Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Mon, 30 Jun 2025 20:26:32 -0400 Subject: [PATCH 02/14] define --- include/sentry.h | 4 ++-- src/modulefinder/sentry_modulefinder_windows.c | 6 +++--- src/screenshot/sentry_screenshot_windows.c | 8 ++++---- src/sentry_core.c | 2 +- src/sentry_os.c | 12 ++++++------ src/symbolizer/sentry_symbolizer_windows.c | 4 ++-- tests/unit/test_symbolizer.c | 2 +- tests/unit/test_unwinder.c | 2 +- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/include/sentry.h b/include/sentry.h index 4f5cc8a5b..f41492630 100644 --- a/include/sentry.h +++ b/include/sentry.h @@ -37,7 +37,7 @@ extern "C" { #ifdef _WIN32 # define SENTRY_PLATFORM_WINDOWS # ifdef _GAMING_XBOX_SCARLETT || _GAMING_XBOX_XBOXONE -# define SENTRY_PLATFORM_XBOX_SCARLETT +# define SENTRY_PLATFORM_XBOX # endif #elif defined(__APPLE__) # include @@ -72,7 +72,7 @@ extern "C" { #ifndef SENTRY_SDK_NAME # if defined(SENTRY_PLATFORM_ANDROID) # define SENTRY_SDK_NAME "sentry.native.android" -# elif defined(SENTRY_PLATFORM_XBOX_SCARLETT) +# elif defined(SENTRY_PLATFORM_XBOX) # define SENTRY_SDK_NAME "sentry.native.xbox" # else # define SENTRY_SDK_NAME "sentry.native" diff --git a/src/modulefinder/sentry_modulefinder_windows.c b/src/modulefinder/sentry_modulefinder_windows.c index 9d7361379..7c747c562 100644 --- a/src/modulefinder/sentry_modulefinder_windows.c +++ b/src/modulefinder/sentry_modulefinder_windows.c @@ -4,7 +4,7 @@ #include "sentry_uuid.h" #include "sentry_value.h" -#ifndef SENTRY_PLATFORM_XBOX_SCARLETT +#ifndef SENTRY_PLATFORM_XBOX # include #else # include @@ -95,7 +95,7 @@ extract_pdb_info(uintptr_t module_addr, sentry_value_t module) static void load_modules(void) { -#ifndef SENTRY_PLATFORM_XBOX_SCARLETT +#ifndef SENTRY_PLATFORM_XBOX HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); MODULEENTRY32W module = { 0 }; @@ -167,7 +167,7 @@ load_modules(void) } sentry_value_freeze(g_modules); -#endif // SENTRY_PLATFORM_XBOX_SCARLETT +#endif // SENTRY_PLATFORM_XBOX } sentry_value_t diff --git a/src/screenshot/sentry_screenshot_windows.c b/src/screenshot/sentry_screenshot_windows.c index 817f50e65..5eabbd51a 100644 --- a/src/screenshot/sentry_screenshot_windows.c +++ b/src/screenshot/sentry_screenshot_windows.c @@ -110,7 +110,7 @@ save_bitmap(HBITMAP bitmap, const wchar_t *path) static void calculate_region(DWORD pid, HRGN region) { -#ifdef SENTRY_PLATFORM_XBOX_SCARLETT +#ifdef SENTRY_PLATFORM_XBOX (DWORD) pid; (HRGN) region; #else @@ -145,13 +145,13 @@ calculate_region(DWORD pid, HRGN region) } hwnd = GetWindow(hwnd, GW_HWNDPREV); } -#endif // SENTRY_PLATFORM_XBOX_SCARLETT +#endif // SENTRY_PLATFORM_XBOX } bool sentry__screenshot_capture(const sentry_path_t *path) { -#ifdef SENTRY_PLATFORM_XBOX_SCARLETT +#ifdef SENTRY_PLATFORM_XBOX (sentry_path_t *)path; return false; #else @@ -189,5 +189,5 @@ sentry__screenshot_capture(const sentry_path_t *path) ReleaseDC(NULL, src); DeleteObject(region); return rv; -#endif // SENTRY_PLATFORM_XBOX_SCARLETT +#endif // SENTRY_PLATFORM_XBOX } diff --git a/src/sentry_core.c b/src/sentry_core.c index e31b63110..187ec7733 100644 --- a/src/sentry_core.c +++ b/src/sentry_core.c @@ -226,7 +226,7 @@ sentry_init(sentry_options_t *options) #if defined(SENTRY_PLATFORM_WINDOWS) \ && (!defined(SENTRY_BUILD_SHARED) \ - || defined(SENTRY_PLATFORM_XBOX_SCARLETT)) + || defined(SENTRY_PLATFORM_XBOX)) // This function must be positioned so that any dependents on its cached // functions are invoked after it. sentry__init_cached_kernel32_functions(); diff --git a/src/sentry_os.c b/src/sentry_os.c index 7286535c0..d7cc2d58d 100644 --- a/src/sentry_os.c +++ b/src/sentry_os.c @@ -12,7 +12,7 @@ #ifdef SENTRY_PLATFORM_WINDOWS -# if !defined(SENTRY_PLATFORM_XBOX_SCARLETT) +# if !defined(SENTRY_PLATFORM_XBOX) # include # include # define CURRENT_VERSION \ @@ -107,7 +107,7 @@ sentry__get_windows_version(windows_version_t *win_ver) return 1; } -# endif // !defined(SENTRY_PLATFORM_XBOX_SCARLETT) +# endif // !defined(SENTRY_PLATFORM_XBOX) sentry_value_t sentry__get_os_context(void) @@ -117,7 +117,7 @@ sentry__get_os_context(void) return os; } -# if defined(SENTRY_PLATFORM_XBOX_SCARLETT) +# if defined(SENTRY_PLATFORM_XBOX) # pragma warning(push) # pragma warning(disable : 4996) sentry_value_set_by_key(os, "name", sentry_value_new_string("Xbox")); @@ -167,7 +167,7 @@ sentry__get_os_context(void) sentry_value_decref(os); return sentry_value_new_null(); -# endif // defined(SENTRY_PLATFORM_XBOX_SCARLETT) +# endif // defined(SENTRY_PLATFORM_XBOX) } # ifndef SENTRY_UNITTEST @@ -304,7 +304,7 @@ sentry__set_default_thread_stack_guarantee(void) # endif } -# if defined(SENTRY_BUILD_SHARED) && !defined(SENTRY_PLATFORM_XBOX_SCARLETT) +# if defined(SENTRY_BUILD_SHARED) && !defined(SENTRY_PLATFORM_XBOX) BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) @@ -328,7 +328,7 @@ DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) } # endif // defined(SENTRY_BUILD_SHARED) && - // !defined(SENTRY_PLATFORM_XBOX_SCARLETT) + // !defined(SENTRY_PLATFORM_XBOX) void sentry__get_system_time(LPFILETIME filetime) diff --git a/src/symbolizer/sentry_symbolizer_windows.c b/src/symbolizer/sentry_symbolizer_windows.c index fe8022a2e..deeedd46c 100644 --- a/src/symbolizer/sentry_symbolizer_windows.c +++ b/src/symbolizer/sentry_symbolizer_windows.c @@ -12,7 +12,7 @@ bool sentry__symbolize( void *addr, void (*func)(const sentry_frame_info_t *, void *), void *data) { -#ifdef SENTRY_PLATFORM_XBOX_SCARLETT +#ifdef SENTRY_PLATFORM_XBOX (void)data; (void)func; (void)addr; @@ -40,7 +40,7 @@ sentry__symbolize( frame_info.symbol = sym->Name; frame_info.object_name = mod_name; func(&frame_info, data); -#endif // SENTRY_PLATFORM_XBOX_SCARLETT +#endif // SENTRY_PLATFORM_XBOX return true; } diff --git a/tests/unit/test_symbolizer.c b/tests/unit/test_symbolizer.c index 7e6e622bd..4e04a2393 100644 --- a/tests/unit/test_symbolizer.c +++ b/tests/unit/test_symbolizer.c @@ -30,7 +30,7 @@ asserter(const sentry_frame_info_t *info, void *data) SENTRY_TEST(symbolizer) { -#if defined(SENTRY_PLATFORM_NX) || defined(SENTRY_PLATFORM_XBOX_SCARLETT) +#if defined(SENTRY_PLATFORM_NX) || defined(SENTRY_PLATFORM_XBOX) return SKIP_TEST(); #endif int called = 0; diff --git a/tests/unit/test_unwinder.c b/tests/unit/test_unwinder.c index 796b785ce..d99179dc9 100644 --- a/tests/unit/test_unwinder.c +++ b/tests/unit/test_unwinder.c @@ -38,7 +38,7 @@ find_frame(const sentry_frame_info_t *info, void *data) SENTRY_TEST(unwinder) { -#if defined(SENTRY_PLATFORM_NX) || defined(SENTRY_PLATFORM_XBOX_SCARLETT) +#if defined(SENTRY_PLATFORM_NX) || defined(SENTRY_PLATFORM_XBOX) return SKIP_TEST(); #endif void *backtrace1[MAX_FRAMES] = { 0 }; From 1e601b3c39bf6f5e898016ae51300e8d34dbda1c Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Mon, 30 Jun 2025 21:01:17 -0400 Subject: [PATCH 03/14] wip --- toolchains/xbox/gxdk_xs_toolchain.cmake | 10 +++++--- toolchains/xbox/xbox_build.md | 33 ++++++++++++++++--------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/toolchains/xbox/gxdk_xs_toolchain.cmake b/toolchains/xbox/gxdk_xs_toolchain.cmake index 9d94a5e39..a06aaf107 100644 --- a/toolchains/xbox/gxdk_xs_toolchain.cmake +++ b/toolchains/xbox/gxdk_xs_toolchain.cmake @@ -21,8 +21,11 @@ set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION) set(CMAKE_SYSTEM_NAME WINDOWS) set(CMAKE_SYSTEM_VERSION ${GDK_VERSION}) -set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) -set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) +# set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) +# set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) + +set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) +set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) # Ensure our platform toolset is x64 set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) @@ -31,7 +34,8 @@ set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "" CACHE STRING "" FORCE) # Sets platform defines -set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_SCARLETT -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) +# set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_SCARLETT -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_XBOXONE -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) # Set platform libraries set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "xgameplatform.lib" CACHE STRING "" FORCE) diff --git a/toolchains/xbox/xbox_build.md b/toolchains/xbox/xbox_build.md index 70176c722..1b5f63a92 100644 --- a/toolchains/xbox/xbox_build.md +++ b/toolchains/xbox/xbox_build.md @@ -1,10 +1,13 @@ -## Xbox Scarlett Build +## Xbox Build + +The instructions below work for Xbox Series X|S (Scarlett) as well as Xbox One. +The parts that are different are explicitly called out. ### Requirements * Visual Studio - tested with `2022` * CMake - tested with `3.27.1 or newer` -* Xbox GDK - tested with `2023.03.03` and `2024.06.03` +* Xbox GDK - tested from `2023.03.03` until latest (as of June 2025) * Optional: git installed and on your PATH ### Steps @@ -14,20 +17,28 @@ * Run "Xbox Manager GDK" * Open Visual Studio Command Prompt for "Xbox Scarlett Gaming". * Change to the source directory in the prompt -* Configure your build using +* Optionally you can specify the GDK version + ``` + -DGDK_VERSION="241000" ``` - cmake - -B build - -G "Visual Studio 17 2022" - -A "Gaming.Xbox.Scarlett.x64" +* Configure your build using (Xbox Series) + ``` + cmake + -B build + -G "Visual Studio 17 2022" + -A "Gaming.Xbox.Scarlett.x64" -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" ``` -* Optionally you can specify the GDK version +* Configure your build using (Xbox One) ``` - -DGDK_VERSION="241000" + cmake + -B build + -G "Visual Studio 17 2022" + -A "Gaming.Xbox.XboxOne.x64" + -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" ``` -* After this you can either build the library directly in the CLI with +* After this you can either build the library directly in the CLI with `cmake --build build --config RelWithDebInfo` (or any other build config) or in Visual Studio by opening the solution in the `build` directory. -* `cmake --install build --prefix install --config RelWithDebInfo` installs all required development and release files +* `cmake --install build --prefix install --config RelWithDebInfo` installs all required development and release files (`dll`, `pdb`, `lib`, `h`) to include into any Xbox X/S game project into the directory `install`. From e3f1f360ce43cbe95d445ae15c87be81b80b4b8f Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Tue, 1 Jul 2025 19:13:50 -0400 Subject: [PATCH 04/14] multiline command --- toolchains/xbox/xbox_build.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/toolchains/xbox/xbox_build.md b/toolchains/xbox/xbox_build.md index 1b5f63a92..f94395764 100644 --- a/toolchains/xbox/xbox_build.md +++ b/toolchains/xbox/xbox_build.md @@ -23,18 +23,18 @@ The parts that are different are explicitly called out. ``` * Configure your build using (Xbox Series) ``` - cmake - -B build - -G "Visual Studio 17 2022" - -A "Gaming.Xbox.Scarlett.x64" + cmake ` + -B build ` + -G "Visual Studio 17 2022" ` + -A "Gaming.Xbox.Scarlett.x64" ` -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" ``` * Configure your build using (Xbox One) ``` - cmake - -B build - -G "Visual Studio 17 2022" - -A "Gaming.Xbox.XboxOne.x64" + cmake ` + -B build ` + -G "Visual Studio 17 2022" ` + -A "Gaming.Xbox.XboxOne.x64" ` -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" ``` * After this you can either build the library directly in the CLI with From 33503c5e219b5512d247b5ad2456bb77f6581879 Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Tue, 1 Jul 2025 19:15:36 -0400 Subject: [PATCH 05/14] it builds --- CMakeLists.txt | 20 ++++++++++++-------- tests/fixtures/screenshot/CMakeLists.txt | 2 +- toolchains/xbox/CMakeGDKXboxOne.cmake | 7 ------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0899fc52d..98f30edff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,11 @@ endif() set(SENTRY_TOOLCHAINS_DIR "${CMAKE_CURRENT_LIST_DIR}/toolchains") if ("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Gaming.Xbox.Scarlett.x64") include("${SENTRY_TOOLCHAINS_DIR}/xbox/CMakeGDKScarlett.cmake") - set(SCARLETT TRUE) + set(XBOX TRUE) +endif() +if ("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Gaming.Xbox.XboxOne.x64") + include("${SENTRY_TOOLCHAINS_DIR}/xbox/CMakeGDKXboxOne.cmake") + set(XBOX TRUE) endif() #read sentry-native version @@ -77,7 +81,7 @@ option(SENTRY_BUILD_TESTS "Build sentry-native tests" "${SENTRY_MAIN_PROJECT}") option(SENTRY_BUILD_EXAMPLES "Build sentry-native example(s)" "${SENTRY_MAIN_PROJECT}") option(SENTRY_BUILD_BENCHMARKS "Build sentry-native benchmarks" OFF) -if(NOT SCARLETT) +if(NOT XBOX) option(SENTRY_LINK_PTHREAD "Link platform threads library" ON) if(SENTRY_LINK_PTHREAD) set(THREADS_PREFER_PTHREAD_FLAG ON) @@ -167,7 +171,7 @@ option(SENTRY_ENABLE_INSTALL "Enable sentry installation" "${SENTRY_MAIN_PROJECT if(MSVC AND CMAKE_GENERATOR_TOOLSET MATCHES "_xp$") message(WARNING "Crashpad is not supported for MSVC with XP toolset. Default backend was switched to 'breakpad'") set(SENTRY_DEFAULT_BACKEND "breakpad") -elseif(MSVC AND SCARLETT) +elseif(MSVC AND XBOX) set(SENTRY_DEFAULT_BACKEND "breakpad") elseif((APPLE AND NOT IOS) OR WIN32 OR LINUX) set(SENTRY_DEFAULT_BACKEND "crashpad") @@ -284,7 +288,7 @@ endfunction() # ===== sentry library ===== add_library(sentry ${SENTRY_LIBRARY_TYPE} "${PROJECT_SOURCE_DIR}/vendor/mpack.c") -if (SCARLETT) +if (XBOX) set_target_properties(sentry PROPERTIES VS_USER_PROPS gdk_build.props) endif() target_sources(sentry PRIVATE "${PROJECT_SOURCE_DIR}/include/sentry.h") @@ -379,7 +383,7 @@ if(MSVC) # using `/Wall` is not feasible, as it spews tons of warnings from windows headers # supress C5105, introduced in VS 16.8, which breaks on the Windows SDKs own `winbase.h` header - if (SCARLETT) + if (XBOX) target_compile_options(sentry PRIVATE $) else() target_compile_options(sentry PRIVATE $) @@ -484,7 +488,7 @@ if(ANDROID) elseif(LINUX) set(_SENTRY_PLATFORM_LIBS "dl" "rt") elseif(WIN32) - if (SCARLETT) + if (XBOX) set(_SENTRY_PLATFORM_LIBS "version") else() set(_SENTRY_PLATFORM_LIBS "dbghelp" "shlwapi" "version") @@ -496,7 +500,7 @@ if(SENTRY_TRANSPORT_WINHTTP) endif() # handle platform threads library -if(NOT SCARLETT) +if(NOT XBOX) if(SENTRY_LINK_PTHREAD) list(APPEND _SENTRY_PLATFORM_LIBS "Threads::Threads") endif() @@ -701,7 +705,7 @@ endif() if(SENTRY_BUILD_EXAMPLES) add_executable(sentry_example examples/example.c) - if(SCARLETT) + if(XBOX) set_target_properties(sentry_example PROPERTIES VS_USER_PROPS gdk_build.props) endif() target_link_libraries(sentry_example PRIVATE sentry) diff --git a/tests/fixtures/screenshot/CMakeLists.txt b/tests/fixtures/screenshot/CMakeLists.txt index 94f62882e..bcb4083fe 100644 --- a/tests/fixtures/screenshot/CMakeLists.txt +++ b/tests/fixtures/screenshot/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.10) project(sentry_screenshot LANGUAGES C) -if(WIN32 AND NOT SCARLETT) +if(WIN32 AND NOT XBOX) add_executable(sentry_screenshot screenshot_win32.c) set_target_properties(sentry_screenshot PROPERTIES WIN32_EXECUTABLE TRUE) target_compile_definitions(sentry_screenshot PRIVATE _UNICODE UNICODE) diff --git a/toolchains/xbox/CMakeGDKXboxOne.cmake b/toolchains/xbox/CMakeGDKXboxOne.cmake index 2a9bbc4f3..b27bd091c 100644 --- a/toolchains/xbox/CMakeGDKXboxOne.cmake +++ b/toolchains/xbox/CMakeGDKXboxOne.cmake @@ -90,13 +90,6 @@ else() message(FATAL_ERROR "ERROR: Cannot locate Windows SDK (${WINDOWS_SDK_VER})") endif() - -if(EXISTS "${WindowsSdkDir}/Include/${SDKVersion}" ) - message("Windows SDK = v${SDKVersion} in ${WindowsSdkDir}") -else() - message(FATAL_ERROR "ERROR: Cannot locate Windows SDK (${SDKVersion})") -endif() - #--- Headers set(Console_EndpointIncludeRoot "${DurangoXdkInstallPath}/GXDK/gameKit/Include" From 18541aa8e3cada297d5212932dc1ec898ed5d5e6 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 2 Jul 2025 18:24:40 +0200 Subject: [PATCH 06/14] gxdk_base_toolchain.cmake --- toolchains/xbox/gxdk_base_toolchain.cmake | 58 ++++++++++++++++++++++ toolchains/xbox/gxdk_xo_toolchain.cmake | 15 ++++++ toolchains/xbox/gxdk_xs_toolchain.cmake | 60 ++--------------------- toolchains/xbox/xbox_build.md | 2 +- 4 files changed, 79 insertions(+), 56 deletions(-) create mode 100644 toolchains/xbox/gxdk_base_toolchain.cmake create mode 100644 toolchains/xbox/gxdk_xo_toolchain.cmake diff --git a/toolchains/xbox/gxdk_base_toolchain.cmake b/toolchains/xbox/gxdk_base_toolchain.cmake new file mode 100644 index 000000000..b16a6a0d4 --- /dev/null +++ b/toolchains/xbox/gxdk_base_toolchain.cmake @@ -0,0 +1,58 @@ +# Adapted by Sentry from: +# https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_xs_toolchain.cmake +# +# gxdk_base_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.<>.x64 +# +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +mark_as_advanced(CMAKE_TOOLCHAIN_FILE) + +if(_GXDK_XS_TOOLCHAIN_) + return() +endif() + +# Microsoft Game Development Kit + +include("${CMAKE_CURRENT_LIST_DIR}/DetectGDK.cmake") + +set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION) + +set(CMAKE_SYSTEM_NAME WINDOWS) +set(CMAKE_SYSTEM_VERSION ${GDK_VERSION}) + +# Ensure our platform toolset is x64 +set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) + +# Let the GDK MSBuild rules decide the WindowsTargetPlatformVersion +set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "" CACHE STRING "" FORCE) + +# Sets platform defines +set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) + +# Set platform libraries +set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "xgameplatform.lib" CACHE STRING "" FORCE) +set(CMAKE_CXX_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES_INIT} CACHE STRING "" FORCE) + +foreach(t EXE SHARED MODULE) + # Prevent accidental use of libraries that are not supported by Game Core on Xbox + string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " /NODEFAULTLIB:advapi32.lib /NODEFAULTLIB:comctl32.lib /NODEFAULTLIB:comsupp.lib /NODEFAULTLIB:dbghelp.lib /NODEFAULTLIB:gdi32.lib /NODEFAULTLIB:gdiplus.lib /NODEFAULTLIB:guardcfw.lib /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:mmc.lib /NODEFAULTLIB:msimg32.lib /NODEFAULTLIB:msvcole.lib /NODEFAULTLIB:msvcoled.lib /NODEFAULTLIB:mswsock.lib /NODEFAULTLIB:ntstrsafe.lib /NODEFAULTLIB:ole2.lib /NODEFAULTLIB:ole2autd.lib /NODEFAULTLIB:ole2auto.lib /NODEFAULTLIB:ole2d.lib /NODEFAULTLIB:ole2ui.lib /NODEFAULTLIB:ole2uid.lib /NODEFAULTLIB:ole32.lib /NODEFAULTLIB:oleacc.lib /NODEFAULTLIB:oleaut32.lib /NODEFAULTLIB:oledlg.lib /NODEFAULTLIB:oledlgd.lib /NODEFAULTLIB:oldnames.lib /NODEFAULTLIB:runtimeobject.lib /NODEFAULTLIB:shell32.lib /NODEFAULTLIB:shlwapi.lib /NODEFAULTLIB:strsafe.lib /NODEFAULTLIB:urlmon.lib /NODEFAULTLIB:user32.lib /NODEFAULTLIB:userenv.lib /NODEFAULTLIB:wlmole.lib /NODEFAULTLIB:wlmoled.lib /NODEFAULTLIB:onecore.lib") +endforeach() + +# Add GDK props file +file(GENERATE OUTPUT gdk_build.props INPUT ${CMAKE_CURRENT_LIST_DIR}/gdk_build.props) + +# Find DXC compiler +if(NOT GDK_DXCTool) + GET_FILENAME_COMPONENT(Console_SdkRoot "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\GDK;InstallPath]" ABSOLUTE CACHE) + + find_program( + GDK_DXCTool + NAMES dxc + PATHS "${Console_SdkRoot}/${GDK_VERSION}/GXDK/bin/Scarlett" + ) + + mark_as_advanced(GDK_DXCTool) +endif() + +set(_GXDK_XS_TOOLCHAIN_ ON) diff --git a/toolchains/xbox/gxdk_xo_toolchain.cmake b/toolchains/xbox/gxdk_xo_toolchain.cmake new file mode 100644 index 000000000..6b4324b10 --- /dev/null +++ b/toolchains/xbox/gxdk_xo_toolchain.cmake @@ -0,0 +1,15 @@ +# Adapted by Sentry from: +# https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_xs_toolchain.cmake +# +# gxdk_xo_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.XboxOne.x64 +# +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +mark_as_advanced(CMAKE_TOOLCHAIN_FILE) + +include("${CMAKE_CURRENT_LIST_DIR}/gxdk_base_toolchain.cmake") + +set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) +set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} -D_GAMING_XBOX_XBOXONE ${CMAKE_CXX_FLAGS_INIT}" CACHE STRING "" FORCE) diff --git a/toolchains/xbox/gxdk_xs_toolchain.cmake b/toolchains/xbox/gxdk_xs_toolchain.cmake index a06aaf107..258040e84 100644 --- a/toolchains/xbox/gxdk_xs_toolchain.cmake +++ b/toolchains/xbox/gxdk_xs_toolchain.cmake @@ -1,65 +1,15 @@ # Adapted by Sentry from: # https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_xs_toolchain.cmake # -# grdk_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.Scarlett.x64 +# gxdk_xs_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.Scarlett.x64 # # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. mark_as_advanced(CMAKE_TOOLCHAIN_FILE) -if(_GXDK_XS_TOOLCHAIN_) - return() -endif() +include("${CMAKE_CURRENT_LIST_DIR}/gxdk_base_toolchain.cmake") -# Microsoft Game Development Kit - -include("${CMAKE_CURRENT_LIST_DIR}/DetectGDK.cmake") - -set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION) - -set(CMAKE_SYSTEM_NAME WINDOWS) -set(CMAKE_SYSTEM_VERSION ${GDK_VERSION}) - -# set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) -# set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) - -set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) -set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) - -# Ensure our platform toolset is x64 -set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) - -# Let the GDK MSBuild rules decide the WindowsTargetPlatformVersion -set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "" CACHE STRING "" FORCE) - -# Sets platform defines -# set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_SCARLETT -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_XBOXONE -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) - -# Set platform libraries -set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "xgameplatform.lib" CACHE STRING "" FORCE) -set(CMAKE_CXX_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES_INIT} CACHE STRING "" FORCE) - -foreach(t EXE SHARED MODULE) - # Prevent accidental use of libraries that are not supported by Game Core on Xbox - string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " /NODEFAULTLIB:advapi32.lib /NODEFAULTLIB:comctl32.lib /NODEFAULTLIB:comsupp.lib /NODEFAULTLIB:dbghelp.lib /NODEFAULTLIB:gdi32.lib /NODEFAULTLIB:gdiplus.lib /NODEFAULTLIB:guardcfw.lib /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:mmc.lib /NODEFAULTLIB:msimg32.lib /NODEFAULTLIB:msvcole.lib /NODEFAULTLIB:msvcoled.lib /NODEFAULTLIB:mswsock.lib /NODEFAULTLIB:ntstrsafe.lib /NODEFAULTLIB:ole2.lib /NODEFAULTLIB:ole2autd.lib /NODEFAULTLIB:ole2auto.lib /NODEFAULTLIB:ole2d.lib /NODEFAULTLIB:ole2ui.lib /NODEFAULTLIB:ole2uid.lib /NODEFAULTLIB:ole32.lib /NODEFAULTLIB:oleacc.lib /NODEFAULTLIB:oleaut32.lib /NODEFAULTLIB:oledlg.lib /NODEFAULTLIB:oledlgd.lib /NODEFAULTLIB:oldnames.lib /NODEFAULTLIB:runtimeobject.lib /NODEFAULTLIB:shell32.lib /NODEFAULTLIB:shlwapi.lib /NODEFAULTLIB:strsafe.lib /NODEFAULTLIB:urlmon.lib /NODEFAULTLIB:user32.lib /NODEFAULTLIB:userenv.lib /NODEFAULTLIB:wlmole.lib /NODEFAULTLIB:wlmoled.lib /NODEFAULTLIB:onecore.lib") -endforeach() - -# Add GDK props file -file(GENERATE OUTPUT gdk_build.props INPUT ${CMAKE_CURRENT_LIST_DIR}/gdk_build.props) - -# Find DXC compiler -if(NOT GDK_DXCTool) - GET_FILENAME_COMPONENT(Console_SdkRoot "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\GDK;InstallPath]" ABSOLUTE CACHE) - - find_program( - GDK_DXCTool - NAMES dxc - PATHS "${Console_SdkRoot}/${GDK_VERSION}/GXDK/bin/Scarlett" - ) - - mark_as_advanced(GDK_DXCTool) -endif() - -set(_GXDK_XS_TOOLCHAIN_ ON) +set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) +set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} -D_GAMING_XBOX_SCARLETT ${CMAKE_CXX_FLAGS_INIT}" CACHE STRING "" FORCE) diff --git a/toolchains/xbox/xbox_build.md b/toolchains/xbox/xbox_build.md index f94395764..1184561b8 100644 --- a/toolchains/xbox/xbox_build.md +++ b/toolchains/xbox/xbox_build.md @@ -35,7 +35,7 @@ The parts that are different are explicitly called out. -B build ` -G "Visual Studio 17 2022" ` -A "Gaming.Xbox.XboxOne.x64" ` - -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" + -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xo_toolchain.cmake" ``` * After this you can either build the library directly in the CLI with `cmake --build build --config RelWithDebInfo` (or any other build config) From c2644ed01f390b6d006b2de1c3cc49f1f28096a7 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 2 Jul 2025 20:27:07 +0200 Subject: [PATCH 07/14] update external/breakpad --- external/breakpad | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/breakpad b/external/breakpad index 7fbf89065..52af8c13b 160000 --- a/external/breakpad +++ b/external/breakpad @@ -1 +1 @@ -Subproject commit 7fbf89065fbb0d26526278a5e733270f83993cda +Subproject commit 52af8c13bd0c0837d491a477859d008ea2b86a0c From b928e51cb58ee5f3022504db6aac6429fcdd7cc6 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 2 Jul 2025 20:27:54 +0200 Subject: [PATCH 08/14] fix'n'tweak xbox defines --- include/sentry.h | 2 +- vendor/acutest.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/sentry.h b/include/sentry.h index f41492630..f3a6929b5 100644 --- a/include/sentry.h +++ b/include/sentry.h @@ -36,7 +36,7 @@ extern "C" { /* common platform detection */ #ifdef _WIN32 # define SENTRY_PLATFORM_WINDOWS -# ifdef _GAMING_XBOX_SCARLETT || _GAMING_XBOX_XBOXONE +# ifdef _GAMING_XBOX # define SENTRY_PLATFORM_XBOX # endif #elif defined(__APPLE__) diff --git a/vendor/acutest.h b/vendor/acutest.h index 67da377e1..18bf44339 100644 --- a/vendor/acutest.h +++ b/vendor/acutest.h @@ -487,7 +487,7 @@ test_print_in_color__(int color, const char* fmt, ...) printf("\033[0m"); return n; } -#elif defined ACUTEST_WIN__ && (!defined _GAMING_XBOX_SCARLETT || !defined _GAMING_XBOX_XBOXONE) +#elif defined ACUTEST_WIN__ && !defined _GAMING_XBOX { HANDLE h; CONSOLE_SCREEN_BUFFER_INFO info; From fb6b281ba6ceb217a8f87e922cd4a7cee05b10fc Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 2 Jul 2025 20:52:00 +0200 Subject: [PATCH 09/14] Revert "gxdk_base_toolchain.cmake" This reverts commit 18541aa8e3cada297d5212932dc1ec898ed5d5e6. --- toolchains/xbox/gxdk_base_toolchain.cmake | 58 ---------------------- toolchains/xbox/gxdk_xo_toolchain.cmake | 15 ------ toolchains/xbox/gxdk_xs_toolchain.cmake | 60 +++++++++++++++++++++-- toolchains/xbox/xbox_build.md | 2 +- 4 files changed, 56 insertions(+), 79 deletions(-) delete mode 100644 toolchains/xbox/gxdk_base_toolchain.cmake delete mode 100644 toolchains/xbox/gxdk_xo_toolchain.cmake diff --git a/toolchains/xbox/gxdk_base_toolchain.cmake b/toolchains/xbox/gxdk_base_toolchain.cmake deleted file mode 100644 index b16a6a0d4..000000000 --- a/toolchains/xbox/gxdk_base_toolchain.cmake +++ /dev/null @@ -1,58 +0,0 @@ -# Adapted by Sentry from: -# https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_xs_toolchain.cmake -# -# gxdk_base_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.<>.x64 -# -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -mark_as_advanced(CMAKE_TOOLCHAIN_FILE) - -if(_GXDK_XS_TOOLCHAIN_) - return() -endif() - -# Microsoft Game Development Kit - -include("${CMAKE_CURRENT_LIST_DIR}/DetectGDK.cmake") - -set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION) - -set(CMAKE_SYSTEM_NAME WINDOWS) -set(CMAKE_SYSTEM_VERSION ${GDK_VERSION}) - -# Ensure our platform toolset is x64 -set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) - -# Let the GDK MSBuild rules decide the WindowsTargetPlatformVersion -set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "" CACHE STRING "" FORCE) - -# Sets platform defines -set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) - -# Set platform libraries -set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "xgameplatform.lib" CACHE STRING "" FORCE) -set(CMAKE_CXX_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES_INIT} CACHE STRING "" FORCE) - -foreach(t EXE SHARED MODULE) - # Prevent accidental use of libraries that are not supported by Game Core on Xbox - string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " /NODEFAULTLIB:advapi32.lib /NODEFAULTLIB:comctl32.lib /NODEFAULTLIB:comsupp.lib /NODEFAULTLIB:dbghelp.lib /NODEFAULTLIB:gdi32.lib /NODEFAULTLIB:gdiplus.lib /NODEFAULTLIB:guardcfw.lib /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:mmc.lib /NODEFAULTLIB:msimg32.lib /NODEFAULTLIB:msvcole.lib /NODEFAULTLIB:msvcoled.lib /NODEFAULTLIB:mswsock.lib /NODEFAULTLIB:ntstrsafe.lib /NODEFAULTLIB:ole2.lib /NODEFAULTLIB:ole2autd.lib /NODEFAULTLIB:ole2auto.lib /NODEFAULTLIB:ole2d.lib /NODEFAULTLIB:ole2ui.lib /NODEFAULTLIB:ole2uid.lib /NODEFAULTLIB:ole32.lib /NODEFAULTLIB:oleacc.lib /NODEFAULTLIB:oleaut32.lib /NODEFAULTLIB:oledlg.lib /NODEFAULTLIB:oledlgd.lib /NODEFAULTLIB:oldnames.lib /NODEFAULTLIB:runtimeobject.lib /NODEFAULTLIB:shell32.lib /NODEFAULTLIB:shlwapi.lib /NODEFAULTLIB:strsafe.lib /NODEFAULTLIB:urlmon.lib /NODEFAULTLIB:user32.lib /NODEFAULTLIB:userenv.lib /NODEFAULTLIB:wlmole.lib /NODEFAULTLIB:wlmoled.lib /NODEFAULTLIB:onecore.lib") -endforeach() - -# Add GDK props file -file(GENERATE OUTPUT gdk_build.props INPUT ${CMAKE_CURRENT_LIST_DIR}/gdk_build.props) - -# Find DXC compiler -if(NOT GDK_DXCTool) - GET_FILENAME_COMPONENT(Console_SdkRoot "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\GDK;InstallPath]" ABSOLUTE CACHE) - - find_program( - GDK_DXCTool - NAMES dxc - PATHS "${Console_SdkRoot}/${GDK_VERSION}/GXDK/bin/Scarlett" - ) - - mark_as_advanced(GDK_DXCTool) -endif() - -set(_GXDK_XS_TOOLCHAIN_ ON) diff --git a/toolchains/xbox/gxdk_xo_toolchain.cmake b/toolchains/xbox/gxdk_xo_toolchain.cmake deleted file mode 100644 index 6b4324b10..000000000 --- a/toolchains/xbox/gxdk_xo_toolchain.cmake +++ /dev/null @@ -1,15 +0,0 @@ -# Adapted by Sentry from: -# https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_xs_toolchain.cmake -# -# gxdk_xo_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.XboxOne.x64 -# -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -mark_as_advanced(CMAKE_TOOLCHAIN_FILE) - -include("${CMAKE_CURRENT_LIST_DIR}/gxdk_base_toolchain.cmake") - -set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) -set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} -D_GAMING_XBOX_XBOXONE ${CMAKE_CXX_FLAGS_INIT}" CACHE STRING "" FORCE) diff --git a/toolchains/xbox/gxdk_xs_toolchain.cmake b/toolchains/xbox/gxdk_xs_toolchain.cmake index 258040e84..a06aaf107 100644 --- a/toolchains/xbox/gxdk_xs_toolchain.cmake +++ b/toolchains/xbox/gxdk_xs_toolchain.cmake @@ -1,15 +1,65 @@ # Adapted by Sentry from: # https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_xs_toolchain.cmake # -# gxdk_xs_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.Scarlett.x64 +# grdk_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.Scarlett.x64 # # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. mark_as_advanced(CMAKE_TOOLCHAIN_FILE) -include("${CMAKE_CURRENT_LIST_DIR}/gxdk_base_toolchain.cmake") +if(_GXDK_XS_TOOLCHAIN_) + return() +endif() -set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) -set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} -D_GAMING_XBOX_SCARLETT ${CMAKE_CXX_FLAGS_INIT}" CACHE STRING "" FORCE) +# Microsoft Game Development Kit + +include("${CMAKE_CURRENT_LIST_DIR}/DetectGDK.cmake") + +set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION) + +set(CMAKE_SYSTEM_NAME WINDOWS) +set(CMAKE_SYSTEM_VERSION ${GDK_VERSION}) + +# set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) +# set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) + +set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) +set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) + +# Ensure our platform toolset is x64 +set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) + +# Let the GDK MSBuild rules decide the WindowsTargetPlatformVersion +set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "" CACHE STRING "" FORCE) + +# Sets platform defines +# set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_SCARLETT -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_XBOXONE -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) + +# Set platform libraries +set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "xgameplatform.lib" CACHE STRING "" FORCE) +set(CMAKE_CXX_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES_INIT} CACHE STRING "" FORCE) + +foreach(t EXE SHARED MODULE) + # Prevent accidental use of libraries that are not supported by Game Core on Xbox + string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " /NODEFAULTLIB:advapi32.lib /NODEFAULTLIB:comctl32.lib /NODEFAULTLIB:comsupp.lib /NODEFAULTLIB:dbghelp.lib /NODEFAULTLIB:gdi32.lib /NODEFAULTLIB:gdiplus.lib /NODEFAULTLIB:guardcfw.lib /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:mmc.lib /NODEFAULTLIB:msimg32.lib /NODEFAULTLIB:msvcole.lib /NODEFAULTLIB:msvcoled.lib /NODEFAULTLIB:mswsock.lib /NODEFAULTLIB:ntstrsafe.lib /NODEFAULTLIB:ole2.lib /NODEFAULTLIB:ole2autd.lib /NODEFAULTLIB:ole2auto.lib /NODEFAULTLIB:ole2d.lib /NODEFAULTLIB:ole2ui.lib /NODEFAULTLIB:ole2uid.lib /NODEFAULTLIB:ole32.lib /NODEFAULTLIB:oleacc.lib /NODEFAULTLIB:oleaut32.lib /NODEFAULTLIB:oledlg.lib /NODEFAULTLIB:oledlgd.lib /NODEFAULTLIB:oldnames.lib /NODEFAULTLIB:runtimeobject.lib /NODEFAULTLIB:shell32.lib /NODEFAULTLIB:shlwapi.lib /NODEFAULTLIB:strsafe.lib /NODEFAULTLIB:urlmon.lib /NODEFAULTLIB:user32.lib /NODEFAULTLIB:userenv.lib /NODEFAULTLIB:wlmole.lib /NODEFAULTLIB:wlmoled.lib /NODEFAULTLIB:onecore.lib") +endforeach() + +# Add GDK props file +file(GENERATE OUTPUT gdk_build.props INPUT ${CMAKE_CURRENT_LIST_DIR}/gdk_build.props) + +# Find DXC compiler +if(NOT GDK_DXCTool) + GET_FILENAME_COMPONENT(Console_SdkRoot "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\GDK;InstallPath]" ABSOLUTE CACHE) + + find_program( + GDK_DXCTool + NAMES dxc + PATHS "${Console_SdkRoot}/${GDK_VERSION}/GXDK/bin/Scarlett" + ) + + mark_as_advanced(GDK_DXCTool) +endif() + +set(_GXDK_XS_TOOLCHAIN_ ON) diff --git a/toolchains/xbox/xbox_build.md b/toolchains/xbox/xbox_build.md index 1184561b8..f94395764 100644 --- a/toolchains/xbox/xbox_build.md +++ b/toolchains/xbox/xbox_build.md @@ -35,7 +35,7 @@ The parts that are different are explicitly called out. -B build ` -G "Visual Studio 17 2022" ` -A "Gaming.Xbox.XboxOne.x64" ` - -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xo_toolchain.cmake" + -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" ``` * After this you can either build the library directly in the CLI with `cmake --build build --config RelWithDebInfo` (or any other build config) From 86c036cd40d23de0f726c4c12be526c6738b1142 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 2 Jul 2025 20:54:43 +0200 Subject: [PATCH 10/14] gxdk_toolchain.cmake - take 2 https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_toolchain.cmake --- toolchains/xbox/gxdk_toolchain.cmake | 61 +++++++++++++++++++++++++ toolchains/xbox/gxdk_xs_toolchain.cmake | 10 ++-- toolchains/xbox/xbox_build.md | 2 +- 3 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 toolchains/xbox/gxdk_toolchain.cmake diff --git a/toolchains/xbox/gxdk_toolchain.cmake b/toolchains/xbox/gxdk_toolchain.cmake new file mode 100644 index 000000000..27b65865c --- /dev/null +++ b/toolchains/xbox/gxdk_toolchain.cmake @@ -0,0 +1,61 @@ +# Adapted by Sentry from: +# https://github.com/microsoft/Xbox-GDK-Samples/blob/aa45b831e7a71160a69a7d13e9d74844dc6aa210/Samples/Tools/CMakeGDKExample/gxdk_toolchain.cmake +# +# grdk_toolchain.cmake : CMake Toolchain file for Gaming.Xbox.XboxOne.x64 +# +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +mark_as_advanced(CMAKE_TOOLCHAIN_FILE) + +if(_GXDK_TOOLCHAIN_) + return() +endif() + +# Microsoft Game Development Kit + +include("${CMAKE_CURRENT_LIST_DIR}/DetectGDK.cmake") + +set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION) + +set(CMAKE_SYSTEM_NAME WINDOWS) +set(CMAKE_SYSTEM_VERSION ${GDK_VERSION}) + +set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) +set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) + +# Ensure our platform toolset is x64 +set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) + +# Let the GDK MSBuild rules decide the WindowsTargetPlatformVersion +set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "" CACHE STRING "" FORCE) + +# Sets platform defines +set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_XBOXONE -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) + +# Set platform libraries +set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "xgameplatform.lib" CACHE STRING "" FORCE) +set(CMAKE_CXX_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES_INIT} CACHE STRING "" FORCE) + +foreach(t EXE SHARED MODULE) + # Prevent accidental use of libraries that are not supported by Game Core on Xbox + string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " /NODEFAULTLIB:advapi32.lib /NODEFAULTLIB:comctl32.lib /NODEFAULTLIB:comsupp.lib /NODEFAULTLIB:dbghelp.lib /NODEFAULTLIB:gdi32.lib /NODEFAULTLIB:gdiplus.lib /NODEFAULTLIB:guardcfw.lib /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:mmc.lib /NODEFAULTLIB:msimg32.lib /NODEFAULTLIB:msvcole.lib /NODEFAULTLIB:msvcoled.lib /NODEFAULTLIB:mswsock.lib /NODEFAULTLIB:ntstrsafe.lib /NODEFAULTLIB:ole2.lib /NODEFAULTLIB:ole2autd.lib /NODEFAULTLIB:ole2auto.lib /NODEFAULTLIB:ole2d.lib /NODEFAULTLIB:ole2ui.lib /NODEFAULTLIB:ole2uid.lib /NODEFAULTLIB:ole32.lib /NODEFAULTLIB:oleacc.lib /NODEFAULTLIB:oleaut32.lib /NODEFAULTLIB:oledlg.lib /NODEFAULTLIB:oledlgd.lib /NODEFAULTLIB:oldnames.lib /NODEFAULTLIB:runtimeobject.lib /NODEFAULTLIB:shell32.lib /NODEFAULTLIB:shlwapi.lib /NODEFAULTLIB:strsafe.lib /NODEFAULTLIB:urlmon.lib /NODEFAULTLIB:user32.lib /NODEFAULTLIB:userenv.lib /NODEFAULTLIB:wlmole.lib /NODEFAULTLIB:wlmoled.lib /NODEFAULTLIB:onecore.lib") +endforeach() + +# Add GDK props file +file(GENERATE OUTPUT gdk_build.props INPUT ${CMAKE_CURRENT_LIST_DIR}/gdk_build.props) + +# Find DXC compiler +if(NOT GDK_DXCTool) + GET_FILENAME_COMPONENT(Console_SdkRoot "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\GDK;InstallPath]" ABSOLUTE CACHE) + + find_program( + GDK_DXCTool + NAMES dxc + PATHS "${Console_SdkRoot}/${GDK_VERSION}/GXDK/bin/XboxOne" + ) + + mark_as_advanced(GDK_DXCTool) +endif() + +set(_GXDK_TOOLCHAIN_ ON) diff --git a/toolchains/xbox/gxdk_xs_toolchain.cmake b/toolchains/xbox/gxdk_xs_toolchain.cmake index a06aaf107..9d94a5e39 100644 --- a/toolchains/xbox/gxdk_xs_toolchain.cmake +++ b/toolchains/xbox/gxdk_xs_toolchain.cmake @@ -21,11 +21,8 @@ set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES GDK_VERSION) set(CMAKE_SYSTEM_NAME WINDOWS) set(CMAKE_SYSTEM_VERSION ${GDK_VERSION}) -# set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) -# set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) - -set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) -set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.XboxOne.x64" CACHE STRING "" FORCE) +set(CMAKE_GENERATOR_PLATFORM "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) +set(CMAKE_VS_PLATFORM_NAME "Gaming.Xbox.Scarlett.x64" CACHE STRING "" FORCE) # Ensure our platform toolset is x64 set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) @@ -34,8 +31,7 @@ set(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE "x64" CACHE STRING "" FORCE) set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "" CACHE STRING "" FORCE) # Sets platform defines -# set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_SCARLETT -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_XBOXONE -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_CXX_FLAGS_INIT} -D_GAMING_XBOX -D_GAMING_XBOX_SCARLETT -DWINAPI_FAMILY=WINAPI_FAMILY_GAMES -D_ATL_NO_DEFAULT_LIBS -D__WRL_NO_DEFAULT_LIB__ -D_CRT_USE_WINAPI_PARTITION_APP -D_UITHREADCTXT_SUPPORT=0 -D__WRL_CLASSIC_COM_STRICT__ /arch:AVX2 /favor:AMD64" CACHE STRING "" FORCE) # Set platform libraries set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "xgameplatform.lib" CACHE STRING "" FORCE) diff --git a/toolchains/xbox/xbox_build.md b/toolchains/xbox/xbox_build.md index f94395764..5d542454f 100644 --- a/toolchains/xbox/xbox_build.md +++ b/toolchains/xbox/xbox_build.md @@ -35,7 +35,7 @@ The parts that are different are explicitly called out. -B build ` -G "Visual Studio 17 2022" ` -A "Gaming.Xbox.XboxOne.x64" ` - -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" + -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_toolchain.cmake" ``` * After this you can either build the library directly in the CLI with `cmake --build build --config RelWithDebInfo` (or any other build config) From 8438ae78a85eee3b4dc690612c7aeb96c284ec59 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 2 Jul 2025 21:02:36 +0200 Subject: [PATCH 11/14] fix formatting --- src/sentry_core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sentry_core.c b/src/sentry_core.c index 187ec7733..ff2ff584a 100644 --- a/src/sentry_core.c +++ b/src/sentry_core.c @@ -225,8 +225,7 @@ sentry_init(sentry_options_t *options) #endif #if defined(SENTRY_PLATFORM_WINDOWS) \ - && (!defined(SENTRY_BUILD_SHARED) \ - || defined(SENTRY_PLATFORM_XBOX)) + && (!defined(SENTRY_BUILD_SHARED) || defined(SENTRY_PLATFORM_XBOX)) // This function must be positioned so that any dependents on its cached // functions are invoked after it. sentry__init_cached_kernel32_functions(); From 057e9dea30c7277d3e67865e368903c2b294cdb3 Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Wed, 2 Jul 2025 20:20:55 -0400 Subject: [PATCH 12/14] toolchain md --- toolchains/xbox/xbox_build.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/toolchains/xbox/xbox_build.md b/toolchains/xbox/xbox_build.md index 5d542454f..97a950de8 100644 --- a/toolchains/xbox/xbox_build.md +++ b/toolchains/xbox/xbox_build.md @@ -21,8 +21,8 @@ The parts that are different are explicitly called out. ``` -DGDK_VERSION="241000" ``` -* Configure your build using (Xbox Series) - ``` + * Configure your build using (Xbox Series X|S) + ```pwsh cmake ` -B build ` -G "Visual Studio 17 2022" ` @@ -30,7 +30,7 @@ The parts that are different are explicitly called out. -DCMAKE_TOOLCHAIN_FILE="./toolchains/xbox/gxdk_xs_toolchain.cmake" ``` * Configure your build using (Xbox One) - ``` + ```pwsh cmake ` -B build ` -G "Visual Studio 17 2022" ` From 56034c06cd00214b00215c764a8b63a215035cef Mon Sep 17 00:00:00 2001 From: Bruno Garcia Date: Wed, 2 Jul 2025 20:22:02 -0400 Subject: [PATCH 13/14] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dfb58306..5789a571d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ **Features**: - Add `sentry_clear_attachments()` to allow clearing all previously added attachments in the global scope. ([#1290](https://github.com/getsentry/sentry-native/pull/1290)) +- Compiles also on Xbox One ([#1294](https://github.com/getsentry/sentry-native/pull/1294)) ## 0.9.1 From d2bfb5c8994d043ca43df60672d4ed033e6a1d16 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 3 Jul 2025 08:25:34 +0200 Subject: [PATCH 14/14] Update external/breakpad --- external/breakpad | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/breakpad b/external/breakpad index 52af8c13b..9b6067191 160000 --- a/external/breakpad +++ b/external/breakpad @@ -1 +1 @@ -Subproject commit 52af8c13bd0c0837d491a477859d008ea2b86a0c +Subproject commit 9b606719129be728005e3c295d4c74bd1a15c0ed