Commit 95bede6
Integrate VST3 validator directly into pluginval binary (#162)
* Integrate VST3 validator directly into pluginval binary
- Add VST3 SDK as a dependency via CPM (fetched during cmake configure)
- Create VST3ValidatorRunner wrapper to call SDK validation APIs
- Add --vst3-validator-mode CLI option for running embedded validator
- Modify VST3validator test to use embedded validator instead of external binary
- Remove --vst3validator CLI option and related UI code (no longer needed)
- Update CLAUDE.md documentation with new build options and architecture
The embedded validator eliminates the need for users to supply a separate
vstvalidator binary path. When built with PLUGINVAL_VST3_VALIDATOR=ON (default),
the validator runs automatically for VST3 plugins at strictness level 5+.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Fix VST3 validator build and runtime issues
- Add platform-specific module loading sources from SDK (module_linux.cpp, etc.)
- Fix VST3ValidatorRunner to use correct SDK APIs:
- Use template createInstance<T>() method
- Use FUnknownPtr for interface casting
- Remove incompatible ITestResult implementation
- Add sdk library to link dependencies
- Fix argument parsing to not auto-insert --validate when using --vst3-validator-mode
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Add ARC compile flag for macOS module_mac.mm
The VST3 SDK's module_mac.mm requires Automatic Reference Counting (ARC)
to be enabled. Add -fobjc-arc compile flag for this specific source file.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Add platform-specific library linking for VST3 validator
- Add Ole32 and Shell32 libraries for Windows module loading
- Add Cocoa framework for macOS module loading
- Add hosting directory to include paths
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Add Windows-specific compile definitions for module_win32.cpp
Add NOMINMAX and WIN32_LEAN_AND_MEAN definitions to avoid conflicts
with JUCE's Windows header handling.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Add exception handling and better error output to VST3 validator
- Add try-catch around validation logic to handle exceptions
- Add stderr output for errors to improve visibility in CI logs
- This helps diagnose validation failures on macOS and Windows
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Use COMPILE_FLAGS for Windows VST3 module definitions
- Use MSVC-specific /D flags for compile definitions
- Add _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
- This ensures definitions are applied correctly for MSVC builds
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Use wrapper file for Windows VST3 module compilation
Instead of adding compile flags to the SDK's module_win32.cpp directly,
use a wrapper source file that sets up the necessary preprocessor
definitions (NOMINMAX, WIN32_LEAN_AND_MEAN, _UNICODE, etc.) before
including the SDK source. This ensures proper compilation environment
when building outside the VST3 SDK's CMake context.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Use target-level compile definitions for Windows VST3 module
Replace wrapper file approach with target-level compile definitions.
This adds the necessary Windows macros (NOMINMAX, WIN32_LEAN_AND_MEAN,
_UNICODE, _CRT_SECURE_NO_WARNINGS, etc.) to the pluginval target when
building on Windows with VST3 validator enabled.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Add SMTG_USE_STATIC_CRT and additional include directories
- Set SMTG_USE_STATIC_CRT=ON to match pluginval's static CRT linking
- Add vst and utility include directories for VST3 SDK module compilation
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Create OBJECT library for Windows VST3 module compilation
Isolate the Windows module_win32.cpp compilation into a separate OBJECT
library with its own compile settings, avoiding potential conflicts with
JUCE's compilation environment. The object library:
- Uses C++17 (matching SDK's validator)
- Has SDK-specific include directories
- Sets Windows compatibility definitions
- Uses static CRT to match pluginval
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Simplify OBJECT library include directories for Windows VST3 module
Use PUBLIC link to sdk_hosting to inherit its include directories
automatically, and only add the minimal additional includes needed.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Simplify Windows VST3 module - use direct file inclusion
Remove the OBJECT library approach and add module_win32.cpp directly
to the pluginval sources like on other platforms. The Windows-specific
compile definitions (NOMINMAX, WIN32_LEAN_AND_MEAN, etc.) are already
set at the target level.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Fix Windows build: compile module_win32.cpp with C++17
The VST3 SDK's module_win32.cpp uses std::filesystem::path::generic_u8string()
which returns std::u8string in C++20 but std::string in C++17. Since the SDK
code expects std::string, we compile this specific file with /std:c++17.
Also move _UNICODE and UNICODE definitions from target-level to file-level
(only for module_win32.cpp) to avoid breaking JUCE's LV2/lilv code which
uses ANSI Windows APIs.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Bypass JUCE startup for --vst3-validator-mode subprocess
When running with --vst3-validator-mode, intercept the flag in main()
before JUCE initializes. This avoids the macOS "Periodic events are
already being generated" crash that occurred when the VST3 validator
subprocess tried to use JUCE's event loop.
The VST3 validator now runs as a pure C++ process without JUCE,
which is appropriate since it only uses the VST3 SDK APIs.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Document CI run logs and setup instructions
Added CI run logs section with configuration and workflow details.
* Fix JUCE app initialization in custom main()
Add forward declaration for juce_CreateApplication and set
JUCEApplicationBase::createInstance before calling main().
This is required for JUCE to properly create the application instance.
Previous commit caused segfaults because createInstance wasn't set.
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* Trigger CI re-run
https://claude.ai/code/session_01AY9chvBEmsCVjNZSUkNcbw
* VST3: Build validator from sdk and extract to a temp file at run time
* CI: Added -DCMAKE_BUILD_TYPE to as-depenedency job
* Updated gitignore
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent a5d5b08 commit 95bede6
File tree
12 files changed
+232
-59
lines changed- .github/workflows
- Source
- tests
- vst3validator
- cmake
12 files changed
+232
-59
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
187 | 187 | | |
188 | 188 | | |
189 | 189 | | |
190 | | - | |
| 190 | + | |
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| 82 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
36 | 74 | | |
37 | 75 | | |
38 | 76 | | |
| |||
49 | 87 | | |
50 | 88 | | |
51 | 89 | | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
52 | 93 | | |
53 | 94 | | |
54 | 95 | | |
| |||
59 | 100 | | |
60 | 101 | | |
61 | 102 | | |
62 | | - | |
| 103 | + | |
| 104 | + | |
63 | 105 | | |
64 | 106 | | |
65 | 107 | | |
| |||
101 | 143 | | |
102 | 144 | | |
103 | 145 | | |
| 146 | + | |
104 | 147 | | |
105 | 148 | | |
106 | 149 | | |
| |||
177 | 220 | | |
178 | 221 | | |
179 | 222 | | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
180 | 243 | | |
181 | 244 | | |
182 | 245 | | |
| |||
312 | 375 | | |
313 | 376 | | |
314 | 377 | | |
| 378 | + | |
315 | 379 | | |
316 | 380 | | |
317 | 381 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
68 | 90 | | |
69 | 91 | | |
70 | 92 | | |
| |||
109 | 131 | | |
110 | 132 | | |
111 | 133 | | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
112 | 144 | | |
113 | 145 | | |
114 | 146 | | |
| |||
124 | 156 | | |
125 | 157 | | |
126 | 158 | | |
| 159 | + | |
127 | 160 | | |
128 | 161 | | |
| 162 | + | |
129 | 163 | | |
130 | 164 | | |
131 | 165 | | |
| |||
143 | 177 | | |
144 | 178 | | |
145 | 179 | | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
146 | 196 | | |
147 | 197 | | |
148 | 198 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
290 | 290 | | |
291 | 291 | | |
292 | 292 | | |
293 | | - | |
294 | 293 | | |
295 | 294 | | |
296 | 295 | | |
| |||
384 | 383 | | |
385 | 384 | | |
386 | 385 | | |
387 | | - | |
388 | | - | |
389 | 386 | | |
390 | 387 | | |
391 | 388 | | |
| |||
599 | 596 | | |
600 | 597 | | |
601 | 598 | | |
602 | | - | |
603 | 599 | | |
604 | 600 | | |
605 | 601 | | |
| |||
669 | 665 | | |
670 | 666 | | |
671 | 667 | | |
672 | | - | |
673 | | - | |
674 | | - | |
675 | 668 | | |
676 | 669 | | |
677 | 670 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
174 | 175 | | |
175 | 176 | | |
176 | 177 | | |
177 | | - | |
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
108 | 108 | | |
109 | 109 | | |
110 | 110 | | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | 111 | | |
122 | 112 | | |
123 | 113 | | |
| |||
210 | 200 | | |
211 | 201 | | |
212 | 202 | | |
213 | | - | |
214 | 203 | | |
215 | 204 | | |
216 | 205 | | |
| |||
296 | 285 | | |
297 | 286 | | |
298 | 287 | | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
312 | | - | |
313 | | - | |
314 | | - | |
315 | | - | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | 288 | | |
328 | 289 | | |
329 | 290 | | |
| |||
633 | 594 | | |
634 | 595 | | |
635 | 596 | | |
636 | | - | |
637 | | - | |
638 | | - | |
639 | 597 | | |
640 | 598 | | |
641 | 599 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
53 | | - | |
54 | 53 | | |
55 | 54 | | |
56 | 55 | | |
| |||
0 commit comments