Forum rss-feed

Forum

Developers: Building EigenD on Linux

Most Recent

written by: TheTechnobear

ok,
- I pulled in a pull request from Mark Powell (thanks) for fixes for Xcode , so macOS is happily building now.

- Ive made a few fixes for the latest gcc 7 release(7.3.0), as used by the latest ubuntu (18.04), this means everything builds fine on Ubuntu 18.04 (x86_64) , with all packages upgraded

my guess, is your issue, is that fedora is not using gcc 7.3, perhaps using gcc 8.1.

I don't have time to move it to gcc8 at the moment , and honestly its a bit early to be moving to gcc8

if its 'breaking' eigenD,
it undoubtedly will break Juce (which is really sensitive to compiler changes!), and juce is a pain/time consuming to fix

so my plan would be, stick with gcc 7 (you can install this, with no issue and use on fedora) , for a while, so that Roli has a time to resolve any issues with gcc8 - then we can move, and hopefully ubuntu will have moved forward to.

generally, if you dont have a very strong preference to use Fedora, Id recommend using Ubuntu.
for the simple reason, this is what I compile and test on... any other distro has the possibility you'll run into issues (like this) , that ive not seen, and because i cant reproduce may not be a able to help on.

that is of course, unless you are a developer and happy to resolve such issues, in which case getting to work on more distros is a good thing, and id be happy for PRs - that said, I don't think theres more than a couple of linux users, probably easier if we used the same thing ;)








written by: fourcheeze

Mon, 4 Jul 2011 19:36:29 +0100 BST

Hi folks,

I've recently acquired a shiny new Linux workstation and I'm attempting to build EigenD on it. I've grabbed the source and the Steinberg bits, however I'm a bit stuck by a couple of things:

1) The README says:

In order to build, you will need the following:

Runtime Files
-------------

You will need to have the stock EigenD installed to get the
runtime support (which is a vanilla Python install) and the
Windows device drivers.

What does that mean for a Linux machine?

2) In any case I thought I would try and make it:

rich@stilton:~/eigenharp/EigenD$ make
scons: Reading SConscript files ...
platform: linux-x86-64 python: /usr/bin/python
clearing /home/rich/eigenharp/EigenD/tmp/stage
clearing /home/rich/eigenharp/EigenD/tmp/pkg
NameError: name 'prereq' is not defined:
File "/home/rich/eigenharp/EigenD/tools/SConstruct", line 43:
SConscript(join(master_env.subst('$TMPDIR'),root,'SConscript.first'))
File "/home/rich/eigenharp/EigenD/tools/packages/SCons/Script/SConscript.py", line 616:
return apply(method, args, kw)
File "/home/rich/eigenharp/EigenD/tools/packages/SCons/Script/SConscript.py", line 553:
return apply(_SConscript, [self.fs,] + files, subst_kw)
File "/home/rich/eigenharp/EigenD/tools/packages/SCons/Script/SConscript.py", line 262:
exec _file_ in call_stack[-1].globals
File "/home/rich/eigenharp/EigenD/SConscript.first", line 49:
master_env.PiPackageCollection('EigenD-gpl',groups=('app',),prereq=prereq)
make: *** [all] Error 2

Am I missing a configuration stage???

Cheers,

Richard


written by: jim

Tue, 5 Jul 2011 11:57:24 +0100 BST


For linux, the build uses the system installed python. You will need the python development
headers and libraries installed. (python-dev on a Debian/Ubuntu distribution) I think the only
other library/headers that will be needed is libiw, for detecting wireless network interfaces.

I've fixed the problem that causes your error above.

We currently use the linux stuff only in a very limited way, and we use an old Ubuntu
distribution. To get a proper Linux port working, the following needs to happen:

1. Fix the shared library visibility declarations (the XXX_DECLSPEC_XXX) macros. Newer
gcc's don't like the ones we have, which were initially put in in all the places Windows needs
them. We implemented them for *nix systems as well to fix some problems with Juce, when
loading plugins that are also implemented with Juce. However, simply sprinkling more
XXX_DECLSPEC's around will break the Windows compile...

This is also what's blocking us from using newer Xcode's. We will get around to it here at
some point, but probably only when we formally drop 10.4 support.

I think the best way to go about it would be to implement macros in the various xxx_exports.h
files called XXX_DECLSPEC_TEMPLATE and XXX_DECLSPEC_INLINECLASS which do
nothing on Windows but are the same as XXX_DECLSPEC_CLASS on Mac and Linux. Then
add them as required.

2. Update the USB driver. The current driver is based around linux's old /proc/bus/usb
which doesn't exist anymore on newer distro's and probably ought to be redone using libusb.

Sound and MIDI should be handled Ok, as Juce supports Linux. EigenD also needs to
get permission for realtime scheduling and memory locking, which is a system configuration
issue.

Patches for linux support will be gratefully received...

jim


written by: adamb

Wed, 11 Jul 2018 12:40:26 +0100 BST




written by: adamb

Wed, 11 Jul 2018 12:46:52 +0100 BST

Hi.

I have reasonable experience in compilation and debugging, but I'm trying to build the from the TechnoBear git repo under Fedora 28.

After following the README & loading the steinburg include files into the tree, I get the following.

Any help is greatly appreciated!!!





$ make
scons: Reading SConscript files ...
platform: linux-x86-64 python: /usr/bin/python
clearing /home/vortex/Development/EigenD/tmp/stage
clearing /home/vortex/Development/EigenD/tmp/pkg
pip: tmp/bin/pip
building release 1.4.12-experimental
scons: done reading SConscript files.
scons: Building targets ...
tmp/obj/lib_alpha2/src/a2dump.o (g++)
In file included from ./picross/pic_functor.h:23,
from ./picross/pic_usb.h:24,
from ./lib_alpha2/alpha2_active.h:24,
from lib_alpha2/src/a2dump.cpp:35:
./picross/pic_weak.h:35:19: error: ‘pic::tracked_t::tinterlock_t’ declared with greater visibility than its base ‘pic::lckobject_t’ [-Werror=attributes]
class tinterlock_t: virtual public pic::atomic_counted_t, virtual public pic::lckobject_t
^~~~~~~~~~~~
lib_alpha2/src/a2dump.cpp:40:8: error: ‘printer_t’ declared with greater visibility than the type of its field ‘printer_t::loop_’ [-Werror=attributes]
struct printer_t: public alpha2::active_t::delegate_t
^~~~~~~~~
lib_alpha2/src/a2dump.cpp:40:8: error: ‘printer_t’ declared with greater visibility than its base ‘alpha2::active_t::delegate_t’ [-Werror=attributes]
In file included from ./picross/pic_weak.h:26,
from ./picross/pic_functor.h:23,
from ./picross/pic_usb.h:24,
from ./lib_alpha2/alpha2_active.h:24,
from lib_alpha2/src/a2dump.cpp:35:
./picross/pic_ref.h: In instantiation of ‘void pic::ref_t::assign(T*) [with T = pic::tracked_t::tinterlock_t]’:
./picross/pic_ref.h:31:24: required from ‘pic::ref_t::~ref_t() [with T = pic::tracked_t::tinterlock_t]’
./picross/pic_weak.h:49:13: required from here
./picross/pic_ref.h:61:70: error: ‘pic_decref’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
void assign(T *p) { if(ptr_ != p) { if(ptr_) { pic_decref(ptr_); } ptr_ = p; if(ptr_) { pic_incref(ptr_); } } }
~~~~~~~~~~^~~~~~
./picross/pic_ref.h:104:13: note: ‘void pic_decref(pic::atomic_counted_t*)’ declared here, later in the translation unit
inline void pic_decref(pic::atomic_counted_t *c) { c->decref(); }
^~~~~~~~~~
./picross/pic_ref.h:61:111: error: ‘pic_incref’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
void assign(T *p) { if(ptr_ != p) { if(ptr_) { pic_decref(ptr_); } ptr_ = p; if(ptr_) { pic_incref(ptr_); } } }
~~~~~~~~~~^~~~~~
./picross/pic_ref.h:103:13: note: ‘void pic_incref(pic::atomic_counted_t*)’ declared here, later in the translation unit
inline void pic_incref(pic::atomic_counted_t *c) { c->incref(); }
^~~~~~~~~~
./picross/pic_ref.h: In instantiation of ‘void pic::ref_t::assign(T*) [with T = pic::msg_t::rep_t]’:
./picross/pic_ref.h:31:24: required from ‘pic::ref_t::~ref_t() [with T = pic::msg_t::rep_t]’
./picross/pic_log.h:53:40: required from here
./picross/pic_ref.h:61:70: error: ‘pic_decref’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
void assign(T *p) { if(ptr_ != p) { if(ptr_) { pic_decref(ptr_); } ptr_ = p; if(ptr_) { pic_incref(ptr_); } } }
~~~~~~~~~~^~~~~~
./picross/pic_ref.h:104:13: note: ‘void pic_decref(pic::atomic_counted_t*)’ declared here, later in the translation unit
inline void pic_decref(pic::atomic_counted_t *c) { c->decref(); }
^~~~~~~~~~
./picross/pic_ref.h:61:111: error: ‘pic_incref’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
void assign(T *p) { if(ptr_ != p) { if(ptr_) { pic_decref(ptr_); } ptr_ = p; if(ptr_) { pic_incref(ptr_); } } }
~~~~~~~~~~^~~~~~
./picross/pic_ref.h:103:13: note: ‘void pic_incref(pic::atomic_counted_t*)’ declared here, later in the translation unit
inline void pic_incref(pic::atomic_counted_t *c) { c->incref(); }
^~~~~~~~~~
cc1plus: all warnings being treated as errors
scons: *** [tmp/obj/lib_alpha2/src/a2dump.o] Error 1
scons: building terminated because of errors.
make: *** [tools/Makefile:7: all] Error 2




$ make stage
scons: Reading SConscript files ...
platform: linux-x86-64 python: /usr/bin/python
clearing /home/vortex/Development/EigenD/tmp/stage
clearing /home/vortex/Development/EigenD/tmp/pkg
pip: tmp/bin/pip
building release 1.4.12-experimental
scons: done reading SConscript files.
scons: Building targets ...
tmp/stage/eigend/DEBIAN/control (action(["tmp/stage/eigend/DEBIAN/control"],)
tmp/obj/lib_alpha2/pystub_alpha_loader.o (g++)
tmp/obj/lib_alpha2/pystub_alpha_loader.cpp: In function ‘int main(int, char**)’:
tmp/obj/lib_alpha2/pystub_alpha_loader.cpp:46:10: error: ‘%s’ directive writing up to 4095 bytes into a region of size 3954 [-Werror=format-overflow=]
"import sys,os\n"
^~~~~~~~~~~~~~~~~
"if '' in sys.path: sys.path.remove('')\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"if os.getcwd() in sys.path: sys.path.remove(os.getcwd())\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"sys.path.insert(0,os.path.join('%s','modules'))\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"sys.path.insert(0,os.path.join('%s','bin'))\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"from lib_alpha2 import alpha_loader\n",
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
escbuffer,escbuffer
~~~~~~~~~
tmp/obj/lib_alpha2/pystub_alpha_loader.cpp:45:14: note: ‘sprintf’ output between 235 and 8425 bytes into a destination of size 4096
sprintf(cmdbuffer,
~~~~~~~^~~~~~~~~~~
"import sys,os\n"
~~~~~~~~~~~~~~~~~
"if '' in sys.path: sys.path.remove('')\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"if os.getcwd() in sys.path: sys.path.remove(os.getcwd())\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"sys.path.insert(0,os.path.join('%s','modules'))\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"sys.path.insert(0,os.path.join('%s','bin'))\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"from lib_alpha2 import alpha_loader\n",
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
escbuffer,escbuffer
~~~~~~~~~~~~~~~~~~~
);
~
cc1plus: all warnings being treated as errors
scons: *** [tmp/obj/lib_alpha2/pystub_alpha_loader.o] Error 1
scons: building terminated because of errors.
make: *** [tools/Makefile:27: stage] Error 2


written by: TheTechnobear

Sat, 14 Jul 2018 13:11:50 +0100 BST

sorry I don't come to the eigenlabs forum much , as mostly posts are spam :(
(so questions are better posted on the google+ eigenharp group.)

given the nature of the errors, I suspect its a gcc version thing, obvioulsy as gcc gets upgraded it starts treating different things as warning/errors.

I use latest ubuntu (its not practical for me to run many distros) , and it was fine there last time I built eigenD... and that was with a very recent gcc.

ive no idea which version fedora is running.

what I can/will do, is go check my ubuntu is up to date, and see if eigenD is stiil building - if its not i can fix it.

unfortunately, if thats not the same as fedora , that may not help.

for now, for the most, part you can just tell the compiler to ignore that warning, and it'll compile and work.

(odd about the stage error, that is generated C++ code for the python stub... and not see before, I wonder if this is a python version mismatch?)




written by: TheTechnobear

Sat, 14 Jul 2018 14:33:18 +0100 BST

double post


written by: TheTechnobear

Sat, 14 Jul 2018 14:32:42 +0100 BST

ok,
- I pulled in a pull request from Mark Powell (thanks) for fixes for Xcode , so macOS is happily building now.

- Ive made a few fixes for the latest gcc 7 release(7.3.0), as used by the latest ubuntu (18.04), this means everything builds fine on Ubuntu 18.04 (x86_64) , with all packages upgraded

my guess, is your issue, is that fedora is not using gcc 7.3, perhaps using gcc 8.1.

I don't have time to move it to gcc8 at the moment , and honestly its a bit early to be moving to gcc8

if its 'breaking' eigenD,
it undoubtedly will break Juce (which is really sensitive to compiler changes!), and juce is a pain/time consuming to fix

so my plan would be, stick with gcc 7 (you can install this, with no issue and use on fedora) , for a while, so that Roli has a time to resolve any issues with gcc8 - then we can move, and hopefully ubuntu will have moved forward to.

generally, if you dont have a very strong preference to use Fedora, Id recommend using Ubuntu.
for the simple reason, this is what I compile and test on... any other distro has the possibility you'll run into issues (like this) , that ive not seen, and because i cant reproduce may not be a able to help on.

that is of course, unless you are a developer and happy to resolve such issues, in which case getting to work on more distros is a good thing, and id be happy for PRs - that said, I don't think theres more than a couple of linux users, probably easier if we used the same thing ;)










Please log in to join the discussions