155 lines
4.3 KiB
CMake
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})
|