diff --git a/packages/openjphjs/CMakeLists.txt b/packages/openjphjs/CMakeLists.txt index b3a1b03..c4e3f5e 100644 --- a/packages/openjphjs/CMakeLists.txt +++ b/packages/openjphjs/CMakeLists.txt @@ -15,7 +15,13 @@ if(NOT EXISTS "${PROJECT_SOURCE_DIR}/extern/openjph/CMakeLists.txt") endif() if(EMSCRIPTEN) - option(OJPH_DISABLE_INTEL_SIMD "Disables the use of SIMD instructions and associated files" ON) + # OpenJPH 0.30.1 builds WASM SIMD by default (OJPH_DISABLE_SIMD=OFF) and emits + # -msimd128 + the *_wasm.cpp kernels. Do NOT set the deprecated + # OJPH_DISABLE_INTEL_SIMD: 0.30.1 bridges it onto OJPH_DISABLE_SIMD + # (extern/openjph/CMakeLists.txt), so the old "=ON" — which used to mean + # "skip Intel SIMD, use the WASM path" — now disables ALL SIMD and ships a + # ~2x-slower scalar wasm. Keep SIMD explicitly enabled. + set(OJPH_DISABLE_SIMD OFF CACHE BOOL "Enable OpenJPH WASM SIMD" FORCE) endif() option(BUILD_SHARED_LIBS "" OFF) diff --git a/packages/openjphjs/build.sh b/packages/openjphjs/build.sh index 52d23ab..6cfa1ee 100755 --- a/packages/openjphjs/build.sh +++ b/packages/openjphjs/build.sh @@ -1,8 +1,11 @@ #!/bin/sh mkdir -p build mkdir -p dist -(cd build && CXXFLAGS=-msimd128 emcmake cmake -DCMAKE_BUILD_TYPE=Debug ..) -#(cd build && CXXFLAGS=-msimd128 emcmake cmake ..) +(cd build && CXXFLAGS=-msimd128 emcmake cmake -DCMAKE_BUILD_TYPE=Release ..) +# NOTE: this shipped a Debug (-O0) wasm until now, which left the SIMD kernels +# unoptimized (SIMD intrinsics not inlined) — making decode/encode far slower +# and the binary far larger than they should be. Release (-O3) is the correct +# artifact for a published codec. (cd build && emmake make VERBOSE=1 -j ${nprocs}) cp ./build/src/openjphjs.js ./dist cp ./build/src/openjphjs.wasm ./dist diff --git a/packages/openjphjs/extern/openjph b/packages/openjphjs/extern/openjph index e01c7b7..0748112 160000 --- a/packages/openjphjs/extern/openjph +++ b/packages/openjphjs/extern/openjph @@ -1 +1 @@ -Subproject commit e01c7b7f9e7ecbb15cf13bb45661c9a41ab7fec6 +Subproject commit 0748112be8820ce97a4ea3e576bd817c804737d5 diff --git a/packages/openjphjs/src/CMakeLists.txt b/packages/openjphjs/src/CMakeLists.txt index 83a9abe..42e31f2 100644 --- a/packages/openjphjs/src/CMakeLists.txt +++ b/packages/openjphjs/src/CMakeLists.txt @@ -1,7 +1,17 @@ add_executable(openjphjs jslib.cpp) -target_link_libraries(openjphjs PRIVATE openjphsimd) +# OpenJPH 0.30.1 builds a single `openjph` library (SIMD is folded in, +# architecture-agnostic); the old separate `openjphsimd` target no longer +# exists. Upstream's own wasm wrapper links `openjph` too. +target_link_libraries(openjphjs PRIVATE openjph) +# OpenJPH 0.30.1 moved its public headers under src/core/openjph (and +# src/core/shared); older releases exposed them on a flatter include path, so +# our bare `#include ` no longer resolves via the linked target +# alone. Add the 0.30.1 header roots explicitly. +target_include_directories(openjphjs PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/../extern/openjph/src/core/openjph + ${CMAKE_CURRENT_SOURCE_DIR}/../extern/openjph/src/core/shared) target_compile_options(openjphjs PRIVATE -DOJPH_ENABLE_WASM_SIMD -msimd128) target_compile_features(openjphjs PUBLIC cxx_std_11) set_target_properties(