From c07eae32c31f0cca79c68404c36cc769f11c0b88 Mon Sep 17 00:00:00 2001 From: Warwick Date: Wed, 29 Nov 2023 11:48:59 +0000 Subject: [PATCH] Added functionality to detect debug and release mode in code. --- CMakeLists.txt | 13 +++++++++---- src/yave_vulkan_instance.cpp | 10 ++++++++++ src/yave_vulkan_instance.hpp | 15 ++++++++++++--- toolchain.cmake | 13 +++++++++++++ 4 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 toolchain.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a81fa5..7131e64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,19 @@ cmake_minimum_required(VERSION 3.16) + +# set toolchain file +set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/toolchain.cmake" + CACHE PATH "Path to the desired toolchain file.") + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_CXX_CLANG_TIDY) + project(yave VERSION 0 DESCRIPTION "Yet Another Vulkan Engine" HOMEPAGE_URL "https://git.warwicknew.xyz/yave/" LANGUAGES C CXX) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_CLANG_TIDY) - file(GLOB_RECURSE SOURCE_FILES ${CMAKE_SOURCE_DIR}/src/*.c ${CMAKE_SOURCE_DIR}/src/*.cpp) diff --git a/src/yave_vulkan_instance.cpp b/src/yave_vulkan_instance.cpp index 7cc13a1..ce44275 100644 --- a/src/yave_vulkan_instance.cpp +++ b/src/yave_vulkan_instance.cpp @@ -7,6 +7,7 @@ YaveVulkanInstance::YaveVulkanInstance() { createInstance(); } YaveVulkanInstance::~YaveVulkanInstance() { destroyInstance(); } void YaveVulkanInstance::createInstance() { + checkLayersValidSuppport(); VkApplicationInfo appInfo{}; appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; appInfo.pApplicationName = "Hello Triangle"; @@ -38,4 +39,13 @@ void YaveVulkanInstance::destroyInstance() { vkDestroyInstance(this->instance, nullptr); } +bool YaveVulkanInstance::checkLayersValidSuppport() { + // Continue if validation is disabled + if (this->enableValidationLayers) { + throw std::runtime_error("validation layers requested, but not available!"); + return false; + } + return true; +} + } // namespace yave diff --git a/src/yave_vulkan_instance.hpp b/src/yave_vulkan_instance.hpp index 26c6f5e..91e69ee 100644 --- a/src/yave_vulkan_instance.hpp +++ b/src/yave_vulkan_instance.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #define GLFW_INCLUDE_VULKAN @@ -11,15 +12,23 @@ class YaveVulkanInstance { private: VkInstance instance; - void createInstance(); - void destroyInstance(); + // Validation support + bool checkLayersValidSuppport(); + const std::vector validationLayers = { + "VK_LAYER_KHRONOS_validation"}; +#ifdef NDEBUG // Enable Validation in debug mode + const bool enableValidationLayers = false; +#else + const bool enableValidationLayers = true; +#endif + public: // Delete Copy constructors // This class should match one to one with vulkan instances - YaveVulkanInstance(const YaveVulkanInstance&) = delete; + YaveVulkanInstance(const YaveVulkanInstance &) = delete; YaveVulkanInstance &operator=(const YaveVulkanInstance &) = delete; YaveVulkanInstance(); diff --git a/toolchain.cmake b/toolchain.cmake new file mode 100644 index 0000000..c3b1e15 --- /dev/null +++ b/toolchain.cmake @@ -0,0 +1,13 @@ +# CMake toolchain file + +# linker flags +set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--strip-debug") + +# cflags +set(CMAKE_CXX_FLAGS_INIT "-ansi -Wall") + +# cflags for debug build +set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g3 -ggdb3") + +# cflags for release build +set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG -s")