Project
This commit is contained in:
@@ -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})
|
||||
@@ -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"
|
||||
)
|
||||
Executable
+57
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
Executable
+37
@@ -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}"
|
||||
)
|
||||
@@ -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()
|
||||
Executable
+36
@@ -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}"
|
||||
)
|
||||
Reference in New Issue
Block a user