web: Fix emscripten build
The web/emscripten build has been broken for an unknown amount of time and for multiple reasons: - Calling `cat` on Windows - The latest version of wasm-ld does not support the `--no-undefined` flag - `ccall` was not being exported Fixes #3272.
This commit is contained in:
parent
77417d5c9e
commit
45ce545ad3
@ -159,8 +159,8 @@ elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
|
|||||||
add_compile_options(-fno-exceptions)
|
add_compile_options(-fno-exceptions)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
|
if(NOT (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR CMAKE_SYSTEM_NAME STREQUAL "Emscripten"))
|
||||||
# Error if there's symbols that are not found at link time.
|
# Error if there's symbols that are not found at link time. Some linkers do not support this flag.
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||||
add_link_options("-Wl,-undefined,error")
|
add_link_options("-Wl,-undefined,error")
|
||||||
elseif(NOT APPLE)
|
elseif(NOT APPLE)
|
||||||
|
@ -53,6 +53,9 @@ if(ENABLE_GLSLANG_JS)
|
|||||||
target_link_libraries(glslang.js "-s ALLOW_MEMORY_GROWTH=1")
|
target_link_libraries(glslang.js "-s ALLOW_MEMORY_GROWTH=1")
|
||||||
target_link_libraries(glslang.js "-s FILESYSTEM=0")
|
target_link_libraries(glslang.js "-s FILESYSTEM=0")
|
||||||
|
|
||||||
|
# We use ccall in glslang.pre.js, so make sure it's exposed
|
||||||
|
target_link_libraries(glslang.js "-s EXPORTED_RUNTIME_METHODS=ccall")
|
||||||
|
|
||||||
if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
|
if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
|
||||||
target_link_libraries(glslang.js "-s SINGLE_FILE=1")
|
target_link_libraries(glslang.js "-s SINGLE_FILE=1")
|
||||||
endif()
|
endif()
|
||||||
@ -64,8 +67,18 @@ if(ENABLE_GLSLANG_JS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
|
if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
|
||||||
add_custom_command(TARGET glslang.js POST_BUILD
|
if (CMAKE_HOST_SYSTEM MATCHES "Windows.*")
|
||||||
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
|
# There are several ways we could append one file to another on Windows, but unfortunately 'cat' is not one of them
|
||||||
|
# (there is no 'cat' command in cmd). Also, since this will ultimately run in cmd and not pwsh, we need to ensure
|
||||||
|
# Windows path separators are used.
|
||||||
|
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/glslang.js" glslang_js_path)
|
||||||
|
file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js" glslang_after_js_path)
|
||||||
|
add_custom_command(TARGET glslang.js POST_BUILD
|
||||||
|
COMMAND type "${glslang_after_js_path}" >> "${glslang_js_path}")
|
||||||
|
else()
|
||||||
|
add_custom_command(TARGET glslang.js POST_BUILD
|
||||||
|
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -25,7 +25,7 @@ Module['compileGLSLZeroCopy'] = function(glsl, shader_stage, gen_debug, spirv_ve
|
|||||||
|
|
||||||
var p_output = Module['_malloc'](4);
|
var p_output = Module['_malloc'](4);
|
||||||
var p_output_len = Module['_malloc'](4);
|
var p_output_len = Module['_malloc'](4);
|
||||||
var id = ccall('convert_glsl_to_spirv',
|
var id = Module['ccall']('convert_glsl_to_spirv',
|
||||||
'number',
|
'number',
|
||||||
['string', 'number', 'boolean', 'number', 'number', 'number'],
|
['string', 'number', 'boolean', 'number', 'number', 'number'],
|
||||||
[glsl, shader_stage_int, gen_debug, spirv_version_int, p_output, p_output_len]);
|
[glsl, shader_stage_int, gen_debug, spirv_version_int, p_output, p_output_len]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user