cmake_minimum_required(VERSION 3.24) set(PROJECT_NAME Sentinal) project(${PROJECT_NAME} LANGUAGES CXX) set(project_version_major 0) set(project_version_minor 0) set(project_version_patch 1) set(project_version_tweak 0) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Make sure this is here for nvim and fleet users set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # # # # # # # # # # # # # Manage Dependencies # # # # # # # # # # # # # include(ExternalProject) ExternalProject_Add( imgui GIT_REPOSITORY https://github.com/ocornut/imgui.git GIT_TAG master UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" BUILD_IN_SOURCE 1 ) ExternalProject_Get_Property(imgui source_dir) file(GLOB imgui_sources "${source_dir}/*.cpp" "${source_dir}/*.h" ) add_library(imgui STATIC ${imgui_sources}) target_include_directories(imgui PUBLIC ${source_dir}) ExternalProject_Add( ffmpeg GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg.git GIT_TAG master UPDATE_COMMAND "" CONFIGURE_COMMAND ./configure --prefix= --enable-shared --disable-static BUILD_COMMAND make INSTALL_COMMAND make install BUILD_IN_SOURCE 1 ) ExternalProject_Get_Property(ffmpeg install_dir) set(FFMPEG_INCLUDE_DIR ${install_dir}/include) set(FFMPEG_LIB_DIR ${install_dir}/lib) set(FFMPEG_BIN_DIR ${install_dir}/bin) add_library(avcodec SHARED IMPORTED) set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libavcodec.so INTERFACE_INCLUDE_DIRECTORIES ${FFMPEG_INCLUDE_DIR} ) add_library(avformat SHARED IMPORTED) set_target_properties(avformat PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libavformat.so INTERFACE_INCLUDE_DIRECTORIES ${FFMPEG_INCLUDE_DIR} ) add_library(avutil SHARED IMPORTED) set_target_properties(avutil PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libavutil.so INTERFACE_INCLUDE_DIRECTORIES ${FFMPEG_INCLUDE_DIR} ) add_library(swscale SHARED IMPORTED) set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${FFMPEG_LIB_DIR}/libswscale.so INTERFACE_INCLUDE_DIRECTORIES ${FFMPEG_INCLUDE_DIR} ) add_library(FFmpeg::avcodec ALIAS avcodec) add_library(FFmpeg::avformat ALIAS avformat) add_library(FFmpeg::avutil ALIAS avutil) add_library(FFmpeg::swscale ALIAS swscale) # Add GLFW and GLEW as subdirectories if they have their own CMake files add_subdirectory(thirdparty/glfw) add_subdirectory(thirdparty/glew-cmake) # # # # # # # # # # # # # Dependencies Done # # # # # # # # # # # # # if(APPLE) list(APPEND EXTRA_LIBS "-framework OpenGL") elseif(WIN32) find_package(OpenGL REQUIRED) else() list(APPEND EXTRA_LIBS "-lGL -lGLU -lX11") endif() # ImGui glfw backends (GLFW + OpenGL3) add_library(imgui_impl STATIC thirdparty/imgui/backends/imgui_impl_glfw.cpp thirdparty/imgui/backends/imgui_impl_opengl3.cpp ) target_include_directories(imgui_impl PRIVATE thirdparty/imgui thirdparty/imgui/backends thirdparty/glfw/include ) include_directories( thirdparty/imgui thirdparty/imgui/backends thirdparty/glfw/include thirdparty/glew-cmake/include ) set(glew-cmake_BUILD_SHARED OFF) set(glew-cmake_BUILD_STATIC ON) add_executable(${PROJECT_NAME} src/main.cpp) target_link_libraries(${PROJECT_NAME} PRIVATE imgui FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil FFmpeg::swscale glfw glew) add_dependencies(${PROJECT_NAME} ffmpeg) set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" )