From b05076ca33239e209c3dda9f0d635baaaa1400b2 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Tue, 23 Jul 2024 01:47:28 +0200
Subject: [PATCH] Fix build issues with slang

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 .gitmodules                                   | 11 +++-
 lib/Vulkan-Headers                            |  2 +-
 lib/Vulkan-Hpp                                |  2 +-
 modules/gui/lib/imgui                         |  2 +-
 modules/shader_compiler/CMakeLists.txt        |  3 +
 modules/shader_compiler/config/LZ4.cmake      | 16 +++++
 modules/shader_compiler/config/MINIZ.cmake    | 14 +++++
 modules/shader_compiler/config/SLANG.cmake    | 61 ++++++++++++++++++-
 .../config/SPIRV-Headers.cmake                |  6 +-
 modules/shader_compiler/config/Shady.cmake    |  4 +-
 .../config/UNORDERED_DENSE.cmake              |  8 +++
 .../config/slang/CMakeLists.txt               | 45 --------------
 modules/shader_compiler/lib/glslang           |  2 +-
 modules/shader_compiler/lib/lz4               |  1 +
 modules/shader_compiler/lib/miniz             |  1 +
 modules/shader_compiler/lib/slang             |  2 +-
 modules/shader_compiler/lib/unordered_dense   |  1 +
 17 files changed, 123 insertions(+), 58 deletions(-)
 create mode 100644 modules/shader_compiler/config/LZ4.cmake
 create mode 100644 modules/shader_compiler/config/MINIZ.cmake
 create mode 100644 modules/shader_compiler/config/UNORDERED_DENSE.cmake
 delete mode 100644 modules/shader_compiler/config/slang/CMakeLists.txt
 create mode 160000 modules/shader_compiler/lib/lz4
 create mode 160000 modules/shader_compiler/lib/miniz
 create mode 160000 modules/shader_compiler/lib/unordered_dense

diff --git a/.gitmodules b/.gitmodules
index b92fdbd4..5f3821ff 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -84,5 +84,14 @@
 	url = https://github.com/json-c/json-c.git
 [submodule "modules/shader_compiler/lib/slang"]
 	path = modules/shader_compiler/lib/slang
-	url = https://github.com/shader-slang/slang.git
+	url = https://github.com/TheJackiMonster/slang.git
 	branch = master
+[submodule "modules/shader_compiler/lib/unordered_dense"]
+	path = modules/shader_compiler/lib/unordered_dense
+	url = https://github.com/martinus/unordered_dense.git
+[submodule "modules/shader_compiler/lib/lz4"]
+	path = modules/shader_compiler/lib/lz4
+	url = https://github.com/lz4/lz4.git
+[submodule "modules/shader_compiler/lib/miniz"]
+	path = modules/shader_compiler/lib/miniz
+	url = https://github.com/richgel999/miniz.git
diff --git a/lib/Vulkan-Headers b/lib/Vulkan-Headers
index b379292b..fabe9e26 160000
--- a/lib/Vulkan-Headers
+++ b/lib/Vulkan-Headers
@@ -1 +1 @@
-Subproject commit b379292b2ab6df5771ba9870d53cf8b2c9295daf
+Subproject commit fabe9e2672334fdb9a622d42a2e8f94578952082
diff --git a/lib/Vulkan-Hpp b/lib/Vulkan-Hpp
index 77f6a638..f7f0d8cc 160000
--- a/lib/Vulkan-Hpp
+++ b/lib/Vulkan-Hpp
@@ -1 +1 @@
-Subproject commit 77f6a638a725816291c1deaf5e82c56225951a99
+Subproject commit f7f0d8ccaae669b7cf8937211b5f0878cf919465
diff --git a/modules/gui/lib/imgui b/modules/gui/lib/imgui
index d7e605d4..fe09ebbe 160000
--- a/modules/gui/lib/imgui
+++ b/modules/gui/lib/imgui
@@ -1 +1 @@
-Subproject commit d7e605d4309d7b054f4277b8968232749de2c6c4
+Subproject commit fe09ebbe0a1c8bb5f39f326658faa6bde75bb568
diff --git a/modules/shader_compiler/CMakeLists.txt b/modules/shader_compiler/CMakeLists.txt
index 4dc2c556..ed1b7abd 100644
--- a/modules/shader_compiler/CMakeLists.txt
+++ b/modules/shader_compiler/CMakeLists.txt
@@ -54,6 +54,9 @@ include(config/Murmur3.cmake)
 include(config/Shady.cmake)
 
 # Check and load SLANG
+include(config/MINIZ.cmake)
+include(config/LZ4.cmake)
+include(config/UNORDERED_DENSE.cmake)
 include(config/SLANG.cmake)
 
 # link the required libraries to the module
diff --git a/modules/shader_compiler/config/LZ4.cmake b/modules/shader_compiler/config/LZ4.cmake
new file mode 100644
index 00000000..87b2c906
--- /dev/null
+++ b/modules/shader_compiler/config/LZ4.cmake
@@ -0,0 +1,16 @@
+
+use_git_submodule("${vkcv_shader_compiler_lib_path}/lz4" lz4_status)
+
+if (${lz4_status})
+  set(LZ4_BUNDLED_MODE ON)
+	add_subdirectory(${vkcv_shader_compiler_lib}/lz4/build/cmake SYSTEM)
+
+  if(MSVC)
+		target_compile_options(
+			lz4_static
+			PRIVATE /wd5045 /wd4820 /wd4711 /wd6385 /wd6262
+		)
+	endif()
+
+	set(lz4_include ${vkcv_shader_compiler_lib}/lz4/lib)
+endif ()
diff --git a/modules/shader_compiler/config/MINIZ.cmake b/modules/shader_compiler/config/MINIZ.cmake
new file mode 100644
index 00000000..0b32ea36
--- /dev/null
+++ b/modules/shader_compiler/config/MINIZ.cmake
@@ -0,0 +1,14 @@
+
+use_git_submodule("${vkcv_shader_compiler_lib_path}/miniz" miniz_status)
+
+if (${miniz_status})
+	add_subdirectory(${vkcv_shader_compiler_lib}/miniz SYSTEM)
+
+  set_property(TARGET miniz PROPERTY POSITION_INDEPENDENT_CODE ON)
+  # Work around https://github.com/richgel999/miniz/pull/292
+	get_target_property(miniz_c_launcher miniz C_COMPILER_LAUNCHER)
+	if(MSVC AND miniz_c_launcher MATCHES "ccache")
+    set_property(TARGET miniz PROPERTY C_COMPILER_LAUNCHER)
+    set_property(TARGET miniz PROPERTY MSVC_DEBUG_INFORMATION_FORMAT "")
+	endif()
+endif ()
diff --git a/modules/shader_compiler/config/SLANG.cmake b/modules/shader_compiler/config/SLANG.cmake
index e9f5c26a..a9bd071f 100644
--- a/modules/shader_compiler/config/SLANG.cmake
+++ b/modules/shader_compiler/config/SLANG.cmake
@@ -2,8 +2,63 @@
 use_git_submodule("${vkcv_shader_compiler_lib_path}/slang" slang_status)
 
 if (${slang_status})
-	add_subdirectory(config/slang)
+	set(EXTERNAL_MINIZ ON CACHE INTERNAL "")
+	set(EXTERNAL_LZ4 ON CACHE INTERNAL "")
+	set(EXTERNAL_VULKAN_HEADERS ON CACHE INTERNAL "")
+	set(EXTERNAL_SPIRV_HEADERS ON CACHE INTERNAL "")
+	set(EXTERNAL_UNORDERED_DENSE ON CACHE INTERNAL "")
+
+	set(SLANG_ENABLE_CUDA OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_OPTIX OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_NVAPI OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_XLIB OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_AFTERMATH OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_DX_ON_VK OFF CACHE INTERNAL "")
+	set(SLANG_EMBED_STDLIB_SOURCE OFF CACHE INTERNAL "")
+	set(SLANG_EMBED_STDLIB ON CACHE INTERNAL "")
+	set(SLANG_ENABLE_FULL_IR_VALIDATION OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_IR_BREAK_ALLOC OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_ASAN OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_PREBUILT_BINARIES OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_GFX OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_SLANGD OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_SLANGC OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_SLANGRT OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_SLANG_GLSLANG OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_TESTS OFF CACHE INTERNAL "")
+	set(SLANG_ENABLE_EXAMPLES OFF CACHE INTERNAL "")
+	set(SLANG_LIB_TYPE ${vkcv_build_attribute} CACHE INTERNAL "")
+	set(SLANG_SPIRV_HEADERS_INCLUDE_DIR ${spirv_headers_include} CACHE INTERNAL "")
+
+	add_subdirectory(${vkcv_shader_compiler_lib}/slang)
+
+	set(slang_system_includes "")
+	list(APPEND slang_system_includes ${spirv_headers_include})
+	list(APPEND slang_system_includes ${unordered_dense_include})
+	list(APPEND slang_system_includes ${lz4_include})
+
+	target_include_directories(core SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(compiler-core SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-cpp-extractor SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-embed SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-generate SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-lookup-generator SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-capability-generator SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-spirv-embed-generator SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-bootstrap SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(prelude SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-capability-defs SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-capability-lookup SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-lookup-tables SYSTEM BEFORE PRIVATE ${slang_system_includes})
+	target_include_directories(slang-no-embedded-stdlib SYSTEM BEFORE PRIVATE ${slang_system_includes})
+
+	set(SLANG_STDLIB_META_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${vkcv_shader_compiler_lib}/slang/source/slang/stdlib-meta)
+
+	target_include_directories(slang BEFORE PUBLIC ${SLANG_STDLIB_META_OUTPUT_DIR})
+
+	message(WARNING ${SLANG_STDLIB_META_OUTPUT_DIR})
 	
-	list(APPEND vkcv_shader_compiler_libraries slang)
-	list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib})
+	list(APPEND vkcv_shader_compiler_libraries slang lz4_static miniz unordered_dense::unordered_dense)
+	list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib}/slang/include ${slang_system_includes})
 endif ()
diff --git a/modules/shader_compiler/config/SPIRV-Headers.cmake b/modules/shader_compiler/config/SPIRV-Headers.cmake
index b5f47dbe..5ef39caa 100644
--- a/modules/shader_compiler/config/SPIRV-Headers.cmake
+++ b/modules/shader_compiler/config/SPIRV-Headers.cmake
@@ -2,8 +2,10 @@
 use_git_submodule("${vkcv_shader_compiler_lib_path}/SPIRV-Headers" spriv_headers_status)
 
 if (${spriv_headers_status})
-	add_subdirectory(${vkcv_shader_compiler_lib}/SPIRV-Headers)
+	add_subdirectory(${vkcv_shader_compiler_lib}/SPIRV-Headers SYSTEM)
+
+	set(spirv_headers_include ${vkcv_shader_compiler_lib_path}/SPIRV-Headers/include)
 	
 	list(APPEND vkcv_shader_compiler_libraries SPIRV-Headers)
-	list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib}/SPIRV-Headers/include)
+	list(APPEND vkcv_shader_compiler_includes ${spirv_headers_include})
 endif ()
diff --git a/modules/shader_compiler/config/Shady.cmake b/modules/shader_compiler/config/Shady.cmake
index 56da131a..3156521d 100644
--- a/modules/shader_compiler/config/Shady.cmake
+++ b/modules/shader_compiler/config/Shady.cmake
@@ -3,8 +3,8 @@ use_git_submodule("${vkcv_shader_compiler_lib_path}/shady" shady_status)
 
 if (${shady_status})
 	set(EXTERNAL_JSON_C ON CACHE INTERNAL "")
-    set(EXTERNAL_SPIRV_HEADERS ON CACHE INTERNAL "")
-    set(EXTERNAL_MURMUR3 ON CACHE INTERNAL "")
+	set(EXTERNAL_SPIRV_HEADERS ON CACHE INTERNAL "")
+	set(EXTERNAL_MURMUR3 ON CACHE INTERNAL "")
 
 	set(EXTERNAL_JSON_C_INCLUDE ${JSON_C_INCLUDE_DIR} CACHE INTERNAL "")
 
diff --git a/modules/shader_compiler/config/UNORDERED_DENSE.cmake b/modules/shader_compiler/config/UNORDERED_DENSE.cmake
new file mode 100644
index 00000000..8c2e60aa
--- /dev/null
+++ b/modules/shader_compiler/config/UNORDERED_DENSE.cmake
@@ -0,0 +1,8 @@
+
+use_git_submodule("${vkcv_shader_compiler_lib_path}/unordered_dense" unordered_dense_status)
+
+if (${unordered_dense_status})
+  add_subdirectory(${vkcv_shader_compiler_lib}/unordered_dense SYSTEM)
+
+  set(unordered_dense_include ${vkcv_shader_compiler_lib_path}/unordered_dense/include)
+endif ()
diff --git a/modules/shader_compiler/config/slang/CMakeLists.txt b/modules/shader_compiler/config/slang/CMakeLists.txt
deleted file mode 100644
index 9c1a50bc..00000000
--- a/modules/shader_compiler/config/slang/CMakeLists.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-cmake_minimum_required(VERSION 3.9)
-
-project(slang)
-
-# settings c++ standard for slang
-set(CMAKE_CXX_STANDARD 20)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-
-find_package(Vulkan REQUIRED)
-
-set(slang_base external/source/base)
-
-set(slang_dir ../../${vkcv_shader_compiler_lib}/slang)
-
-set(slang_source ${slang_dir}/source)
-set(slang_source_compiler_core ${slang_source}/compiler-core)
-set(slang_source_core ${slang_source}/core)
-set(slang_source_slang ${slang_source}/slang)
-
-file(GLOB slang_sources 
-        ${slang_source_compiler_core}/*.cpp
-        ${slang_source_core}/*.cpp
-        ${slang_source_slang}/*.cpp
-)
-
-if (${VMA_STATIC_VULKAN_FUNCTIONS})
-	add_library(slang STATIC ${slang_sources})
-else()
-	add_library(slang SHARED ${slang_sources})
-endif()
-
-set_target_properties(
-        slang PROPERTIES
-		
-		CXX_EXTENSIONS OFF
-		CXX_STANDARD ${CMAKE_CXX_STANDARD}
-		CXX_STANDARD_REQUIRED ON
-)
-
-target_include_directories(slang PUBLIC ${slang_base} ${slang_source})
-
-# Only link to Vulkan if static linking is used
-if (NOT ${VMA_DYNAMIC_VULKAN_FUNCTIONS})
-	target_link_libraries(slang PUBLIC Vulkan::Vulkan)
-endif()
diff --git a/modules/shader_compiler/lib/glslang b/modules/shader_compiler/lib/glslang
index 52f68dc6..592aed9c 160000
--- a/modules/shader_compiler/lib/glslang
+++ b/modules/shader_compiler/lib/glslang
@@ -1 +1 @@
-Subproject commit 52f68dc6b2a9d017b43161f31f13a6f44636ee7c
+Subproject commit 592aed9c206c283cac98f7a86e5cc237dadb2638
diff --git a/modules/shader_compiler/lib/lz4 b/modules/shader_compiler/lib/lz4
new file mode 160000
index 00000000..68959d27
--- /dev/null
+++ b/modules/shader_compiler/lib/lz4
@@ -0,0 +1 @@
+Subproject commit 68959d27c3ec37b339b3b8ecfea155faf0ef94f2
diff --git a/modules/shader_compiler/lib/miniz b/modules/shader_compiler/lib/miniz
new file mode 160000
index 00000000..bf7a1f0a
--- /dev/null
+++ b/modules/shader_compiler/lib/miniz
@@ -0,0 +1 @@
+Subproject commit bf7a1f0a5aa1deae9cab2d73b5ef9edec41b877c
diff --git a/modules/shader_compiler/lib/slang b/modules/shader_compiler/lib/slang
index 359fdc9d..e1734897 160000
--- a/modules/shader_compiler/lib/slang
+++ b/modules/shader_compiler/lib/slang
@@ -1 +1 @@
-Subproject commit 359fdc9d556b4c493c588c5b8f93df85933634f8
+Subproject commit e1734897a3681f7685b4768fd8d40f446134d483
diff --git a/modules/shader_compiler/lib/unordered_dense b/modules/shader_compiler/lib/unordered_dense
new file mode 160000
index 00000000..d911053e
--- /dev/null
+++ b/modules/shader_compiler/lib/unordered_dense
@@ -0,0 +1 @@
+Subproject commit d911053e390816ecc5dedd5a9d6b4bb5ed92b4c9
-- 
GitLab