commit 9cb8c1854f0e1cf7ef19ac4b5dfa693aa53bdfbe Author: firewire Date: Sat Apr 11 17:29:03 2026 -0400 Project setup diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..3c65f56 --- /dev/null +++ b/.clang-format @@ -0,0 +1,57 @@ +--- +Language: Cpp +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignOperands: true +AlignTrailingComments: false +AlwaysBreakTemplateDeclarations: Yes +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBraces: Custom +BreakConstructorInitializers: AfterColon +BreakConstructorInitializersBeforeComma: false +ColumnLimit: 120 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ContinuationIndentWidth: 8 +IncludeCategories: + - Regex: '^<.*' + Priority: 1 + - Regex: '^".*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentWidth: 4 +InsertNewlineAtEOF: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: All +SpaceAfterCStyleCast: true +SpaceAfterTemplateKeyword: false +SpaceBeforeRangeBasedForLoopColon: false +SpaceInEmptyParentheses: false +SpacesInAngles: false +SpacesInConditionalStatement: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +TabWidth: 4 +... diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..adedb95 --- /dev/null +++ b/.clangd @@ -0,0 +1,3 @@ +CompileFlags: + Add: -Wno-unknown-warning-option + Remove: [-m*, -f*] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f67ad1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +build/ +.idea +.zed +!deps/JoltPhysics/Build +.cache +.vscode +build-clion/ +bin/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..085fbe8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.28) +project(oatmeal) +set(CMAKE_CXX_STANDARD 20) + +# Include the libary +add_subdirectory(oatmeal) + +file(GLOB CMAKE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.cmake") +foreach(cmake_file ${CMAKE_FILES}) + include(${cmake_file}) +endforeach() + +add_subdirectory(examples/shared) + +add_subdirectory(examples/basicGLFWWindow) +add_subdirectory(examples/logging) diff --git a/assets/placeholder b/assets/placeholder new file mode 100644 index 0000000..e69de29 diff --git a/cmake/compileCommands.cmake b/cmake/compileCommands.cmake new file mode 100644 index 0000000..38fa25b --- /dev/null +++ b/cmake/compileCommands.cmake @@ -0,0 +1,14 @@ +##### SETUP COMPILE COMMANDS ##### + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_EXPORT_COMPILE_COMMANDS on) +endif() + +if(EXISTS "${CMAKE_BINARY_DIR}/compile_commands.json") + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + file( + COPY "${CMAKE_BINARY_DIR}/compile_commands.json" + DESTINATION "${CMAKE_BINARY_DIR}/../" + ) + endif() +endif() diff --git a/cmake/platform.cmake b/cmake/platform.cmake new file mode 100644 index 0000000..0791c94 --- /dev/null +++ b/cmake/platform.cmake @@ -0,0 +1,10 @@ +message("System name: ${CMAKE_HOST_SYSTEM_NAME}") +if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") + add_compile_definitions(PLATFORM_WINDOWS) +elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") + add_compile_definitions(PLATFORM_LINUX) +elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") + add_compile_definitions(PLATFORM_MACOS) +else() + add_compile_definitions(PLATFORM_UNKNOWN) +endif() diff --git a/examples/basicGLFWWindow/CMakeLists.txt b/examples/basicGLFWWindow/CMakeLists.txt new file mode 100644 index 0000000..fcbc14d --- /dev/null +++ b/examples/basicGLFWWindow/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.28) +project(oatmeal) +set(CMAKE_CXX_STANDARD 23) + +add_executable(basicGLFWWindow "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp") +target_include_directories(basicGLFWWindow PRIVATE oatmeal SharedUtils) +target_link_libraries(basicGLFWWindow oatmeal SharedUtils) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set_target_properties(basicGLFWWindow PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/Debug/") +endif() +if(CMAKE_BUILD_TYPE STREQUAL "Release") + set_target_properties(basicGLFWWindow PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/Release/") +endif() +if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set_target_properties(basicGLFWWindow PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/Relwithdeb/") +endif() + diff --git a/examples/basicGLFWWindow/main.cpp b/examples/basicGLFWWindow/main.cpp new file mode 100644 index 0000000..b0c263b --- /dev/null +++ b/examples/basicGLFWWindow/main.cpp @@ -0,0 +1,10 @@ +#include "shared/logger.h" + +int main() { + OatmealUtils::initLogging(); + OatmealUtils::createLogger("window", nullptr); + + OatmealUtils::get("window")->info("Test"); + + return 0; +} diff --git a/examples/logging/CMakeLists.txt b/examples/logging/CMakeLists.txt new file mode 100644 index 0000000..e4d9196 --- /dev/null +++ b/examples/logging/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.28) +project(oatmeal) +set(CMAKE_CXX_STANDARD 23) + +add_executable(logging "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp") +target_include_directories(logging PRIVATE oatmeal SharedUtils) +target_link_libraries(logging oatmeal SharedUtils) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set_target_properties(logging PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/Debug/") +endif() +if(CMAKE_BUILD_TYPE STREQUAL "Release") + set_target_properties(logging PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/Release/") +endif() +if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set_target_properties(logging PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/Relwithdeb/") +endif() + diff --git a/examples/logging/main.cpp b/examples/logging/main.cpp new file mode 100644 index 0000000..b248898 --- /dev/null +++ b/examples/logging/main.cpp @@ -0,0 +1,17 @@ +#include +#include "shared/logger.h" + +int main() { + OatmealUtils::initLogging(); + OatmealUtils::createLogger("logger", nullptr); + + OatmealUtils::get("logger")->debug("This is a debug message!"); + OatmealUtils::get("logger")->info("This is an info message!"); + OatmealUtils::get("logger")->warn("This is a warning message!"); + OatmealUtils::get("logger")->critical("This is a critical message!"); + uint32_t a = 5; + std::string b = "Test string arg!"; + OatmealUtils::get("logger")->info("String arg: {} uint32_t args: {}", b, a); + + return 0; +} diff --git a/examples/shared/CMakeLists.txt b/examples/shared/CMakeLists.txt new file mode 100644 index 0000000..1eec1a1 --- /dev/null +++ b/examples/shared/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.28) +project(oatmeal) +set(CMAKE_CXX_STANDARD 23) + +CPMAddPackage( + URI "gh:gabime/spdlog@1.17.0" +) + +file(GLOB_RECURSE SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/shared/*.cpp") +file(GLOB_RECURSE HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/shared/*.h") +add_library(SharedUtils STATIC ${SRC_FILES} ${HEADER_FILES}) + +target_include_directories(SharedUtils PUBLIC + ${spdlog_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR} +) + +target_link_libraries(SharedUtils PUBLIC + spdlog +) diff --git a/examples/shared/shared/logger.cpp b/examples/shared/shared/logger.cpp new file mode 100644 index 0000000..d27ab99 --- /dev/null +++ b/examples/shared/shared/logger.cpp @@ -0,0 +1,48 @@ +#include "logger.h" +#include +#include +#include +#include "spdlog/async.h" +#include "spdlog/sinks/basic_file_sink.h" +#include "spdlog/sinks/stdout_color_sinks.h" +#include "spdlog/spdlog.h" + +namespace OatmealUtils { + + void initLogging() { + spdlog::init_thread_pool(8192, 1); + spdlog::flush_every(std::chrono::seconds(1)); + } + + void createLogger(const char *name, const char *filename) { + std::vector sinks{}; + + const auto stdoutSink = std::make_shared(); + stdoutSink->set_level(spdlog::level::debug); + stdoutSink->set_pattern("%^[%D %r %z] [%n] [%l] [thread %t] %v%$"); + sinks.emplace_back(stdoutSink); + + if (filename != nullptr) { + const auto fileSink = std::make_shared(filename); + fileSink->set_level(spdlog::level::debug); + fileSink->set_pattern("%^[%D %r %z] [%n] [%l] [thread %t] %v%$"); + sinks.emplace_back(fileSink); + } + + const auto logger = std::make_shared( + name, sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block); + + logger->flush_on(spdlog::level::warn); +#ifndef NDEBUG + logger->set_level(spdlog::level::debug); +#else + logger->set_level(spdlog::level::info); +#endif // !NDEBUG + + spdlog::register_logger(logger); + } + + void createLogger(std::string name, std::string filename) { createLogger(name.c_str(), filename.c_str()); } + std::shared_ptr get(const char *name) { return spdlog::get(name); } + std::shared_ptr get(std::string name) { return spdlog::get(name); } +} // namespace OatmealUtils diff --git a/examples/shared/shared/logger.h b/examples/shared/shared/logger.h new file mode 100644 index 0000000..32881a5 --- /dev/null +++ b/examples/shared/shared/logger.h @@ -0,0 +1,20 @@ +#ifndef OATMEAL_LOGGER +#define OATMEAL_LOGGER + +#include +#include +#include "string" + +namespace OatmealUtils { + + using logger = spdlog::logger; + + void initLogging(); + void createLogger(const char *name, const char *filename); + void createLogger(std::string name, std::string filename); + std::shared_ptr get(const char *name); + std::shared_ptr get(std::string name); + +} // namespace OatmealUtils + +#endif // !OATMEAL_LOGGER diff --git a/oatmeal/CMakeLists.txt b/oatmeal/CMakeLists.txt new file mode 100644 index 0000000..9cb89a1 --- /dev/null +++ b/oatmeal/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.28) +project(oatmeal) +set(CMAKE_CXX_STANDARD 23) + +if((${CMAKE_BUILD_TYPE} STREQUAL "Debug") AND (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")) + set(BUILD_SHARED_LIBS ON) +else() + set(BUILD_SHARED_LIBS OFF) +endif() + +##### Dependencies #####s +set(CMAKE_POLICY_VERSION_MINIMUM 3.5) +option(ENABLE_CPP20_MODULE "Enable C++ 20 module support for Vulkan" OFF) + +file(GLOB REQUIRED_CMAKE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.required.cmake") +foreach(cmake_file ${REQUIRED_CMAKE_FILES}) + include(${cmake_file}) +endforeach() + +file(GLOB CMAKE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.cmake") +foreach(cmake_file ${CMAKE_FILES}) + include(${cmake_file}) +endforeach() + +file(GLOB_RECURSE SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") +file(GLOB_RECURSE HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h") +add_library(oatmeal ${SRC_FILES} ${HEADER_FILES}) + +target_include_directories(oatmeal PUBLIC + "${glfw_SOURCE_DIR}/include" + "${glm_SOURCE_DIR}" + "${stb-cmake-wrapper_SOURCE_DIR}" + "${ktx_SOURCE_DIR}/include" +) + +target_link_libraries(oatmeal PUBLIC + glfw + Vulkan::cppm + glm + stb::image + ktx +) diff --git a/oatmeal/cmake/CPM.required.cmake b/oatmeal/cmake/CPM.required.cmake new file mode 100644 index 0000000..f30e8d4 --- /dev/null +++ b/oatmeal/cmake/CPM.required.cmake @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: MIT +# +# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors + +set(CPM_DOWNLOAD_VERSION 0.42.1) +set(CPM_HASH_SUM "f3a6dcc6a04ce9e7f51a127307fa4f699fb2bade357a8eb4c5b45df76e1dc6a5") + +if(CPM_SOURCE_CACHE) + set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +elseif(DEFINED ENV{CPM_SOURCE_CACHE}) + set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +else() + set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake") +endif() + +# Expand relative path. This is important if the provided path contains a tilde (~) +get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE) + +file(DOWNLOAD + https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake + ${CPM_DOWNLOAD_LOCATION} EXPECTED_HASH SHA256=${CPM_HASH_SUM} +) + +include(${CPM_DOWNLOAD_LOCATION}) diff --git a/oatmeal/cmake/GLFW.cmake b/oatmeal/cmake/GLFW.cmake new file mode 100644 index 0000000..5b76e39 --- /dev/null +++ b/oatmeal/cmake/GLFW.cmake @@ -0,0 +1,11 @@ +# add check for CPM + + +CPMAddPackage ( + URI "https://github.com/glfw/glfw/releases/download/3.4/glfw-3.4.zip" + OPTIONS "GLFW_BUILD_DOCS OFF" + OPTIONS "GLFW_BUILD_TEST OFF" + OPTIONS "GLFW_BUILD_EXAMPLES OFF" + OPTIONS "GLFW_BUILD_X11 OFF" + OPTIONS "GLFW_BUILD_WAYLAND ON" +) diff --git a/oatmeal/cmake/GLM.cmake b/oatmeal/cmake/GLM.cmake new file mode 100644 index 0000000..f2c44a2 --- /dev/null +++ b/oatmeal/cmake/GLM.cmake @@ -0,0 +1,8 @@ +# add check for cpm + +CPMAddPackage( + URI "https://github.com/g-truc/glm/releases/download/1.0.3/glm-1.0.3.zip" + OPTIONS "GLM_BUILD_LIBRARY ON" + OPTIONS "GLM_BUILD_TESTS OFF" + OPTIONS "GLM_ENABLE_CXX_20 ON" +) diff --git a/oatmeal/cmake/Vulkan.cmake b/oatmeal/cmake/Vulkan.cmake new file mode 100644 index 0000000..23064ac --- /dev/null +++ b/oatmeal/cmake/Vulkan.cmake @@ -0,0 +1,57 @@ +# Vulkan # +if(ENABLE_CPP20_MODULE) + set(CMAKE_CXX_SCAN_FOR_MODULES ON) +endif() + +find_package(Vulkan REQUIRED) +if(ENABLE_CPP20_MODULE) + add_library(VulkanCppModule) + add_library(Vulkan::cppm ALIAS VulkanCppModule) + + target_compile_definitions(VulkanCppModule + PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1 VULKAN_HPP_NO_STRUCT_CONSTRUCTORS=1 + ) + target_include_directories(VulkanCppModule + PUBLIC + "${Vulkan_INCLUDE_DIR}" + ) + target_link_libraries(VulkanCppModule + PUBLIC + Vulkan::Vulkan + ) + + set_target_properties(VulkanCppModule PROPERTIES CXX_STANDARD 20) + + if(MSVC) + target_compile_options(VulkanCppModule PRIVATE + /std:c++latest + /permissive- + /Zc:__cplusplus + /EHsc + /Zc:preprocessor + /translateInclude + ) + endif() + + target_sources(VulkanCppModule + PUBLIC + FILE_SET cxx_modules TYPE CXX_MODULES + BASE_DIRS + "${Vulkan_INCLUDE_DIR}" + FILES + "${Vulkan_INCLUDE_DIR}/vulkan/vulkan.cppm" + ) + + target_sources(VulkanCppModule + PRIVATE + "${Vulkan_INCLUDE_DIR}/vulkan/vulkan.cppm" + ) +else() + add_library(VulkanCppModule INTERFACE) + add_library(Vulkan::cppm ALIAS VulkanCppModule) + target_link_libraries(VulkanCppModule INTERFACE Vulkan::Vulkan) + target_compile_definitions(VulkanCppModule + INTERFACE VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1 VULKAN_HPP_NO_STRUCT_CONSTRUCTORS=1 + ) +endif() + diff --git a/oatmeal/cmake/glsl.cmake b/oatmeal/cmake/glsl.cmake new file mode 100644 index 0000000..6b89d39 --- /dev/null +++ b/oatmeal/cmake/glsl.cmake @@ -0,0 +1,37 @@ +option(SHADERS_DIR "Directory to look for GLSL shaders" "assets/shaders") + +find_program(GLSLC_EXECUTABLE NAMES glslc) +if(NOT GLSLC_EXECUTABLE) + message(FATAL_ERROR "glslc executable not found.") +else() + message(STATUS "Found glslc executable: ${GLSLC_EXECUTABLE}") +endif() + +function(create_glslc_shader_target TARGET SOURCE_DIR OUTPUT_DIR) + file(MAKE_DIRECTORY ${OUTPUT_DIR}) + message(STATUS "GLSL Shader output directory: ${OUTPUT_DIR}") + file (GLOB SHADER_FILES "${SOURCE_DIR}/*.vert") + file(GLOB FRAG_FILES "${SOURCE_DIR}/*.frag") + list(APPEND SHADER_FILES ${FRAG_FILES}) + message(STATUS "Found glsl shaders: ${SHADER_FILES}") + set(OUTPUT_FILES "") + foreach(SHADER_FILE ${SHADER_FILES}) + get_filename_component(SHADER_NAME ${SHADER_FILE} NAME) + set(OUTPUT_FILE "${OUTPUT_DIR}/${SHADER_NAME}.spv") + list(APPEND OUTPUT_FILES ${OUTPUT_FILE}) + message(STATUS "Compiling ${SHADER_FILE} to ${OUTPUT_FILE}") + add_custom_command ( + OUTPUT ${OUTPUT_FILE} + COMMAND ${GLSLC_EXECUTABLE} ${SHADER_FILE} -o ${OUTPUT_FILE} + DEPENDS ${SHADER_FILE} + COMMENT "Compiling ${SHADER_FILE} -> ${OUTPUT_FILE}" + VERBATIM + ) + endforeach() + add_custom_target(${TARGET} ALL DEPENDS ${OUTPUT_FILES}) +endfunction() + +create_glslc_shader_target(glsl_shaders + "${SHADERS_DIR}" + "${CMAKE_CURRENT_BINARY_DIR}/${SHADERS_DIR}" +) diff --git a/oatmeal/cmake/ktx.cmake b/oatmeal/cmake/ktx.cmake new file mode 100644 index 0000000..7afd8f2 --- /dev/null +++ b/oatmeal/cmake/ktx.cmake @@ -0,0 +1,5 @@ +CPMAddPackage( + URI "gh:KhronosGroup/KTX-Software@4.4.2" + OPTIONS "KTX_FEATURE_TESTS OFF" + OPTIONS "KTX_FEATURE_JS OFF" +) diff --git a/oatmeal/cmake/platform.cmake b/oatmeal/cmake/platform.cmake new file mode 100644 index 0000000..0791c94 --- /dev/null +++ b/oatmeal/cmake/platform.cmake @@ -0,0 +1,10 @@ +message("System name: ${CMAKE_HOST_SYSTEM_NAME}") +if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") + add_compile_definitions(PLATFORM_WINDOWS) +elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") + add_compile_definitions(PLATFORM_LINUX) +elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") + add_compile_definitions(PLATFORM_MACOS) +else() + add_compile_definitions(PLATFORM_UNKNOWN) +endif() diff --git a/oatmeal/cmake/slang.cmake b/oatmeal/cmake/slang.cmake new file mode 100644 index 0000000..9ce9b92 --- /dev/null +++ b/oatmeal/cmake/slang.cmake @@ -0,0 +1,36 @@ +option(SHADERS_DIR "Directory to look for SLANG shaders" "assets/shaders") + +find_program(SLANGC_EXECUTABLE NAMES slangc) +if(NOT SLANGC_EXECUTABLE) + message(FATAL_ERROR "slangc executable not found.") +else() + message(STATUS "Found slangc executable: ${SLANGC_EXECUTABLE}") +endif() + +function(create_slang_shader_target TARGET SOURCE_DIR OUTPUT_DIR) + file(MAKE_DIRECTORY ${OUTPUT_DIR}) + message(STATUS "Shader output directory: ${OUTPUT_DIR}") + file(GLOB SHADER_FILES "${SOURCE_DIR}/*.slang") + message(STATUS "Found shaders: ${SHADER_FILES}") + set(ENTRY_POINTS -entry vertMain -entry fragMain) + set(OUTPUT_FILES "") + foreach(SHADER_FILE ${SHADER_FILES}) + get_filename_component(SHADER_NAME ${SHADER_FILE} NAME_WE) + set(OUTPUT_FILE "${OUTPUT_DIR}/${SHADER_NAME}.spv") + list(APPEND OUTPUT_FILES ${OUTPUT_FILE}) + message(STATUS "Compiling ${SHADER_FILE} to ${OUTPUT_FILE}") + add_custom_command( + OUTPUT ${OUTPUT_FILE} + COMMAND ${SLANGC_EXECUTABLE} ${SHADER_FILE} -target spirv -profile spirv_1_4 -emit-spirv-directly -fvk-use-entrypoint-name ${ENTRY_POINTS} -o ${OUTPUT_FILE} + DEPENDS ${SHADER_FILE} + COMMENT "Compiling ${SHADER_FILE} -> ${OUTPUT_FILE}" + VERBATIM + ) + endforeach() + add_custom_target(${TARGET} ALL DEPENDS ${OUTPUT_FILES}) +endfunction() + +create_slang_shader_target(slang_shaders + "${SHADERS_DIR}" + "${CMAKE_CURRENT_BINARY_DIR}/${SHADERS_DIR}" +) diff --git a/oatmeal/cmake/stb.cmake b/oatmeal/cmake/stb.cmake new file mode 100644 index 0000000..e824435 --- /dev/null +++ b/oatmeal/cmake/stb.cmake @@ -0,0 +1,4 @@ +set(CMAKE_POLICY_VERSION_MINIMUM 3.5) +CPMAddPackage( + URI "gh:ovis-interactive/stb-cmake-wrapper@0.1" +) diff --git a/oatmeal/src/ctx.cpp b/oatmeal/src/ctx.cpp new file mode 100644 index 0000000..248cf4f --- /dev/null +++ b/oatmeal/src/ctx.cpp @@ -0,0 +1,11 @@ +#include "ctx.h" +#include + +namespace Oatmeal { +ctx::ctx() {} + +ctx::~ctx() {} + +void ctx::test() { std::cout << "Test" << std::endl; } + +} // namespace Oatmeal diff --git a/oatmeal/src/ctx.h b/oatmeal/src/ctx.h new file mode 100644 index 0000000..ed2abd5 --- /dev/null +++ b/oatmeal/src/ctx.h @@ -0,0 +1,12 @@ +namespace Oatmeal { + +class ctx { +public: + ctx(); + ~ctx(); + + void test(); + +private: +}; +} // namespace Oatmeal diff --git a/scripts/build-debug.sh b/scripts/build-debug.sh new file mode 100755 index 0000000..497b992 --- /dev/null +++ b/scripts/build-debug.sh @@ -0,0 +1,8 @@ +#/bin/bash + +cd .. +mkdir -p build +cd build +mkdir -p debug +cd debug +ninja diff --git a/scripts/build-release.sh b/scripts/build-release.sh new file mode 100755 index 0000000..01fa218 --- /dev/null +++ b/scripts/build-release.sh @@ -0,0 +1,8 @@ +#/bin/bash + +cd .. +mkdir -p build +cd build +mkdir -p release +cd release +ninja diff --git a/scripts/build-relwithdeb.sh b/scripts/build-relwithdeb.sh new file mode 100755 index 0000000..396dca8 --- /dev/null +++ b/scripts/build-relwithdeb.sh @@ -0,0 +1,8 @@ +#/bin/bash + +cd .. +mkdir -p build +cd build +mkdir -p relwithdeb +cd relwithdeb +ninja diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..fa2fa6a --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +cd ../ +mkdir -p build +cd build || exit +mkdir -p debug +mkdir -p release +mkdir -p relwithdeb + +cd debug || exit +cmake ../../ -G Ninja -DCMAKE_BUILD_TYPE=Debug & +cd ../ +cd release || exit +cmake ../../ -G Ninja -DCMAKE_BUILD_TYPE=Release & +cd ../ +cd relwithdeb || exit +cmake ../../ -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo & +cd ../ + +wait + +cd debug || exit +ninja & +cd ../ +cd release || exit +ninja & +cd ../ +cd relwithdeb || exit +ninja & +cd ../.. + +wait diff --git a/scripts/clean.sh b/scripts/clean.sh new file mode 100755 index 0000000..3595225 --- /dev/null +++ b/scripts/clean.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +cd .. +cd build/debug || exit +ninja clean + +cd .. +cd release || exit +ninja clean + +cd .. +cd relwithdeb || exit +ninja clean diff --git a/scripts/configure-debug.sh b/scripts/configure-debug.sh new file mode 100755 index 0000000..e269ff2 --- /dev/null +++ b/scripts/configure-debug.sh @@ -0,0 +1,8 @@ +#/bin/bash + +cd .. +mkdir -p build +cd build +mkdir -p debug +cd debug +cmake ../../ -G Ninja -DCMAKE_BUILD_TYPE=Debug diff --git a/scripts/configure-release.sh b/scripts/configure-release.sh new file mode 100755 index 0000000..e6a1d81 --- /dev/null +++ b/scripts/configure-release.sh @@ -0,0 +1,8 @@ +#/bin/bash + +cd .. +mkdir -p build +cd build +mkdir -p release +cd release +cmake ../../ -G Ninja -DCMAKE_BUILD_TYPE=Release diff --git a/scripts/configure-relwithdeb.sh b/scripts/configure-relwithdeb.sh new file mode 100755 index 0000000..fa79d5b --- /dev/null +++ b/scripts/configure-relwithdeb.sh @@ -0,0 +1,8 @@ +#/bin/bash + +cd .. +mkdir -p build +cd build +mkdir -p relwithdeb +cd relwithdeb +cmake ../../ -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo