Skip to content

Commit aaf2383

Browse files
committed
Resolve WinMain linking issues with CMake
1 parent 3711431 commit aaf2383

File tree

6 files changed

+34
-14
lines changed

6 files changed

+34
-14
lines changed

cmake/FindSDL2.cmake

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
find_package(PkgConfig QUIET)
2-
if(PKG_CONFIG_FOUND)
3-
pkg_check_modules(SDL2 IMPORTED_TARGET "sdl2")
4-
if(TARGET PkgConfig::SDL2 AND NOT TARGET SDL2::SDL2)
5-
add_library(SDL2::SDL2 INTERFACE IMPORTED)
6-
set_property(TARGET SDL2::SDL2 PROPERTY INTERFACE_LINK_LIBRARIES PkgConfig::SDL2)
1+
# On Windows, SDL2main is included as part of the pkg-config output, which isn't desirable when linking.
2+
if(NOT WIN32)
3+
find_package(PkgConfig QUIET)
4+
if(PKG_CONFIG_FOUND)
5+
pkg_check_modules(SDL2 IMPORTED_TARGET "sdl2")
6+
if(TARGET PkgConfig::SDL2 AND NOT TARGET SDL2::SDL2)
7+
add_library(SDL2::SDL2 INTERFACE IMPORTED)
8+
set_property(TARGET SDL2::SDL2 PROPERTY INTERFACE_LINK_LIBRARIES PkgConfig::SDL2)
9+
endif()
710
endif()
811
endif()
912

10-
find_library(SDL2main_LIBRARY SDL2main)
11-
1213
if(NOT SDL2_FOUND)
13-
find_path(SDL2_INCLUDE_DIR sdl2.h)
14+
find_path(SDL2_INCLUDE_DIR SDL.h PATH_SUFFIXES SDL2)
1415
find_library(SDL2_LIBRARY SDL2 SDL2d)
1516

16-
find_library(SDL2main_LIBRARY SDL2main)
17-
1817
include(FindPackageHandleStandardArgs)
19-
find_package_handle_standard_args(libuv
18+
find_package_handle_standard_args(SDL2
2019
REQUIRED_VARS SDL2_INCLUDE_DIR SDL2_LIBRARY
2120
)
2221

@@ -29,6 +28,8 @@ if(NOT SDL2_FOUND)
2928
endif()
3029
endif()
3130

31+
find_library(SDL2main_LIBRARY SDL2main)
32+
3233
if(SDL2main_LIBRARY AND NOT TARGET SDL2::SDL2main)
3334
add_library(SDL2::SDL2main UNKNOWN IMPORTED)
3435
set_target_properties(SDL2::SDL2main PROPERTIES

skeleton/CMakeLists.txt

+14-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ add_library(librw_skeleton
1919
imgui/stb_textedit.h
2020
imgui/stb_truetype.h
2121
)
22-
add_library(librw::skeleton ALIAS librw_skeleton)
2322

2423
set_target_properties(librw_skeleton
2524
PROPERTIES
@@ -38,6 +37,20 @@ target_include_directories(librw_skeleton
3837
$<INSTALL_INTERFACE:${LIBRW_INSTALL_INCLUDEDIR}/skeleton>
3938
)
4039

40+
# HACK: When building with MinGW, it's necessary to link to libmingw32.a *before* the library
41+
# that provides WinMain. To work around this, an intermediate target is created when using MinGW
42+
# that specifies the correct linking order.
43+
#
44+
# TODO: Use SDL_main on platforms that require it
45+
if(MINGW AND LIBRW_PLATFORM_D3D9)
46+
add_library(librw_skeleton_main INTERFACE)
47+
find_library(MINGW32_LIBRARY NAMES mingw32)
48+
target_link_libraries(librw_skeleton_main INTERFACE ${MINGW32_LIBRARY} librw_skeleton)
49+
add_library(librw::skeleton ALIAS librw_skeleton_main)
50+
else()
51+
add_library(librw::skeleton ALIAS librw_skeleton)
52+
endif()
53+
4154
if(LIBRW_INSTALL)
4255
install(
4356
FILES

skeleton/sdl2.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#ifdef LIBRW_SDL2
22

3+
#ifdef _WIN32
4+
#define SDL_MAIN_HANDLED
5+
#endif
36
#include <rw.h>
47
#include "skeleton.h"
58

skeleton/win.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#ifdef _WIN32
2+
#define SDL_MAIN_HANDLED
23
#include <windows.h>
34
#include <rw.h>
45
#include "skeleton.h"
@@ -291,7 +292,7 @@ SetMousePosition(int x, int y)
291292

292293
#endif
293294

294-
#ifdef RW_OPENGL
295+
#if defined(RW_OPENGL) && !defined(__MINGW32__)
295296
int main(int argc, char *argv[]);
296297

297298
int WINAPI

tools/dumprwtree/dumprwtree.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <cstring>
44
#include <cassert>
55

6+
#define SDL_MAIN_HANDLED
67
#include <rw.h>
78

89
using namespace std;

tools/ska2anm/ska2anm.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <string.h>
44
#include <assert.h>
55

6+
#define SDL_MAIN_HANDLED
67
#include <rw.h>
78
#include <args.h>
89

0 commit comments

Comments
 (0)