Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,10 @@

# Precompiled shaders
*.spv

# Common build directories
[Bb]in/*
[Bb]uild/*
[Oo]ut/*
[Rr]esult/*
[Tt]arget/*
73 changes: 73 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
cmake_minimum_required(VERSION 3.14)
project(vkutils)

set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
set(COMPILE_WARNING_AS_ERROR ON)
set(LINKER_LANGUAGE C)

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address -g")

option(BUILD_EXAMPLES OFF)
option(BUILD_SHARED OFF)
option(SYSTEM_LIBRARIES OFF)

if (CMAKE_BUILD_TYPE EQUAL "Debug")
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_DEBUG})
set(CMAKE_LINKER_FLAGS ${CMAKE_LINKER_FLAGS_DEBUG})
endif()

set(SOURCE_FILES
src/vkutils.c
lib/vk_mem_alloc/vk_mem_alloc.cpp
)

set(HEADER_FILES
lib/stb/stb_image.h
lib/vk_mem_alloc/vk_mem_alloc.h
src/vkutils.h
)

macro(build_library LINKING_TYPE)
message("Building as ${LINKING_TYPE}")
add_library(vkutils ${LINKING_TYPE} ${SOURCE_FILES} ${HEADER_FILES})
endmacro()

find_package(Vulkan REQUIRED)
find_package(cglm REQUIRED)
find_package(glfw3 REQUIRED)

if(SYSTEM_LIBRARIES)
# Find and use system's `stb` and `VulkanMemoryAllocator` files.
endif()

if(BUILD_SHARED)
build_library(SHARED)
else()
build_library(STATIC)

target_link_libraries(vkutils
Vulkan::Vulkan
cglm::cglm
glfw
-lm
)
endif()

if(BUILD_EXAMPLES)
add_subdirectory(run/)
endif()

include_directories(
${Vulkan_INCLUDE_DIR}
${cglm_INCLUDE_DIR}
${glfw3_INCLUDE_DIR}
)

target_include_directories(vkutils PUBLIC
src/
)

53 changes: 53 additions & 0 deletions run/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
set(SHADER_FILES
${CMAKE_SOURCE_DIR}/run/shader/post.frag
${CMAKE_SOURCE_DIR}/run/shader/post.vert
${CMAKE_SOURCE_DIR}/run/shader/simple.frag
${CMAKE_SOURCE_DIR}/run/shader/simple.vert
${CMAKE_SOURCE_DIR}/run/shader/staticpost.frag
)

macro(link target)
target_link_libraries(${target}
Vulkan::Vulkan
cglm::cglm
glfw
vkutils
-lm
)
endmacro()

add_custom_target(shaders)

add_executable(vkuTestBasicCube basic_cube.c)
add_executable(vkuTestPostProcessingCube postprocessing_cube.c)

add_dependencies(vkuTestBasicCube shaders)
add_dependencies(vkuTestPostProcessingCube shaders)

link(vkuTestBasicCube)
link(vkuTestPostProcessingCube)

file(COPY ${CMAKE_SOURCE_DIR}/run/resources
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/)

make_directory(${CMAKE_CURRENT_BINARY_DIR}/shader)

foreach(FILE ${SHADER_FILES})
get_filename_component(FILE_WE ${FILE} NAME_WE)

if(${FILE} MATCHES "(vert)")
set(OUTPUT_FILE "${FILE_WE}_vert.spv")
elseif(${FILE} MATCHES "(frag)")
set(OUTPUT_FILE "${FILE_WE}_frag.spv")
endif()

message(${OUTPUT_FILE})

add_custom_command(TARGET shaders
COMMAND glslc ${FILE} -o "${CMAKE_CURRENT_BINARY_DIR}/shader/${OUTPUT_FILE}"
MAIN_DEPENDENCY ${FILE}
COMMENT "Compiling ${FILE} with glslc"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM)
endforeach(FILE)