Can't compile

Hi:

Newbie to this…

Followed the readme on the OwlWare Git page…downloaded all, etc.

When running Make : i get an error saying the following files can’t be found (and all is set-up exactly as your readme files suggests):

libs.mk
f4.mk

I can’t figure out what’s wrong…

-Gary

What is the full error message?
Is it possible it is not finding the right gcc-arm compiler?
You might have to edit common.mk to set the correct TOOLROOT depending on what version you downloaded and where you put it.

Hi Martin:

This shows my newbie status!

My problem I believe, is I am not setting my paths correctly, as i don’t understand what the exact syntax should be and I can’t seem to find any docs specifically about this…

For example, in your common.mk file you have the following:

Tool path

TOOLROOT ?= Tools/gcc-arm-none-eabi-5_3-2016q1/bin/ # missing strnlen/strlcpy

TOOLROOT ?= Tools/gcc-arm-none-eabi-5_2-2015q4/bin/
STLINK ?= $(TEMPLATEROOT)/Tools/stlink/
DFUUTIL ?= $(TEMPLATEROOT)/Tools/dfu-util/dfu-util

Am I supposed to delete the question marks you show above for my path? Any doc on the syntax for this?

Thanks,

Gary

Hi again, martin:

Here is the error I get:

smf@smf-PC /cygdrive/c/Users/smf/Desktop/OwlWare
$ MAKE
/bin/sh: -c: line 0: syntax error near unexpected token C:/Users/smf/Desktop/OwlWare/Tools/ arm-none-eabi/arm-none-eabi-gcc' /bin/sh: -c: line 0: (TEMPLATEROOT)C:/Users/smf/Desktop/OwlWare/Tools/arm-none-eabi/arm-non e-eabi-gcc -c -g -Wall -Wcpp -Wunused-function -DDEBUG -DUSE_FULL_ASSERT --specs=nano.specs -DEXTERNAL_SRAM -DARM_CORTEX -fdata-sections -ffunction-sections -nostdlib -nostartfiles -fn o-builtin -ffreestanding -mtune=cortex-m4 -I./Libraries/FreeRTOS/include -I./Libraries/FreeR TOS/portable/GCC/ARM_CM4F -I./ProgramSource -I./Libraries/OwlPatches -std=gnu99 -mcpu=cortex -m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -I./Libraries -I. /Libraries/CMSIS/Include -I./Libraries/STM32F4xx_StdPeriph_Driver/inc -I./Source -I./Librari es/CMSIS/ST/STM32F4xx/Include -I./Libraries/CMSIS/Include -I./Libraries/STM32_USB_Device_Lib rary/Core/inc -I./Libraries/STM32_USB_Device_Library/Class/cdc/inc -I./Libraries/STM32_USB_O TG_Driver/inc -DUSE_STDPERIPH_DRIVER -DARM_MATH_CM4 -D__FPU_PRESENT -D__FPU_USED=1 -DSTM32F4 07xx -DSTM32F4XX ./Source/codec.c -o Build/codec.o’
MAKE: *** [common.mk:51: Build/codec.o] Error 1

My common.mk file is now (and I have no idea what I am doing-remainder of file is same as yours):

Tool path

TOOLROOT ?= Tools/gcc-arm-none-eabi-5_3-2016q1/bin/ # missing strnlen/strlcpy

TOOLROOT ?= $ (TEMPLATEROOT)C:/Users/smf/Desktop/OwlWare/Tools/arm-none-eabi/

-Gary

Don’t worry! Makefile syntax can be a bit cryptic: ?= means ‘set if not already defined’ and $(xyz) is how you refer to the value of parameter xyz.
Are you using Cygwin on Windows? You can try removing the whole TOOLROOT line, since the tools should be included in the search path. Or, if you’ve really installed them in a directory called arm-none-eabi in the Tools subfolder:
TOOLROOT ?= Tools/arm-none-eabi/bin

Hi Martin:

Yes, on windows…

I tried your ideas, same result.

When I add or remove a directory or make changes to the common.mk file, do i need to do anything else (‘clean’ or something)?

-Gary

Martin:

Making some progress…ran everything on another Windows PC and have compiled some files.

One thing I noted:

In my ‘tools’ folder, the files the common.mk were looking for were in the ‘bin’ folder, NOT the bin folder in ‘arm-none-eabii’ folder- this folder does have a ‘bin’ folder, but the files common.mk was looking for were in the bin folder in my tools root…I don’t know why?

Anyway, now getting errors relating to the MidiController.cpp file, here is the error text:

gh@gh-HP /cygdrive/c/Users/gh/Desktop/OwlWare/owlware
$ make
./Source/MidiController.cpp: In member function ‘void MidiController::sendPatchP arameterName(PatchParameterId, const char*)’:
./Source/MidiController.cpp:78:34: error: ‘strnlen’ was not declared in this scope
uint8_t size = strnlen(name, 24);
^
./Source/MidiController.cpp: In member function ‘void MidiController::sendPatchN ame(uint8_t)’:
./Source/MidiController.cpp:95:36: error: ‘strnlen’ was not declared in this sco pe
uint8_t size = strnlen(name, 24);
^
./Source/MidiController.cpp: In member function ‘void MidiController::sendProgra mStats()’:
./Source/MidiController.cpp:156:39: error: ‘stpcpy’ was not declared in this sco pe
p = stpcpy(p, (const char*)"CPU: ");
^
./Source/MidiController.cpp:174:49: error: ‘stpcpy’ was not declared in this sco pe
p = stpcpy(p, (const char*)“Memory Error 0x”);
^
./Source/MidiController.cpp: In member function ‘void MidiController::sendProgra mMessage()’:
./Source/MidiController.cpp:211:35: error: ‘stpncpy’ was not declared in this sc ope
p = stpncpy(p, pv->message, 62);
^
./Source/MidiController.cpp: In member function ‘void MidiController::sendFirmwa reVersion()’:
./Source/MidiController.cpp:221:37: error: ‘stpcpy’ was not declared in this sco pe
p = stpcpy(p, getFirmwareVersion());
^
./Source/MidiController.cpp: In member function ‘void MidiController::sendConfig urationSetting(const char*, uint32_t)’:
./Source/MidiController.cpp:229:21: error: ‘stpcpy’ was not declared in this sco pe
p = stpcpy(p, name);
^
./Source/MidiController.cpp: In member function ‘void MidiController::sendDevice Id()’:
./Source/MidiController.cpp:239:41: error: ‘stpcpy’ was not declared in this sco pe
p = stpcpy(p, itoa(deviceId[0], 16, 8));
^
make: *** [common.mk:55: Build/MidiController.o] Error 1

Okay so that’s good progress. What version of the compiler are you running? Do arm-none-eabi-gcc --version to find out. For example, I get arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 5.4.1 20160609 (release) [ARM/embedded-5-branch revision 237715]

Hi Martin:

This version:

gcc-arm-none-eabi-5_4-2016q3-20160926-win32.zip

Maybe I should use your version?

if I do, I need to somehow delete all compiled files, I assume, and start over?

Is there a command to do this?

Thanks!

-Gary

You can delete all compiled files with make clean, but I don’t think the problem is your version of the compiler.

The top of MidiController.cpp should have the line #include <string.h>. The missing functions strnlen and stpcpy should be declared in this header. I’ve just tried compiling from the master branch and it works for me, but I’m not on Windows.

Can you pls try changing Makefile line 38, from CXXFLAGS = -fno-rtti -fno-exceptions -std=c++11 to CXXFLAGS = -fno-rtti -fno-exceptions -std=gnu++11 (ie change c++11 to gnu++11).

Just to make sure: you know you don’t have to compile OwlWare to make your own patches, right?

Hi Martin:

Yes, I know that…my software partner is sick so I am trying to do everything myself and it’s been some time since I programmed…

Made the change to the Makefile per your suggestion- thanks, seems to work.

Now I am getting (and I can’t seem to find the file called for: biquadfilter.h):

gh@gh-HP /cygdrive/c/users/gh/desktop/owlware/owlware
$ make
In file included from ./Source/factory.h:15:0,
from ./Source/FactoryPatches.cpp:32:
./Libraries/OwlPatches/LpfDelayPatch.hpp:35:26: fatal error: BiquadFilter.h: No such file or directory
compilation terminated.
make: *** [common.mk:55: Build/FactoryPatches.o] Error 1

-Gary

Hi Martin:

Regarding the missing biquadfilter.h file: There was a biquadfilter.hpp file, so, I just copied the file into the same directory with a .h extension and that seems OK (so I now have a .h and .hpp biquadfilter file)…not sure if that will cause other problems, but the compiler was happy.

Now on to more errors, similar to the last ones:

$ make
In file included from ./Source/factory.h:1:0,
from ./Source/FactoryPatches.cpp:32:
./Libraries/OwlPatches/JotReverbPatch.hpp:720:5: error: ‘FloatParameter’ does no t name a type
FloatParameter cutoffFrequency;
^
./Libraries/OwlPatches/JotReverbPatch.hpp:721:5: error: ‘FloatParameter’ does no t name a type
FloatParameter roomSizeSeconds;
^
./Libraries/OwlPatches/JotReverbPatch.hpp:722:5: error: ‘FloatParameter’ does no t name a type
FloatParameter reverbTimeSeconds;
^
./Libraries/OwlPatches/JotReverbPatch.hpp:723:5: error: ‘FloatParameter’ does no t name a type
FloatParameter dryWet;
^
./Libraries/OwlPatches/JotReverbPatch.hpp:724:5: error: ‘FloatParameter’ does no t name a type
FloatParameter predelaySeconds;
^
./Libraries/OwlPatches/JotReverbPatch.hpp: In constructor ‘JotReverbPatch::JotRe verbPatch()’:
./Libraries/OwlPatches/JotReverbPatch.hpp:686:2: error: ‘roomSizeSeconds’ was no t declared in this scope
roomSizeSeconds = getFloatParameter(“Room Size”, 0.15, 0.6, 0.4, 0.0, delta);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:686:77: error: ‘getFloatParameter’ was not declared in this scope
roomSizeSeconds = getFloatParameter(“Room Size”, 0.15, 0.6, 0.4, 0.0, delta);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:687:2: error: ‘predelaySeconds’ was no t declared in this scope
predelaySeconds = getFloatParameter(“Predelay”, 0, 0.1, 0, 0.0, delta);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:688:2: error: ‘reverbTimeSeconds’ was not declared in this scope
reverbTimeSeconds = getFloatParameter(“Decay”, 1, 10, 5, 0.0, delta);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:689:2: error: ‘dryWet’ was not declare d in this scope
dryWet = getFloatParameter(“Dry/Wet”, 0, 1.0, 0.5, 0.95, delta);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:690:2: error: ‘cutoffFrequency’ was no t declared in this scope
cutoffFrequency = getFloatParameter(“Tone”, 16000, 1000, 8000, 0.0, delta); // reversed range 16k to 1k
^
./Libraries/OwlPatches/JotReverbPatch.hpp: In member function ‘virtual void JotR everbPatch::processAudio(AudioBuffer&)’:
./Libraries/OwlPatches/JotReverbPatch.hpp:707:48: error: ‘dryWet’ was not declar ed in this scope
bufL[i+k] = theReverbBlock.left_output[k]dryWet + bufL[i+k](1.0-dryWet);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:697:13: warning: unused variable ‘nbCh annels’ [-Wunused-variable]
int nbChannels = buffer.getChannels();
^
./Libraries/OwlPatches/JotReverbPatch.hpp: In member function ‘void JotReverbPat ch::setParams()’:
./Libraries/OwlPatches/JotReverbPatch.hpp:715:65: error: ‘reverbTimeSeconds’ was not declared in this scope
reverbSetParam(&theReverbBlock, getSampleRate(), 100.0, reverbTimeSecon ds, roomSizeSeconds, cutoffFrequency, predelaySeconds);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:715:84: error: ‘roomSizeSeconds’ was n ot declared in this scope
reverbSetParam(&theReverbBlock, getSampleRate(), 100.0, reverbTimeSecon ds, roomSizeSeconds, cutoffFrequency, predelaySeconds);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:715:101: error: ‘cutoffFrequency’ was not declared in this scope
reverbSetParam(&theReverbBlock, getSampleRate(), 100.0, reverbTimeSecon ds, roomSizeSeconds, cutoffFrequency, predelaySeconds);
^
./Libraries/OwlPatches/JotReverbPatch.hpp:715:118: error: ‘predelaySeconds’ was not declared in this scope
reverbSetParam(&theReverbBlock, getSampleRate(), 100.0, reverbTimeSecon ds, roomSizeSeconds, cutoffFrequency, predelaySeconds);
^
In file included from ./Libraries/OwlPatches/LpfDelayPatch.hpp:34:0,
from ./Source/factory.h:15,
from ./Source/FactoryPatches.cpp:32:
./Libraries/OwlPatches/CircularBuffer.hpp: In member function ‘void CircularBuff er::write(float)’:
./Libraries/OwlPatches/CircularBuffer.hpp:18:21: warning: comparison between sig ned and unsigned integer expressions [-Wsign-compare]
if(++writeIndex == buffer.getSize())
^
make: *** [common.mk:55: Build/FactoryPatches.o] Error 1

-Gary

Hi Martin:

Sorry for so many problems…please see my last reply, above.

Also- maybe the issues are with Windows machines?

I will try and compile based on your computer type, software, etc.

Can you tell me what you are using for a computer…Mac? Which version of OSX? Which op system, and which software you are using, and I will try to make it all work.

Thanks!

-Gary

Ouch, that’s my bad!
The latest version of the patches is not fully compatible with the current OwlWare version.
It’s a bit of a mess, sorry!
If you comment out the patches that don’t work in factory.h and factory.cpp then you can at least get a working firmware.
Meanwhile I’ll try to sort this out by bringing the OwlWare code up to date.

OK, that would help me a lot…how long will it take you to update?

And, details on your set-up please, so i can use it as well for my Owl experiments…I don’t want to use Windows anymore!

-Gary

Hi:

Well, I did get it compiled…but…

-I did comment out the jot reverb.
-I think the change I made to the biquad filter file (see above in the last few replies by me)- copied it with the additional extesion, so I have a biquad .h and .hpp…, as I discussed due to errors I was getting…

Not sure if that was a good idea!

Also, it compiled as above with the warning shown in my earlier post.

Anyway, downloaded to the OWL and that was OK, was successful.

If I use the FreeVerb program, shows CPU load at some very high number, I think it was 168%, and, audio is very bad, of course…

This problem exists on every more complex file, some simple patches are OK.

So, I assume this is due to the warning I had earlier and maybe my change to the biquad extension?

If I re-load your V12 file, all is OK…

-Gary

See last post, and re-compiled and here is the error:

gh@gh-HP /cygdrive/c/users/gh/desktop/owlware/owlware
$ make bin
In file included from ./Libraries/OwlPatches/LpfDelayPatch.hpp:34:0,
from ./Source/factory.h:15,
from ./Source/FactoryPatches.cpp:32:
./Libraries/OwlPatches/CircularBuffer.hpp: In member function ‘void CircularBuffer::write(float)’:
./Libraries/OwlPatches/CircularBuffer.hpp:18:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(++writeIndex == buffer.getSize())
^
Successfully built OWL Pedal Debug firmware in ./Build/OwlWare.bin

By default the build compiles a debug version, which runs at apprx twice the CPU load. Recompile with make CONFIG=Release clean all. Also, by default it compiles for the OWL Pedal, add PLATFORM=Modular for OWL Modular hardware configuration. (I’ll add that to the readme)

The CircularBuffer issue is just a warning, as you can see at the end Successfully built… it still compiles.

I’m developing on Ubuntu and Debian Linux, which works very well and is easy to set up as a VM using VirtualBox or VMWare. No crazy driver problems like on Windows!