Onyx-Engine/CMakeLists.txt
OusmBlueNinja f7e0882597 Improves renderer and adds shader support
Adds shader class to core and modifies the renderer to use it,
while also adding profiling macros and fixing resize issues.
The changes ensure the render target is resized only when the
requested size is different from the current size and also clears
the screen to a dark gray color.
2025-05-21 22:05:10 -05:00

150 lines
3.6 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(Onyx VERSION 0.1.0 LANGUAGES C CXX)
# Build type (for single-config generators like Make/Ninja)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the build type (Debug or Release)" FORCE)
endif()
# Language standards
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
include_directories(${CMAKE_BINARY_DIR}/generated)
# --- Output directories for multi-config builds ---
foreach(OUTPUTCONFIG IN ITEMS Debug Release)
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG_UPPER)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/bin/${OUTPUTCONFIG})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/lib/${OUTPUTCONFIG})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/lib/${OUTPUTCONFIG})
endforeach()
# --- External Libraries ---
include(FetchContent)
# GLFW
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG latest
)
FetchContent_MakeAvailable(glfw)
# ImGui (Docking)
FetchContent_Declare(
imgui
GIT_REPOSITORY https://github.com/ocornut/imgui.git
GIT_TAG docking
)
FetchContent_MakeAvailable(imgui)
# Required packages
find_package(yaml-cpp REQUIRED)
find_package(GLEW REQUIRED)
# --- ImGui Static Library ---
add_library(ImGui STATIC
${imgui_SOURCE_DIR}/imgui.cpp
${imgui_SOURCE_DIR}/imgui_draw.cpp
${imgui_SOURCE_DIR}/imgui_demo.cpp
${imgui_SOURCE_DIR}/imgui_tables.cpp
${imgui_SOURCE_DIR}/imgui_widgets.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
)
target_include_directories(ImGui PUBLIC
${imgui_SOURCE_DIR}
${imgui_SOURCE_DIR}/backends
)
target_compile_definitions(ImGui PUBLIC
IMGUI_IMPL_OPENGL_LOADER_GLEW
)
# --- Core Engine Library ---
file(GLOB_RECURSE CORE_SOURCES CONFIGURE_DEPENDS
src/core/*.cpp
src/core/*.h
)
add_library(Core STATIC
${CORE_SOURCES}
src/core/systems/MACROS.h
src/core/renderer/Renderer.cpp
src/core/renderer/Renderer.h
src/core/systems/AssetManager.cpp
src/core/systems/AssetManager.h
src/core/systems/Asset.cpp
src/core/systems/Asset.h
src/core/systems/assets/Texture2D.cpp
src/core/systems/assets/Texture2D.h
src/core/systems/Shader.cpp
)
target_include_directories(Core PUBLIC src/core)
# Add _DEBUG define only for debug builds
target_compile_definitions(Core PRIVATE
$<$<CONFIG:Debug>:_DEBUG>
)
# --- Editor Executable ---
file(GLOB_RECURSE APP_SOURCES CONFIGURE_DEPENDS
src/editor/*.cpp
src/editor/*.h
)
add_executable(Editor ${APP_SOURCES}
main.cpp
src/editor/Editor.cpp
src/editor/Editor.h
src/editor/Windows/LoggerWindow.cpp
src/editor/Windows/LoggerWindow.h
src/editor/Windows/Viewport.cpp
src/editor/Windows/Viewport.h
src/editor/Windows/FileBrowser.cpp
src/editor/Windows/FileBrowser.h
)
target_include_directories(Editor PRIVATE
src/editor
src/core
)
target_link_libraries(Editor PRIVATE
Core
ImGui
glfw
GLEW::GLEW
yaml-cpp
${CMAKE_DL_LIBS}
)
target_compile_definitions(Editor PRIVATE
$<$<CONFIG:Debug>:_DEBUG>
)
# --- Install ---
install(TARGETS Editor RUNTIME DESTINATION bin)