76 lines
2.6 KiB
CMake
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()
|