Skip to content
This repository was archived by the owner on Feb 23, 2026. It is now read-only.

Commit af75deb

Browse files
authored
Add MinGW support for CMake (#14)
1 parent 3f6cfba commit af75deb

12 files changed

Lines changed: 107 additions & 89 deletions

CMakeLists.txt

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ project (DXUT
1313

1414
option(ENABLE_CODE_ANALYSIS "Use Static Code Analysis on build" OFF)
1515

16-
set(CMAKE_CXX_STANDARD 14)
16+
set(CMAKE_CXX_STANDARD 17)
1717
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1818
set(CMAKE_CXX_EXTENSIONS OFF)
1919

@@ -62,29 +62,39 @@ add_library(${PROJECT_NAME} STATIC ${CORE_LIBRARY_SOURCES} ${CORE_LIBRARY_HEADER
6262
set(OPT_LIBRARY_HEADERS
6363
Optional/DXUTcamera.h
6464
Optional/DXUTgui.h
65-
Optional/DXUTguiIME.h
6665
Optional/DXUTLockFreePipe.h
6766
Optional/DXUTres.h
6867
Optional/DXUTsettingsdlg.h
69-
Optional/ImeUi.h
7068
Optional/SDKmesh.h
7169
Optional/SDKmisc.h
7270
)
7371

7472
set(OPT_LIBRARY_SOURCES
7573
Optional/DXUTcamera.cpp
7674
Optional/DXUTgui.cpp
77-
Optional/DXUTguiIME.cpp
7875
Optional/DXUTres.cpp
7976
Optional/DXUTsettingsdlg.cpp
80-
Optional/ImeUi.cpp
8177
Optional/SDKmesh.cpp
8278
Optional/SDKmisc.cpp
8379
)
8480

81+
if(NOT MINGW)
82+
set(OPT_LIBRARY_HEADERS
83+
${OPT_LIBRARY_HEADERS}
84+
Optional/DXUTguiIME.h
85+
Optional/ImeUi.h
86+
)
87+
88+
set(OPT_LIBRARY_SOURCES
89+
${OPT_LIBRARY_SOURCES}
90+
Optional/DXUTguiIME.cpp
91+
Optional/ImeUi.cpp
92+
)
93+
endif()
94+
8595
add_library(${PROJECT_NAME}Opt STATIC ${OPT_LIBRARY_SOURCES} ${OPT_CORE_LIBRARY_HEADERS})
8696

87-
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16")
97+
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16" AND (NOT MINGW))
8898
target_precompile_headers(${PROJECT_NAME} PRIVATE Core/DXUT.h)
8999
target_precompile_headers(${PROJECT_NAME}Opt PRIVATE Core/DXUT.h)
90100
endif()
@@ -155,13 +165,26 @@ install(FILES
155165
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME}/cmake/)
156166

157167
if(MSVC)
158-
target_compile_options(${PROJECT_NAME} PRIVATE /fp:fast)
159-
target_compile_options(${PROJECT_NAME}Opt PRIVATE /fp:fast)
168+
target_compile_options(${PROJECT_NAME} PRIVATE /fp:fast "$<$<NOT:$<CONFIG:DEBUG>>:/guard:cf>")
169+
target_compile_options(${PROJECT_NAME}Opt PRIVATE /fp:fast "$<$<NOT:$<CONFIG:DEBUG>>:/guard:cf>")
170+
endif()
160171

161-
if((${CMAKE_SIZEOF_VOID_P} EQUAL 4) AND (NOT ${DIRECTX_ARCH} MATCHES "^arm"))
162-
target_compile_options(${PROJECT_NAME} PRIVATE /arch:SSE2)
163-
target_compile_options(${PROJECT_NAME}Opt PRIVATE /arch:SSE2)
172+
if (MINGW OR VCPKG_TOOLCHAIN)
173+
message("INFO: Using VCPKG for DirectXMath.")
174+
find_package(directxmath CONFIG REQUIRED)
175+
target_link_libraries(${PROJECT_NAME} PRIVATE Microsoft::DirectXMath)
176+
target_link_libraries(${PROJECT_NAME}Opt PRIVATE Microsoft::DirectXMath)
177+
endif()
178+
179+
if(NOT ${DIRECTX_ARCH} MATCHES "^arm")
180+
if (${CMAKE_SIZEOF_VOID_P} EQUAL "4")
181+
set(ARCH_SSE2 $<$<CXX_COMPILER_ID:MSVC>:/arch:SSE2> $<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-msse2>)
182+
else()
183+
set(ARCH_SSE2 $<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-msse2>)
164184
endif()
185+
186+
target_compile_options(${PROJECT_NAME} PRIVATE ${ARCH_SSE2})
187+
target_compile_options(${PROJECT_NAME}Opt PRIVATE ${ARCH_SSE2})
165188
endif()
166189

167190
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
@@ -170,8 +193,8 @@ if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
170193
target_compile_options(${PROJECT_NAME}Opt PRIVATE ${WarningsLib})
171194
endif()
172195
if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
173-
target_compile_options(${PROJECT_NAME} PRIVATE /permissive- /JMC- /Zc:__cplusplus)
174-
target_compile_options(${PROJECT_NAME}Opt PRIVATE /permissive- /JMC- /Zc:__cplusplus)
196+
target_compile_options(${PROJECT_NAME} PRIVATE /sdl /permissive- /JMC- /Zc:__cplusplus)
197+
target_compile_options(${PROJECT_NAME}Opt PRIVATE /sdl /permissive- /JMC- /Zc:__cplusplus)
175198

176199
if(ENABLE_CODE_ANALYSIS)
177200
target_compile_options(${PROJECT_NAME} PRIVATE /analyze)

CMakePresets.json

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,28 @@
7272
"strategy": "external"
7373
}
7474
},
75+
{
76+
"name": "GNUC",
77+
"hidden": true,
78+
"cacheVariables": {
79+
"CMAKE_CXX_COMPILER": "g++.exe"
80+
},
81+
"toolset": {
82+
"value": "host=x64",
83+
"strategy": "external"
84+
}
85+
},
86+
87+
{
88+
"name": "VCPKG",
89+
"cacheVariables": {
90+
"CMAKE_TOOLCHAIN_FILE": {
91+
"value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
92+
"type": "FILEPATH"
93+
}
94+
},
95+
"hidden": true
96+
},
7597

7698
{ "name": "x64-Debug" , "description": "MSVC for x64 (Debug)", "inherits": [ "base", "x64", "Debug", "MSVC" ] },
7799
{ "name": "x64-Release" , "description": "MSVC for x64 (Release)", "inherits": [ "base", "x64", "Release", "MSVC" ] },
@@ -83,6 +105,11 @@
83105
{ "name": "x64-Debug-Clang" , "description": "Clang/LLVM for x64 (Debug)", "inherits": [ "base", "x64", "Debug", "Clang" ] },
84106
{ "name": "x64-Release-Clang" , "description": "Clang/LLVM for x64 (Release)", "inherits": [ "base", "x64", "Release", "Clang" ] },
85107
{ "name": "x86-Debug-Clang" , "description": "Clang/LLVM for x86 (Debug)", "inherits": [ "base", "x86", "Debug", "Clang" ], "environment": { "CXXFLAGS": "-m32" } },
86-
{ "name": "x86-Release-Clang" , "description": "Clang/LLVM for x86 (Release)", "inherits": [ "base", "x86", "Release", "Clang" ], "environment": { "CXXFLAGS": "-m32" } }
108+
{ "name": "x86-Release-Clang" , "description": "Clang/LLVM for x86 (Release)", "inherits": [ "base", "x86", "Release", "Clang" ], "environment": { "CXXFLAGS": "-m32" } },
109+
110+
{ "name": "x64-Debug-MinGW" , "description": "MinG-W64 (Debug)", "inherits": [ "base", "x64", "Debug", "GNUC", "VCPKG" ], "environment": { "PATH": "$penv{PATH};c:/mingw64/bin" } },
111+
{ "name": "x64-Release-MinGW", "description": "MinG-W64 (Release)", "inherits": [ "base", "x64", "Release", "GNUC", "VCPKG" ], "environment": { "PATH": "$penv{PATH};c:/mingw64/bin" } },
112+
{ "name": "x86-Debug-MinGW" , "description": "MinG-W32 (Debug)", "inherits": [ "base", "x86", "Debug", "GNUC", "VCPKG" ], "environment": { "PATH": "$penv{PATH};c:/mingw32/bin" } },
113+
{ "name": "x86-Release-MinGW", "description": "MinG-W32 (Release)", "inherits": [ "base", "x86", "Release", "GNUC", "VCPKG" ], "environment": { "PATH": "$penv{PATH};c:/mingw32/bin" } }
87114
]
88115
}

Core/DDSTextureLoader.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,18 @@ namespace
125125

126126
inline HANDLE safe_handle(HANDLE h) noexcept { return (h == INVALID_HANDLE_VALUE) ? nullptr : h; }
127127

128+
#if defined(_DEBUG) || defined(PROFILE)
128129
template<UINT TNameLength>
129130
inline void SetDebugObjectName(_In_ ID3D11DeviceChild* resource, _In_ const char (&name)[TNameLength]) noexcept
130131
{
131-
#if defined(_DEBUG) || defined(PROFILE)
132132
resource->SetPrivateData(WKPDID_D3DDebugObjectName, TNameLength - 1, name);
133+
}
133134
#else
134-
UNREFERENCED_PARAMETER(resource);
135-
UNREFERENCED_PARAMETER(name);
136-
#endif
135+
template<UINT TNameLength>
136+
inline void SetDebugObjectName(_In_ ID3D11DeviceChild*, _In_ const char(&)[TNameLength]) noexcept
137+
{
137138
}
139+
#endif
138140

139141
//--------------------------------------------------------------------------------------
140142
HRESULT LoadTextureDataFromMemory(

Core/DXUT.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3120,7 +3120,7 @@ void DXUTCleanup3DEnvironment( _In_ bool bReleaseSettings )
31203120
ID3D11Debug * d3dDebug = nullptr;
31213121
if( SUCCEEDED( pd3dDevice->QueryInterface( IID_PPV_ARGS(&d3dDebug) ) ) )
31223122
{
3123-
d3dDebug->ReportLiveDeviceObjects( D3D11_RLDO_SUMMARY | D3D11_RLDO_DETAIL );
3123+
d3dDebug->ReportLiveDeviceObjects( static_cast<D3D11_RLDO_FLAGS>(D3D11_RLDO_SUMMARY | D3D11_RLDO_DETAIL) );
31243124
d3dDebug->Release();
31253125
}
31263126
#endif

Core/DXUTmisc.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
#include "DXUT.h"
1212
#include <xinput.h>
1313

14+
#ifndef XINPUT_DLL_W
15+
#define XINPUT_DLL_W L"xinput9_1_0.dll"
16+
#endif
17+
1418
#include "ScreenGrab.h"
1519

1620

@@ -938,7 +942,7 @@ HRESULT DXUTGetGamepadState( DWORD dwPort, DXUT_GAMEPAD* pGamePad, bool bThumbst
938942
static LPXINPUTGETCAPABILITIES s_pXInputGetCapabilities = nullptr;
939943
if( !s_pXInputGetState || !s_pXInputGetCapabilities )
940944
{
941-
HINSTANCE hInst = LoadLibraryEx( XINPUT_DLL, nullptr, 0x00000800 /* LOAD_LIBRARY_SEARCH_SYSTEM32 */ );
945+
HINSTANCE hInst = LoadLibraryExW( XINPUT_DLL_W, nullptr, 0x00000800 /* LOAD_LIBRARY_SEARCH_SYSTEM32 */ );
942946
if( hInst )
943947
{
944948
s_pXInputGetState = reinterpret_cast<LPXINPUTGETSTATE>( reinterpret_cast<void*>( GetProcAddress( hInst, "XInputGetState" ) ) );
@@ -1045,7 +1049,7 @@ void DXUTEnableXInput( _In_ bool bEnable )
10451049
static LPXINPUTENABLE s_pXInputEnable = nullptr;
10461050
if( !s_pXInputEnable )
10471051
{
1048-
HINSTANCE hInst = LoadLibraryEx( XINPUT_DLL, nullptr, 0x00000800 /* LOAD_LIBRARY_SEARCH_SYSTEM32 */ );
1052+
HINSTANCE hInst = LoadLibraryExW( XINPUT_DLL_W, nullptr, 0x00000800 /* LOAD_LIBRARY_SEARCH_SYSTEM32 */ );
10491053
if( hInst )
10501054
s_pXInputEnable = reinterpret_cast<LPXINPUTENABLE>( reinterpret_cast<void*>( GetProcAddress( hInst, "XInputEnable" ) ) );
10511055
}
@@ -1064,7 +1068,7 @@ HRESULT DXUTStopRumbleOnAllControllers()
10641068
static LPXINPUTSETSTATE s_pXInputSetState = nullptr;
10651069
if( !s_pXInputSetState )
10661070
{
1067-
HINSTANCE hInst = LoadLibraryEx( XINPUT_DLL, nullptr, 0x00000800 /* LOAD_LIBRARY_SEARCH_SYSTEM32 */ );
1071+
HINSTANCE hInst = LoadLibraryExW( XINPUT_DLL_W, nullptr, 0x00000800 /* LOAD_LIBRARY_SEARCH_SYSTEM32 */ );
10681072
if( hInst )
10691073
s_pXInputSetState = reinterpret_cast<LPXINPUTSETSTATE>( reinterpret_cast<void*>( GetProcAddress( hInst, "XInputSetState" ) ) );
10701074
}

Core/DXUTmisc.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ const WCHAR* WINAPI DXUTTraceWindowsMessage( _In_ UINT uMsg );
138138
#else
139139
#define DXUT_ERR(str,hr) (hr)
140140
#define DXUT_ERR_MSGBOX(str,hr) (hr)
141-
#define DXUTTRACE (__noop)
141+
#define DXUTTRACE
142142
#endif
143143

144144

@@ -224,9 +224,9 @@ const DWORD DXUT_PERFEVENTCOLOR3 = 0xFF6464C8;
224224
#define DXUT_SetPerfMarker( color, pstrMessage ) DXUT_Dynamic_D3DPERF_SetMarker( color, pstrMessage )
225225
#else
226226
// PROFILE is not defined, so these macros do nothing
227-
#define DXUT_BeginPerfEvent( color, pstrMessage ) (__noop)
228-
#define DXUT_EndPerfEvent() (__noop)
229-
#define DXUT_SetPerfMarker( color, pstrMessage ) (__noop)
227+
#define DXUT_BeginPerfEvent( color, pstrMessage )
228+
#define DXUT_EndPerfEvent()
229+
#define DXUT_SetPerfMarker( color, pstrMessage )
230230
#endif
231231

232232
//--------------------------------------------------------------------------------------

Core/WICTextureLoader.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636

3737
#include <algorithm>
3838
#include <cassert>
39+
#include <cfloat>
40+
#include <cmath>
3941
#include <cstring>
4042
#include <iterator>
4143
#include <memory>
@@ -53,16 +55,18 @@ using Microsoft::WRL::ComPtr;
5355
namespace
5456
{
5557
//--------------------------------------------------------------------------------------
58+
#if !defined(NO_D3D11_DEBUG_NAME) && ( defined(_DEBUG) || defined(PROFILE) )
5659
template<UINT TNameLength>
5760
inline void SetDebugObjectName(_In_ ID3D11DeviceChild* resource, _In_ const char(&name)[TNameLength]) noexcept
5861
{
59-
#if !defined(NO_D3D11_DEBUG_NAME) && ( defined(_DEBUG) || defined(PROFILE) )
6062
resource->SetPrivateData(WKPDID_D3DDebugObjectName, TNameLength - 1, name);
63+
}
6164
#else
62-
UNREFERENCED_PARAMETER(resource);
63-
UNREFERENCED_PARAMETER(name);
64-
#endif
65+
template<UINT TNameLength>
66+
inline void SetDebugObjectName(_In_ ID3D11DeviceChild*, _In_ const char(&)[TNameLength]) noexcept
67+
{
6568
}
69+
#endif
6670

6771
//-------------------------------------------------------------------------------------
6872
// WIC Pixel Format Translation Data

Optional/DXUTcamera.cpp

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -298,11 +298,8 @@ void CBaseCamera::SetProjParams( float fFOV, float fAspect, float fNearPlane, fl
298298
// Call this from your message proc so this class can handle window messages
299299
//--------------------------------------------------------------------------------------
300300
_Use_decl_annotations_
301-
LRESULT CBaseCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
301+
LRESULT CBaseCamera::HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
302302
{
303-
UNREFERENCED_PARAMETER( hWnd );
304-
UNREFERENCED_PARAMETER( lParam );
305-
306303
switch( uMsg )
307304
{
308305
case WM_KEYDOWN:
@@ -1109,10 +1106,8 @@ CDXUTDirectionWidget::CDXUTDirectionWidget() noexcept :
11091106
//--------------------------------------------------------------------------------------
11101107
_Use_decl_annotations_
11111108
LRESULT CDXUTDirectionWidget::HandleMessages( HWND hWnd, UINT uMsg,
1112-
WPARAM wParam, LPARAM lParam )
1109+
WPARAM, LPARAM lParam )
11131110
{
1114-
UNREFERENCED_PARAMETER(wParam);
1115-
11161111
switch( uMsg )
11171112
{
11181113
case WM_LBUTTONDOWN:
@@ -1220,23 +1215,17 @@ HRESULT CDXUTDirectionWidget::UpdateLightDir()
12201215

12211216
//--------------------------------------------------------------------------------------
12221217
_Use_decl_annotations_
1223-
HRESULT CDXUTDirectionWidget::OnRender( FXMVECTOR color, CXMMATRIX mView, CXMMATRIX mProj, FXMVECTOR vEyePt )
1218+
HRESULT CDXUTDirectionWidget::OnRender( FXMVECTOR, CXMMATRIX, CXMMATRIX, FXMVECTOR)
12241219
{
1225-
UNREFERENCED_PARAMETER(color);
1226-
UNREFERENCED_PARAMETER(mView);
1227-
UNREFERENCED_PARAMETER(mProj);
1228-
UNREFERENCED_PARAMETER(vEyePt);
12291220
// TODO -
12301221
return S_OK;
12311222
}
12321223

12331224

12341225
//--------------------------------------------------------------------------------------
12351226
_Use_decl_annotations_
1236-
HRESULT CDXUTDirectionWidget::StaticOnD3D11CreateDevice( ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dImmediateContext )
1227+
HRESULT CDXUTDirectionWidget::StaticOnD3D11CreateDevice( ID3D11Device*, ID3D11DeviceContext*)
12371228
{
1238-
UNREFERENCED_PARAMETER(pd3dDevice);
1239-
UNREFERENCED_PARAMETER(pd3dImmediateContext);
12401229
// TODO -
12411230
return S_OK;
12421231
}

Optional/DXUTgui.cpp

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,9 +1108,8 @@ void CDXUTDialog::SetControlEnabled( _In_ int ID, _In_ bool bEnabled )
11081108

11091109

11101110
//--------------------------------------------------------------------------------------
1111-
void CDXUTDialog::OnMouseUp( _In_ const POINT& pt )
1111+
void CDXUTDialog::OnMouseUp( _In_ const POINT& )
11121112
{
1113-
UNREFERENCED_PARAMETER(pt);
11141113
s_pControlPressed = nullptr;
11151114
m_pControlMouseOver = nullptr;
11161115
}
@@ -1596,10 +1595,8 @@ void CDXUTDialog::RequestFocus( _In_ CDXUTControl* pControl )
15961595

15971596
//--------------------------------------------------------------------------------------
15981597
_Use_decl_annotations_
1599-
HRESULT CDXUTDialog::DrawRect( const RECT* pRect, DWORD color )
1598+
HRESULT CDXUTDialog::DrawRect( const RECT*, DWORD )
16001599
{
1601-
UNREFERENCED_PARAMETER(pRect);
1602-
UNREFERENCED_PARAMETER(color);
16031600
// TODO -
16041601
return E_FAIL;
16051602
}
@@ -1691,15 +1688,12 @@ HRESULT CDXUTDialog::DrawSprite( CDXUTElement* pElement, const RECT* prcDest, fl
16911688

16921689
//--------------------------------------------------------------------------------------
16931690
_Use_decl_annotations_
1694-
HRESULT CDXUTDialog::CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, const RECT* prcDest, int nCount )
1691+
HRESULT CDXUTDialog::CalcTextRect( LPCWSTR, CDXUTElement* pElement, const RECT*, int)
16951692
{
16961693
auto pFontNode = GetFont( pElement->iFont );
16971694
if( !pFontNode )
16981695
return E_FAIL;
16991696

1700-
UNREFERENCED_PARAMETER(strText);
1701-
UNREFERENCED_PARAMETER(prcDest);
1702-
UNREFERENCED_PARAMETER(nCount);
17031697
// TODO -
17041698

17051699
return S_OK;
@@ -2284,12 +2278,8 @@ CDXUTDialogResourceManager::~CDXUTDialogResourceManager()
22842278

22852279
//--------------------------------------------------------------------------------------
22862280
_Use_decl_annotations_
2287-
bool CDXUTDialogResourceManager::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
2281+
bool CDXUTDialogResourceManager::MsgProc( HWND, UINT, WPARAM, LPARAM )
22882282
{
2289-
UNREFERENCED_PARAMETER(hWnd);
2290-
UNREFERENCED_PARAMETER(uMsg);
2291-
UNREFERENCED_PARAMETER(wParam);
2292-
UNREFERENCED_PARAMETER(lParam);
22932283
return false;
22942284
}
22952285

@@ -3053,11 +3043,8 @@ bool CDXUTButton::HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam )
30533043

30543044
//--------------------------------------------------------------------------------------
30553045
_Use_decl_annotations_
3056-
bool CDXUTButton::HandleMouse( UINT uMsg, const POINT& pt, WPARAM wParam, LPARAM lParam )
3046+
bool CDXUTButton::HandleMouse( UINT uMsg, const POINT& pt, WPARAM, LPARAM)
30573047
{
3058-
UNREFERENCED_PARAMETER(wParam);
3059-
UNREFERENCED_PARAMETER(lParam);
3060-
30613048
if( !m_bEnabled || !m_bVisible )
30623049
return false;
30633050

0 commit comments

Comments
 (0)