iridium/CMakeLists.txt

155 lines
4.3 KiB
CMake

cmake_minimum_required(VERSION 3.28)
project(iridium VERSION 0.1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
include(${CMAKE_SOURCE_DIR}/cmake/std.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/PatchUtil.cmake)
include(FetchContent)
include(CheckIPOSupported)
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
check_ipo_supported(RESULT ipo_supported OUTPUT error)
endif()
find_package(OpenGL)
find_package(Vulkan)
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
find_package(X11 REQUIRED)
if(NOT X11_Xi_FOUND)
message(FATAL_ERROR "X11 Xi library is required")
endif()
endif()
add_subdirectory(modules-shims)
message(STATUS "Fetching Boost")
FetchContent_Declare(Boost
GIT_REPOSITORY https://github.com/boostorg/boost.git
GIT_TAG boost-1.84.0
GIT_PROGRESS 1
GIT_SHALLOW 1
GIT_SUBMODULES
"tools/cmake"
"libs/config"
"libs/endian"
"libs/predef"
FIND_PACKAGE_ARGS COMPONENTS predef endian
)
FetchContent_MakeAvailable(Boost)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
message(STATUS "Fetching GLFW")
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.3.9
GIT_PROGRESS 1
GIT_SHALLOW 1)
FetchContent_MakeAvailable(glfw)
if(MSVC)
# target_compile_options(glfw PRIVATE /Wno-pedantic)
else()
target_compile_options(glfw PRIVATE -Wno-pedantic -Wno-missing-field-initializers -Wno-unused-parameter)
endif()
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
message(STATUS "Fetching imgui")
FetchContent_Declare(
imgui
GIT_REPOSITORY https://github.com/ocornut/imgui.git
GIT_TAG v1.90.1
GIT_PROGRESS 1
GIT_SHALLOW 1)
FetchContent_GetProperties(imgui)
if(NOT imgui_POPULATED)
FetchContent_Populate(imgui)
set(IMGUI_INCLUDE_DIR ${imgui_SOURCE_DIR}/)
file(GLOB IMGUI_SOURCES ${imgui_SOURCE_DIR}/*.cpp)
file(GLOB IMGUI_HEADERS ${imgui_SOUzRCE_DIR}/*.h)
add_library(imgui STATIC ${IMGUI_SOURCES} ${IMGUI_SOURCES} ${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp ${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp ${imgui_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp)
add_definitions(-DIMGUI_IMPL_OPENGL_LOADER_GLAD)
target_include_directories(imgui PUBLIC ${IMGUI_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} ${GLFW_INCLUDE_DIR} ${GLAD_INCLUDE_DIR})
target_link_libraries(imgui ${OPENGL_LIBRARIES} glfw glad Vulkan::Vulkan)
endif()
# TODO: Evetually make this just bx, as we dont need all of bgfx
message(STATUS "Fetching bgfx")
FetchContent_Declare(
bgfx
GIT_REPOSITORY https://github.com/bkaradzic/bgfx.cmake.git
GIT_TAG v1.124.8664-461
GIT_PROGRESS 1
GIT_SHALLOW 1)
FetchContent_GetProperties(bgfx)
if(NOT bgfx_POPULATED)
FetchContent_Populate(bgfx)
set(BGFX_BUILD_EXAMPLES OFF CACHE BOOL "Build BGFX examples")
add_subdirectory(${bgfx_SOURCE_DIR} ${bgfx_BINARY_DIR})
endif()
message(STATUS "Fetching assimp")
FetchContent_Declare(
assimp
GIT_REPOSITORY https://github.com/assimp/assimp.git
GIT_TAG v5.3.1
GIT_PROGRESS 1
GIT_SHALLOW 1)
FetchContent_MakeAvailable(assimp)
message(STATUS "Fetching lift")
FetchContent_Declare(
lift
GIT_REPOSITORY https://github.com/rollbear/lift.git
GIT_TAG 3927d06415f930956341afd5bc223f912042d7e4
GIT_PROGRESS 1)
FetchContent_MakeAvailable(lift)
set(IRIDIUM_SOURCES
src/module.cpp
src/renderer/interface.cpp
src/renderer/vulkan.cpp
src/resource_management/handle_type.cpp
src/resource_management/mesh_resource.cpp
src/resource_management/shader_resource.cpp
src/input/key.cpp
src/window/interface.cpp
src/window/glfw.cpp
src/util/math.cpp
src/util/meta.cpp
)
add_library(iridium)
target_sources(iridium PUBLIC FILE_SET cxx_modules TYPE CXX_MODULES FILES ${IRIDIUM_SOURCES})
target_link_libraries(iridium PRIVATE std PUBLIC imgui glfw_module glad_module Vulkan::Vulkan glm_module bx Boost::predef Boost::endian GSL_module assimp::assimp fast_io_module lift)
target_compile_options(iridium PUBLIC -Wall -Wextra)
if(ipo_supported)
message(STATUS "IPO / LTO enabled")
set_property(TARGET iridium PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
message(STATUS "IPO / LTO not supported: <${error}>")
endif()
add_subdirectory(example)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})