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 "$/shaders" "$/" ) 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()