Weird Compile Issue MacOS + GitActions

So I started using automated building and releasing Plugins on Github on my public github modules today and it succeeded at the Windows build but failed at the MacOS build and I don’t understand the errors.

The first error

IceTray.cpp:242:8: error: fields must have a constant size: 'variable length array in structure' extension will never be supported
        float buffers [BUFFER_COUNT][BUFFER_SIZE_MAX][MAX_CHANNELS];

But if you look the source for IceTray all size indexes there are #defines

What further confused me is IceTray.cpp hasn’t changed since it was last built by the VCV team and published to the library, so I know it can be built for MacOS successfully.

Anyone have any idea what might be going on here?

Full Log:

Run export RACK_DIR=$HOME/Rack-SDK
  
  
  export RACK_DIR=$HOME/Rack-SDK
  make -j dep
  make -j dist
  shell: /bin/bash --noprofile --norc -e -o pipefail {0}
  env:
    rack-sdk-version: 2.0.3
make: Nothing to be done for `dep'.
c++  -std=c++11 -stdlib=libc++   -fPIC -I/Users/runner/Rack-SDK/include -I/Users/runner/Rack-SDK/dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.9  -c -o build/src/AstroVibe.cpp.o src/AstroVibe.cpp
c++  -std=c++11 -stdlib=libc++   -fPIC -I/Users/runner/Rack-SDK/include -I/Users/runner/Rack-SDK/dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.9  -c -o build/src/GlassPane.cpp.o src/GlassPane.cpp
c++  -std=c++11 -stdlib=libc++   -fPIC -I/Users/runner/Rack-SDK/include -I/Users/runner/Rack-SDK/dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.9  -c -o build/src/IceTray.cpp.o src/IceTray.cpp
c++  -std=c++11 -stdlib=libc++   -fPIC -I/Users/runner/Rack-SDK/include -I/Users/runner/Rack-SDK/dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.9  -c -o build/src/IceTray2.cpp.o src/IceTray2.cpp
c++  -std=c++11 -stdlib=libc++   -fPIC -I/Users/runner/Rack-SDK/include -I/Users/runner/Rack-SDK/dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.9  -c -o build/src/ShiftyMod.cpp.o src/ShiftyMod.cpp
c++  -std=c++11 -stdlib=libc++   -fPIC -I/Users/runner/Rack-SDK/include -I/Users/runner/Rack-SDK/dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.9  -c -o build/src/plugin.cpp.o src/plugin.cpp
c++  -std=c++11 -stdlib=libc++   -fPIC -I/Users/runner/Rack-SDK/include -I/Users/runner/Rack-SDK/dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -Wall -Wextra -Wno-unused-parameter -DARCH_MAC -mmacosx-version-min=10.9  -c -o build/src/util.cpp.o src/util.cpp
src/AstroVibe.cpp:339:40: warning: suggest braces around initialization of subobject [-Wmissing-braces]
                float masterOut [MAX_CHANNELS][2] = {0,0};
                                                     ^~~
                                                     {  }
src/IceTray.cpp:242:8: error: fields must have a constant size: 'variable length array in structure' extension will never be supported
        float buffers [BUFFER_COUNT][BUFFER_SIZE_MAX][MAX_CHANNELS];
              ^
src/IceTray.cpp:282:3: error: cannot initialize object parameter of type 'rack::engine::Module' with an expression of type 'IceTray'
                config(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN);
                ^~~~~~
src/IceTray.cpp:284:3: error: no matching member function for call to 'configParam'
                configParam(SPEED_NUM_PARAM, 1.f, 11.f, 6.f, "Record Speed Numerator");
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:119:18: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TParamQuantity* configParam(int paramId, float minValue, float maxValue, float defaultValue, std::string name = "", std::string unit = "", float displayBase = 0.f, float displayMultiplier = 1.f, float displayOffset = 0.f) {
                        ^
src/IceTray.cpp:285:3: error: no matching member function for call to 'configParam'
                configParam(SPEED_NUM_CK_PARAM, -1.f, 1.f, 0.f, "Numerator CV Scalar", "%", 0.f, 100.f, 0.f);
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:119:18: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TParamQuantity* configParam(int paramId, float minValue, float maxValue, float defaultValue, std::string name = "", std::string unit = "", float displayBase = 0.f, float displayMultiplier = 1.f, float displayOffset = 0.f) {
                        ^
src/IceTray.cpp:286:3: error: no matching member function for call to 'configParam'
                configParam(SPEED_DENOM_PARAM, 1.f, 11.f, 6.f, "Record Speed Denominator");             
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:119:18: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TParamQuantity* configParam(int paramId, float minValue, float maxValue, float defaultValue, std::string name = "", std::string unit = "", float displayBase = 0.f, float displayMultiplier = 1.f, float displayOffset = 0.f) {
                        ^
src/IceTray.cpp:287:3: error: no matching member function for call to 'configParam'
                configParam(SPEED_DENOM_CK_PARAM, -1.f, 1.f, 0.f, "Denominator CV Sclar", "%", 0.f, 100.f, 0.f);
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:119:18: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TParamQuantity* configParam(int paramId, float minValue, float maxValue, float defaultValue, std::string name = "", std::string unit = "", float displayBase = 0.f, float displayMultiplier = 1.f, float displayOffset = 0.f) {
                        configButton(CUBE_SWITCH_PARAM + i, "Cube " + cs);
                        ^~~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:157:19: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TSwitchQuantity* configButton(int paramId, std::string name = "") {
                         ^
src/IceTray.cpp:301:3: error: no matching member function for call to 'configInput'
                configInput(LEFT_INPUT, "Left Audio Input");
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:168:13: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TPortInfo* configInput(int portId, std::string name = "") {
                   ^
src/IceTray.cpp:302:3: error: no matching member function for call to 'configInput'
                configInput(RIGHT_INPUT, "Right Audio Input");
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:168:13: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TPortInfo* configInput(int portId, std::string name = "") {
                   ^
src/IceTray.cpp:303:3: error: no matching member function for call to 'configInput'
                configInput(CLOCK_RECORD_INPUT, "Record Clock");
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:168:13: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TPortInfo* configInput(int portId, std::string name = "") {
                   ^
src/IceTray.cpp:304:3: error: no matching member function for call to 'configInput'
                configInput(CLOCK_PLAYBACK_INPUT, "Playback Clock");
                ^~~~~~~~~~~
/Users/runner/Rack-SDK/include/engine/Module.hpp:168:13: note: candidate function template not viable: no known conversion from 'IceTray' to 'rack::engine::Module' for object argument
        TPortInfo* configInput(int portId, std::string name = "") {
                   ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [build/src/IceTray.cpp.o] Error 1
make: *** Waiting for unfinished jobs....
1 warning generated.
Error: Process completed with exit code 2.

BUFFER_COUNT and BUFFER_SIZE_MAX are const int and not #define’s. const int are variables. When you define a global array, it requires integer constants to define its bounds.

PS Using the official toolchain, your plugin builds OK for mac with compiler warnings for the above. maybe the toolchain you are using is too sensitive to warnings.

1 Like

Doh. It was late last night and I hadn’t touched that file in a while.

Changing those to #define fixed it.

Thank you!