diff --git a/CMakeLists.txt b/CMakeLists.txt
index e7b22e5ef845572e18de3e1fd02a4c1f9f0d9cf9..600130de0be352296fc8113a34170a8574439e6c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,8 @@ option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
 
 option(ENABLE_NV_EXTENSIONS "Enables support of Nvidia-specific extensions" ON)
 
+option(DISABLE_HLSL "Disables HLSL input support" OFF)
+
 enable_testing()
 
 set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "prefix")
@@ -20,6 +22,10 @@ if(ENABLE_NV_EXTENSIONS)
     add_definitions(-DNV_EXTENSIONS)
 endif(ENABLE_NV_EXTENSIONS)
 
+if(DISABLE_HLSL)
+    add_definitions(-DDISABLE_HLSL)
+endif(DISABLE_HLSL)
+
 if(WIN32)
     set(CMAKE_DEBUG_POSTFIX "d")
     include(ChooseMSVCCRT.cmake)
@@ -63,5 +69,7 @@ if(ENABLE_GLSLANG_BINARIES)
 	add_subdirectory(StandAlone)
 endif()
 add_subdirectory(SPIRV)
-add_subdirectory(hlsl)
+if(NOT DISABLE_HLSL)
+    add_subdirectory(hlsl)
+endif()
 add_subdirectory(gtests)
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 231ba277a7b5e34e9bea5e65f5a1d2b824380951..3a09799c87b6662f49edae162f3a110c45aedf67 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -22,11 +22,14 @@ set(LIBRARIES
     glslang
     OGLCompiler
     OSDependent
-    HLSL
     SPIRV
     SPVRemapper
     glslang-default-resource-limits)
 
+if(NOT DISABLE_HLSL)
+    set(LIBRARIES ${LIBRARIES} HLSL)
+endif()
+
 if(WIN32)
     set(LIBRARIES ${LIBRARIES} psapi)
 elseif(UNIX)
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index b5e08a7ec7a1ff8a4c6441c8e534e56bfa28fd52..b6f504c29025d546c6597061454723b9854be05a 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -47,11 +47,14 @@
 #include <memory>
 #include "SymbolTable.h"
 #include "ParseHelper.h"
-#include "../../hlsl/hlslParseHelper.h"
-#include "../../hlsl/hlslParseables.h"
 #include "Scan.h"
 #include "ScanContext.h"
+
+#ifndef DISABLE_HLSL
+#include "../../hlsl/hlslParseHelper.h"
+#include "../../hlsl/hlslParseables.h"
 #include "../../hlsl/hlslScanContext.h"
+#endif
 
 #include "../Include/ShHandle.h"
 #include "../../OGLCompilersDLL/InitializeDll.h"
@@ -73,7 +76,9 @@ TBuiltInParseables* CreateBuiltInParseables(TInfoSink& infoSink, EShSource sourc
 {
     switch (source) {
     case EShSourceGlsl: return new TBuiltIns();              // GLSL builtIns
+#ifndef DISABLE_HLSL
     case EShSourceHlsl: return new TBuiltInParseablesHlsl(); // HLSL intrinsics
+#endif
 
     default:
         infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
@@ -88,15 +93,21 @@ TParseContextBase* CreateParseContext(TSymbolTable& symbolTable, TIntermediate&
                                       SpvVersion spvVersion, bool forwardCompatible, EShMessages messages,
                                       bool parsingBuiltIns, const std::string sourceEntryPointName = "")
 {
+#ifdef DISABLE_HLSL
+    (void)sourceEntryPointName; // Unused argument.
+#endif
+
     switch (source) {
     case EShSourceGlsl:
         intermediate.setEntryPointName("main");
         return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
                                  language, infoSink, forwardCompatible, messages);
 
+#ifndef DISABLE_HLSL
     case EShSourceHlsl:
         return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
                                     language, infoSink, sourceEntryPointName.c_str(), forwardCompatible, messages);
+#endif
     default:
         infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
         return nullptr;
@@ -1085,7 +1096,9 @@ int ShInitialize()
         PerProcessGPA = new TPoolAllocator();
 
     glslang::TScanContext::fillInKeywordMap();
+#ifndef DISABLE_HLSL
     glslang::HlslScanContext::fillInKeywordMap();
+#endif
 
     return 1;
 }
@@ -1178,7 +1191,9 @@ int __fastcall ShFinalize()
     }
 
     glslang::TScanContext::deleteKeywordMap();
+#ifndef DISABLE_HLSL
     glslang::HlslScanContext::deleteKeywordMap();
+#endif
 
     return 1;
 }