cmake_minimum_required(VERSION 3.20) project(PrismEngine) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) # enable folders in IDEs that support this feature set_property(GLOBAL PROPERTY USE_FOLDERS ON) include(${CMAKE_CURRENT_LIST_DIR}/cmake/Common.cmake) include(${CMAKE_CURRENT_LIST_DIR}/cmake/AddPlatformExecutable.cmake) include(FetchContent) # options option(BUILD_TOOLS "Build tools for curating content for Prism" OFF) option(BUILD_EXAMPLE "Build example program" ON) if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") message("Linux build detected!") find_package(SDL2 CONFIG) if(NOT TARGET SDL2::SDL2) find_package(SDL2 REQUIRED) endif() set(ENABLE_VULKAN TRUE) set(ENABLE_LINUX TRUE) set(NEEDS_HOSTED_SHADER_COMPILER FALSE) endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND NOT IOS) message("macOS build detected!") find_package(SDL2 REQUIRED) set(ENABLE_VULKAN TRUE) set(ENABLE_DARWIN TRUE) set(ENABLE_MACOS TRUE) set(ENABLE_METAL TRUE) set(CMAKE_XCODE_GENERATE_SCHEME OFF) set(NEEDS_HOSTED_SHADER_COMPILER FALSE) endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "iOS") message("iOS build detected!") set(ENABLE_VULKAN TRUE) set(ENABLE_DARWIN TRUE) set(ENABLE_IOS TRUE) set(ENABLE_METAL TRUE) set(NEEDS_HOSTED_SHADER_COMPILER TRUE) set(EXTRA_PLATFORM_ARG "mobile") endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "tvOS") message("tvOS build detected!") set(ENABLE_VULKAN TRUE) set(ENABLE_DARWIN TRUE) set(ENABLE_TVOS TRUE) set(ENABLE_METAL TRUE) set(NEEDS_HOSTED_SHADER_COMPILER TRUE) set(EXTRA_PLATFORM_ARG "mobile") endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") message("Windows build detected!") find_package(SDL2 REQUIRED) set(ENABLE_WINDOWS TRUE) set(ENABLE_VULKAN TRUE) set(ENABLE_DX12 TRUE) set(NEEDS_HOSTED_SHADER_COMPILER FALSE) endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") message("Web build detected!") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3 -O0") set(ENABLE_WEB TRUE) set(ENABLE_WEBGPU TRUE) set(NEEDS_HOSTED_SHADER_COMPILER TRUE) endif() if(ENABLE_VULKAN) find_package(Vulkan REQUIRED) list(APPEND SHADER_LANGUAGES "spv") endif() if(ENABLE_DX12) list(APPEND SHADER_LANGUAGES "hlsl") endif() if(ENABLE_WEBGPU) list(APPEND SHADER_LANGUAGES "wgsl") endif() if(ENABLE_METAL) list(APPEND SHADER_LANGUAGES "msl") endif() if(NEEDS_HOSTED_SHADER_COMPILER AND (NOT DEFINED SHADER_COMPILER_LOCATION)) message(FATAL_ERROR "You are building for a platform that needs a hosted shader compiler. Please specify the path in SHADER_COMPILER_LOCATION!") endif() add_subdirectory(extern) # enable lto if (CMAKE_BUILD_TYPE EQUAL "Release") set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) endif() add_subdirectory(platforms) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) add_subdirectory(engine) add_subdirectory(tools) if(BUILD_EXAMPLE) add_subdirectory(example) endif()