commit e34ce9543662cdf41d03f64d2b1ce624d99147a8 Author: Krishna Ayyalasomayajula Date: Sat Dec 27 15:07:45 2025 -0600 it compiles diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ec8e6b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# OS junk +.DS_Store +Thumbs.db + +# Editor settings +.vscode/** +.idea/** +*.swp +*.swo + +# Build system metadata (keep actual build dirs tracked) +CMakeFiles/** +CMakeCache.txt +cmake_install.cmake +Makefile +compile_commands.json + +# Logs and temp files +*.log +*.tmp +*.bak +*.old + +build/** +*.toml +.cache/** + + +**/*.aux +**/*.fdb_latexmk +**/*.fls +**/*.log +**/*.synctex.gz +**/*.blg +**/*.bcf +**/*.run.xml +**/*.bbl diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e5c2a0f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,13 @@ +[submodule "external/spdlog"] + path = external/spdlog + url = https://github.com/gabime/spdlog + +[submodule "external/shaderc"] + path = external/shaderc + url = https://github.com/google/shaderc +[submodule "external/SPIRV-Tools"] + path = external/SPIRV-Tools + url = https://github.com/KhronosGroup/SPIRV-Tools +[submodule "external/VulkanMemoryAllocator"] + path = external/VulkanMemoryAllocator + url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..9ed7860 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,101 @@ +cmake_minimum_required(VERSION 3.20) + +# ----------------------------- +# Compiler +# ----------------------------- +project(cube LANGUAGES C CXX) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# ----------------------------- +# Sources +# ----------------------------- +file(GLOB_RECURSE CUBE_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c +) + +add_executable(${PROJECT_NAME} ${CUBE_SOURCES}) + +target_include_directories(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src +) + +# ----------------------------- +# Compile definitions +# ----------------------------- +target_compile_definitions(${PROJECT_NAME} PRIVATE + VK_NO_PROTOTYPES + VMA_STATIC_VULKAN_FUNCTIONS=0 + VMA_DYNAMIC_VULKAN_FUNCTIONS=1 + VMA_VULKAN_VERSION=1003000 +) + +# ----------------------------- +# Warnings +# ----------------------------- +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall + -Wextra + -Wpedantic + -Wconversion + -Wshadow + -Wnull-dereference + -Wdouble-promotion + -Wimplicit-fallthrough + ) +endif() + +# ============================= +# Dependencies (vendored) +# ============================= + +# ---- spdlog (header-only) +add_subdirectory(external/spdlog) +target_link_libraries(${PROJECT_NAME} PRIVATE spdlog::spdlog_header_only) + +# ---- Vulkan Memory Allocator +add_subdirectory(external/VulkanMemoryAllocator) +target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator) + +# ---- SPIR-V stack (required by shaderc) +add_subdirectory(external/spirv-headers) +add_subdirectory(external/SPIRV-Tools) +add_subdirectory(external/glslang) + +# ---- shaderc +set(SHADERC_SKIP_TESTS ON CACHE BOOL "" FORCE) +set(SHADERC_SKIP_EXAMPLES ON CACHE BOOL "" FORCE) +set(SHADERC_SKIP_INSTALL ON CACHE BOOL "" FORCE) +set(SHADERC_ENABLE_SHARED_CRT OFF CACHE BOOL "" FORCE) +set(SHADERC_ENABLE_SPIRV_TOOLS ON CACHE BOOL "" FORCE) + +add_subdirectory(external/shaderc) +target_link_libraries(${PROJECT_NAME} PRIVATE shaderc_shared) + +# ============================= +# System dependencies +# ============================= + +find_package(Vulkan REQUIRED) +find_package(Threads REQUIRED) +find_package(PkgConfig REQUIRED) +pkg_check_modules(LIBDRM REQUIRED libdrm) + +target_include_directories(${PROJECT_NAME} PRIVATE + ${LIBDRM_INCLUDE_DIRS} +) + +target_link_libraries(${PROJECT_NAME} PRIVATE + Vulkan::Vulkan + Threads::Threads + ${LIBDRM_LIBRARIES} +) + diff --git a/external/SPIRV-Tools b/external/SPIRV-Tools new file mode 160000 index 0000000..91ac969 --- /dev/null +++ b/external/SPIRV-Tools @@ -0,0 +1 @@ +Subproject commit 91ac969ed599bfd0697a5b88cfae550318a04392 diff --git a/external/VulkanMemoryAllocator b/external/VulkanMemoryAllocator new file mode 160000 index 0000000..e722e57 --- /dev/null +++ b/external/VulkanMemoryAllocator @@ -0,0 +1 @@ +Subproject commit e722e57c891a8fbe3cc73ca56c19dd76be242759 diff --git a/external/glslang b/external/glslang new file mode 160000 index 0000000..455fb86 --- /dev/null +++ b/external/glslang @@ -0,0 +1 @@ +Subproject commit 455fb86658e98f8eb7d7a1b3980a0524a05160eb diff --git a/external/shaderc b/external/shaderc new file mode 160000 index 0000000..e0a5092 --- /dev/null +++ b/external/shaderc @@ -0,0 +1 @@ +Subproject commit e0a5092b4b05dbcc448b0883f3575163634f8e86 diff --git a/external/spdlog b/external/spdlog new file mode 160000 index 0000000..32dd298 --- /dev/null +++ b/external/spdlog @@ -0,0 +1 @@ +Subproject commit 32dd298dc2d60fe0454e70b818d64941392c5b41 diff --git a/external/spirv-headers b/external/spirv-headers new file mode 160000 index 0000000..0a7f626 --- /dev/null +++ b/external/spirv-headers @@ -0,0 +1 @@ +Subproject commit 0a7f626a6ae86284a413d105b47a6fb413bf6c92 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..881e820 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,7 @@ +#include +#include + +int main (int argc, char *argv[]) { + spdlog::info("Hello World"); + return 0; +}