diff --git a/CMakeLists.txt b/CMakeLists.txt index a80cd5f9..b4b0fac4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,10 @@ if(ENABLE_GLSLANG_JS) add_compile_options(/Os /GR-) else() add_compile_options(-Os -fno-exceptions) - add_link_options(-Os) + if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + add_compile_options(-Wno-unused-parameter) + add_compile_options(-Wno-unused-variable -Wno-unused-const-variable) + endif() endif() endif(ENABLE_GLSLANG_JS) @@ -150,7 +153,7 @@ endif(ENABLE_GLSLANG_JS) if(${CMAKE_VERSION} VERSION_LESS 3.1) # CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD # remove this block once CMake >=3.1 has fixated in the ecosystem - add_compile_options(-std=c++11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") else() set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/README.md b/README.md index 5188ab46..ff844c02 100755 --- a/README.md +++ b/README.md @@ -209,27 +209,29 @@ With no arguments it builds the full grammar, and with a "web" argument, the web grammar subset (see more about the web subset in the next section). ### Building to WASM for the Web and Node +### Building a standalone JS/WASM library for the Web and Node Use the steps in [Build Steps](#build-steps), with the following notes/exceptions: -* For building the web subset of core glslang: +* `emsdk` needs to be present in your executable search path, *PATH* for + Bash-like environments: + + [Instructions located here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install) +* Wrap cmake call: `emcmake cmake` +* Set `-DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`. +* Set `-DENABLE_HLSL=OFF` if HLSL is not needed. +* For a standalone JS/WASM library, turn on `-DENABLE_GLSLANG_JS=ON`. +* For building a minimum-size web subset of core glslang: + + turn on `-DENABLE_GLSLANG_WEBMIN=ON` (disables HLSL) + execute `updateGrammar web` from the glslang subdirectory (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument) - + set `-DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF` - + turn on `-DENABLE_GLSLANG_JS=ON` - + optionally, for a minimum-size binary, turn on `-DENABLE_GLSLANG_WEBMIN=ON` - + optionally, for GLSL compilation error messages, turn on `-DENABLE_GLSLANG_WEB_DEVEL=ON` -* `emsdk` needs to be present in your executable search path, *PATH* for - Bash-like environments - + [Instructions located - here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install) -* Wrap cmake call: `emcmake cmake` + + optionally, for GLSL compilation error messages, turn on + `-DENABLE_GLSLANG_WEBMIN_DEVEL=ON` * To get a fully minimized build, make sure to use `brotli` to compress the .js and .wasm files Example: ```sh -emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_WEB=ON \ +emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON \ -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF .. ``` diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 350b0e89..d4f5e1de 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -945,7 +945,7 @@ public: bool hasAttachment() const { return false; } TLayoutFormat getFormat() const { return ElfNone; } bool isPushConstant() const { return false; } - bool isShaderRecordNV() const { return false; } + bool isShaderRecord() const { return false; } bool hasBufferReference() const { return false; } bool hasBufferReferenceAlign() const { return false; } bool isNonUniform() const { return false; } diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 25b8b78a..240944ef 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -503,7 +503,7 @@ public: bool getAutoMapBindings() const { return false; } bool getAutoMapLocations() const { return false; } int getNumPushConstants() const { return 0; } - void addShaderRecordNVCount() { } + void addShaderRecordCount() { } void addTaskNVCount() { } void setUseVulkanMemoryModel() { } bool usingVulkanMemoryModel() const { return false; } diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt index 015d6d77..697b0b75 100644 --- a/glslang/OSDependent/Web/CMakeLists.txt +++ b/glslang/OSDependent/Web/CMakeLists.txt @@ -3,27 +3,31 @@ if(ENABLE_GLSLANG_JS) glslang_set_link_args(glslang.js) target_link_libraries(glslang.js glslang SPIRV) + # Link library names that start with "-" are treated as link flags. + # "-Os" should be OK in MSVC; don't use /Os because CMake won't + # treat it as a link flag. + target_link_libraries(glslang.js "-Os") + if(EMSCRIPTEN) set_target_properties(glslang.js PROPERTIES OUTPUT_NAME "glslang" SUFFIX ".js") em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js") - target_link_options(glslang.js PRIVATE "SHELL: -Os") - target_link_options(glslang.js PRIVATE "SHELL: --llvm-lto 1") - target_link_options(glslang.js PRIVATE "SHELL: --closure 1") - target_link_options(glslang.js PRIVATE "SHELL: -s MODULARIZE=1") - target_link_options(glslang.js PRIVATE "SHELL: -s ALLOW_MEMORY_GROWTH=1") - target_link_options(glslang.js PRIVATE "SHELL: -s FILESYSTEM=0") + target_link_libraries(glslang.js "--llvm-lto 1") + target_link_libraries(glslang.js "--closure 1") + target_link_libraries(glslang.js "-s MODULARIZE=1") + target_link_libraries(glslang.js "-s ALLOW_MEMORY_GROWTH=1") + target_link_libraries(glslang.js "-s FILESYSTEM=0") if(ENABLE_EMSCRIPTEN_SINGLE_FILE) - target_link_options(glslang.js PRIVATE "SHELL: -s SINGLE_FILE=1") + target_link_libraries(glslang.js "-s SINGLE_FILE=1") endif(ENABLE_EMSCRIPTEN_SINGLE_FILE) if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE) - target_link_options(glslang.js PRIVATE "SHELL: -s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0") + target_link_libraries(glslang.js "-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0") else() - target_link_options(glslang.js PRIVATE "SHELL: -s ENVIRONMENT=web,worker") + target_link_libraries(glslang.js "-s ENVIRONMENT=web,worker") endif() if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)