#!/bin/bash # https://docs.sheetjs.com/docs/demos/engines/jsc#c OS="$(uname -s)" ARCH="$(uname -m)" case "$OS" in Darwin|Linux) ;; *) echo "unsupported OS: $OS"; exit 1 ;; esac cd /tmp # rm -rf sheetjs-jsc mkdir -p sheetjs-jsc cd sheetjs-jsc if [[ ! -d "WebKit" ]]; then git clone https://github.com/WebKit/WebKit.git WebKit; fi cd WebKit git checkout "WebKit-7623.1.14.14.11" cd .. cd WebKit case "$OS" in Darwin) # NOTE: this was needed in WebKit-7623.1.14.14.11 perl -0777 -i -pe 's/#if HAVE\(MACH_EXCEPTIONS\).*?#endif\n*/\n/gs' "Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp" env CFLAGS="-Wno-error=all -Wno-deprecated-declarations -Wno-unused-parameter" \ CXXFLAGS="-Wno-error=all -Wno-deprecated-declarations -Wno-unused-parameter" \ LDFLAGS="-framework Foundation" \ Tools/Scripts/build-webkit --jsc-only \ --cmakeargs="-Wno-error=all -DENABLE_STATIC_JSC=ON -DCMAKE_C_FLAGS=\"-Wno-error=all -Wno-deprecated-declarations -Wno-unused-parameter\" -DCMAKE_CXX_FLAGS=\"-Wno-error=all -Wno-deprecated-declarations -Wno-unused-parameter\"" \ --make-args="-Wno-error=all -Wno-deprecated-declarations -Wno-unused-parameter" \ --no-jit \ --no-webassembly ;; Linux) env CFLAGS="-Wno-error=all -Wno-error=volatile-register-var -Wno-dangling-reference" \ CXXFLAGS="-Wno-error=all -Wno-error=volatile-register-var -Wno-dangling-reference" \ Tools/Scripts/build-webkit --jsc-only \ --cmakeargs="-Wno-error=all -Wno-error=volatile-register-var -DENABLE_STATIC_JSC=ON -DUSE_THIN_ARCHIVES=OFF" \ --make-args="-j1 -Wno-error=all -Wno-error=volatile-register-var" \ -j1 \ --no-jit \ --no-webassembly ;; esac cd .. ln -sfn WebKit/WebKitBuild/JSCOnly/Release Release curl -LO https://docs.sheetjs.com/jsc/sheetjs-jsc.c curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js curl -LO https://docs.sheetjs.com/pres.numbers case "$OS" in Darwin) g++ -o sheetjs-jsc sheetjs-jsc.c -IRelease/JavaScriptCore/Headers -LRelease/lib -lbmalloc -licucore -lWTF -lJavaScriptCore -IRelease/JavaScriptCore/Headers -framework Foundation ;; Linux) g++ -o sheetjs-jsc sheetjs-jsc.c -IRelease/JavaScriptCore/Headers -LRelease/lib -lJavaScriptCore -lWTF -lbmalloc -licui18n -licuuc -latomic -IRelease/JavaScriptCore/Headers ;; esac ./sheetjs-jsc pres.numbers npx -y xlsx-cli sheetjsw.xlsb