3030 description : ' Include WAM/Emscripten build'
3131 type : boolean
3232 default : false
33+ wasm :
34+ description : ' Include WASM/Emscripten build'
35+ type : boolean
36+ default : false
3337 universal :
3438 description : ' Include macOS Universal build (arm64+x86_64)'
3539 type : boolean
6670 all_generators : ${{ steps.parse.outputs.all_generators }}
6771 ios : ${{ steps.parse.outputs.ios }}
6872 wam : ${{ steps.parse.outputs.wam }}
73+ wasm : ${{ steps.parse.outputs.wasm }}
6974 universal : ${{ steps.parse.outputs.universal }}
7075 backends : ${{ steps.parse.outputs.backends }}
7176 arm64ec : ${{ steps.parse.outputs.arm64ec }}
@@ -86,13 +91,15 @@ jobs:
8691 echo "all_generators=true" >> $GITHUB_OUTPUT
8792 echo "ios=true" >> $GITHUB_OUTPUT
8893 echo "wam=true" >> $GITHUB_OUTPUT
94+ echo "wasm=true" >> $GITHUB_OUTPUT
8995 echo "universal=true" >> $GITHUB_OUTPUT
9096 echo "backends=true" >> $GITHUB_OUTPUT
9197 echo "arm64ec=true" >> $GITHUB_OUTPUT
9298 else
9399 [[ "$COMMENT" == *"/ci all-generators"* || "$COMMENT" == *"/ci generators"* ]] && echo "all_generators=true" >> $GITHUB_OUTPUT || echo "all_generators=false" >> $GITHUB_OUTPUT
94100 [[ "$COMMENT" == *"/ci ios"* ]] && echo "ios=true" >> $GITHUB_OUTPUT || echo "ios=false" >> $GITHUB_OUTPUT
95101 [[ "$COMMENT" == *"/ci wam"* ]] && echo "wam=true" >> $GITHUB_OUTPUT || echo "wam=false" >> $GITHUB_OUTPUT
102+ [[ "$COMMENT" == *"/ci wasm"* ]] && echo "wasm=true" >> $GITHUB_OUTPUT || echo "wasm=false" >> $GITHUB_OUTPUT
96103 [[ "$COMMENT" == *"/ci universal"* ]] && echo "universal=true" >> $GITHUB_OUTPUT || echo "universal=false" >> $GITHUB_OUTPUT
97104 [[ "$COMMENT" == *"/ci backends"* ]] && echo "backends=true" >> $GITHUB_OUTPUT || echo "backends=false" >> $GITHUB_OUTPUT
98105 [[ "$COMMENT" == *"/ci arm64ec"* ]] && echo "arm64ec=true" >> $GITHUB_OUTPUT || echo "arm64ec=false" >> $GITHUB_OUTPUT
@@ -102,6 +109,7 @@ jobs:
102109 echo "all_generators=${{ inputs.all_generators }}" >> $GITHUB_OUTPUT
103110 echo "ios=${{ inputs.ios }}" >> $GITHUB_OUTPUT
104111 echo "wam=${{ inputs.wam }}" >> $GITHUB_OUTPUT
112+ echo "wasm=${{ inputs.wasm }}" >> $GITHUB_OUTPUT
105113 echo "universal=${{ inputs.universal }}" >> $GITHUB_OUTPUT
106114 echo "backends=${{ inputs.backends }}" >> $GITHUB_OUTPUT
107115 echo "arm64ec=${{ inputs.arm64ec }}" >> $GITHUB_OUTPUT
@@ -111,6 +119,7 @@ jobs:
111119 echo "all_generators=false" >> $GITHUB_OUTPUT
112120 echo "ios=false" >> $GITHUB_OUTPUT
113121 echo "wam=false" >> $GITHUB_OUTPUT
122+ echo "wasm=false" >> $GITHUB_OUTPUT
114123 echo "universal=false" >> $GITHUB_OUTPUT
115124 echo "backends=false" >> $GITHUB_OUTPUT
116125 echo "arm64ec=false" >> $GITHUB_OUTPUT
@@ -700,21 +709,85 @@ jobs:
700709 ./download-iplug-sdks.sh
701710
702711 - name : CMake Configure
703- run : cmake --preset=wam
712+ run : cmake --preset=web
704713
705714 - name : Build WAM
706- run : cmake --build --preset=wam
715+ run : cmake --build --preset=web --target ${{env.PROJECT_NAME}}-web-dist
707716
708717 - name : Verify WAM Output
709718 run : |
710- test -f build/wam /out/${{env.PROJECT_NAME}}/index.html
711- test -f build/wam /out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-wam.js
712- test -f build/wam /out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-web.js
713- test -f build/wam /out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-web.wasm
719+ test -f build/web /out/${{env.PROJECT_NAME}}/index.html
720+ test -f build/web /out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-wam.js
721+ test -f build/web /out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-web.js
722+ test -f build/web /out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-web.wasm
714723 echo "WAM distribution verified"
715724
716725 - name : Upload WAM Artifact
717726 uses : actions/upload-artifact@v4
718727 with :
719728 name : ${{env.PROJECT_NAME}}-wam
720- path : build/wam/out/${{env.PROJECT_NAME}}
729+ path : build/web/out/${{env.PROJECT_NAME}}
730+
731+ # ==========================================================================
732+ # Emscripten - WASM Build - Optional: /ci wasm
733+ # ==========================================================================
734+ emscripten-wasm :
735+ name : WASM (Emscripten)
736+ needs : parse-commands
737+ if : needs.parse-commands.outputs.wasm == 'true'
738+ runs-on : ubuntu-latest
739+ steps :
740+ - name : Checkout
741+ uses : actions/checkout@v4
742+ with :
743+ ref : ${{ needs.parse-commands.outputs.pr_sha || github.sha }}
744+ submodules : recursive
745+
746+ - name : Setup Python
747+ uses : actions/setup-python@v5
748+ with :
749+ python-version : ' 3.x'
750+
751+ - name : Setup Emscripten
752+ uses : mymindstorm/setup-emsdk@v14
753+
754+ - name : Install Ninja
755+ run : sudo apt-get install -y ninja-build
756+
757+ - name : Cache IPlug SDKs
758+ id : cache-sdks
759+ uses : actions/cache@v4
760+ with :
761+ path : |
762+ iPlug2/Dependencies/IPlug/VST3_SDK
763+ iPlug2/Dependencies/IPlug/CLAP_SDK
764+ iPlug2/Dependencies/IPlug/CLAP_HELPERS
765+ key : iplug-sdks-${{ hashFiles('iPlug2/Dependencies/IPlug/download-iplug-sdks.sh') }}
766+
767+ - name : Get SDKs
768+ if : steps.cache-sdks.outputs.cache-hit != 'true'
769+ run : |
770+ cd iPlug2/Dependencies/IPlug
771+ ./download-iplug-sdks.sh
772+
773+ - name : CMake Configure
774+ run : cmake --preset=web
775+
776+ - name : Build WASM
777+ run : cmake --build --preset=web --target ${{env.PROJECT_NAME}}-wasm-dist
778+
779+ - name : Verify WASM Output
780+ run : |
781+ test -f build/web/out/${{env.PROJECT_NAME}}/index.html
782+ test -f build/web/out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-dsp.js
783+ test -f build/web/out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-bundle.js
784+ test -f build/web/out/${{env.PROJECT_NAME}}/scripts/${{env.PROJECT_NAME}}-processor.js
785+ test -f build/web/out/${{env.PROJECT_NAME}}/styles/style.css
786+ echo "WASM distribution verified"
787+
788+ - name : Upload WASM Artifact
789+ uses : actions/upload-artifact@v4
790+ with :
791+ name : ${{env.PROJECT_NAME}}-wasm-cmake
792+ path : build/web/out/
793+ if-no-files-found : warn
0 commit comments