From 980940986504f368888f70f6500840d361d8aa8a Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Fri, 17 Sep 2021 16:14:39 +0200 Subject: [PATCH] [#107] Automatically initialize git lfs and update submodules via CMake Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- CMakeLists.txt | 2 +- config/Libraries.cmake | 6 ++ config/ext/Git.cmake | 74 +++++++++++++++++++ config/lib/GLFW.cmake | 6 +- config/lib/SPIRV_Cross.cmake | 6 +- config/lib/VulkanMemoryAllocator.cmake | 6 +- modules/asset_loader/config/FX_GLTF.cmake | 6 +- .../asset_loader/config/NLOHMANN_JSON.cmake | 6 +- modules/asset_loader/config/STB.cmake | 6 +- modules/camera/config/GLM.cmake | 6 +- modules/gui/config/ImGui.cmake | 6 +- modules/shader_compiler/config/GLSLANG.cmake | 6 +- modules/upscaling/config/FidelityFX_FSR.cmake | 6 +- 13 files changed, 111 insertions(+), 31 deletions(-) create mode 100644 config/ext/Git.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a0858b9..f8707389 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,5 +88,5 @@ add_subdirectory(projects) if (NOT WIN32) # add doxygen as target if installed - include(${vkcv_config}/ext/Doxygen.cmake) + include(${vkcv_config_ext}/Doxygen.cmake) endif() \ No newline at end of file diff --git a/config/Libraries.cmake b/config/Libraries.cmake index 512669ce..9ad756c0 100644 --- a/config/Libraries.cmake +++ b/config/Libraries.cmake @@ -16,6 +16,12 @@ if(NOT WIN32) list(APPEND vkcv_flags -fopenmp) endif() +# add custom functions to use git automatically +include(${vkcv_config_ext}/Git.cmake) + +init_git_lfs() +init_git_submodules() + list(APPEND vkcv_definitions _USE_MATH_DEFINES) # some formatted printing diff --git a/config/ext/Git.cmake b/config/ext/Git.cmake new file mode 100644 index 00000000..01df5176 --- /dev/null +++ b/config/ext/Git.cmake @@ -0,0 +1,74 @@ + +function(init_git_lfs) + find_program(git_program "git") + + if (EXISTS ${git_program}) + add_custom_target( + init_git_lfs + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + ) + + add_custom_command( + TARGET init_git_lfs + PRE_BUILD + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + COMMAND git lfs install + COMMENT "Initializing Git LFS" + ) + endif() +endfunction() + +function(init_git_submodules) + find_program(git_program "git") + + if (EXISTS ${git_program}) + add_custom_target( + init_git_submodules + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + ) + + add_custom_command( + TARGET init_git_submodules + PRE_BUILD + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + COMMAND git submodule init + COMMENT "Initializing Git Submodules" + ) + endif() +endfunction() + +function(use_git_submodule submodule_path submodule_status) + if (EXISTS "${submodule_path}") + set(${submodule_status} TRUE PARENT_SCOPE) + return() + endif() + + get_filename_component(submodule_directory ${submodule_path} DIRECTORY) + get_filename_component(submodule_name ${submodule_path} NAME) + + find_program(git_program "git") + + if (EXISTS ${git_program}) + add_custom_target( + "git_submodule_${submodule_name}" + WORKING_DIRECTORY "${submodule_directory}" + ) + + add_custom_command( + TARGET "git_submodule_${submodule_name}" + PRE_BUILD + WORKING_DIRECTORY "${submodule_directory}" + COMMAND git submodule update + COMMENT "Updating Git Submodules" + ) + + if (EXISTS "${submodule_path}") + set(${submodule_status} TRUE PARENT_SCOPE) + return() + endif() + endif() + + message(WARNING "${submodule_name} is required..! Update the submodules!") + + set(${submodule_status} FALSE PARENT_SCOPE) +endfunction() diff --git a/config/lib/GLFW.cmake b/config/lib/GLFW.cmake index 9668694d..977eabc8 100644 --- a/config/lib/GLFW.cmake +++ b/config/lib/GLFW.cmake @@ -6,14 +6,14 @@ if (glfw3_FOUND) message(${vkcv_config_msg} " GLFW - " ${glfw3_VERSION}) else() - if (EXISTS "${vkcv_lib_path}/glfw") + use_git_submodule("${vkcv_lib_path}/glfw" glfw_status) + + if (${glfw_status}) add_subdirectory(${vkcv_lib}/glfw) list(APPEND vkcv_libraries glfw) list(APPEND vkcv_includes ${vkcv_lib_path}/glfw/include) message(${vkcv_config_msg} " GLFW - " ${glfw3_VERSION}) - else() - message(WARNING "GLFW is required..! Update the submodules!") endif () endif () diff --git a/config/lib/SPIRV_Cross.cmake b/config/lib/SPIRV_Cross.cmake index 00ae4552..ce4b2e43 100644 --- a/config/lib/SPIRV_Cross.cmake +++ b/config/lib/SPIRV_Cross.cmake @@ -5,7 +5,9 @@ if (spirv-cross_FOUND) message(${vkcv_config_msg} " SPIRV Cross - " ${SPIRV_CROSS_VERSION}) else() - if (EXISTS "${vkcv_lib_path}/SPIRV-Cross") + use_git_submodule("${vkcv_lib_path}/SPIRV-Cross" spirv_cross_status) + + if (${spirv_cross_status}) set(SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS OFF CACHE INTERNAL "") set(SPIRV_CROSS_SHARED OFF CACHE INTERNAL "") set(SPIRV_CROSS_STATIC ON CACHE INTERNAL "") @@ -28,7 +30,5 @@ else() list(APPEND vkcv_includes ${vkcv_lib_path}/SPIV-Cross/include) message(${vkcv_config_msg} " SPIRV Cross - " ${SPIRV_CROSS_VERSION}) - else() - message(WARNING "SPIRV-Cross is required..! Update the submodules!") endif () endif () \ No newline at end of file diff --git a/config/lib/VulkanMemoryAllocator.cmake b/config/lib/VulkanMemoryAllocator.cmake index 5f670ff0..2a11f936 100644 --- a/config/lib/VulkanMemoryAllocator.cmake +++ b/config/lib/VulkanMemoryAllocator.cmake @@ -1,5 +1,7 @@ -if (EXISTS "${vkcv_lib_path}/VulkanMemoryAllocator-Hpp") +use_git_submodule("${vkcv_lib_path}/VulkanMemoryAllocator-Hpp" vma_hpp_status) + +if (${vma_hpp_status}) set(VMA_HPP_PATH "${vkcv_lib_path}/VulkanMemoryAllocator-Hpp" CACHE INTERNAL "") set(VMA_RECORDING_ENABLED OFF CACHE INTERNAL "") @@ -17,6 +19,4 @@ if (EXISTS "${vkcv_lib_path}/VulkanMemoryAllocator-Hpp") list(APPEND vkcv_includes ${vkcv_lib_path}/VulkanMemoryAllocator-Hpp) message(${vkcv_config_msg} " VMA - ") -else() - message(WARNING "VulkanMemoryAllocator is required..! Update the submodules!") endif () diff --git a/modules/asset_loader/config/FX_GLTF.cmake b/modules/asset_loader/config/FX_GLTF.cmake index 37cd1624..4164c278 100644 --- a/modules/asset_loader/config/FX_GLTF.cmake +++ b/modules/asset_loader/config/FX_GLTF.cmake @@ -1,5 +1,7 @@ -if (EXISTS "${vkcv_asset_loader_lib_path}/fx-gltf") +use_git_submodule("${vkcv_asset_loader_lib_path}/fx-gltf" fx_gltf_status) + +if (${fx_gltf_status}) set(FX_GLTF_INSTALL OFF CACHE INTERNAL "") set(FX_GLTF_USE_INSTALLED_DEPS OFF CACHE INTERNAL "") set(BUILD_TESTING OFF CACHE INTERNAL "") @@ -7,6 +9,4 @@ if (EXISTS "${vkcv_asset_loader_lib_path}/fx-gltf") add_subdirectory(${vkcv_asset_loader_lib}/fx-gltf) list(APPEND vkcv_asset_loader_libraries fx-gltf) -else() - message(WARNING "FX-GLTF is required..! Update the submodules!") endif () diff --git a/modules/asset_loader/config/NLOHMANN_JSON.cmake b/modules/asset_loader/config/NLOHMANN_JSON.cmake index 018f6a19..4bd7f447 100644 --- a/modules/asset_loader/config/NLOHMANN_JSON.cmake +++ b/modules/asset_loader/config/NLOHMANN_JSON.cmake @@ -1,10 +1,10 @@ -if (EXISTS "${vkcv_asset_loader_lib_path}/json") +use_git_submodule("${vkcv_asset_loader_lib_path}/json" json_status) + +if (${json_status}) set(JSON_BuildTests OFF CACHE INTERNAL "") add_subdirectory(${vkcv_asset_loader_lib}/json) list(APPEND vkcv_asset_loader_libraries nlohmann_json::nlohmann_json) -else() - message(WARNING "NLOHMANN_JSON is required..! Update the submodules!") endif () diff --git a/modules/asset_loader/config/STB.cmake b/modules/asset_loader/config/STB.cmake index 1287d0a9..61b7cc92 100644 --- a/modules/asset_loader/config/STB.cmake +++ b/modules/asset_loader/config/STB.cmake @@ -1,10 +1,10 @@ -if (EXISTS "${vkcv_asset_loader_lib_path}/stb") +use_git_submodule("${vkcv_asset_loader_lib_path}/stb" stb_status) + +if (${stb_status}) list(APPEND vkcv_asset_loader_includes ${vkcv_asset_loader_lib}/stb) list(APPEND vkcv_asset_loader_definitions STB_IMAGE_IMPLEMENTATION) list(APPEND vkcv_asset_loader_definitions STBI_ONLY_JPEG) list(APPEND vkcv_asset_loader_definitions STBI_ONLY_PNG) -else() - message(WARNING "STB is required..! Update the submodules!") endif () diff --git a/modules/camera/config/GLM.cmake b/modules/camera/config/GLM.cmake index f256ccad..53960241 100644 --- a/modules/camera/config/GLM.cmake +++ b/modules/camera/config/GLM.cmake @@ -5,13 +5,13 @@ if (glm_FOUND) list(APPEND vkcv_camera_includes ${GLM_INCLUDE_DIRS}) list(APPEND vkcv_camera_libraries glm) else() - if (EXISTS "${vkcv_camera_lib_path}/glm") + use_git_submodule("${vkcv_camera_lib_path}/glm" glm_status) + + if (${glm_status}) add_subdirectory(${vkcv_camera_lib}/glm) list(APPEND vkcv_camera_includes ${vkcv_camera_lib_path}/glm) list(APPEND vkcv_camera_libraries glm) - else() - message(WARNING "GLM is required..! Update the submodules!") endif () endif () diff --git a/modules/gui/config/ImGui.cmake b/modules/gui/config/ImGui.cmake index 90cdafde..624ea770 100644 --- a/modules/gui/config/ImGui.cmake +++ b/modules/gui/config/ImGui.cmake @@ -1,5 +1,7 @@ -if (EXISTS "${vkcv_gui_lib_path}/imgui") +use_git_submodule("${vkcv_gui_lib_path}/imgui" imgui_status) + +if (${imgui_status}) list(APPEND vkcv_imgui_sources ${vkcv_gui_lib_path}/imgui/backends/imgui_impl_glfw.cpp) list(APPEND vkcv_imgui_sources ${vkcv_gui_lib_path}/imgui/backends/imgui_impl_glfw.h) list(APPEND vkcv_imgui_sources ${vkcv_gui_lib_path}/imgui/backends/imgui_impl_vulkan.cpp) @@ -22,6 +24,4 @@ if (EXISTS "${vkcv_gui_lib_path}/imgui") list(APPEND vkcv_gui_include ${vkcv_gui_lib}) list(APPEND vkcv_gui_defines IMGUI_DISABLE_WIN32_FUNCTIONS=1) -else() - message(WARNING "IMGUI is required..! Update the submodules!") endif () diff --git a/modules/shader_compiler/config/GLSLANG.cmake b/modules/shader_compiler/config/GLSLANG.cmake index 50b9fd46..98bd4549 100644 --- a/modules/shader_compiler/config/GLSLANG.cmake +++ b/modules/shader_compiler/config/GLSLANG.cmake @@ -1,5 +1,7 @@ -if (EXISTS "${vkcv_shader_compiler_lib_path}/glslang") +use_git_submodule("${vkcv_shader_compiler_lib_path}/glslang" glslang_status) + +if (${glslang_status}) set(SKIP_GLSLANG_INSTALL ON CACHE INTERNAL "") set(ENABLE_SPVREMAPPER OFF CACHE INTERNAL "") set(ENABLE_GLSLANG_BINARIES OFF CACHE INTERNAL "") @@ -23,6 +25,4 @@ if (EXISTS "${vkcv_shader_compiler_lib_path}/glslang") list(APPEND vkcv_shader_compiler_libraries glslang SPIRV) list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib}) -else() - message(WARNING "GLSLANG is required..! Update the submodules!") endif () diff --git a/modules/upscaling/config/FidelityFX_FSR.cmake b/modules/upscaling/config/FidelityFX_FSR.cmake index cc52b418..780f1d44 100644 --- a/modules/upscaling/config/FidelityFX_FSR.cmake +++ b/modules/upscaling/config/FidelityFX_FSR.cmake @@ -1,5 +1,7 @@ -if (EXISTS "${vkcv_upscaling_lib_path}/FidelityFX-FSR") +use_git_submodule("${vkcv_upscaling_lib_path}/FidelityFX-FSR" ffx_fsr_status) + +if (${ffx_fsr_status}) include_shader(${vkcv_upscaling_lib_path}/FidelityFX-FSR/ffx-fsr/ffx_a.h ${vkcv_upscaling_include} ${vkcv_upscaling_source}) include_shader(${vkcv_upscaling_lib_path}/FidelityFX-FSR/ffx-fsr/ffx_fsr1.h ${vkcv_upscaling_include} ${vkcv_upscaling_source}) include_shader(${vkcv_upscaling_lib_path}/FidelityFX-FSR/sample/src/VK/FSR_Pass.glsl ${vkcv_upscaling_include} ${vkcv_upscaling_source}) @@ -13,6 +15,4 @@ if (EXISTS "${vkcv_upscaling_lib_path}/FidelityFX-FSR") list(APPEND vkcv_upscaling_sources ${vkcv_upscaling_include}/ffx_a.h.hxx) list(APPEND vkcv_upscaling_sources ${vkcv_upscaling_include}/ffx_fsr1.h.hxx) list(APPEND vkcv_upscaling_sources ${vkcv_upscaling_include}/FSR_Pass.glsl.hxx) -else() - message(WARNING "FidelityFX-FSR is required..! Update the submodules!") endif () -- GitLab