common-web.mk (3562B)
1 PROJECT_ROOT = $(PWD)/.. 2 DEPS_PATH = $(IPLUG2_ROOT)/Dependencies 3 WAM_SDK_PATH = $(DEPS_PATH)/IPlug/WAM_SDK/wamsdk 4 WDL_PATH = $(IPLUG2_ROOT)/WDL 5 IPLUG_PATH = $(IPLUG2_ROOT)/IPlug 6 SWELL_PATH = $(WDL_PATH)/swell 7 IGRAPHICS_PATH = $(IPLUG2_ROOT)/IGraphics 8 CONTROLS_PATH = $(IGRAPHICS_PATH)/Controls 9 PLATFORMS_PATH = $(IGRAPHICS_PATH)/Platforms 10 DRAWING_PATH = $(IGRAPHICS_PATH)/Drawing 11 IGRAPHICS_EXTRAS_PATH = $(IGRAPHICS_PATH)/Extras 12 IPLUG_EXTRAS_PATH = $(IPLUG_PATH)/Extras 13 IPLUG_SYNTH_PATH = $(IPLUG_EXTRAS_PATH)/Synth 14 IPLUG_FAUST_PATH = $(IPLUG_EXTRAS_PATH)/Faust 15 IPLUG_WEB_PATH = $(IPLUG_PATH)/WEB 16 NANOVG_PATH = $(DEPS_PATH)/IGraphics/NanoVG/src 17 NANOSVG_PATH = $(DEPS_PATH)/IGraphics/NanoSVG/src 18 IMGUI_PATH = $(DEPS_PATH)/IGraphics/imgui 19 YOGA_PATH = $(DEPS_PATH)/IGraphics/yoga 20 STB_PATH = $(DEPS_PATH)/IGraphics/STB 21 22 IPLUG_SRC = $(IPLUG_PATH)/IPlugAPIBase.cpp \ 23 $(IPLUG_PATH)/IPlugParameter.cpp \ 24 $(IPLUG_PATH)/IPlugPluginBase.cpp \ 25 $(IPLUG_PATH)/IPlugPaths.cpp \ 26 $(IPLUG_PATH)/IPlugTimer.cpp 27 28 IGRAPHICS_SRC = $(IGRAPHICS_PATH)/IGraphics.cpp \ 29 $(IGRAPHICS_PATH)/IControl.cpp \ 30 $(CONTROLS_PATH)/*.cpp \ 31 $(PLATFORMS_PATH)/IGraphicsWeb.cpp 32 33 IMGUI_SRC = $(IGRAPHICS_PATH)/IGraphicsImGui.cpp 34 35 INCLUDE_PATHS = -I$(PROJECT_ROOT) \ 36 -I$(WAM_SDK_PATH) \ 37 -I$(WDL_PATH) \ 38 -I$(SWELL_PATH) \ 39 -I$(IPLUG_PATH) \ 40 -I$(IPLUG_EXTRAS_PATH) \ 41 -I$(IPLUG_SYNTH_PATH) \ 42 -I$(IPLUG_FAUST_PATH) \ 43 -I$(IPLUG_WEB_PATH) \ 44 -I$(IGRAPHICS_PATH) \ 45 -I$(DRAWING_PATH) \ 46 -I$(CONTROLS_PATH) \ 47 -I$(PLATFORMS_PATH) \ 48 -I$(IGRAPHICS_EXTRAS_PATH) \ 49 -I$(NANOVG_PATH) \ 50 -I$(NANOSVG_PATH) \ 51 -I$(STB_PATH) \ 52 -I$(IMGUI_PATH) \ 53 -I$(IMGUI_PATH)/backends \ 54 -I$(YOGA_PATH) \ 55 -I$(YOGA_PATH)/yoga 56 57 #every cpp file that is needed for both WASM modules 58 SRC = $(IPLUG_SRC) 59 60 #every cpp file that is needed for the WAM audio processor WASM module running in the audio worklet 61 WAM_SRC = $(IPLUG_WEB_PATH)/IPlugWAM.cpp \ 62 $(WAM_SDK_PATH)/processor.cpp \ 63 $(IPLUG_PATH)/IPlugProcessor.cpp 64 65 #every cpp file that is needed for the "WEB" graphics WASM module 66 WEB_SRC = $(IGRAPHICS_SRC) \ 67 $(IPLUG_WEB_PATH)/IPlugWeb.cpp \ 68 $(IGRAPHICS_PATH)/IGraphicsEditorDelegate.cpp 69 70 NANOVG_LDFLAGS = -s USE_WEBGL2=0 -s FULL_ES3=1 71 72 IMGUI_LDFLAGS = -s BINARYEN_TRAP_MODE=clamp 73 74 # CFLAGS for both WAM and WEB targets 75 CFLAGS = $(INCLUDE_PATHS) \ 76 -std=c++17 \ 77 -Wno-bitwise-op-parentheses \ 78 -DWDL_NO_DEFINE_MINMAX \ 79 -DNDEBUG=1 80 81 WAM_CFLAGS = -DWAM_API \ 82 -DIPLUG_DSP=1 \ 83 -DNO_IGRAPHICS \ 84 -DSAMPLE_TYPE_FLOAT 85 86 WEB_CFLAGS = -DWEB_API \ 87 -DIPLUG_EDITOR=1 88 89 WAM_EXPORTS = "[\ 90 '_createModule','_wam_init','_wam_terminate','_wam_resize', \ 91 '_wam_onprocess', '_wam_onmidi', '_wam_onsysex', '_wam_onparam', \ 92 '_wam_onmessageN', '_wam_onmessageS', '_wam_onmessageA', '_wam_onpatch' \ 93 ]" 94 95 WEB_EXPORTS = "['_main', '_iplug_fsready', '_iplug_syncfs']" 96 97 # LDFLAGS for both WAM and WEB targets 98 LDFLAGS = -s ALLOW_MEMORY_GROWTH=1 --bind 99 100 # We can't compile the WASM module synchronously on main thread (.wasm over 4k in size requires async compile on chrome) https://developers.google.com/web/updates/2018/04/loading-wasm 101 # and you can't compile asynchronously in AudioWorklet scope 102 # The following settings mean the WASM is delivered as BASE64 and included in the MyPluginName-wam.js file. 103 WAM_LDFLAGS = -s EXPORTED_RUNTIME_METHODS="['ccall', 'cwrap', 'setValue', 'UTF8ToString']" \ 104 -s BINARYEN_ASYNC_COMPILATION=0 \ 105 -s SINGLE_FILE=1 106 #-s ENVIRONMENT=worker 107 108 WEB_LDFLAGS = -s EXPORTED_FUNCTIONS=$(WEB_EXPORTS) \ 109 -s EXPORTED_RUNTIME_METHODS="['UTF8ToString']" \ 110 -s BINARYEN_ASYNC_COMPILATION=1 \ 111 -s FORCE_FILESYSTEM=1 \ 112 -s ENVIRONMENT=web \ 113 -lidbfs.js 114