cmake: SDL3-shared target will always be a shared target
parent
6ae1578691
commit
dc138ee3d4
|
@ -33,6 +33,8 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
vmshell cmake -S src -B build -GNinja \
|
vmshell cmake -S src -B build -GNinja \
|
||||||
-Wdeprecated -Wdev -Werror \
|
-Wdeprecated -Wdev -Werror \
|
||||||
|
-DSDL_SHARED=ON \
|
||||||
|
-DSDL_STATIC=ON \
|
||||||
-DSDL_TESTS=ON \
|
-DSDL_TESTS=ON \
|
||||||
-DSDL_WERROR=ON \
|
-DSDL_WERROR=ON \
|
||||||
-DSDL_INSTALL_TESTS=ON \
|
-DSDL_INSTALL_TESTS=ON \
|
||||||
|
|
|
@ -3166,15 +3166,16 @@ else()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SDL_SHARED)
|
if(SDL_SHARED)
|
||||||
add_library(SDL3 SHARED ${SOURCE_FILES} ${VERSION_SOURCES})
|
add_library(SDL3-shared SHARED ${SOURCE_FILES} ${VERSION_SOURCES})
|
||||||
add_library(SDL3::SDL3 ALIAS SDL3)
|
add_library(SDL3::SDL3-shared ALIAS SDL3-shared)
|
||||||
set_target_properties(SDL3 PROPERTIES
|
set_target_properties(SDL3-shared PROPERTIES
|
||||||
|
OUTPUT_NAME "SDL3"
|
||||||
POSITION_INDEPENDENT_CODE TRUE
|
POSITION_INDEPENDENT_CODE TRUE
|
||||||
LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym"
|
LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym"
|
||||||
INTERFACE_LINK_DEPENDS "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym>"
|
INTERFACE_LINK_DEPENDS "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/dynapi/SDL_dynapi.sym>"
|
||||||
)
|
)
|
||||||
if(HAVE_GCC_FVISIBILITY)
|
if(HAVE_GCC_FVISIBILITY)
|
||||||
set_target_properties(SDL3 PROPERTIES
|
set_target_properties(SDL3-shared PROPERTIES
|
||||||
C_VISIBILITY_PRESET "hidden"
|
C_VISIBILITY_PRESET "hidden"
|
||||||
CXX_VISIBILITY_PRESET "hidden"
|
CXX_VISIBILITY_PRESET "hidden"
|
||||||
OBJC_VISIBILITY_PRESET "hidden"
|
OBJC_VISIBILITY_PRESET "hidden"
|
||||||
|
@ -3183,16 +3184,16 @@ if(SDL_SHARED)
|
||||||
if(NOT SDL_LIBC)
|
if(NOT SDL_LIBC)
|
||||||
if(MSVC AND SDL_CPU_X86)
|
if(MSVC AND SDL_CPU_X86)
|
||||||
# FIXME: should be added for all architectures (missing symbols for ARM)
|
# FIXME: should be added for all architectures (missing symbols for ARM)
|
||||||
target_link_libraries(SDL3 PRIVATE "-nodefaultlib:MSVCRT")
|
target_link_libraries(SDL3-shared PRIVATE "-nodefaultlib:MSVCRT")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set_target_properties(SDL3 PROPERTIES
|
set_target_properties(SDL3-shared PROPERTIES
|
||||||
MACOSX_RPATH TRUE
|
MACOSX_RPATH TRUE
|
||||||
FRAMEWORK "${SDL_FRAMEWORK}"
|
FRAMEWORK "${SDL_FRAMEWORK}"
|
||||||
)
|
)
|
||||||
if(SDL_FRAMEWORK)
|
if(SDL_FRAMEWORK)
|
||||||
set_target_properties(SDL3 PROPERTIES
|
set_target_properties(SDL3-shared PROPERTIES
|
||||||
PUBLIC_HEADER "${SDL3_INCLUDE_FILES}"
|
PUBLIC_HEADER "${SDL3_INCLUDE_FILES}"
|
||||||
FRAMEWORK_VERSION "${SDL_FRAMEWORK_VERSION}"
|
FRAMEWORK_VERSION "${SDL_FRAMEWORK_VERSION}"
|
||||||
MACOSX_FRAMEWORK_IDENTIFIER "org.libsdl.SDL3"
|
MACOSX_FRAMEWORK_IDENTIFIER "org.libsdl.SDL3"
|
||||||
|
@ -3200,18 +3201,18 @@ if(SDL_SHARED)
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
if(NOT CMAKE_VERSION VERSION_LESS "3.6")
|
if(NOT CMAKE_VERSION VERSION_LESS "3.6")
|
||||||
set_target_properties(SDL3 PROPERTIES
|
set_target_properties(SDL3-shared PROPERTIES
|
||||||
SOVERSION "${SDL_DYLIB_COMPAT_VERSION}" # SOVERSION corresponds to compatibility version
|
SOVERSION "${SDL_DYLIB_COMPAT_VERSION}" # SOVERSION corresponds to compatibility version
|
||||||
VERSION "${SDL_DYLIB_CURRENT_VERSION}" # VERSION corresponds to the current version
|
VERSION "${SDL_DYLIB_CURRENT_VERSION}" # VERSION corresponds to the current version
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
elseif(UNIX AND NOT ANDROID)
|
elseif(UNIX AND NOT ANDROID)
|
||||||
set_target_properties(SDL3 PROPERTIES
|
set_target_properties(SDL3-shared PROPERTIES
|
||||||
VERSION "${SDL_SO_VERSION}"
|
VERSION "${SDL_SO_VERSION}"
|
||||||
SOVERSION "${SDL_SO_VERSION_MAJOR}")
|
SOVERSION "${SDL_SO_VERSION_MAJOR}")
|
||||||
else()
|
else()
|
||||||
if(WINDOWS OR CYGWIN)
|
if(WINDOWS OR CYGWIN)
|
||||||
set_target_properties(SDL3 PROPERTIES
|
set_target_properties(SDL3-shared PROPERTIES
|
||||||
DEFINE_SYMBOL DLL_EXPORT)
|
DEFINE_SYMBOL DLL_EXPORT)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -3219,33 +3220,33 @@ if(SDL_SHARED)
|
||||||
if(MSVC AND NOT SDL_LIBC AND NOT MSVC_CLANG AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM")
|
if(MSVC AND NOT SDL_LIBC AND NOT MSVC_CLANG AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM")
|
||||||
# Don't try to link with the default set of libraries.
|
# Don't try to link with the default set of libraries.
|
||||||
if(NOT WINDOWS_STORE)
|
if(NOT WINDOWS_STORE)
|
||||||
set_target_properties(SDL3 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB")
|
set_target_properties(SDL3-shared PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB")
|
||||||
set_target_properties(SDL3 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB")
|
set_target_properties(SDL3-shared PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB")
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(SDL3 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB")
|
set_target_properties(SDL3-shared PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB")
|
||||||
endif()
|
endif()
|
||||||
# FIXME: if CMAKE_VERSION >= 3.13, use target_link_options for SDL_EXTRA_LDFLAGS
|
# FIXME: if CMAKE_VERSION >= 3.13, use target_link_options for SDL_EXTRA_LDFLAGS
|
||||||
target_link_libraries(SDL3 PRIVATE ${SDL_EXTRA_LIBS} ${SDL_EXTRA_LDFLAGS} ${SDL_CMAKE_DEPENDS})
|
target_link_libraries(SDL3-shared PRIVATE ${SDL_EXTRA_LIBS} ${SDL_EXTRA_LDFLAGS} ${SDL_CMAKE_DEPENDS})
|
||||||
target_include_directories(SDL3
|
target_include_directories(SDL3-shared
|
||||||
PRIVATE
|
PRIVATE
|
||||||
"$<BUILD_INTERFACE:${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>>"
|
"$<BUILD_INTERFACE:${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>>"
|
||||||
"$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/src>"
|
"$<BUILD_INTERFACE:${SDL3_SOURCE_DIR}/src>"
|
||||||
)
|
)
|
||||||
target_link_libraries(SDL3 PUBLIC $<TARGET_NAME:SDL3::Headers>)
|
target_link_libraries(SDL3-shared PUBLIC $<TARGET_NAME:SDL3::Headers>)
|
||||||
# This picks up all the compiler options and such we've accumulated up to here.
|
# This picks up all the compiler options and such we've accumulated up to here.
|
||||||
target_link_libraries(SDL3 PRIVATE $<${build_local_interface}:sdl-build-options>)
|
target_link_libraries(SDL3-shared PRIVATE $<${build_local_interface}:sdl-build-options>)
|
||||||
target_link_libraries(SDL3 PRIVATE $<${build_local_interface}:sdl-shared-build-options>)
|
target_link_libraries(SDL3-shared PRIVATE $<${build_local_interface}:sdl-shared-build-options>)
|
||||||
target_link_libraries(SDL3 PRIVATE $<${build_local_interface}:sdl-global-options>)
|
target_link_libraries(SDL3-shared PRIVATE $<${build_local_interface}:sdl-global-options>)
|
||||||
if(MINGW OR CYGWIN)
|
if(MINGW OR CYGWIN)
|
||||||
if(NOT CMAKE_VERSION VERSION_LESS "3.13")
|
if(NOT CMAKE_VERSION VERSION_LESS "3.13")
|
||||||
target_link_options(SDL3 PRIVATE -static-libgcc)
|
target_link_options(SDL3-shared PRIVATE -static-libgcc)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
# Use `Compatible Interface Properties` to allow consumers to enforce a shared/static library
|
# Use `Compatible Interface Properties` to allow consumers to enforce a shared/static library
|
||||||
set_property(TARGET SDL3 PROPERTY INTERFACE_SDL3_SHARED TRUE)
|
set_property(TARGET SDL3-shared PROPERTY INTERFACE_SDL3_SHARED TRUE)
|
||||||
set_property(TARGET SDL3 APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED)
|
set_property(TARGET SDL3-shared APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED)
|
||||||
if(NOT CMAKE_VERSION VERSION_LESS "3.16")
|
if(NOT CMAKE_VERSION VERSION_LESS "3.16")
|
||||||
target_precompile_headers(SDL3 PRIVATE "${PROJECT_SOURCE_DIR}/src/SDL_internal.h")
|
target_precompile_headers(SDL3-shared PRIVATE "${PROJECT_SOURCE_DIR}/src/SDL_internal.h")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -3300,8 +3301,6 @@ if(SDL_TEST)
|
||||||
add_library(SDL3_test STATIC ${TEST_SOURCES})
|
add_library(SDL3_test STATIC ${TEST_SOURCES})
|
||||||
add_library(SDL3::SDL3_test ALIAS SDL3_test)
|
add_library(SDL3::SDL3_test ALIAS SDL3_test)
|
||||||
target_link_libraries(SDL3_test PRIVATE $<${build_local_interface}:sdl-global-options>)
|
target_link_libraries(SDL3_test PRIVATE $<${build_local_interface}:sdl-global-options>)
|
||||||
set_target_properties(SDL3_test PROPERTIES
|
|
||||||
EXPORT_NAME SDL3_test)
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set_target_properties(SDL3_test PROPERTIES
|
set_target_properties(SDL3_test PROPERTIES
|
||||||
FRAMEWORK "${SDL_FRAMEWORK}"
|
FRAMEWORK "${SDL_FRAMEWORK}"
|
||||||
|
@ -3383,12 +3382,12 @@ else()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_VERSION VERSION_LESS "3.26")
|
if(CMAKE_VERSION VERSION_LESS "3.26")
|
||||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SDL3Targets.cmake" [[message(FATAL_ERROR "find_package(SDL3) using the SDL3 build directory not supported for CMake versions older then 3.26.")]])
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SDL3sharedTargets.cmake" [[message(FATAL_ERROR "find_package(SDL3) using the SDL3 build directory not supported for CMake versions older then 3.26.")]])
|
||||||
else()
|
else()
|
||||||
export(TARGETS SDL3_Headers NAMESPACE "SDL3::" FILE "SDL3headersTargets.cmake")
|
export(TARGETS SDL3_Headers NAMESPACE "SDL3::" FILE "SDL3headersTargets.cmake")
|
||||||
|
|
||||||
if(SDL_SHARED)
|
if(SDL_SHARED)
|
||||||
export(TARGETS SDL3 NAMESPACE "SDL3::" FILE "SDL3Targets.cmake")
|
export(TARGETS SDL3-shared NAMESPACE "SDL3::" FILE "SDL3sharedTargets.cmake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SDL_STATIC)
|
if(SDL_STATIC)
|
||||||
|
@ -3457,7 +3456,7 @@ if(NOT SDL_DISABLE_INSTALL)
|
||||||
install(TARGETS SDL3_Headers EXPORT SDL3headersTargets)
|
install(TARGETS SDL3_Headers EXPORT SDL3headersTargets)
|
||||||
|
|
||||||
if(SDL_SHARED)
|
if(SDL_SHARED)
|
||||||
install(TARGETS SDL3 EXPORT SDL3Targets
|
install(TARGETS SDL3-shared EXPORT SDL3sharedTargets
|
||||||
PUBLIC_HEADER DESTINATION "${SDL_INSTALL_HEADERSDIR}"
|
PUBLIC_HEADER DESTINATION "${SDL_INSTALL_HEADERSDIR}"
|
||||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||||
|
@ -3492,8 +3491,8 @@ if(NOT SDL_DISABLE_INSTALL)
|
||||||
)
|
)
|
||||||
|
|
||||||
if(SDL_SHARED)
|
if(SDL_SHARED)
|
||||||
install(EXPORT SDL3Targets
|
install(EXPORT SDL3sharedTargets
|
||||||
FILE "SDL3Targets.cmake"
|
FILE "SDL3sharedTargets.cmake"
|
||||||
NAMESPACE SDL3::
|
NAMESPACE SDL3::
|
||||||
DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}"
|
DESTINATION "${SDL_SDL_INSTALL_CMAKEDIR}"
|
||||||
)
|
)
|
||||||
|
@ -3575,6 +3574,8 @@ endif()
|
||||||
set(CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} ${CMAKE_C_FLAGS}")
|
set(CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} ${CMAKE_C_FLAGS}")
|
||||||
|
|
||||||
# Make sure SDL3::SDL3 always exists
|
# Make sure SDL3::SDL3 always exists
|
||||||
if(TARGET SDL3::SDL3-static AND NOT TARGET SDL3::SDL3)
|
if(TARGET SDL3::SDL3-shared)
|
||||||
|
add_library(SDL3::SDL3 ALIAS SDL3-shared)
|
||||||
|
else()
|
||||||
add_library(SDL3::SDL3 ALIAS SDL3-static)
|
add_library(SDL3::SDL3 ALIAS SDL3-static)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -17,10 +17,10 @@ if(NOT TARGET SDL3::Headers)
|
||||||
endif()
|
endif()
|
||||||
set(SDL3_Headers_FOUND TRUE)
|
set(SDL3_Headers_FOUND TRUE)
|
||||||
|
|
||||||
# Find SDL3::SDL3
|
# Find SDL3::SDL3-shared
|
||||||
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3Targets.cmake")
|
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3sharedTargets.cmake")
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/SDL3Targets.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/SDL3sharedTargets.cmake")
|
||||||
set(SDL3_SDL3_FOUND TRUE)
|
set(SDL3_SDL3-shared_FOUND TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Find SDL3::SDL3-static
|
# Find SDL3::SDL3-static
|
||||||
|
@ -39,6 +39,10 @@ else()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(SDL3_SDL3-shared_FOUND OR SDL3_SDL3-static_FOUND)
|
||||||
|
set(SDL3_SDL3_FOUND TRUE)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Find SDL3::SDL3_test
|
# Find SDL3::SDL3_test
|
||||||
if(_sdl3_framework)
|
if(_sdl3_framework)
|
||||||
find_package(SDL3_test CONFIG)
|
find_package(SDL3_test CONFIG)
|
||||||
|
@ -65,14 +69,22 @@ unset(SDL_ALSA_SHARED)
|
||||||
|
|
||||||
check_required_components(SDL3)
|
check_required_components(SDL3)
|
||||||
|
|
||||||
# Create SDL3::SDL3 alias for static-only builds
|
function(_sdl_create_target_alias_compat NEW_TARGET TARGET)
|
||||||
if(TARGET SDL3::SDL3-static AND NOT TARGET SDL3::SDL3)
|
|
||||||
if(CMAKE_VERSION VERSION_LESS "3.18")
|
if(CMAKE_VERSION VERSION_LESS "3.18")
|
||||||
# FIXME: Aliasing local targets is not supported on CMake < 3.18, so make it global.
|
# FIXME: Aliasing local targets is not supported on CMake < 3.18, so make it global.
|
||||||
add_library(SDL3::SDL3 INTERFACE IMPORTED)
|
add_library(${NEW_TARGET} INTERFACE IMPORTED)
|
||||||
set_target_properties(SDL3::SDL3 PROPERTIES INTERFACE_LINK_LIBRARIES "SDL3::SDL3-static")
|
set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}")
|
||||||
else()
|
else()
|
||||||
add_library(SDL3::SDL3 ALIAS SDL3::SDL3-static)
|
add_library(${NEW_TARGET} ALIAS ${TARGET})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Make sure SDL3::SDL3 always exists
|
||||||
|
if(NOT TARGET SDL3::SDL3)
|
||||||
|
if(TARGET SDL3::SDL3-shared)
|
||||||
|
_sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-shared)
|
||||||
|
else()
|
||||||
|
_sdl_create_target_alias_compat(SDL3::SDL3 SDL3::SDL3-static)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -35,32 +35,32 @@ add_library(headers_test OBJECT inc_sdl_slash.c inc_sdl_noslash.c)
|
||||||
target_link_libraries(headers_test PRIVATE SDL3::Headers)
|
target_link_libraries(headers_test PRIVATE SDL3::Headers)
|
||||||
|
|
||||||
if(TEST_SHARED)
|
if(TEST_SHARED)
|
||||||
find_package(SDL3 REQUIRED CONFIG COMPONENTS SDL3)
|
find_package(SDL3 REQUIRED CONFIG COMPONENTS SDL3-shared)
|
||||||
add_executable(gui-shared WIN32 main_gui.c)
|
add_executable(gui-shared WIN32 main_gui.c)
|
||||||
target_link_libraries(gui-shared PRIVATE SDL3::SDL3)
|
target_link_libraries(gui-shared PRIVATE SDL3::SDL3-shared)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
add_custom_command(TARGET gui-shared POST_BUILD
|
add_custom_command(TARGET gui-shared POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:SDL3::SDL3>" "$<TARGET_FILE_DIR:gui-shared>"
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:SDL3::SDL3-shared>" "$<TARGET_FILE_DIR:gui-shared>"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(sharedlib-shared SHARED main_lib.c)
|
add_library(sharedlib-shared SHARED main_lib.c)
|
||||||
target_link_libraries(sharedlib-shared PRIVATE SDL3::SDL3)
|
target_link_libraries(sharedlib-shared PRIVATE SDL3::SDL3-shared)
|
||||||
generate_export_header(sharedlib-shared EXPORT_MACRO_NAME MYLIBRARY_EXPORT)
|
generate_export_header(sharedlib-shared EXPORT_MACRO_NAME MYLIBRARY_EXPORT)
|
||||||
target_compile_definitions(sharedlib-shared PRIVATE "EXPORT_HEADER=\"${CMAKE_CURRENT_BINARY_DIR}/sharedlib-shared_export.h\"")
|
target_compile_definitions(sharedlib-shared PRIVATE "EXPORT_HEADER=\"${CMAKE_CURRENT_BINARY_DIR}/sharedlib-shared_export.h\"")
|
||||||
set_target_properties(sharedlib-shared PROPERTIES C_VISIBILITY_PRESET "hidden")
|
set_target_properties(sharedlib-shared PROPERTIES C_VISIBILITY_PRESET "hidden")
|
||||||
|
|
||||||
add_executable(cli-shared main_cli.c)
|
add_executable(cli-shared main_cli.c)
|
||||||
target_link_libraries(cli-shared PRIVATE SDL3::SDL3)
|
target_link_libraries(cli-shared PRIVATE SDL3::SDL3-shared)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
add_custom_command(TARGET cli-shared POST_BUILD
|
add_custom_command(TARGET cli-shared POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:SDL3::SDL3>" "$<TARGET_FILE_DIR:cli-shared>"
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:SDL3::SDL3-shared>" "$<TARGET_FILE_DIR:cli-shared>"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TEST_TEST)
|
if(TEST_TEST)
|
||||||
add_executable(sdltest-shared sdltest.c)
|
add_executable(sdltest-shared sdltest.c)
|
||||||
target_link_libraries(sdltest-shared PRIVATE SDL3::SDL3_test SDL3::SDL3)
|
target_link_libraries(sdltest-shared PRIVATE SDL3::SDL3_test SDL3::SDL3-shared)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -84,4 +84,8 @@ if(TEST_STATIC)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(SDL3 REQUIRED CONFIG COMPONENTS SDL3)
|
||||||
|
add_executable(gui-whatever WIN32 main_gui.c)
|
||||||
|
target_link_libraries(gui-whatever PRIVATE SDL3::SDL3)
|
||||||
|
|
||||||
feature_summary(WHAT ALL)
|
feature_summary(WHAT ALL)
|
||||||
|
|
|
@ -2,13 +2,6 @@
|
||||||
|
|
||||||
(www.cmake.org)
|
(www.cmake.org)
|
||||||
|
|
||||||
SDL's build system was traditionally based on autotools. Over time, this
|
|
||||||
approach has suffered from several issues across the different supported
|
|
||||||
platforms.
|
|
||||||
To solve these problems, a new build system based on CMake was introduced.
|
|
||||||
It is developed in parallel to the legacy autotools build system, so users
|
|
||||||
can experiment with it without complication.
|
|
||||||
|
|
||||||
The CMake build system is supported on the following platforms:
|
The CMake build system is supported on the following platforms:
|
||||||
|
|
||||||
* FreeBSD
|
* FreeBSD
|
||||||
|
@ -19,26 +12,27 @@ The CMake build system is supported on the following platforms:
|
||||||
* Android
|
* Android
|
||||||
* Emscripten
|
* Emscripten
|
||||||
* RiscOS
|
* RiscOS
|
||||||
|
* Playstation 2
|
||||||
* Playstation Vita
|
* Playstation Vita
|
||||||
|
* Nintendo 3DS
|
||||||
|
|
||||||
## Building SDL
|
## Building SDL
|
||||||
|
|
||||||
Assuming the source for SDL is located at `~/sdl`
|
Assuming the source for SDL is located at `~/sdl`.
|
||||||
```sh
|
```sh
|
||||||
cd ~
|
cmake -S ~/sdl -B ~/build
|
||||||
mkdir build
|
cmake --build ~/build
|
||||||
cd build
|
|
||||||
cmake ~/sdl
|
|
||||||
cmake --build .
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This will build the static and dynamic versions of SDL in the `~/build` directory.
|
This will build SDL in the `~/build` directory.
|
||||||
Installation can be done using:
|
Installation can be done using:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cmake --install . # '--install' requires CMake 3.15, or newer
|
cmake --install ~/build --prefix /usr/local # '--install' requires CMake 3.15, or newer
|
||||||
```
|
```
|
||||||
|
|
||||||
|
This will install SDL to /usr/local.
|
||||||
|
|
||||||
## Including SDL in your project
|
## Including SDL in your project
|
||||||
|
|
||||||
SDL can be included in your project in 2 major ways:
|
SDL can be included in your project in 2 major ways:
|
||||||
|
@ -75,10 +69,12 @@ For CMake to find SDL, it must be installed in [a default location CMake is look
|
||||||
The following components are available, to be used as an argument of `find_package`.
|
The following components are available, to be used as an argument of `find_package`.
|
||||||
|
|
||||||
| Component name | Description |
|
| Component name | Description |
|
||||||
|----------------|--------------------------------------------------------------------------------------------|
|
|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| SDL3 | The SDL3 shared library, available through the `SDL3::SDL3` target [^SDL_TARGET_EXCEPTION] |
|
| SDL3-shared | The SDL3 shared library, available through the `SDL3::SDL3-shared` target |
|
||||||
| SDL3-static | The SDL3 static library, available through the `SDL3::SDL3-static` target |
|
| SDL3-static | The SDL3 static library, available through the `SDL3::SDL3-static` target |
|
||||||
| SDL3_test | The SDL3_test static library, available through the `SDL3::SDL3_test` target |
|
| SDL3_test | The SDL3_test static library, available through the `SDL3::SDL3_test` target |
|
||||||
|
| SDL3 | The SDL3 library, available through the `SDL3::SDL3` target. This is an alias of `SDL3::SDL3` or `SDL3::SDL3-static`. This component is always available. |
|
||||||
|
| Headers | The SDL3 headers, available through the `SDL3::Headers` target. This component is always available. |
|
||||||
|
|
||||||
|
|
||||||
### Using a vendored SDL
|
### Using a vendored SDL
|
||||||
|
@ -150,5 +146,3 @@ To use, set the following CMake variables when running CMake's configuration sta
|
||||||
cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64`
|
cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64`
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
[^SDL_TARGET_EXCEPTION]: `SDL3::SDL3` can be an ALIAS to a static `SDL3::SDL3-static` target for multiple reasons.
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ option(SDL_TESTS_LINK_SHARED "link tests to shared SDL library" ${SDL_TESTS_LINK
|
||||||
set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Timeout multiplier to account for really slow machines")
|
set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Timeout multiplier to account for really slow machines")
|
||||||
|
|
||||||
if(SDL_TESTS_LINK_SHARED)
|
if(SDL_TESTS_LINK_SHARED)
|
||||||
set(sdl_name_component SDL3)
|
set(sdl_name_component SDL3-shared)
|
||||||
else()
|
else()
|
||||||
set(sdl_name_component SDL3-static)
|
set(sdl_name_component SDL3-static)
|
||||||
endif()
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue