Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Official Linux build for ARM architectures #419

Open
tomek-szczesny opened this issue Nov 13, 2020 · 21 comments
Open

Official Linux build for ARM architectures #419

tomek-szczesny opened this issue Nov 13, 2020 · 21 comments

Comments

@tomek-szczesny
Copy link
Collaborator

Since some people reported that Giada builds even on ARM machines such as Raspberry Pi, it seems like a quite low-effort improvement.
The selection of music production software is limited for this platform (unless you know how to compile stuff), and it might be a good idea to provide an ARM-compatible AppImage for those who wish to try out Giada on their tiny machines. I believe there is not a lot of "competition" on this "market".

Personally I switched to Odroid ARM computer as my daily desktop, due to negligible power consumption and decent performance for light tasks. I will continue my programming efforts on it unless I find something that prevents me from doing so.

I wanted to spark a discussion around the demand for such a feature - do people actually want it, can we deliver it etc.
I can test it, that's for sure :D
The question remains however, does AppImage actually support ARM? Hmm..

@monocasual
Copy link
Collaborator

Very cool indeed. Travis CI supports arm64, so it's really a matter of whether AppImage does it or not. We are currently using linuxdeploy for the actual packaging process and as far as I can tell there's no trace of ARM builds in there...

@tomek-szczesny
Copy link
Collaborator Author

Travis CI supports arm64, so it's really a matter of whether AppImage does it or not.

Well, musescore has an ARM AppImage, so it's doable. :) LEt's dig into the details when I confirm Giada is actually working fine on my Odroid.

@tomek-szczesny
Copy link
Collaborator Author

tomek-szczesny commented Nov 16, 2020

I just built it on Odroid! Yass!

Didn't test it thoroughly yet, I've got to drag along my sample library first. But it runs and I didn't see anything suspicious yet.

I ran tests and I don't know what to make out of it, no experience with those. I'm guessing it won't work with actual samples and sounds, huh?

mctom@Tomusiomat-ARM:~/git/giada/build$ ./giada --run-tests

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--run-tests is a Catch v1.12.1 host application.
Run with -? for options

-------------------------------------------------------------------------------
u::fs
-------------------------------------------------------------------------------
/home/mctom/git/giada/tests/utils.cpp:7
...............................................................................

/home/mctom/git/giada/tests/utils.cpp:11: FAILED:
  REQUIRE( fs::fileExists("build/giada") == true )
with expansion:
  false == true

[wfx::silence] silencing from 20 to 57
[wfx::cut] cutting from 47 to 210
[wfx::trim] trimming from 47 to 210 (area = 163)
[wfx::fade] fade from 47 to 500 (range = 453)
[wfx::fade] fade from 47 to 500 (range = 453)
[wfx::fade] fade from 11 to 43 (range = 32)
[wfx::fade] fade from 47 to 79 (range = 32)
[waveManager::create] unable to read tests/resources/test.wav. System error : No such file or directory.
-------------------------------------------------------------------------------
waveManager
  test creation
-------------------------------------------------------------------------------
/home/mctom/git/giada/tests/waveManager.cpp:23
...............................................................................

/home/mctom/git/giada/tests/waveManager.cpp:28: FAILED:
  REQUIRE( res.status == G_RES_OK )
with expansion:
  -2 == 1

[waveManager::createEmpty] new empty Wave created, 4096 frames
[waveManager::create] unable to read tests/resources/test.wav. System error : No such file or directory.
-------------------------------------------------------------------------------
waveManager
  test resampling
-------------------------------------------------------------------------------
/home/mctom/git/giada/tests/waveManager.cpp:47
...............................................................................

/home/mctom/git/giada/tests/waveManager.cpp:47: FAILED:
due to a fatal error condition:
  SIGSEGV - Segmentation violation signal

===============================================================================
test cases:    9 |    7 passed | 2 failed
assertions: 8399 | 8396 passed | 3 failed

Segmentation fault
mctom@Tomusiomat-ARM:~/git/giada/build$ 

EDIT: Today I played with Giada for a bit more and everything seems to work very well... The memory footprint was in order of 30MB, the CPU utilization around 15% on one of six available cores. Actually it took much more processing power to display a stream of debug messages in a terminal window. :)
I'm very, very satisfied with these results.

@monocasual
Copy link
Collaborator

monocasual commented Nov 20, 2020

Nice! Did you also try with Jack as the underlying sound system? Wrt the tests: they must be run outside the build directory in order to pick the right sample path (should add this to the documentation sooner or later).

@tomek-szczesny
Copy link
Collaborator Author

I just tried Jack and yup, it does work just fine. :) I haven't tried MIDI yet, as I sold all my mini/micro controllers recently, and lost an auction of a Launchpad S that I wanted to get instead 😿

The tests also run smoothly when I followed your advice.

mctom@Tomusiomat-ARM:~/git/giada$ ./build/giada --run-tests
[wfx::silence] silencing from 20 to 57
[wfx::cut] cutting from 47 to 210
[wfx::trim] trimming from 47 to 210 (area = 163)
[wfx::fade] fade from 47 to 500 (range = 453)
[wfx::fade] fade from 47 to 500 (range = 453)
[wfx::fade] fade from 11 to 43 (range = 32)
[wfx::fade] fade from 47 to 79 (range = 32)
[waveManager::create] new Wave created, 40636 frames
[waveManager::createEmpty] new empty Wave created, 4096 frames
[waveManager::create] new Wave created, 40636 frames
[waveManager::resample] resampling: new size=81272 frames
===============================================================================
All tests passed (8421 assertions in 9 test cases)

So, yay! All that needs to be done is to figure out how to make an ARM AppImage. Maybe the musescore guys would share their insight? ;)

@monocasual
Copy link
Collaborator

monocasual commented Nov 22, 2020

Wow I'm very impressed, especially for the CPU utilization around 15%. Did you also try to load multiple channels and fiddle around with them - removing, changing properties, ...? I'm asking this because there are some default/unoptimized atomic instructions in the code that might be very slow on ARM architectures (#348 will help a lot on that point).

@tomek-szczesny
Copy link
Collaborator Author

Well, the test was very basic to be honest, just two samples lopping :D
I might stress test it in the future if you worry about that. I'll look around for some tool for logging CPU load of a specific process.
Perhaps it's just my Odroid that handles stuff so well - it has four 2.4GHz ARM cores that support unordered execution, and another two cores clocked at 2GHz that have ordered execution, and are low-power otherwise. So called big.LITTLE. Linux kernel is aware of that and assigns lighter tasks to little cores.
Since Giada has a few threads running, it is a great CPU for this task. On Raspberry Pis, the modern 64-bit machines (starting with Pi 3 I think) are quad-cored, and mostly got improved in terms of RAM and peripherals in recent years.

@monocasual monocasual removed their assignment Nov 23, 2020
@tomek-szczesny
Copy link
Collaborator Author

One more thing worth noting, Raspberry Pi OS is currently available 32-bit only. As RPi holds major share of the SBC market, I'm guessing that armv7 or armv8 build should be available too.

@tomek-szczesny
Copy link
Collaborator Author

@hfiguiere
Copy link
Contributor

One more thing worth noting, Raspberry Pi OS is currently available 32-bit only. As RPi holds major share of the SBC market, I'm guessing that armv7 or armv8 build should be available too.

It's not true. There is a 64-bit version. They just tuck it away. I have been running it for over 6 month.

@tomek-szczesny
Copy link
Collaborator Author

No official release though, and well hidden from general public. My point was that 32-bit release should be available as well.

@Xpktro
Copy link

Xpktro commented Aug 15, 2021

Any news on this? or are there any special build instructions for this architecture? I'd really love to have an official armv8 build. Giada will be a strong competitor in the low spec music making market.

I'm currently running a rpi4 and was looking at begineer friendly music tools. Giada is the best fit so far except for this little detail :(

@tomek-szczesny
Copy link
Collaborator Author

Any news on this? or are there any special build instructions for this architecture? I'd really love to have an official armv8 build. Giada will be a strong competitor in the low spec music making market.

I'm currently running a rpi4 and was looking at begineer friendly music tools. Giada is the best fit so far except for this little detail :(

Just follow the build instructions and all should be well. I dont remember taking any extra steps. I haven't tried building with vst support though.

@CarloCattano
Copy link

CarloCattano commented Aug 16, 2021

Im trying to compile it on pi 3 32bit . Just for fun and to see if I can contribute in the future, since there is a Giada version on my apt .

The only strange thing I noticed is a weird error with ssh and github , I had to -> echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config

otherwise , it wont let me update recursively the repo

@CarloCattano
Copy link

Alternatively , I changed the url in the git config file and it works normally now .

url = git@github.com:monocasual/geompp.git

Instead of git@github.com:monocasual/geompp.git https://github.com/monocasual/geompp.git , etc with the others

@tomek-szczesny
Copy link
Collaborator Author

That's definitely not an ARM-related problem.

@CarloCattano
Copy link

That's definitely not an ARM-related problem.

Sorry about that , here I have one . Without VST support it does build , even tho the version through apt seems more stable and efficient for some reason and it has vst support that runs well on my rpi 3.

When trying vst3 support I get the following :

build_output.txt

Any leads would be appreciated, would like to keep up to date

@Xpktro
Copy link

Xpktro commented Aug 16, 2021

Just successfully built in my rpi4b (armv7l) with and without VST3 support (however I couldn't find a suitable arm-compiled vst to test this yet).

For VST3 support, I had to install these additional dependencies:

libxcursor-dev libxft-dev libxinerama-dev libxpm-dev libxrandr-dev

And had to add a line in CMakeLists.txt after L505 (as I faced the same errors as @CarloCattano) :

		set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")

@CarloCattano
Copy link

CarloCattano commented Aug 17, 2021

Perfect , thanks @Xpktro !! I did build successfully VST3 and VST2 at the same time .
Is true that there arent much vst3 plugins around for arm , but in the future perhaps . Is not a big problem for me since I can use Giada - > Carla( lv2 plugins ) . But is amazing to see this useful vst2 on the pi inside Giada smoothly :-)

image height="100" width="100"

I got most of them from the Zynthian repo https://github.com/zynthian/zynthian-plugins

VST3 works with @Xpktro instructions . Vst2 requires a few extra steps :

I got the vst2sdk from archive.org:

  wget https://archive.org/download/VST2SDK/vst_sdk2_4_rev2.zip
  unzip vst_sdk2_4_rev2.zip
  cp  vstsdk2.4/ -r ~/giada/src/deps/vst3sdk
  
  cmake -B build/ -S . -DWITH_VST3=ON -DWITH_VST2=ON -DCMAKE_BUILD_TYPE=Release

  cmake --build build/ 	

still relevant until vst3 greatness manifests on arm widely , or till giada merges lv2 and then wont be needed for linux at last , since many plugins have already their lv2 available

@Xpktro
Copy link

Xpktro commented Aug 19, 2021

Can confirm the full VST2+3 build is working in my setup thanks to the instructions given by @CarloCattano, thanks!

Note: The copy command for the vst2 SDK just need a * after the first cp argument.

@CarloCattano
Copy link

CarloCattano commented Aug 19, 2021

Right ,

cp -r vstsdk2.4/pluginterfaces/vst2.x/  giada/src/deps/vst3sdk/pluginterfaces/

exactly , forgot that it asks for the files under vst2.x

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants