diff --git a/bin/Resources/exchndl.dll b/bin/Resources/i686/exchndl.dll similarity index 100% rename from bin/Resources/exchndl.dll rename to bin/Resources/i686/exchndl.dll diff --git a/bin/Resources/fmod.dll b/bin/Resources/i686/fmod.dll similarity index 100% rename from bin/Resources/fmod.dll rename to bin/Resources/i686/fmod.dll diff --git a/bin/Resources/fmodex.dll b/bin/Resources/i686/fmodex.dll similarity index 100% rename from bin/Resources/fmodex.dll rename to bin/Resources/i686/fmodex.dll diff --git a/bin/Resources/fmodexL.dll b/bin/Resources/i686/fmodexL.dll similarity index 100% rename from bin/Resources/fmodexL.dll rename to bin/Resources/i686/fmodexL.dll diff --git a/bin/Resources/libgcc_s_dw2-1.dll b/bin/Resources/i686/libgcc_s_dw2-1.dll similarity index 100% rename from bin/Resources/libgcc_s_dw2-1.dll rename to bin/Resources/i686/libgcc_s_dw2-1.dll diff --git a/bin/Resources/libgme.dll b/bin/Resources/i686/libgme.dll similarity index 100% rename from bin/Resources/libgme.dll rename to bin/Resources/i686/libgme.dll diff --git a/bin/Resources/libintl-8.dll b/bin/Resources/i686/libintl-8.dll similarity index 100% rename from bin/Resources/libintl-8.dll rename to bin/Resources/i686/libintl-8.dll diff --git a/bin/Resources/fmod64.dll b/bin/Resources/x86_64/fmod64.dll similarity index 100% rename from bin/Resources/fmod64.dll rename to bin/Resources/x86_64/fmod64.dll diff --git a/bin/Resources/fmodex64.dll b/bin/Resources/x86_64/fmodex64.dll similarity index 100% rename from bin/Resources/fmodex64.dll rename to bin/Resources/x86_64/fmodex64.dll diff --git a/bin/Resources/fmodexL64.dll b/bin/Resources/x86_64/fmodexL64.dll similarity index 100% rename from bin/Resources/fmodexL64.dll rename to bin/Resources/x86_64/fmodexL64.dll diff --git a/bin/Resources/libgme64.dll b/bin/Resources/x86_64/libgme.dll similarity index 100% rename from bin/Resources/libgme64.dll rename to bin/Resources/x86_64/libgme.dll diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0602de9de..99f2beebe 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -227,6 +227,12 @@ set(SRB2_CONFIG_YASM OFF CACHE BOOL set(SRB2_CONFIG_STATIC_OPENGL OFF CACHE BOOL "Use statically linked OpenGL. NOT RECOMMENDED.") +### use internal libraries? +if(${CMAKE_SYSTEM} MATCHES "Windows") ###set on Windows only + set(SRB2_CONFIG_USE_INTERNAL_LIBRARIES OFF CACHE BOOL + "Use SRB2's internal copies of required dependencies (SDL2, PNG, zlib, GME).") +endif() + if(${SRB2_CONFIG_HAVE_BLUA}) add_definitions(-DHAVE_BLUA) set(SRB2_LUA_SOURCES @@ -314,7 +320,17 @@ if(${SRB2_CONFIG_HAVE_BLUA}) endif() if(${SRB2_CONFIG_HAVE_GME}) - find_package(GME) + if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) + set(GME_FOUND ON) + set(GME_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/gme/include) + if(${SRB2_SYSTEM_BITS} EQUAL 64) + set(GME_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/gme/win64 -lgme") + else() # 32-bit + set(GME_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/gme/win32 -lgme") + endif() + else() + find_package(GME) + endif() if(${GME_FOUND}) set(SRB2_HAVE_GME ON) add_definitions(-DHAVE_LIBGME) @@ -324,9 +340,20 @@ if(${SRB2_CONFIG_HAVE_GME}) endif() if(${SRB2_CONFIG_HAVE_ZLIB}) - find_package(ZLIB) + if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) + set(ZLIB_FOUND ON) + set(ZLIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/zlib) + if(${SRB2_SYSTEM_BITS} EQUAL 64) + set(ZLIB_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/zlib/win32 -lz64") + else() # 32-bit + set(ZLIB_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/zlib/win32 -lz32") + endif() + else() + find_package(ZLIB) + endif() if(${ZLIB_FOUND}) set(SRB2_HAVE_ZLIB ON) + add_definitions(-DHAVE_ZLIB) else() message(WARNING "You have specified that ZLIB is available but it was not found. SRB2 may not compile correctly.") endif() @@ -334,7 +361,17 @@ endif() if(${SRB2_CONFIG_HAVE_PNG} AND ${SRB2_CONFIG_HAVE_ZLIB}) if (${ZLIB_FOUND}) - find_package(PNG) + if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) + set(PNG_FOUND ON) + set(PNG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/libpng-src) + if(${SRB2_SYSTEM_BITS} EQUAL 64) + set(PNG_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/libpng-src/projects -lpng64") + else() # 32-bit + set(PNG_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/libpng-src/projects -lpng32") + endif() + else() + find_package(PNG) + endif() if(${PNG_FOUND}) set(SRB2_HAVE_PNG ON) add_definitions(-DHAVE_PNG) diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index 7f6771262..a3626970e 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -3,7 +3,18 @@ set(SRB2_CONFIG_SDL2_USEMIXER ON CACHE BOOL "Use SDL2_mixer or regular sdl sound") if(${SRB2_CONFIG_SDL2_USEMIXER}) - find_package(SDL2_mixer) + if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) + set(SDL2_MIXER_FOUND ON) + if(${SRB2_SYSTEM_BITS} EQUAL 64) + set(SDL2_MIXER_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/x86_64-w64-mingw32/include/SDL2) + set(SDL2_MIXER_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/x86_64-w64-mingw32/lib -lSDL2_mixer") + else() # 32-bit + set(SDL2_MIXER_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/i686-w64-mingw32/include/SDL2) + set(SDL2_MIXER_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/i686-w64-mingw32/lib -lSDL2_mixer") + endif() + else() + find_package(SDL2_mixer) + endif() if(${SDL2_MIXER_FOUND}) set(SRB2_HAVE_MIXER ON) set(SRB2_SDL2_SOUNDIMPL mixer_sound.c) @@ -42,7 +53,18 @@ set(SRB2_SDL2_HEADERS source_group("Interface Code" FILES ${SRB2_SDL2_SOURCES} ${SRB2_SDL2_HEADERS}) # Dependency -find_package(SDL2) +if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) + set(SDL2_FOUND ON) + if(${SRB2_SYSTEM_BITS} EQUAL 64) + set(SDL2_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/include/SDL2) + set(SDL2_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/lib -lSDL2") + else() # 32-bit + set(SDL2_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/include/SDL2) + set(SDL2_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/lib -lSDL2") + endif() +else() + find_package(SDL2) +endif() if(${SDL2_FOUND}) set(SRB2_SDL2_TOTAL_SOURCES @@ -185,7 +207,18 @@ if(${SDL2_FOUND}) endif() if(MSVC) - find_package(SDL2_MAIN REQUIRED) + if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) + set(SDL2_MAIN_FOUND ON) + if(${SRB2_SYSTEM_BITS} EQUAL 64) + set(SDL2_MAIN_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/include/SDL2) + set(SDL2_MAIN_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/lib -lSDL2main") + else() # 32-bit + set(SDL2_MAIN_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/include/SDL2) + set(SDL2_MAIN_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/lib -lSDL2main") + endif() + else() + find_package(SDL2_MAIN REQUIRED) + endif() target_link_libraries(SRB2SDL2 PRIVATE ${SDL2_MAIN_LIBRARIES} ) @@ -241,17 +274,49 @@ if(${SDL2_FOUND}) if(${CMAKE_SYSTEM} MATCHES Windows) set(win_extra_dll_list "") macro(getwinlib dllname defaultname) - find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}") - list(APPEND win_extra_dll_list ${SRB2_SDL2_DLL_${dllname}}) + if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES}) + if (${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles") + if(${SRB2_SYSTEM_BITS} EQUAL 64) + find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" + HINTS ${CMAKE_SOURCE_DIR}/Bin/Resources/x86_64 + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/x86_64-w64-mingw32/bin + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/x86_64-w64-mingw32/bin + ) + else() + find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" + HINTS ${CMAKE_SOURCE_DIR}/Bin/Resources/i686 + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/i686-w64-mingw32/bin + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/i686-w64-mingw32/bin + ) + endif() + else() + if(${SRB2_SYSTEM_BITS} EQUAL 64) + find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" + HINTS ${CMAKE_SOURCE_DIR}/Bin/Resources/x86_64 + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/lib/x64 + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/lib/x64 + ) + else() + find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}" + HINTS ${CMAKE_SOURCE_DIR}/Bin/Resources/i686 + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2/lib/x86 + HINTS ${CMAKE_SOURCE_DIR}/libs/SDL2_mixer/lib/x86 + ) + endif() + endif() + + list(APPEND win_extra_dll_list ${SRB2_SDL2_DLL_${dllname}}) + else() + find_library(SRB2_SDL2_DLL_${dllname} "${defaultname}") + list(APPEND win_extra_dll_list ${SRB2_SDL2_DLL_${dllname}}) + endif() endmacro() getwinlib(SDL2 "SDL2.dll") if(${SRB2_CONFIG_SDL2_USEMIXER}) getwinlib(SDL2_mixer "SDL2_mixer.dll") - getwinlib(libmikmod-2 "libmikmod-2.dll") getwinlib(libogg_0 "libogg-0.dll") getwinlib(libvorbis_0 "libvorbis-0.dll") getwinlib(libvorbisfile_3 "libvorbisfile-3.dll") - getwinlib(smpeg2 "smpeg2.dll") endif() if(${SRB2_CONFIG_HAVE_GME}) getwinlib(libgme "libgme.dll")