From 11d4bdd1a334c4724c42536757bbf65d6fe75eae Mon Sep 17 00:00:00 2001 From: Sewbacca Date: Sun, 26 Nov 2023 15:00:34 +0100 Subject: [PATCH] Add support for MinGW --- CMakeLists.txt | 37 +++++++++++++++++++++++-------------- extra/windows/love.rc | Bin 3632 -> 1741 bytes src/common/config.h | 4 +++- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae1bf6bdd..9eddd07cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,7 @@ if(APPLE) message(WARNING "Use the prebuilt .app or the xcode project in platform/xcode/ instead.") endif() -if(MSVC) +if(MSVC OR MINGW) set(LOVE_CONSOLE_EXE_NAME lovec) endif() @@ -179,7 +179,7 @@ if(MEGA) else() if(MSVC) message(FATAL_ERROR " -It is currently only possible to build with megasource on Windows. +It is currently only possible to build with megasource or (experimental) mingw on Windows. Please see https://github.com/love2d/megasource ") endif() @@ -188,7 +188,7 @@ Please see https://github.com/love2d/megasource find_package(ModPlug REQUIRED) find_package(OpenAL REQUIRED) find_package(OpenGL REQUIRED) - find_package(SDL2 REQUIRED) + find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2main) find_package(Theora REQUIRED) find_package(Vorbis REQUIRED) find_package(ZLIB REQUIRED) @@ -198,7 +198,7 @@ Please see https://github.com/love2d/megasource add_definitions(-D HAS_SOCKLEN_T) set(LOVE_INCLUDE_DIRS - ${SDL2_INCLUDE_DIR} + ${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS} ${VORBIS_INCLUDE_DIR} ${OPENAL_INCLUDE_DIR} @@ -210,7 +210,7 @@ Please see https://github.com/love2d/megasource set(LOVE_LINK_LIBRARIES ${OPENGL_gl_LIBRARY} - ${SDL2_LIBRARY} + ${SDL2_LIBRARIES} ${FREETYPE_LIBRARY} ${OPENAL_LIBRARY} ${MODPLUG_LIBRARY} @@ -1316,6 +1316,9 @@ set(LOVE_SRC_3P_ENET add_library(love_3p_enet ${LOVE_SRC_3P_ENET}) target_link_libraries(love_3p_enet ${LOVE_LUA_LIBRARY}) target_include_directories(love_3p_enet PUBLIC src/libraries/enet/libenet/include) +if(MINGW) + target_link_libraries(love_3p_enet winmm.a) +endif() # # GLAD @@ -1411,7 +1414,7 @@ set(LOVE_SRC_3P_GLSLANG_GLSLANG_OSDEPENDENT src/libraries/glslang/glslang/OSDependent/osinclude.h ) -if(MSVC) +if(MSVC OR MINGW) set(LOVE_SRC_3P_GLSLANG_GLSLANG_OSDEPENDENT ${LOVE_SRC_3P_GLSLANG_GLSLANG_OSDEPENDENT} src/libraries/glslang/glslang/OSDependent/Windows/main.cpp @@ -1511,7 +1514,13 @@ set(LOVE_SRC_3P_LUASOCKET_LIBLUASOCKET set(LOVE_LINK_L3P_LUASOCKET_LIBLUASOCKET) -if(MSVC) +if(MINGW) + set(WIN32_LIB_EXT .a) +else() + set(WIN32_LIB_EXT .lib) +endif() + +if(MSVC OR MINGW) set(LOVE_SRC_3P_LUASOCKET_LIBLUASOCKET ${LOVE_SRC_3P_LUASOCKET_LIBLUASOCKET} src/libraries/luasocket/libluasocket/wsocket.c @@ -1520,7 +1529,7 @@ if(MSVC) set(LOVE_LINK_L3P_LUASOCKET_LIBLUASOCKET ${LOVE_LINK_L3P_LUASOCKET_LIBLUASOCKET} - ws2_32.lib + ws2_32${WIN32_LIB_EXT} ) else() set(LOVE_SRC_3P_LUASOCKET_LIBLUASOCKET @@ -1757,11 +1766,11 @@ link_directories(${LOVE_LINK_DIRS}) set(LOVE_RC) -if(MSVC) +if(MSVC OR MINGW) set(LOVE_LINK_LIBRARIES ${LOVE_LINK_LIBRARIES} - ws2_32.lib - winmm.lib - dwmapi.lib + ws2_32${WIN32_LIB_EXT} + winmm${WIN32_LIB_EXT} + dwmapi${WIN32_LIB_EXT} ) set(LOVE_RC @@ -1790,7 +1799,7 @@ add_executable(${LOVE_EXE_NAME} WIN32 src/love.cpp ${LOVE_RC}) target_link_libraries(${LOVE_EXE_NAME} ${LOVE_LIB_NAME}) set_target_properties(${LOVE_EXE_NAME} PROPERTIES C_VISIBILITY_PRESET hidden CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON) -if(MSVC) +if(MSVC OR MINGW) add_executable(${LOVE_CONSOLE_EXE_NAME} src/love.cpp ${LOVE_RC}) target_link_libraries(${LOVE_CONSOLE_EXE_NAME} ${LOVE_LIB_NAME}) endif() @@ -1818,7 +1827,7 @@ if(LOVE_MOVE_DLLS) endforeach() endif() -if (NOT MSVC) +if (NOT MSVC OR MINGW) return() endif() diff --git a/extra/windows/love.rc b/extra/windows/love.rc index edbf420cb303947dabab2dba30038be450e77e8a..97056578561a154914f58d7378a2a9fb4c2bff5f 100644 GIT binary patch literal 1741 zcma)6;cnV65dPgf#VttPTD6eSQfYrCQ3zGmlpvDQ^%pY40c(kk9Me)weW1P2o@Zw# zKxnIJC`iej@4N55J74Sc)Phs!3;tO_D&&GHPy!0_L_sZC0V&HUFb)}0Dx>F=Cya2o zj|b=ORTD#7meojT$~c869{a-^fAIKaa{`Uc&K`%QN1N+sEUQ&!e^^ouB}j4xK{)ZI z*Y|$V2h6`NXab}_G8Fl(rCOGho~SIC;K0}Uj7nVt;dl_)<3VHzA~mlAZ(ri>~D%orz<(V_{yf_z;lm{BBS@EHovxS|V0ozYA@!&RqqQAyok zDMy`Z6758;speP>-KNyqx5juU-Z=8Z;k4`l*sj~`*oOdj-S6QTT=$LDAELE$XdHVJ zU&DceX;`}L9}dba6Hj#N{TPMgID+G2_*C__1{2SKIz`v~{L zi0){#6Z4mKbRC4fTd*T@OZC0=d5Ur$p=;|y>R+A9nS)kiKALocd+fSC-KWJ|vX#QE zV4nfh8V+_jd50GOA?o4PlF*_0_rZ-ZV{Yu_cKU{+j~F&c8+JQx??2hrw$IZO`HJwD zA<5}BkFBQ>9)!#i+`>6-23-L7eBRVWZW#u2L9(7$y-2oLDidt)KH)dC9p~!2?X)kz z;PvSf?v7QCD+yvs@;cN=iex=k??`-brmo3Hg6#SExUwWCSq;^$1BS>OYs++_cv-$_ pkiN87=BtIzZUQDmzG;8e=2#M5WJV#Bz}et5oPpc!v~~Ea^%o*o?O^}_ literal 3632 zcmb_e+iuf95S`Z|@efNXaT9IR8xk)_p&=-cwo#k5@Kgmzi$yM#n^G#o2k}FE4sgzl z*Xwni1PNp%w%2nxGjnEkfB#yO$GGmw9dWojY05;#@<66|KErb==Q7Z@Dc+o1N?*QU z#bND}BzUJ>B12tEpzH9Q;OkV^RA=Ua zyp&UUAxFT~LEc=JjVt7203C;jnH}bd`C>M&kWaoBbH;3@kW4i54j!*$B=2>VxU4SB zp4nt&yiLokgXURbwFO(O$8pK>CG=8!8>6PHkniOcv^w^&b`Dz;^>hInefa zK=lE#BV4R^jJ%8~g`EpXGfpxol^bXnr$+GeS^b!ufo3jI^j;>>DvY6#AXd}0yb=RB zW9a&j2>7nE8ibk{r+p+2d1gNPnwJ64F)wY{aEOXpd}1wFO;?B@$-02rQ+#Kaq?zmx zh_3PcRJL(#Rxo{8qhLkJ^=dvbigGtp^RAxtf$y|4eW(6>8)WbSdZi6E?}5w34slXL zkFFyh+jyF9XIC2X8a56P33V1pvztwNdx7i$5FP`c$LPdjH4kJ$xjSw8ya#tDTA@=| zcq?7?*Ml7=_i;J7m*t-Ivu+K!?ZD%U1;|W>@w!YhWZzZ-#@kh%?V$zV9i1#q{2$5= z?AH)Y0v2}Ur%s*fdIZfq)MFRgrfGRtMZ7~?UUz_J&Z(+e1xrN?|K@#wX+6liGiPl? zM%K9*7i0Fw6HK8=0lDobG0SN)<}+E=f)7UMBZ?(r-=Y42&+)9^1!`k%yk2H${59+l zMAAi<>|?h$Lj1iFVvpzlBC(F~8EAn;4eX_dU`PZ1ZwmR3CAo`wMCE%O)vW8amESwL z^cwb3R)ZE!k+B~BPc(N;tes$WQ#LZ@v4`jNhsWK+&fir|m$5k5y1f=wJero`Xd?bj z-m#$v{>BeEHv5YGG=R37`zbT_n|@islwqxRvV!NFEk#Wdw7QAX>BwI zR~I;VLc0R~>0e~SGo6`@`4U^2#hOsNMSQ8M9rMidT&npW&cIun6YqYOcdOtK{bQ$b z)-&+H&l}E1+pT?p_Q%yhIHHvy7FT=Qcmc(RDCj L8$a`HIPCuqn$Yt` diff --git a/src/common/config.h b/src/common/config.h index 86aaedb5f..94848e32c 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -104,7 +104,7 @@ #endif // DLL-stuff. -#if defined(_MSC_VER) +#if defined(_MSC_VER) || defined(__MINGW32__) # define LOVE_EXPORT __declspec(dllexport) #elif defined(__GNUC__) || defined(__clang__) # define LOVE_EXPORT __attribute__((visibility("default"))) @@ -116,8 +116,10 @@ #ifndef LOVE_WINDOWS_UWP # define LOVE_LEGENDARY_CONSOLE_IO_HACK #endif // LOVE_WINDOWS_UWP +#ifndef __MINGW32__ # define NOMINMAX #endif +#endif #if defined(LOVE_MACOSX) || defined(LOVE_IOS) # define LOVE_LEGENDARY_APP_ARGV_HACK