From f713d5d2d72d904987ac34fcec44066fd9fa7784 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Mon, 30 Nov 2020 20:22:18 +0100 Subject: [PATCH] cmake: add SDL2 support to cmake build script --- CMakeLists.txt | 15 +++++++++++++-- cmake/FindSDL2.cmake | 27 +++++++++++++++++++++++++++ cmake/librw-config.cmake.in | 19 +++++++++++++++++++ librw-config.cmake.in | 12 ------------ skeleton/CMakeLists.txt | 1 + src/CMakeLists.txt | 32 +++++++++++++++++++++++--------- 6 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 cmake/FindSDL2.cmake create mode 100644 cmake/librw-config.cmake.in delete mode 100644 librw-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index c6e0f5b..7e4a246 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 3.8) - project(librw C CXX) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + if(PS2DEV AND EE) include("${CMAKE_CURRENT_LIST_DIR}/cmake/ee.cmake") endif() @@ -19,6 +20,16 @@ if(NOT LIBRW_PLATFORM IN_LIST LIBRW_PLATFORMS) message(FATAL_ERROR "Illegal LIBRW_PLATFORM=${LIBRW_PLATFORM}") endif() +set(LIBRW_GL3_GFXLIBS "GLFW" "SDL2") +set(LIBRW_GL3_GFXLIB "GLFW" CACHE STRING "gfxlib for gl3") +set_property(CACHE LIBRW_GL3_GFXLIB PROPERTY STRINGS ${LIBRW_GL3_GFXLIBS}) +if(LIBRW_PLATFORM_GL3) + message(STATUS "LIBRW_GL3_GFXLIB = ${LIBRW_GL3_GFXLIB} (choices=${LIBRW_GL3_GFXLIBS})") +endif() +if(NOT LIBRW_GL3_GFXLIB IN_LIST LIBRW_GL3_GFXLIBS) + message(FATAL_ERROR "Illegal LIBRW_GL3_GFXLIB=${LIBRW_GL3_GFXLIB}") +endif() + if(LIBRW_PLATFORM_PS2) enable_language(DSM) endif() @@ -41,7 +52,7 @@ endif() if(LIBRW_INSTALL) include(CMakePackageConfigHelpers) - configure_package_config_file(librw-config.cmake.in librw-config.cmake + configure_package_config_file(cmake/librw-config.cmake.in librw-config.cmake INSTALL_DESTINATION "${CMAKE_INSTALL_PREFIX}" ) install( diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake new file mode 100644 index 0000000..cabb2d6 --- /dev/null +++ b/cmake/FindSDL2.cmake @@ -0,0 +1,27 @@ +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_check_modules(SDL2 IMPORTED_TARGET "sdl2") + if(TARGET PkgConfig::SDL2 AND NOT TARGET sdl2::sdl2) + add_library(_sdl2 INTERFACE) + target_link_libraries(_sdl2 INTERFACE PkgConfig::SDL2) + add_library(SDL2::SDL2 ALIAS _sdl2) + endif() +endif() + +if(NOT SDL2_FOUND) + find_path(SDL2_INCLUDE_DIR sdl2.h) + find_library(SDL2_LIBRARY sdl2) + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(libuv + REQUIRED_VARS SDL2_INCLUDE_DIR SDL2_LIBRARY + ) + + if(NOT TARGET SDL2::SDL2) + add_library(SDL2::SDL2 UNKNOWN IMPORTED) + set_target_properties(SDL2::SDL2 PROPERTIES + IMPORTED_LOCATION "${SDL2_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}" + ) + endif() +endif() diff --git a/cmake/librw-config.cmake.in b/cmake/librw-config.cmake.in new file mode 100644 index 0000000..2cae87f --- /dev/null +++ b/cmake/librw-config.cmake.in @@ -0,0 +1,19 @@ +include("${CMAKE_CURRENT_LIST_DIR}/librw-targets.cmake") + +set(LIBRW_PLATFORM "@LIBRW_PLATFORM@") +set(LIBRW_PLATFORMS "@LIBRW_PLATFORMS@") +set(LIBRW_PLATFORM_@LIBRW_PLATFORM@ ON) + +if(LIBRW_PLATFORM_GL3) + set(LIBRW_GL3_GFXLIB "@LIBRW_GL3_GFXLIB@") + set(LIBRW_GL3_GFXLIBS "@LIBRW_GL3_GFXLIBS@") + + set(OpenGL_GL_PREFERENCE GLVND) + find_package(OpenGL REQUIRED) + if(LIBRW_GL3_GFXLIB STREQUAL "GLFW") + find_package(GLEW REQUIRED) + find_package(glfw3 REQUIRED) + elseif(LIBRW_GL3_GFXLIB STREQUAL "GLFW") + find_package(SDL2 REQUIRED) + endif() +endif() diff --git a/librw-config.cmake.in b/librw-config.cmake.in deleted file mode 100644 index 668ce5f..0000000 --- a/librw-config.cmake.in +++ /dev/null @@ -1,12 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/librw-targets.cmake") - -set(LIBRW_PLATFORM "@LIBRW_PLATFORM@") -set(LIBRW_PLATFORMS "@LIBRW_PLATFORMS@") -set(LIBRW_PLATFORM_@LIBRW_PLATFORM@ ON) - -if(LIBRW_PLATFORM_GL3) - set(OpenGL_GL_PREFERENCE GLVND) - find_package(OpenGL REQUIRED) - find_package(GLEW REQUIRED) - find_package(glfw3 REQUIRED) -endif() diff --git a/skeleton/CMakeLists.txt b/skeleton/CMakeLists.txt index 14cbba7..3c7aa16 100644 --- a/skeleton/CMakeLists.txt +++ b/skeleton/CMakeLists.txt @@ -1,5 +1,6 @@ add_library(librw_skeleton glfw.cpp + sdl2.cpp skeleton.cpp skeleton.h win.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2a7ada3..eff3469 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,10 +1,3 @@ -if(LIBRW_PLATFORM_GL3) - set(OpenGL_GL_PREFERENCE GLVND) - find_package(OpenGL REQUIRED) - find_package(GLEW REQUIRED) - find_package(glfw3 REQUIRED) -endif() - add_library(librw "${PROJECT_SOURCE_DIR}/args.h" "${PROJECT_SOURCE_DIR}/rw.h" @@ -145,12 +138,33 @@ set_target_properties(librw ) if(LIBRW_PLATFORM_GL3) + + +if(LIBRW_PLATFORM_GL3) + set(OpenGL_GL_PREFERENCE GLVND) + find_package(OpenGL REQUIRED) + find_package(GLEW REQUIRED) + target_link_libraries(librw PUBLIC - glfw - GLEW::GLEW OpenGL::GL + GLEW::GLEW ) + if (LIBRW_GL3_GFXLIB STREQUAL "GLFW") + find_package(glfw3 REQUIRED) + target_link_libraries(librw + PUBLIC + glfw + ) + elseif (LIBRW_GL3_GFXLIB STREQUAL "SDL2") + find_package(SDL2 REQUIRED) + target_compile_definitions(librw PUBLIC LIBRW_SDL2) + target_link_libraries(librw + PUBLIC + SDL2::SDL2 + ) + endif() +endif() elseif(LIBRW_PLATFORM_D3D9) target_link_libraries(librw PUBLIC