--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,6 @@
 Revision history for Shaderc
 
-v2024.0
+v2024.0 2024-03-09
  - Update dependencies
  - Utilities:
     - Use Python3 explicitly in utility scripts
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -117,6 +117,9 @@ if(MSVC)
   endif()
 endif(MSVC)
 
+if(NOT WIN32)
+  add_definitions("-fvisibility=hidden")
+endif()
 
 # Configure subdirectories.
 # We depend on these for later projects, so they should come first.
@@ -124,7 +127,6 @@ add_subdirectory(third_party)
 
 add_subdirectory(libshaderc_util)
 add_subdirectory(libshaderc)
-add_subdirectory(glslc)
 if(${SHADERC_ENABLE_EXAMPLES})
     add_subdirectory(examples)
 endif()
@@ -158,5 +160,3 @@ function(define_pkg_config_file NAME LIBS)
 endfunction()
 
 define_pkg_config_file(shaderc -lshaderc_shared)
-define_pkg_config_file(shaderc_static "-lshaderc ${EXTRA_STATIC_PKGCONFIG_LIBS} -lshaderc_util")
-define_pkg_config_file(shaderc_combined -lshaderc_combined)
--- a/libshaderc/CMakeLists.txt
+++ b/libshaderc/CMakeLists.txt
@@ -24,13 +24,6 @@ set(SHADERC_SOURCES
   src/shaderc_private.h
 )
 
-add_library(shaderc STATIC ${SHADERC_SOURCES})
-shaderc_default_compile_options(shaderc)
-target_include_directories(shaderc
-    PUBLIC include
-    PRIVATE ${glslang_SOURCE_DIR}
-            ${SPIRV-Headers_SOURCE_DIR}/include)
-
 add_library(shaderc_shared SHARED ${SHADERC_SOURCES})
 shaderc_default_compile_options(shaderc_shared)
 target_include_directories(shaderc_shared
@@ -54,7 +47,7 @@ if(SHADERC_ENABLE_INSTALL)
     DESTINATION
       ${CMAKE_INSTALL_INCLUDEDIR}/shaderc)
 
-  install(TARGETS shaderc shaderc_shared
+  install(TARGETS shaderc_shared
     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
     BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
@@ -69,20 +62,8 @@ set(SHADERC_LIBS
   SPIRV-Tools
 )
 
-target_link_libraries(shaderc PRIVATE ${SHADERC_LIBS})
 target_link_libraries(shaderc_shared PRIVATE ${SHADERC_LIBS})
 
-shaderc_add_tests(
-  TEST_PREFIX shaderc
-  LINK_LIBS shaderc
-  INCLUDE_DIRS include ${shaderc_SOURCE_DIR}/libshaderc_util/include ${glslang_SOURCE_DIR}
-               ${spirv-tools_SOURCE_DIR}/include
-               ${SPIRV-Headers_SOURCE_DIR}/include
-  TEST_NAMES
-    shaderc
-    shaderc_cpp
-    shaderc_private)
-
 shaderc_add_tests(
   TEST_PREFIX shaderc_shared
   LINK_LIBS shaderc_shared SPIRV-Tools
@@ -94,22 +75,6 @@ shaderc_add_tests(
     shaderc_cpp
     shaderc_private)
 
-shaderc_combine_static_lib(shaderc_combined shaderc)
-
-if(SHADERC_ENABLE_INSTALL)
-  install(TARGETS shaderc_combined DESTINATION ${CMAKE_INSTALL_LIBDIR})
-endif(SHADERC_ENABLE_INSTALL)
-
-shaderc_add_tests(
-  TEST_PREFIX shaderc_combined
-  LINK_LIBS shaderc_combined ${CMAKE_THREAD_LIBS_INIT}
-  INCLUDE_DIRS include ${shaderc_SOURCE_DIR}/libshaderc_util/include ${glslang_SOURCE_DIR}
-               ${spirv-tools_SOURCE_DIR}/include
-               ${SPIRV-Headers_SOURCE_DIR}/include
-  TEST_NAMES
-    shaderc
-    shaderc_cpp)
-
 if(${SHADERC_ENABLE_TESTS})
   add_executable(shaderc_c_smoke_test ./src/shaderc_c_smoke_test.c)
   shaderc_default_c_compile_options(shaderc_c_smoke_test)
--- a/libshaderc/include/shaderc/shaderc.h
+++ b/libshaderc/include/shaderc/shaderc.h
@@ -319,6 +319,10 @@ SHADERC_EXPORT void shaderc_compile_options_set_source_language(
 SHADERC_EXPORT void shaderc_compile_options_set_generate_debug_info(
     shaderc_compile_options_t options);
 
+// Sets the compiler mode to emit non-semantic debug information in the output.
+SHADERC_EXPORT void shaderc_compile_options_set_emit_non_semantic_debug_info(
+    shaderc_compile_options_t options);
+
 // Sets the compiler optimization level to the given level. Only the last one
 // takes effect if multiple calls of this function exist.
 SHADERC_EXPORT void shaderc_compile_options_set_optimization_level(
--- a/libshaderc/include/shaderc/shaderc.hpp
+++ b/libshaderc/include/shaderc/shaderc.hpp
@@ -172,6 +172,12 @@ class CompileOptions {
     shaderc_compile_options_set_generate_debug_info(options_);
   }
 
+  // Sets the compiler mode to emit non-semantic debug information in the
+  // output.
+  void SetEmitNonSemanticDebugInfo() {
+    shaderc_compile_options_set_emit_non_semantic_debug_info(options_);
+  }
+
   // Sets the compiler optimization level to the given level. Only the last one
   // takes effect if multiple calls of this function exist.
   void SetOptimizationLevel(shaderc_optimization_level level) {
--- a/libshaderc/src/shaderc.cc
+++ b/libshaderc/src/shaderc.cc
@@ -422,6 +422,11 @@ void shaderc_compile_options_set_generate_debug_info(
   options->compiler.SetGenerateDebugInfo();
 }
 
+void shaderc_compile_options_set_emit_non_semantic_debug_info(
+    shaderc_compile_options_t options) {
+  options->compiler.SetEmitNonSemanticDebugInfo();
+}
+
 void shaderc_compile_options_set_optimization_level(
     shaderc_compile_options_t options, shaderc_optimization_level level) {
   auto opt_level = shaderc_util::Compiler::OptimizationLevel::Zero;
--- a/libshaderc_util/include/libshaderc_util/compiler.h
+++ b/libshaderc_util/include/libshaderc_util/compiler.h
@@ -195,6 +195,7 @@ class Compiler {
         warnings_as_errors_(false),
         suppress_warnings_(false),
         generate_debug_info_(false),
+        emit_non_semantic_debug_info_(false),
         enabled_opt_passes_(),
         target_env_(TargetEnv::Vulkan),
         target_env_version_(TargetEnvVersion::Default),
@@ -220,6 +221,10 @@ class Compiler {
   // such as identifier names and line numbers.
   void SetGenerateDebugInfo();
 
+  // Requests that the compiler emit non-semantic debug information.
+  // Requires VK_KHR_shader_non_semantic_info.
+  void SetEmitNonSemanticDebugInfo();
+
   // Sets the optimization level to the given level. Only the last one takes
   // effect if multiple calls of this method exist.
   void SetOptimizationLevel(OptimizationLevel level);
@@ -486,6 +491,10 @@ class Compiler {
   // output.
   bool generate_debug_info_;
 
+  // When true and generate_debug_info_ is also set, generate non-semantic debug
+  // information.
+  bool emit_non_semantic_debug_info_;
+
   // Optimization passes to be applied.
   std::vector<PassId> enabled_opt_passes_;
 
--- a/libshaderc_util/src/compiler.cc
+++ b/libshaderc_util/src/compiler.cc
@@ -341,6 +341,11 @@ std::tuple<bool, std::vector<uint32_t>, size_t> Compiler::Compile(
   options.generateDebugInfo = generate_debug_info_;
   options.disableOptimizer = true;
   options.optimizeSize = false;
+  options.emitNonSemanticShaderDebugInfo =
+      generate_debug_info_ && emit_non_semantic_debug_info_;
+  options.emitNonSemanticShaderDebugSource =
+      generate_debug_info_ && emit_non_semantic_debug_info_;
+
   // Note the call to GlslangToSpv also populates compilation_output_data.
   glslang::GlslangToSpv(*program.getIntermediate(used_shader_stage), spirv,
                         &options);
@@ -438,6 +443,10 @@ void Compiler::SetGenerateDebugInfo() {
   }
 }
 
+void Compiler::SetEmitNonSemanticDebugInfo() {
+  emit_non_semantic_debug_info_ = true;
+}
+
 void Compiler::SetOptimizationLevel(Compiler::OptimizationLevel level) {
   // Clear previous settings first.
   enabled_opt_passes_.clear();
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -20,9 +20,9 @@ set(SHADERC_TINT_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/tint" CACHE STRING
 set(SHADERC_ABSL_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/abseil_cpp" CACHE STRING
   "Location of re2 source")
 
-set( SKIP_GLSLANG_INSTALL ${SHADERC_SKIP_INSTALL} )
-set( SKIP_SPIRV_TOOLS_INSTALL ${SHADERC_SKIP_INSTALL} )
-set( SKIP_GOOGLETEST_INSTALL ${SHADERC_SKIP_INSTALL} )
+set( SKIP_GLSLANG_INSTALL ON )
+set( SKIP_SPIRV_TOOLS_INSTALL ON )
+set( SKIP_GOOGLETEST_INSTALL ON )
 
 # Configure third party projects.
 if(${SHADERC_ENABLE_TESTS})
@@ -64,7 +64,10 @@ if (NOT TARGET SPIRV-Tools)
       add_subdirectory(${SHADERC_RE2_DIR} re2)
       add_subdirectory(${SHADERC_EFFCEE_DIR} effcee)
     endif()
-    add_subdirectory(${SHADERC_SPIRV_TOOLS_DIR} spirv-tools)
+    set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "Skip building SPIRV-Tools executables")
+    set(SPIRV_TOOLS_BUILD_STATIC OFF CACHE BOOL "Skip building two SPIRV-Tools libs")
+    set(SPIRV_TOOLS_LIBRARY_TYPE STATIC CACHE STRING "Build static SPIRV-Tools libs")
+    add_subdirectory(${SHADERC_SPIRV_TOOLS_DIR} spirv-tools EXCLUDE_FROM_ALL)
     if (NOT "${SPIRV_SKIP_TESTS}")
       if (MSVC)
         if (${MSVC_VERSION} LESS 1920)
@@ -83,7 +86,7 @@ endif()
 
 if (NOT TARGET glslang)
   if (IS_DIRECTORY ${SHADERC_GLSLANG_DIR})
-    add_subdirectory(${SHADERC_GLSLANG_DIR} glslang)
+    add_subdirectory(${SHADERC_GLSLANG_DIR} glslang EXCLUDE_FROM_ALL)
   endif()
   if (NOT TARGET glslang)
     message(FATAL_ERROR "glslang was not found - required for compilation")