Make WinRT's SDL_main header-only
As the implementation requires C++, the user will have to include SDL_main.h in a C++ source file (that needs to be compiled with /ZW). It's ok to keep the standard main() implementation in plain C and use an otherwise empty C++ source file for the SDL_main implementation part, if both source files #include <SDL3/SDL_main.h> Including SDL_main.h in a C source file will print a message at compilation (when building for WinRT or possibly other not yet implemented platforms that require C++ for main), to remind the user of also including it in a .cpp source file. This message/warning can be disabled with #define SDL_MAIN_NOIMPL before including SDL_main.h in the C file. When including it in a .cpp file, there will be a compiler error with helpful message if it's not compiled with /ZW For this I renamend _SDL_MAIN_NOIMPL to SDL_MAIN_NOIMPL, because now it's not for internal use only anymore, but also useful for users (that want their main() function in a different file than the SDL_main implementation) Add a project for the testdraw2.c test to the WinRT solution to at least get some minimal testing on WinRT. I won't add all tests because it's a lot of manual clicking per test, but this should be better than nothing :)
This commit is contained in:
committed by
Sam Lantinga
parent
8e0693c982
commit
28b93451dc
@@ -284,11 +284,25 @@ extern DECLSPEC void SDLCALL SDL_GDKSuspendComplete(void);
|
||||
|
||||
#include <SDL3/close_code.h>
|
||||
|
||||
#if !defined(SDL_MAIN_HANDLED) && !defined(_SDL_MAIN_NOIMPL)
|
||||
#if !defined(SDL_MAIN_HANDLED) && !defined(SDL_MAIN_NOIMPL)
|
||||
/* include header-only SDL_main implementations */
|
||||
#if defined(__WIN32__) || defined(__GDK__) || defined(__IOS__) || defined(__TVOS__) /* TODO: other platforms */
|
||||
#include <SDL3/SDL_main_impl.h>
|
||||
#endif
|
||||
#elif defined(__WINRT__) /* TODO: other C++ platforms */
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <SDL3/SDL_main_impl.h>
|
||||
#else
|
||||
/* Note: to get rid of the following warning, you can #define SDL_MAIN_NOIMPL before including SDL_main.h
|
||||
* in your C sourcefile that contains the standard main. Do *not* use SDL_MAIN_HANDLED for that, then SDL_main won't find your main()!
|
||||
*/
|
||||
#ifdef _MSC_VER
|
||||
#pragma message("Note: Your platform needs the SDL_main implementation in a C++ source file. You can keep your main() in plain C (then continue including SDL_main.h there!) and create a fresh .cpp file that only contains #include <SDL3/SDL_main.h>")
|
||||
#elif defined(__GNUC__) /* gcc, clang, mingw and compatible are matched by this and have #warning */
|
||||
#warning "Note: Your platform needs the SDL_main implementation in a C++ source file. You can keep your main() in plain C and create a fresh .cpp file that only contains #include <SDL3/SDL_main.h>"
|
||||
#endif /* __GNUC__ */
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __WINRT__ etc */
|
||||
|
||||
#endif /* SDL_MAIN_HANDLED */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user