SDL2OpenGLBase/CMakeLists.txt

76 lines
2.6 KiB
CMake

cmake_minimum_required(VERSION 3.20.0)
project(openglsdl2proj VERSION 0.1.0 LANGUAGES C CXX)
set(EXE_NAME project)
set(SDL2_LOCAL OFF)
set(GLEW_LOCAL OFF)
set(GLEW_NOT_GLAD OFF)
function(copy_shaders_to_target_dir target)
add_custom_command(
TARGET ${target} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"$<TARGET_PROPERTY:${target},SOURCE_DIR>/shaders"
"$<TARGET_PROPERTY:${target},BINARY_DIR>/"
)
endfunction()
# Option to switch between a system sdl library and a sdl library from in project
# source code
option(SDL2_LOCAL "Use non-system SDL2 library" OFF)
# Same thing but for GLEW
option(GLEW_LOCAL "Use non-system GLEW library" OFF)
# Copied almost verbatim from here https://wiki.libsdl.org/SDL2/README/cmake#including-sdl-in-your-project
# This either gets SDL2 from it's CMakeLists.txt in source or links it from the system dll
if(SDL2_LOCAL)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty//SDL2 EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/SDL2)
else()
# 1. Look for a SDL2 package, 2. look for the SDL2 component and 3. fail if none can be found
find_package(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2)
endif()
# Get OpenGL since we need it
#find_package(OpenGL REQUIRED COMPONENTS EGL)
# find glew either by local source code for just link to system dll
if(GLEW_LOCAL AND GLEW_NOT_GLAD)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/GLEW/build/cmake EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/GLEW)
else()
find_package(GLEW REQUIRED)
endif()
# Main executable
add_executable(${EXE_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc)
# Show all warnings, works for clang and GCC
target_compile_options(${EXE_NAME} PRIVATE -Wall -Wextra -Wpedantic) #-Werror)
# Set c++ standard for executable
set_target_properties(${EXE_NAME}
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS ON
)
target_include_directories(${EXE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)
copy_shaders_to_target_dir(${EXE_NAME})
# Link to the actual SDL2 library.
# SDL2::SDL2 is the shared SDL library, SDL2::SDL2-static is the static SDL library.
if(NOT SDL2_LOCAL)
target_link_libraries(${EXE_NAME} PRIVATE SDL2::SDL2)
else()
target_link_libraries(${EXE_NAME} PRIVATE SDL2::SDL2-static)
endif()
# Link to OpenGL
#target_link_libraries(${EXE_NAME} PRIVATE OpenGL::EGL)
# Link to GLEW
if(NOT GLEW_LOCAL AND GLEW_NOT_GLAD)
target_link_libraries(${EXE_NAME} PRIVATE ${GLEW_LIBRARIES})
elseif(GLEW_NOT_GLAD)
# Static version of GLEW
target_link_libraries(${EXE_NAME} PRIVATE glew_s)
endif()