Skip to content
This repository was archived by the owner on Nov 12, 2025. It is now read-only.

Commit 438cba4

Browse files
authored
Merge pull request #58 from microsoft/cmakecr
CMake update to fix cases where DIRECTX_ARCH is not defined
2 parents ec75320 + c4ef216 commit 438cba4

File tree

1 file changed

+15
-70
lines changed

1 file changed

+15
-70
lines changed

build/CompilerAndLinker.cmake

Lines changed: 15 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64$")
3030
set(DIRECTX_ARCH arm64)
3131
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64EC$")
3232
set(DIRECTX_ARCH arm64ec)
33+
elseif(NOT (DEFINED DIRECTX_ARCH))
34+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "[Aa][Rr][Mm]64|aarch64|arm64")
35+
set(DIRECTX_ARCH arm64)
36+
else()
37+
set(DIRECTX_ARCH x64)
38+
endif()
3339
endif()
3440

3541
#--- Determines host architecture
@@ -44,6 +50,10 @@ if(WIN32)
4450
list(APPEND COMPILER_DEFINES _UNICODE UNICODE)
4551
endif()
4652

53+
if(MINGW)
54+
list(APPEND LINKER_SWITCHES -municode)
55+
endif()
56+
4757
#--- General MSVC-like SDL options
4858
if(MSVC)
4959
list(APPEND COMPILER_SWITCHES "$<$<NOT:$<CONFIG:DEBUG>>:/guard:cf>")
@@ -66,11 +76,7 @@ else()
6676
endif()
6777

6878
#--- Target architecture switches
69-
if(XBOX_CONSOLE_TARGET STREQUAL "scarlett")
70-
list(APPEND COMPILER_SWITCHES $<IF:$<CXX_COMPILER_ID:MSVC>,/favor:AMD64 /arch:AVX2,-march=znver2>)
71-
elseif(XBOX_CONSOLE_TARGET MATCHES "xboxone|durango")
72-
list(APPEND COMPILER_SWITCHES $<IF:$<CXX_COMPILER_ID:MSVC>,/favor:AMD64 /arch:AVX,-march=btver2>)
73-
elseif(NOT (${DIRECTX_ARCH} MATCHES "^arm"))
79+
if(NOT (${DIRECTX_ARCH} MATCHES "^arm"))
7480
if((${DIRECTX_ARCH} STREQUAL "x86") OR (CMAKE_SIZEOF_VOID_P EQUAL 4))
7581
set(ARCH_SSE2 $<$<CXX_COMPILER_ID:MSVC,Intel>:/arch:SSE2> $<$<NOT:$<CXX_COMPILER_ID:MSVC,Intel>>:-msse2>)
7682
else()
@@ -104,8 +110,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
104110
endif()
105111

106112
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.11)
107-
AND (OpenMP_CXX_FOUND
108-
OR (XBOX_CONSOLE_TARGET STREQUAL "durango")))
113+
AND OpenMP_CXX_FOUND)
109114
# OpenMP in MSVC is not compatible with /permissive- unless you disable two-phase lookup
110115
list(APPEND COMPILER_SWITCHES /Zc:twoPhase-)
111116
endif()
@@ -118,21 +123,12 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
118123
list(APPEND COMPILER_SWITCHES /JMC-)
119124
endif()
120125

121-
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.20)
122-
AND (XBOX_CONSOLE_TARGET STREQUAL "durango"))
123-
list(APPEND COMPILER_SWITCHES /d2FH4-)
124-
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
125-
list(APPEND LINKER_SWITCHES -d2:-FH4-)
126-
endif()
127-
endif()
128-
129126
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.24)
130127
list(APPEND COMPILER_SWITCHES /ZH:SHA_256)
131128
endif()
132129

133-
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.26)
134-
AND (NOT (XBOX_CONSOLE_TARGET STREQUAL "durango")))
135-
list(APPEND COMPILER_SWITCHES /Zc:preprocessor /wd5104 /wd5105)
130+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.26)
131+
list(APPEND COMPILER_SWITCHES /Zc:preprocessor /wd5104 /wd5105)
136132
endif()
137133

138134
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27) AND (NOT (${DIRECTX_ARCH} MATCHES "^arm")))
@@ -148,62 +144,11 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
148144
list(APPEND COMPILER_SWITCHES /external:W4)
149145
endif()
150146

151-
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.31)
152-
AND (XBOX_CONSOLE_TARGET STREQUAL "durango"))
153-
list(APPEND COMPILER_SWITCHES /Zc:static_assert-)
154-
endif()
155-
156147
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.35)
157148
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
158149
list(APPEND COMPILER_SWITCHES $<$<NOT:$<CONFIG:Debug>>:/Zc:checkGwOdr>)
159150
endif()
160151

161-
if(NOT (DEFINED XBOX_CONSOLE_TARGET))
162-
list(APPEND COMPILER_SWITCHES $<$<VERSION_GREATER_EQUAL:${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION},10.0.22000>:/Zc:templateScope>)
163-
endif()
152+
list(APPEND COMPILER_SWITCHES $<$<VERSION_GREATER_EQUAL:${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION},10.0.22000>:/Zc:templateScope>)
164153
endif()
165154
endif()
166-
167-
#--- Windows API Family
168-
include(CheckIncludeFileCXX)
169-
170-
if(DEFINED XBOX_CONSOLE_TARGET)
171-
message(STATUS "Building for Xbox Console Target: ${XBOX_CONSOLE_TARGET}")
172-
set(CMAKE_REQUIRED_QUIET ON)
173-
if(XBOX_CONSOLE_TARGET STREQUAL "durango")
174-
CHECK_INCLUDE_FILE_CXX(xdk.h XDKLegacy_HEADER)
175-
if(NOT XDKLegacy_HEADER)
176-
message(FATAL_ERROR "Legacy Xbox One XDK required to build for Durango.")
177-
endif()
178-
list(APPEND COMPILER_DEFINES WINAPI_FAMILY=WINAPI_FAMILY_TV_TITLE _XBOX_ONE _TITLE MONOLITHIC=1)
179-
else()
180-
CHECK_INCLUDE_FILE_CXX(gxdk.h GXDK_HEADER)
181-
if(NOT GXDK_HEADER)
182-
message(FATAL_ERROR "Microsoft GDK with Xbox Extensions required to build for Xbox. See https://aka.ms/gdkx")
183-
endif()
184-
list(APPEND COMPILER_DEFINES WINAPI_FAMILY=WINAPI_FAMILY_GAMES)
185-
if(XBOX_CONSOLE_TARGET STREQUAL "scarlett")
186-
CHECK_INCLUDE_FILE_CXX(d3d12_xs.h D3D12XS_HEADER)
187-
if(NOT D3D12XS_HEADER)
188-
message(FATAL_ERROR "Microsoft GDK with Xbox Extensions environment needs to be set for Xbox Series X|S.")
189-
endif()
190-
list(APPEND COMPILER_DEFINES _GAMING_XBOX _GAMING_XBOX_SCARLETT)
191-
elseif(XBOX_CONSOLE_TARGET STREQUAL "xboxone")
192-
CHECK_INCLUDE_FILE_CXX(d3d12_x.h D3D12X_HEADER)
193-
if(NOT D3D12X_HEADER)
194-
message(FATAL_ERROR "Microsoft GDK with Xbox Extensions environment needs to be set for Xbox One.")
195-
endif()
196-
list(APPEND COMPILER_DEFINES _GAMING_XBOX _GAMING_XBOX_XBOXONE)
197-
else()
198-
message(FATAL_ERROR "Unknown XBOX_CONSOLE_TARGET")
199-
endif()
200-
endif()
201-
elseif(WINDOWS_STORE)
202-
list(APPEND COMPILER_DEFINES WINAPI_FAMILY=WINAPI_FAMILY_APP)
203-
endif()
204-
205-
#--- Address Sanitizer switches
206-
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
207-
set(ASAN_SWITCHES /fsanitize=address /fsanitize-coverage=inline-8bit-counters /fsanitize-coverage=edge /fsanitize-coverage=trace-cmp /fsanitize-coverage=trace-div)
208-
set(ASAN_LIBS sancov.lib)
209-
endif()

0 commit comments

Comments
 (0)