Skip to content
Snippets Groups Projects
Select Git revision
  • lecture_02-starter
  • lecture_02-final
  • lecture_03-starter
  • lecture_03-final
  • master default
  • lecture_01-final
  • lecture_01-starter
7 results

CMakeLists.txt

Blame
  • CMakeLists.txt 2.69 KiB
    cmake_minimum_required(VERSION 3.25)
    
    include(FetchContent)
    set(FETCHCONTENT_QUIET OFF)
    
    project(renderer C CXX)
    
    
    add_executable(${PROJECT_NAME})
    
    
    option(engine_debug "Turn on debug mode" ON)
    
    
    target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20)
    
    
    if (MSVC)
        target_compile_options(${PROJECT_NAME} PRIVATE
                /W4
                /WX
        )
    else ()
        target_compile_options(${PROJECT_NAME} PRIVATE
                -Wall
                -Wextra
                -Werror
                -Wno-missing-field-initializers
        )
    endif ()
    
    
    target_precompile_headers(${PROJECT_NAME} PRIVATE
            <algorithm>
            <concepts>
            <fstream>
            <functional>
            <iostream>
            <limits>
            <memory>
            <ranges>
            <set>
            <span>
            <sstream>
            <stdexcept>
            <string>
            <string_view>
            <thread>
            <type_traits>
            <unordered_map>
            <utility>
            <vector>
            <variant>
    )
    
    
    # Vulkan
    find_package(Vulkan REQUIRED)
    target_compile_definitions(${PROJECT_NAME} PRIVATE
            VULKAN_HPP_NO_TO_STRING
            VULKAN_HPP_NO_CONSTRUCTORS
            VULKAN_HPP_NO_SETTERS
            VULKAN_HPP_NO_SPACESHIP_OPERATOR
    )
    if (engine_debug)
        target_compile_definitions(${PROJECT_NAME} PRIVATE ENGINE_VULKAN_DEBUG)
    endif ()
    target_precompile_headers(${PROJECT_NAME} PRIVATE <vulkan/vulkan.hpp>)
    target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Vulkan)
    
    # VulkanMemoryAllocator
    set(STATIC_VULKAN_FUNCTIONS 0)
    set(DYNAMIC_VULKAN_FUNCTIONS 1)
    FetchContent_Declare(VulkanMemoryAllocator
            GIT_REPOSITORY https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
            GIT_TAG 2f382df
            GIT_PROGRESS TRUE
            SYSTEM
    )
    FetchContent_MakeAvailable(VulkanMemoryAllocator)
    target_compile_definitions(${PROJECT_NAME} PRIVATE
            VMA_STATIC_VULKAN_FUNCTIONS=${STATIC_VULKAN_FUNCTIONS}
            VMA_DYNAMIC_VULKAN_FUNCTIONS=${DYNAMIC_VULKAN_FUNCTIONS}
    )
    target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator)
    
    # GLFW
    FetchContent_Declare(GLFW
            GIT_REPOSITORY https://github.com/glfw/glfw.git
            GIT_TAG 3.3.9
            GIT_PROGRESS TRUE
            SYSTEM
    )
    FetchContent_MakeAvailable(GLFW)
    target_compile_definitions(${PROJECT_NAME} PRIVATE
            GLFW_INCLUDE_VULKAN
    )
    target_link_libraries(${PROJECT_NAME} PRIVATE glfw)
    
    # glm
    FetchContent_Declare(glm
            GIT_REPOSITORY https://github.com/g-truc/glm.git
            GIT_TAG 0.9.9.8
            GIT_PROGRESS TRUE
            SYSTEM
    )
    FetchContent_MakeAvailable(glm)
    target_compile_definitions(${PROJECT_NAME} PRIVATE
            GLM_FORCE_DEPTH_ZERO_TO_ONE
    )
    target_precompile_headers(${PROJECT_NAME} PRIVATE <glm/glm.hpp>)
    target_link_libraries(${PROJECT_NAME} PRIVATE glm::glm)
    
    
    add_subdirectory(src)