mirror of
https://github.com/glfw/glfw.git
synced 2025-10-02 21:00:57 +00:00
Modernize MSVC runtime library code
This commit is in response to this issue: https://github.com/glfw/glfw/issues/1783
This commit is contained in:
parent
0ef149c8f2
commit
5f2d8fb9a4
55
CMake/glfw_msvc_runtime_library.cmake
Normal file
55
CMake/glfw_msvc_runtime_library.cmake
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
if (DEFINED glfw_msvc_runtime_library_include_guard)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(glfw_msvc_runtime_library_include_guard ON)
|
||||||
|
|
||||||
|
include(CMakeDependentOption)
|
||||||
|
|
||||||
|
macro(glfw_msvc_runtime_library GLFW_STANDALONE)
|
||||||
|
# Prior to cmake 3.15 there wasn't a very good way to handle building against the static/dyanmic
|
||||||
|
# MSVC runtime libraries. As of cmake 3.15 this is no longer the case and clients can use the
|
||||||
|
# official cmake variable CMAKE_MSVC_RUNTIME_LIBRARY:
|
||||||
|
# https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html#variable:CMAKE_MSVC_RUNTIME_LIBRARY
|
||||||
|
#
|
||||||
|
# The new way has better support for multi-configuration generators and clang-cl. So if clients are interested in
|
||||||
|
# these features/functionality they should be using a newer version of cmake.
|
||||||
|
#
|
||||||
|
# However for backwards compatibility keep the old way.
|
||||||
|
if (${CMAKE_VERSION} VERSION_LESS "3.15")
|
||||||
|
cmake_dependent_option(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC runtime library DLL" ON "MSVC" OFF)
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------
|
||||||
|
# Set compiler specific flags
|
||||||
|
#--------------------------------------------------------------------
|
||||||
|
if (MSVC)
|
||||||
|
if (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
|
||||||
|
foreach (flag CMAKE_C_FLAGS
|
||||||
|
CMAKE_C_FLAGS_DEBUG
|
||||||
|
CMAKE_C_FLAGS_RELEASE
|
||||||
|
CMAKE_C_FLAGS_MINSIZEREL
|
||||||
|
CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||||
|
|
||||||
|
if (${flag} MATCHES "/MD")
|
||||||
|
string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}")
|
||||||
|
endif()
|
||||||
|
if (${flag} MATCHES "/MDd")
|
||||||
|
string(REGEX REPLACE "/MDd" "/MTd" ${flag} "${${flag}}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# If building GLFW standalone just use the static libraries.
|
||||||
|
# It simplifies working/deploying on test machines.
|
||||||
|
if (${GLFW_STANDALONE})
|
||||||
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||||
|
else()
|
||||||
|
# Otherwise the client should specify this critical build variable.
|
||||||
|
# When compiling for the WIN32 platform gives clients a helpful warning about what they should do.
|
||||||
|
if (NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY AND WIN32)
|
||||||
|
message(AUTHOR_WARNING "GLFW: User has not defined CMAKE_MSVC_RUNTIME_LIBRARY.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endmacro()
|
@ -1,5 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.1...3.17 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.1...3.17 FATAL_ERROR)
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Cmake/")
|
||||||
|
|
||||||
project(GLFW VERSION 3.4.0 LANGUAGES C)
|
project(GLFW VERSION 3.4.0 LANGUAGES C)
|
||||||
|
|
||||||
set(CMAKE_LEGACY_CYGWIN_WIN32 OFF)
|
set(CMAKE_LEGACY_CYGWIN_WIN32 OFF)
|
||||||
@ -31,6 +33,7 @@ option(GLFW_VULKAN_STATIC "Assume the Vulkan loader is linked with the applicati
|
|||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
include(CMakeDependentOption)
|
include(CMakeDependentOption)
|
||||||
|
include(glfw_msvc_runtime_library)
|
||||||
|
|
||||||
cmake_dependent_option(GLFW_USE_OSMESA "Use OSMesa for offscreen context creation" OFF
|
cmake_dependent_option(GLFW_USE_OSMESA "Use OSMesa for offscreen context creation" OFF
|
||||||
"UNIX" OFF)
|
"UNIX" OFF)
|
||||||
@ -38,8 +41,8 @@ cmake_dependent_option(GLFW_USE_HYBRID_HPG "Force use of high-performance GPU on
|
|||||||
"WIN32" OFF)
|
"WIN32" OFF)
|
||||||
cmake_dependent_option(GLFW_USE_WAYLAND "Use Wayland for window creation" OFF
|
cmake_dependent_option(GLFW_USE_WAYLAND "Use Wayland for window creation" OFF
|
||||||
"UNIX;NOT APPLE" OFF)
|
"UNIX;NOT APPLE" OFF)
|
||||||
cmake_dependent_option(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC runtime library DLL" ON
|
|
||||||
"MSVC" OFF)
|
glfw_msvc_runtime_library(${GLFW_STANDALONE})
|
||||||
|
|
||||||
if (BUILD_SHARED_LIBS AND UNIX)
|
if (BUILD_SHARED_LIBS AND UNIX)
|
||||||
# On Unix-like systems, shared libraries can use the soname system.
|
# On Unix-like systems, shared libraries can use the soname system.
|
||||||
@ -66,28 +69,6 @@ if (GLFW_BUILD_DOCS)
|
|||||||
find_package(Doxygen)
|
find_package(Doxygen)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
|
||||||
# Set compiler specific flags
|
|
||||||
#--------------------------------------------------------------------
|
|
||||||
if (MSVC)
|
|
||||||
if (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
|
|
||||||
foreach (flag CMAKE_C_FLAGS
|
|
||||||
CMAKE_C_FLAGS_DEBUG
|
|
||||||
CMAKE_C_FLAGS_RELEASE
|
|
||||||
CMAKE_C_FLAGS_MINSIZEREL
|
|
||||||
CMAKE_C_FLAGS_RELWITHDEBINFO)
|
|
||||||
|
|
||||||
if (${flag} MATCHES "/MD")
|
|
||||||
string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}")
|
|
||||||
endif()
|
|
||||||
if (${flag} MATCHES "/MDd")
|
|
||||||
string(REGEX REPLACE "/MDd" "/MTd" ${flag} "${${flag}}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
# Detect and select backend APIs
|
# Detect and select backend APIs
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
|
@ -233,7 +233,9 @@ directly with the application.
|
|||||||
@anchor USE_MSVC_RUNTIME_LIBRARY_DLL
|
@anchor USE_MSVC_RUNTIME_LIBRARY_DLL
|
||||||
__USE_MSVC_RUNTIME_LIBRARY_DLL__ determines whether to use the DLL version or the
|
__USE_MSVC_RUNTIME_LIBRARY_DLL__ determines whether to use the DLL version or the
|
||||||
static library version of the Visual C++ runtime library. If set to `ON`, the
|
static library version of the Visual C++ runtime library. If set to `ON`, the
|
||||||
DLL version of the Visual C++ library is used.
|
DLL version of the Visual C++ library is used. This variable exists for cmake users
|
||||||
|
whose version of cmake is less than 3.15 where this issue has been solved in a standard
|
||||||
|
way, see the official cmake docs on 'CMAKE_MSVC_RUNTIME_LIBRARY'.
|
||||||
|
|
||||||
@anchor GLFW_USE_HYBRID_HPG
|
@anchor GLFW_USE_HYBRID_HPG
|
||||||
__GLFW_USE_HYBRID_HPG__ determines whether to export the `NvOptimusEnablement` and
|
__GLFW_USE_HYBRID_HPG__ determines whether to export the `NvOptimusEnablement` and
|
||||||
|
Loading…
Reference in New Issue
Block a user