kuiper-engine/CMakeLists.txt
Adam Macdonald a8d8b9b9ab
All checks were successful
Build (Arch Linux) / build (push) Successful in 3m10s
initial commit
2025-04-16 01:58:29 +01:00

206 lines
6.3 KiB
CMake

cmake_minimum_required(VERSION 3.30)
project(
kuiper-engine
VERSION 0.1
DESCRIPTION "Kuiper Engine"
LANGUAGES CXX
)
add_library(
kuiper
STATIC
src/cli/cli.cpp
src/core/engine.cpp
src/core/io.cpp
src/core/entrypoint.cpp
src/graphics/opengl/buffer.cpp
src/graphics/opengl/framebuffer.cpp
src/graphics/opengl/texture.cpp
src/graphics/opengl/texture_array.cpp
src/graphics/opengl/shader.cpp
src/graphics/opengl/program.cpp
src/graphics/opengl/render_context.cpp
src/graphics/opengl/vertex_array.cpp
src/resources/image.cpp
src/resources/model.cpp
src/resources/resource_index.cpp
src/resources/resource_manager.cpp
src/platform/glfw/glfw_window.cpp
src/renderer/gl_renderer.cpp
src/window/input_system.cpp
)
target_compile_features(kuiper PRIVATE cxx_std_23)
target_include_directories(kuiper PUBLIC "include/")
# Compiler options
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
# GCC & Clang
message(STATUS "Adding GCC & Clang-specific compiler options")
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
target_compile_options(kuiper PRIVATE -Wall)
elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
target_compile_options(kuiper PRIVATE -O3)
endif ()
endif ()
# Binary resource inclusion because std::embed still isn't here
# TODO: do this in a loop: https://cmake.org/cmake/help/book/mastering-cmake/chapter/Custom%20Commands.html#adding-a-custom-target
find_program(
BIN2HPP_FOUND
bin2hpp
REQUIRED
)
set(EMBEDDED_SHADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin2hpp)
file(MAKE_DIRECTORY ${EMBEDDED_SHADERS_DIR})
# Vertex shader
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/default_vs.hpp
COMMAND bin2hpp -i "${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/geometry.vert" -o "${EMBEDDED_SHADERS_DIR}/default_vs.hpp" -n bin -s default_vs
)
# Fragment shader
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/default_fs.hpp
COMMAND bin2hpp -i "${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/pbr.frag" -o "${EMBEDDED_SHADERS_DIR}/default_fs.hpp" -n bin -s default_fs
)
# Clustering computer shader
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/clustering_cs.hpp
COMMAND bin2hpp -i "${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/build_clusters.comp" -o "${EMBEDDED_SHADERS_DIR}/clustering_cs.hpp" -n bin -s clustering_cs
)
# Light-culling computer shader
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/light_culling_cs.hpp
COMMAND bin2hpp -i "${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/cull_lights.comp" -o "${EMBEDDED_SHADERS_DIR}/light_culling_cs.hpp" -n bin -s light_culling_cs
)
add_custom_target(
embedded-shaders
ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/default_vs.hpp
${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/default_fs.hpp
${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/clustering_cs.hpp
${CMAKE_CURRENT_BINARY_DIR}/bin2hpp/light_culling_cs.hpp
)
add_dependencies(kuiper embedded-shaders)
target_include_directories(kuiper PUBLIC ${EMBEDDED_SHADERS_DIR})
# Dependencies
include(FetchContent)
target_link_libraries(kuiper PUBLIC glad glfw glm::glm spdlog imgui stb freetype fastgltf flecs::flecs_static)
target_link_libraries(kuiper PRIVATE absl::flat_hash_map)
# GLAD
add_subdirectory("thirdparty/glad/")
# GLFW
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.4
OVERRIDE_FIND_PACKAGE # For use with find_package()
)
FetchContent_MakeAvailable(glfw)
# find_package(glfw3 3.4 REQUIRED)
# OpenGL Mathematics (GLM)
FetchContent_Declare(
glm
GIT_REPOSITORY https://github.com/g-truc/glm.git
GIT_TAG 1.0.1
)
FetchContent_MakeAvailable(glm)
# spdlog
set(SPDLOG_USE_STD_FORMAT ON CACHE BOOL "" FORCE)
set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "" FORCE)
set(SPDLOG_BUILD_EXAMPLE_HO OFF CACHE BOOL "" FORCE)
set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(SPDLOG_BUILD_TESTS_HO OFF CACHE BOOL "" FORCE)
set(SPDLOG_BUILD_BENCH OFF CACHE BOOL "" FORCE)
set(SPDLOG_DISABLE_DEFAULT_LOGGER ON CACHE BOOL "" FORCE)
FetchContent_Declare(
spdlog
GIT_REPOSITORY https://github.com/gabime/spdlog.git
GIT_TAG v1.14.1
)
FetchContent_MakeAvailable(spdlog)
# UTF8-CPP
target_include_directories(kuiper PRIVATE "thirdparty/utfcpp/include/")
# FreeType
set(FT_DISABLE_BROTLI ON CACHE BOOL "" FORCE)
set(FT_DISABLE_BZIP2 ON CACHE BOOL "" FORCE)
set(FT_DISABLE_HARFBUZZ ON CACHE BOOL "" FORCE)
set(FT_DISABLE_PNG ON CACHE BOOL "" FORCE)
set(FT_DISABLE_ZLIB ON CACHE BOOL "" FORCE)
set(FT_ENABLE_ERROR_STRINGS OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
freetype
URL https://download.savannah.gnu.org/releases/freetype/freetype-2.13.3.tar.gz
URL_HASH SHA256=5c3a8e78f7b24c20b25b54ee575d6daa40007a5f4eea2845861c3409b3021747
OVERRIDE_FIND_PACKAGE
)
FetchContent_MakeAvailable(freetype)
# simdjson (note: also a dependency of fastgltf)
set(SIMDJSON_DEVELOPER_MODE OFF CACHE BOOL "" FORCE)
set(SIMDJSON_DISABLE_DEPRECATED_API ON CACHE BOOL "" FORCE)
FetchContent_Declare(
simdjson
GIT_REPOSITORY https://github.com/simdjson/simdjson.git
GIT_TAG v3.11.3
OVERRIDE_FIND_PACKAGE # So fastgltf can find it
)
FetchContent_MakeAvailable(simdjson)
# fastgltf
set(FASTGLTF_COMPILE_AS_CPP20 ON CACHE BOOL "" FORCE)
FetchContent_Declare(
fastgltf
GIT_REPOSITORY https://github.com/spnda/fastgltf.git
GIT_TAG v0.8.0
)
FetchContent_MakeAvailable(fastgltf)
# flecs
set(FLECS_SHARED OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
flecs
GIT_REPOSITORY https://github.com/SanderMertens/flecs.git
GIT_TAG v4.0.4
)
FetchContent_MakeAvailable(flecs)
# Abseil C++
FetchContent_Declare(
abseil
GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
GIT_TAG 20250127.1
)
FetchContent_MakeAvailable(abseil)
# Dear ImGui
add_subdirectory("thirdparty/imgui/")
# STB
add_subdirectory("thirdparty/stb/")