mirror of
https://github.com/GabsPuNs/Project-Zenith-Main.git
synced 2026-07-17 04:41:29 +00:00
83 lines
2.7 KiB
CMake
83 lines
2.7 KiB
CMake
#[[
|
|
Custom find module for SDL_image for Emscripten compilation.
|
|
|
|
Input variables:
|
|
SDL2_image_FORMATS
|
|
|
|
Output variables:
|
|
SDL2_image_FOUND
|
|
SDL2_image_VERSION
|
|
|
|
Resulting targets:
|
|
SDL2_image::SDL2_image
|
|
|
|
More info:
|
|
https://emscripten.org/docs/porting/multimedia_and_graphics/OpenGL-support.html
|
|
]]
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
include(FindPackageMessage)
|
|
|
|
if(NOT TARGET SDL2_image::SDL2_image)
|
|
# If no version was specified, set default
|
|
if(NOT DEFINED SDL2_image_FIND_VERSION)
|
|
set(SDL2_image_FIND_VERSION "2")
|
|
endif()
|
|
if(NOT DEFINED SDL2_image_FORMATS)
|
|
set(SDL2_image_FORMATS "[tga]")
|
|
endif()
|
|
|
|
# Check if requested SDL version is valid
|
|
if((SDL2_image_FIND_VERSION VERSION_LESS "2") OR (SDL2_image_FIND_VERSION VERSION_GREATER_EQUAL "3"))
|
|
message(FATAL_ERROR "The requested SDL2_image version ${SDL2_image_FIND_VERSION} is invalid.")
|
|
endif()
|
|
|
|
message(NOTICE
|
|
"SDL_image with Emscripten can only be used if SDL usage is also enabled. "
|
|
"The version number of both libraries must match as well."
|
|
)
|
|
|
|
# Emscripten includes SDL support as part of it's SDK, meaning there's no need to find it
|
|
set(SDL2_image_FOUND TRUE)
|
|
add_library(SDL2_image::SDL2_image INTERFACE IMPORTED)
|
|
|
|
# Set found SDL_image version based on latest Emscripten SDK at the time of writing this file
|
|
# Version set based on latest Emscripten SDK at the time of writing this file
|
|
set(SDL2_image_VERSION "2.24.2")
|
|
|
|
# Version number to pass to compiler
|
|
set(SDL2_image_EMSCRIPTEN_COMPILER_SELECTED_VERSION "2")
|
|
|
|
set(SDL2_image_TARGET_ARGS "-sUSE_SDL_IMAGE=${SDL2_image_EMSCRIPTEN_COMPILER_SELECTED_VERSION}")
|
|
|
|
if(SDL2_image_FORMATS)
|
|
list(APPEND SDL2_image_TARGET_ARGS "-sSDL2_IMAGE_FORMATS=${SDL2_image_FORMATS}")
|
|
endif()
|
|
|
|
# Enable compilation and linking against SDL
|
|
target_compile_options(SDL2_image::SDL2_image INTERFACE "${SDL2_image_TARGET_ARGS}")
|
|
target_link_libraries(SDL2_image::SDL2_image INTERFACE "${SDL2_image_TARGET_ARGS}")
|
|
|
|
# Get final compiler and linker flags to print them
|
|
get_target_property(SDL2_image_COMPILE_FLAGS SDL2_image::SDL2_image "INTERFACE_COMPILE_OPTIONS")
|
|
get_target_property(SDL2_image_LINK_FLAGS SDL2_image::SDL2_image "INTERFACE_LINK_OPTIONS")
|
|
|
|
find_package_message(
|
|
"SDL2_image"
|
|
"SDL_image ${SDL2_image_VERSION} has been found as part of the Emscripten SDK."
|
|
"[${SDL2_image_COMPILE_FLAGS}][${SDL2_image_LINK_FLAGS}]"
|
|
)
|
|
|
|
# Clean scope
|
|
unset(SDL2_image_TARGET_ARGS)
|
|
unset(SDL2_image_COMPILE_FLAGS)
|
|
unset(SDL2_image_LINK_FLAGS)
|
|
unset(SDL2_image_EMSCRIPTEN_COMPILER_SELECTED_VERSION)
|
|
else()
|
|
# Since the target already exists, we declare it as found
|
|
set(SDL2_image_FOUND TRUE)
|
|
if(NOT DEFINED SDL2_image_VERSION)
|
|
set(SDL2_image_VERSION "UNKNOWN")
|
|
endif()
|
|
endif()
|