2015-11-19 02:34:38 +00:00
|
|
|
# This module defines
|
|
|
|
# SDL2_LIBRARY, the name of the library to link against
|
|
|
|
# SDL2_FOUND, if false, do not try to link to SDL2
|
|
|
|
# SDL2_INCLUDE_DIR, where to find SDL.h
|
|
|
|
#
|
2016-10-26 23:58:21 +00:00
|
|
|
# If you have pkg-config, these extra variables are also defined:
|
|
|
|
# SDL2_DEFINITIONS, extra CFLAGS
|
|
|
|
# SDL2_EXTRA_LIBS, extra link libs
|
|
|
|
# SDL2_LINKER_FLAGS, extra link flags
|
|
|
|
#
|
|
|
|
# The latter two are automatically added to SDL2_LIBRARY
|
|
|
|
#
|
|
|
|
# To use them, add code such as:
|
|
|
|
#
|
|
|
|
# # SET(SDL2_STATIC ON) # if you want to link SDL2 statically
|
|
|
|
# FIND_PACKAGE(SDL2 REQUIRED)
|
|
|
|
# ADD_DEFINITIONS(${SDL2_DEFINITIONS})
|
|
|
|
# TARGET_LINK_LIBRARIES(your-executable-target ${SDL2_LIBRARY} ...)
|
|
|
|
#
|
2015-11-19 02:34:38 +00:00
|
|
|
# This module responds to the the flag:
|
|
|
|
# SDL2_BUILDING_LIBRARY
|
|
|
|
# If this is defined, then no SDL2main will be linked in because
|
|
|
|
# only applications need main().
|
|
|
|
# Otherwise, it is assumed you are building an application and this
|
|
|
|
# module will attempt to locate and set the the proper link flags
|
|
|
|
# as part of the returned SDL2_LIBRARY variable.
|
|
|
|
#
|
2016-10-26 23:58:21 +00:00
|
|
|
# If you want to link SDL2 statically, set SDL2_STATIC to ON.
|
|
|
|
#
|
2015-11-19 02:34:38 +00:00
|
|
|
# Don't forget to include SDLmain.h and SDLmain.m your project for the
|
|
|
|
# OS X framework based version. (Other versions link to -lSDL2main which
|
|
|
|
# this module will try to find on your behalf.) Also for OS X, this
|
|
|
|
# module will automatically add the -framework Cocoa on your behalf.
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
|
|
|
|
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
|
|
|
|
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
|
|
|
|
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
|
|
|
|
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
|
|
|
|
# as appropriate. These values are used to generate the final SDL2_LIBRARY
|
|
|
|
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# $SDL2DIR is an environment variable that would
|
|
|
|
# correspond to the ./configure --prefix=$SDL2DIR
|
|
|
|
# used in building SDL2.
|
|
|
|
# l.e.galup 9-20-02
|
|
|
|
#
|
|
|
|
# Modified by Eric Wing.
|
|
|
|
# Added code to assist with automated building by using environmental variables
|
|
|
|
# and providing a more controlled/consistent search behavior.
|
|
|
|
# Added new modifications to recognize OS X frameworks and
|
|
|
|
# additional Unix paths (FreeBSD, etc).
|
|
|
|
# Also corrected the header search path to follow "proper" SDL guidelines.
|
|
|
|
# Added a search for SDL2main which is needed by some platforms.
|
|
|
|
# Added a search for threads which is needed by some platforms.
|
|
|
|
# Added needed compile switches for MinGW.
|
|
|
|
#
|
|
|
|
# On OSX, this will prefer the Framework version (if found) over others.
|
|
|
|
# People will have to manually change the cache values of
|
|
|
|
# SDL2_LIBRARY to override this selection or set the CMake environment
|
|
|
|
# CMAKE_INCLUDE_PATH to modify the search paths.
|
|
|
|
#
|
2016-10-26 23:58:21 +00:00
|
|
|
# Note that the header path has changed from SDL3/SDL.h to just SDL.h
|
2015-11-19 02:34:38 +00:00
|
|
|
# This needed to change because "proper" SDL convention
|
|
|
|
# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
|
|
|
|
# reasons because not all systems place things in SDL2/ (see FreeBSD).
|
|
|
|
|
|
|
|
#=============================================================================
|
|
|
|
# Copyright 2003-2009 Kitware, Inc.
|
|
|
|
#
|
|
|
|
# Distributed under the OSI-approved BSD License (the "License");
|
|
|
|
# see accompanying file Copyright.txt for details.
|
|
|
|
#
|
|
|
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
|
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
# See the License for more information.
|
|
|
|
#=============================================================================
|
|
|
|
# (To distribute this file outside of CMake, substitute the full
|
|
|
|
# License text for the above reference.)
|
|
|
|
|
|
|
|
SET(SDL2_SEARCH_PATHS
|
|
|
|
~/Library/Frameworks
|
|
|
|
/Library/Frameworks
|
2016-12-11 07:28:28 +00:00
|
|
|
/usr/local # Mac Homebrew and local installs
|
2015-11-19 02:34:38 +00:00
|
|
|
/usr
|
|
|
|
/sw # Fink
|
2016-12-11 07:28:28 +00:00
|
|
|
/opt/local # MacPorts
|
|
|
|
/opt/csw # OpenCSW (Solaris)
|
2015-11-19 02:34:38 +00:00
|
|
|
/opt
|
2017-02-11 15:48:11 +00:00
|
|
|
${SDL2_PATH}/include
|
|
|
|
${SDL2_PATH}/lib
|
2015-11-19 02:34:38 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
FIND_PATH(SDL2_INCLUDE_DIR SDL.h
|
2016-12-11 07:28:28 +00:00
|
|
|
HINTS $ENV{SDL2DIR}
|
|
|
|
PATH_SUFFIXES SDL2
|
2015-11-19 02:34:38 +00:00
|
|
|
PATHS ${SDL2_SEARCH_PATHS}
|
|
|
|
)
|
|
|
|
|
2016-10-26 23:58:21 +00:00
|
|
|
SET(CURRENT_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
|
|
|
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
if(SDL2_STATIC)
|
2022-11-28 18:23:33 +00:00
|
|
|
if(MSVC)
|
|
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib)
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
else()
|
|
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2022-11-27 19:31:52 +00:00
|
|
|
unset(lib_suffixes)
|
2022-10-09 04:00:26 +00:00
|
|
|
if(MSVC)
|
|
|
|
if(VCPKG_TARGET_TRIPLET MATCHES "-static$")
|
2022-11-27 19:31:52 +00:00
|
|
|
list(APPEND lib_suffixes -static)
|
2022-10-09 04:00:26 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$")
|
2022-11-27 19:31:52 +00:00
|
|
|
list(APPEND lib_suffixes d)
|
2022-10-09 04:00:26 +00:00
|
|
|
endif()
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
endif()
|
2016-10-26 23:58:21 +00:00
|
|
|
|
2022-11-27 19:31:52 +00:00
|
|
|
# Calculate combination of possible name+suffixes.
|
|
|
|
unset(names)
|
|
|
|
set(lib_name SDL2)
|
|
|
|
set(current ${lib_name})
|
|
|
|
foreach(suffix ${lib_suffixes})
|
|
|
|
list(APPEND names "${current}${suffix}" "${lib_name}${suffix}")
|
|
|
|
set(current "${current}${suffix}")
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
# Fallback to name by itself.
|
|
|
|
list(APPEND names ${lib_name})
|
|
|
|
|
2015-11-19 02:34:38 +00:00
|
|
|
FIND_LIBRARY(SDL2_LIBRARY_TEMP
|
2022-11-27 19:31:52 +00:00
|
|
|
NAMES ${names}
|
|
|
|
HINTS $ENV{SDL2DIR}
|
|
|
|
PATH_SUFFIXES lib64 lib lib/x64 lib/x86
|
|
|
|
PATHS ${SDL2_SEARCH_PATHS}
|
2015-11-19 02:34:38 +00:00
|
|
|
)
|
|
|
|
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
if(NOT (SDL2_BUILDING_LIBRARY OR ${SDL2_INCLUDE_DIR} MATCHES ".framework"))
|
|
|
|
# Non-OS X framework versions expect you to also dynamically link to
|
|
|
|
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
|
|
|
|
# seem to provide SDL2main for compatibility even though they don't
|
|
|
|
# necessarily need it.
|
|
|
|
find_library(SDL2MAIN_LIBRARY
|
|
|
|
NAMES SDL2main${lib_suffix}
|
|
|
|
HINTS $ENV{SDL2DIR}
|
|
|
|
PATH_SUFFIXES lib64 lib lib/x64 lib/x86
|
|
|
|
PATHS ${SDL2_SEARCH_PATHS}
|
|
|
|
)
|
|
|
|
endif()
|
2015-11-19 02:34:38 +00:00
|
|
|
|
2016-10-26 23:58:21 +00:00
|
|
|
SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CURRENT_FIND_LIBRARY_SUFFIXES})
|
|
|
|
UNSET(CURRENT_FIND_LIBRARY_SUFFIXES)
|
|
|
|
|
2015-11-19 02:34:38 +00:00
|
|
|
# SDL2 may require threads on your system.
|
|
|
|
# The Apple build may not need an explicit flag because one of the
|
|
|
|
# frameworks may already provide it.
|
|
|
|
# But for non-OSX systems, I will use the CMake Threads package.
|
|
|
|
IF(NOT APPLE)
|
|
|
|
FIND_PACKAGE(Threads)
|
|
|
|
ENDIF(NOT APPLE)
|
|
|
|
|
2017-01-25 18:53:05 +00:00
|
|
|
# MinGW needs an additional link flag, -mwindows (to make a GUI app)
|
|
|
|
# but we only add it when not making a Debug build.
|
2016-10-26 23:58:21 +00:00
|
|
|
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows
|
2015-11-19 02:34:38 +00:00
|
|
|
IF(MINGW)
|
2017-01-25 18:53:05 +00:00
|
|
|
SET(MINGW32_LIBRARY -lmingw32 CACHE STRING "MinGW library")
|
|
|
|
|
2023-04-12 02:43:13 +00:00
|
|
|
if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$")
|
2017-01-25 18:53:05 +00:00
|
|
|
SET(MINGW32_LIBRARY ${MINGW32_LIBRARY} -mwindows)
|
|
|
|
ENDIF()
|
2015-11-19 02:34:38 +00:00
|
|
|
ENDIF(MINGW)
|
|
|
|
|
|
|
|
IF(SDL2_LIBRARY_TEMP)
|
|
|
|
# For SDL2main
|
2020-08-28 05:09:58 +00:00
|
|
|
if(SDL2MAIN_LIBRARY AND NOT WIN32)
|
cmake: Visual Studio support improvements.
Add support for vcpkg ffmpeg, this requires using someone's
FindFFmpeg.cmake instead of relying on pkg-config, since vcpkg does not
have pkg-config.
Do not use the ffmpeg from vcpkg on appveyor however, because that
pushes the build cache generation over the time limit for jobs.
Add secur32 and bcrypt to the list of ffmpeg libs on windows, these are
standard windows libraries.
Change some code in ffmpeg.cpp to remove C-style casts of struct
initializers, which are illegal in MSVC.
Add the INT64_C and UINT64_C macros missing in MSVC's stdint.h (if not
defined) to ffmpeg.h before the ffmpeg headers are included, because
they rely on them.
Rewrite the wxWidgets finding code for the vcpkg wxWidgets to be nicer
and work correctly for debug and static builds.
Remove all /W* and /w* warnings options from cmake compiler flags, and
replace them with /W4 for debug builds, and /w (no warnings) for release
modes.
When building a static binary, remove all /MD* flags from cmake compiler
flags, and use /MT for static release builds and /MTd for static debug
builds.
Improve the vcpkg toolchain wrapper to only rebuild the vcpkg binary if
there were git updates.
Redo the handling of SDL2 and SDL_main. Only link SDL2Main to the SDL
binary and don't use the definitions.
Update CMakeSettings.json to use Ninja and include static
configurations.
Use CMAKE_PROJECT_DIR instead of CMAKE_SOURCE_DIR to determine the vcpkg
root, as CMAKE_SOURCE_DIR is sometimes set incorrectly in the 2017 GUI.
Add /nodefaultlib:libcmt to the debug build link flags, as in debug
builds libcmtd is used and libcmt should not be.
Add /subsystem:console to debug build link flags to produce a windows
console app for debug builds, like we do for mingw builds. To do this,
define a WIN32_CONSOLE_APP macro and if set, define a main() that calls
WinMain().
Call wxMesdsageOutput::Set() in OnInit with an instance of
wxMessageOutputStderr for windows debug builds to make sure the --help
text etc. goes to the console instead of a popup box.
Update the Visual Studio related text in README.md.
Fix dynamic debug builds by linking to the debug version of SDL2 and
copying the debug version of the dll to the build dir.
Fix issue in MainFrame::BindAppIcon with the function we are using not
being found in a Windows DLL in debug builds by using
wxDynamicLibrary::GetSymboolAorW() instead of GetSymbol().
Enable LTO for MSVC in Release modes, if the option is set.
Change appveyor config to use an 8 item build matrix of
x64/x86 / Release/Debug / Static/Dynamic. And test the binary in debug
modes by running --help.
When copying the wxrc.exe out of the build tree, copy both the release
and debug versions, this is so that appveyor caching of vcpkg works,
since the build trees are not cached.
Add some necessary win32 libraries to the SDL binary. And enable
building it on appveyor.
Fix #465.
Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2019-12-10 11:13:58 +00:00
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
|
|
|
|
endif()
|
2015-11-19 02:34:38 +00:00
|
|
|
|
|
|
|
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
|
|
|
|
# CMake doesn't display the -framework Cocoa string in the UI even
|
|
|
|
# though it actually is there if I modify a pre-used variable.
|
|
|
|
# I think it has something to do with the CACHE STRING.
|
|
|
|
# So I use a temporary variable until the end so I can set the
|
|
|
|
# "real" variable in one-shot.
|
|
|
|
IF(APPLE)
|
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
|
|
|
|
ENDIF(APPLE)
|
|
|
|
|
|
|
|
# For threads, as mentioned Apple doesn't need this.
|
|
|
|
# In fact, there seems to be a problem if I used the Threads package
|
|
|
|
# and try using this line, so I'm just skipping it entirely for OS X.
|
|
|
|
IF(NOT APPLE)
|
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
ENDIF(NOT APPLE)
|
|
|
|
|
|
|
|
# For MinGW library
|
|
|
|
IF(MINGW)
|
2016-11-20 19:11:52 +00:00
|
|
|
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP} -lversion -limm32)
|
2015-11-19 02:34:38 +00:00
|
|
|
ENDIF(MINGW)
|
|
|
|
|
2024-01-02 02:56:29 +00:00
|
|
|
# Add libsamplerate with vcpkg
|
|
|
|
if(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg")
|
|
|
|
if(WIN32)
|
|
|
|
unset(arch_suffix)
|
|
|
|
unset(path_prefix)
|
|
|
|
if(VCPKG_TARGET_TRIPLET MATCHES -static)
|
|
|
|
set(arch_suffix -static)
|
|
|
|
endif()
|
|
|
|
if(CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$")
|
|
|
|
set(path_prefix debug)
|
|
|
|
endif()
|
|
|
|
set(installed_prefix ${_VCPKG_INSTALLED_DIR}/${WINARCH}-windows${arch_suffix}/${path_prefix})
|
|
|
|
|
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${installed_prefix}/lib/samplerate.lib)
|
|
|
|
else()
|
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} -lsamplerate)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2016-10-26 23:58:21 +00:00
|
|
|
# Add some stuff from pkg-config, if available
|
|
|
|
IF(NOT PKG_CONFIG_EXECUTABLE)
|
|
|
|
FIND_PACKAGE(PkgConfig QUIET)
|
|
|
|
ENDIF(NOT PKG_CONFIG_EXECUTABLE)
|
|
|
|
|
|
|
|
IF(PKG_CONFIG_EXECUTABLE)
|
|
|
|
# get any definitions
|
2016-12-11 07:28:28 +00:00
|
|
|
EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --cflags-only-other sdl2 OUTPUT_VARIABLE SDL2_DEFINITIONS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
2016-10-26 23:58:21 +00:00
|
|
|
|
|
|
|
SET(SDL2_DEFINITIONS ${SDL2_DEFINITIONS} CACHE STRING "Extra CFLAGS for SDL2 from pkg-config")
|
|
|
|
|
|
|
|
# get any extra stuff needed for linking
|
|
|
|
IF(NOT SDL2_STATIC)
|
2016-12-11 07:28:28 +00:00
|
|
|
EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --libs-only-other sdl2 OUTPUT_VARIABLE SDL2_LINKER_FLAGS_RAW ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
2016-10-26 23:58:21 +00:00
|
|
|
|
2016-12-11 07:28:28 +00:00
|
|
|
EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --libs-only-l sdl2 OUTPUT_VARIABLE SDL2_EXTRA_LIBS_RAW ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
2016-10-26 23:58:21 +00:00
|
|
|
ELSE(NOT SDL2_STATIC)
|
2016-12-11 07:28:28 +00:00
|
|
|
EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --static --libs-only-other sdl2 OUTPUT_VARIABLE SDL2_LINKER_FLAGS_RAW ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --static --libs-only-l sdl2 OUTPUT_VARIABLE SDL2_EXTRA_LIBS_RAW ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
2016-10-26 23:58:21 +00:00
|
|
|
ENDIF(NOT SDL2_STATIC)
|
|
|
|
|
|
|
|
STRING(REGEX REPLACE "[^ ]+SDL2[^ ]*" "" SDL2_EXTRA_LIBS_RAW2 "${SDL2_EXTRA_LIBS_RAW}")
|
|
|
|
STRING(REGEX REPLACE " +" ";" SDL2_EXTRA_LIBS "${SDL2_EXTRA_LIBS_RAW2}")
|
|
|
|
STRING(REGEX REPLACE " +" ";" SDL2_LINKER_FLAGS "${SDL2_LINKER_FLAGS_RAW}")
|
|
|
|
|
|
|
|
SET(SDL2_LINKER_FLAGS ${SDL2_LINKER_FLAGS} CACHE STRING "Linker flags for linking SDL2")
|
|
|
|
SET(SDL2_EXTRA_LIBS ${SDL2_EXTRA_LIBS} CACHE STRING "Extra libraries for linking SDL2")
|
|
|
|
|
|
|
|
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${SDL2_EXTRA_LIBS} ${SDL2_LINKER_FLAGS})
|
|
|
|
ENDIF(PKG_CONFIG_EXECUTABLE)
|
|
|
|
|
2015-11-19 02:34:38 +00:00
|
|
|
# Set the final string here so the GUI reflects the final state.
|
|
|
|
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
|
|
|
|
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
|
|
|
|
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
|
|
|
|
ENDIF(SDL2_LIBRARY_TEMP)
|
|
|
|
|
|
|
|
INCLUDE(FindPackageHandleStandardArgs)
|
|
|
|
|
|
|
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
|