mirror of
https://github.com/gwm17/glfw.git
synced 2024-11-23 02:38:52 -05:00
Add override variable for CMake library type
This adds the GLFW_LIBRARY_TYPE CMake cache variable, which allows users and higher-level projects to set what type of library GLFW is built as. When not empty, this value overrides the standard BUILD_SHARED_LIBS option for GLFW while still allowing it to control the type of other libraries in a larger project. This also allows building GLFW as an object library without adding dummy source files (as required by Xcode) or producing unused library binaries. Projects using CMake 3.12 or later can link the resulting GLFW object library normally using target_link_libraries. Fixes #279. Related to #1307. Closes #1497. Closes #1574. Closes #1928.
This commit is contained in:
parent
dffe203c17
commit
d83849792b
|
@ -41,7 +41,20 @@ cmake_dependent_option(GLFW_USE_WAYLAND "Use Wayland for window creation" OFF
|
||||||
cmake_dependent_option(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC runtime library DLL" ON
|
cmake_dependent_option(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC runtime library DLL" ON
|
||||||
"MSVC" OFF)
|
"MSVC" OFF)
|
||||||
|
|
||||||
if (BUILD_SHARED_LIBS AND UNIX)
|
set(GLFW_LIBRARY_TYPE "${GLFW_LIBRARY_TYPE}" CACHE STRING
|
||||||
|
"Library type override for GLFW (SHARED, STATIC, OBJECT, or empty to follow BUILD_SHARED_LIBS)")
|
||||||
|
|
||||||
|
if (GLFW_LIBRARY_TYPE)
|
||||||
|
if (GLFW_LIBRARY_TYPE STREQUAL "SHARED")
|
||||||
|
set(GLFW_BUILD_SHARED_LIBRARY TRUE)
|
||||||
|
else()
|
||||||
|
set(GLFW_BUILD_SHARED_LIBRARY FALSE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(GLFW_BUILD_SHARED_LIBRARY ${BUILD_SHARED_LIBS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (UNIX AND GLFW_BUILD_SHARED_LIBRARY)
|
||||||
# On Unix-like systems, shared libraries can use the soname system.
|
# On Unix-like systems, shared libraries can use the soname system.
|
||||||
set(GLFW_LIB_NAME glfw)
|
set(GLFW_LIB_NAME glfw)
|
||||||
else()
|
else()
|
||||||
|
@ -49,7 +62,7 @@ else()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (GLFW_VULKAN_STATIC)
|
if (GLFW_VULKAN_STATIC)
|
||||||
if (BUILD_SHARED_LIBS)
|
if (GLFW_BUILD_SHARED_LIBRARY)
|
||||||
# If you absolutely must do this, remove this line and add the Vulkan
|
# If you absolutely must do this, remove this line and add the Vulkan
|
||||||
# loader static library via the CMAKE_SHARED_LINKER_FLAGS
|
# loader static library via the CMAKE_SHARED_LINKER_FLAGS
|
||||||
message(FATAL_ERROR "You are trying to link the Vulkan loader static library into the GLFW shared library")
|
message(FATAL_ERROR "You are trying to link the Vulkan loader static library into the GLFW shared library")
|
||||||
|
|
|
@ -129,6 +129,8 @@ information on what to include when reporting a bug.
|
||||||
values to select ANGLE backend (#1380)
|
values to select ANGLE backend (#1380)
|
||||||
- Added `GLFW_X11_XCB_VULKAN_SURFACE` init hint for selecting X11 Vulkan
|
- Added `GLFW_X11_XCB_VULKAN_SURFACE` init hint for selecting X11 Vulkan
|
||||||
surface extension (#1793)
|
surface extension (#1793)
|
||||||
|
- Added `GLFW_LIBRARY_TYPE` CMake variable for overriding the library type
|
||||||
|
(#279,#1307,#1497,#1574,#1928)
|
||||||
- Made joystick subsystem initialize at first use (#1284,#1646)
|
- Made joystick subsystem initialize at first use (#1284,#1646)
|
||||||
- Made `GLFW_DOUBLEBUFFER` a read-only window attribute
|
- Made `GLFW_DOUBLEBUFFER` a read-only window attribute
|
||||||
- Updated the minimum required CMake version to 3.1
|
- Updated the minimum required CMake version to 3.1
|
||||||
|
|
|
@ -239,9 +239,18 @@ cmake -S path/to/glfw -B path/to/build -D BUILD_SHARED_LIBS=ON
|
||||||
@subsection compile_options_shared Shared CMake options
|
@subsection compile_options_shared Shared CMake options
|
||||||
|
|
||||||
@anchor BUILD_SHARED_LIBS
|
@anchor BUILD_SHARED_LIBS
|
||||||
__BUILD_SHARED_LIBS__ determines whether GLFW is built as a static
|
__BUILD_SHARED_LIBS__ determines whether GLFW is built as a static library or as
|
||||||
library or as a DLL / shared library / dynamic library. This is disabled by
|
a DLL / shared library / dynamic library. This is disabled by default,
|
||||||
default, producing a static GLFW library.
|
producing a static GLFW library. This variable has no `GLFW_` prefix because it
|
||||||
|
is defined by CMake. If you want to change the library only for GLFW when it is
|
||||||
|
part of a larger project, see @ref GLFW_LIBRARY_TYPE.
|
||||||
|
|
||||||
|
@anchor GLFW_LIBRARY_TYPE
|
||||||
|
__GLFW_LIBRARY_TYPE__ allows you to override @ref BUILD_SHARED_LIBS only for
|
||||||
|
GLFW, without affecting other libraries in a larger project. When set, the
|
||||||
|
value of this option must be a valid CMake library type. Set it to `STATIC` to
|
||||||
|
build GLFW as a static library, `SHARED` to build it as a shared library
|
||||||
|
/ dynamic library / DLL, or `OBJECT` to make GLFW a CMake object library.
|
||||||
|
|
||||||
@anchor GLFW_BUILD_EXAMPLES
|
@anchor GLFW_BUILD_EXAMPLES
|
||||||
__GLFW_BUILD_EXAMPLES__ determines whether the GLFW examples are built
|
__GLFW_BUILD_EXAMPLES__ determines whether the GLFW examples are built
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
add_library(glfw "${GLFW_SOURCE_DIR}/include/GLFW/glfw3.h"
|
add_library(glfw ${GLFW_LIBRARY_TYPE}
|
||||||
|
"${GLFW_SOURCE_DIR}/include/GLFW/glfw3.h"
|
||||||
"${GLFW_SOURCE_DIR}/include/GLFW/glfw3native.h"
|
"${GLFW_SOURCE_DIR}/include/GLFW/glfw3native.h"
|
||||||
internal.h mappings.h context.c init.c input.c monitor.c
|
internal.h mappings.h context.c init.c input.c monitor.c
|
||||||
vulkan.c window.c)
|
vulkan.c window.c)
|
||||||
|
@ -96,7 +97,7 @@ if (_GLFW_WAYLAND)
|
||||||
"${GLFW_BINARY_DIR}/src/wayland-idle-inhibit-unstable-v1-client-protocol")
|
"${GLFW_BINARY_DIR}/src/wayland-idle-inhibit-unstable-v1-client-protocol")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32 AND BUILD_SHARED_LIBS)
|
if (WIN32 AND GLFW_BUILD_SHARED_LIBRARY)
|
||||||
configure_file(glfw.rc.in glfw.rc @ONLY)
|
configure_file(glfw.rc.in glfw.rc @ONLY)
|
||||||
target_sources(glfw PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/glfw.rc")
|
target_sources(glfw PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/glfw.rc")
|
||||||
endif()
|
endif()
|
||||||
|
@ -201,7 +202,7 @@ if (_GLFW_X11 OR _GLFW_WAYLAND OR _GLFW_OSMESA)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (BUILD_SHARED_LIBS)
|
if (GLFW_BUILD_SHARED_LIBRARY)
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
# Remove the dependency on the shared version of libgcc
|
# Remove the dependency on the shared version of libgcc
|
||||||
|
|
Loading…
Reference in New Issue
Block a user