macchina-io / macchina.io

macchina.io EDGE is a powerful C++ and JavaScript SDK for edge devices, multi-service IoT gateways and connected embedded systems.
https://macchina.io
GNU General Public License v3.0
515 stars 154 forks source link

Cross compile for aarch64 #101

Open bhstalel opened 3 years ago

bhstalel commented 3 years ago

Hi, I want to cross compile bundles to aarch64 architecture because I'm working on a custom board based on IMX8MMini CPU. I'm working on Yocto, and I already used your Yocto layer for that, and it is working perfectly. Now I'm developing custom bundles, and I don't want to waste time compiling macchina again for one bundle. I want to cross compile the bundle directly and send it to the board. I already extracted an SDK for the cross compilation with populate_sdk

But when I set the environment of the SDK, and source env.sh I try to make the bundle, and I'm stuck with this error:

/home/talel/Documents/macchina.io/platform/Foundation/include/Poco/Alignment.h:21:10: fatal error: type_traits: No such file or directory
   21 | #include <type_traits>

I also noticed that macchina is not compiling for my architecture even with the SDK environment: Here is the whole output:

** Compiling src/BundleActivator.cpp (debug, shared)
aarch64-poky-linux-g++ -Iinclude -I/home/talel/Documents/macchina.io/platform/CppUnit/include -I/home/talel/Documents/macchina.io/platform/Foundation/include -I/home/talel/Documents/macchina.io/platform/XML/include -I/home/talel/Documents/macchina.io/platform/JSON/include -I/home/talel/Documents/macchina.io/platform/Util/include -I/home/talel/Documents/macchina.io/platform/Net/include -I/home/talel/Documents/macchina.io/platform/Crypto/include -I/home/talel/Documents/macchina.io/platform/NetSSL_OpenSSL/include -I/home/talel/Documents/macchina.io/platform/Data/include -I/home/talel/Documents/macchina.io/platform/Data/SQLite/include -I/home/talel/Documents/macchina.io/platform/Zip/include -I/home/talel/Documents/macchina.io/platform/CppParser/include -I/home/talel/Documents/macchina.io/platform/CodeGeneration/include -I/home/talel/Documents/macchina.io/platform/JS/V8/include -I/home/talel/Documents/macchina.io/platform/JS/Core/include -I/home/talel/Documents/macchina.io/platform/JS/Data/include -I/home/talel/Documents/macchina.io/platform/JS/Bridge/include -I/home/talel/Documents/macchina.io/platform/JS/Net/include -I/home/talel/Documents/macchina.io/platform/RemotingNG/include -I/home/talel/Documents/macchina.io/platform/RemotingNG/RemoteGen/include -I/home/talel/Documents/macchina.io/platform/RemotingNG/TCP/include -I/home/talel/Documents/macchina.io/platform/OSP/include -I/home/talel/Documents/macchina.io/platform/OSP/BundleCreator/include -I/home/talel/Documents/macchina.io/platform/OSP/BundleAdmin/include -I/home/talel/Documents/macchina.io/platform/OSP/Web/include -I/home/talel/Documents/macchina.io/platform/OSP/Core/include -I/home/talel/Documents/macchina.io/platform/OSP/Crypto/include -I/home/talel/Documents/macchina.io/platform/OSP/Data/include -I/home/talel/Documents/macchina.io/platform/OSP/Data/SQLite/include -I/home/talel/Documents/macchina.io/platform/OSP/Net/include -I/home/talel/Documents/macchina.io/platform/OSP/NetSSL_OpenSSL/include -I/home/talel/Documents/macchina.io/platform/OSP/SecureWebServer/include -I/home/talel/Documents/macchina.io/platform/OSP/WebServer/include -I/home/talel/Documents/macchina.io/platform/OSP/WebEvent/include -I/home/talel/Documents/macchina.io/platform/OSP/JS/include -I/home/talel/Documents/macchina.io/platform/Geo/include -I/home/talel/Documents/macchina.io/platform/Serial/include -I/home/talel/Documents/macchina.io/platform/Redis/include -I/home/talel/Documents/macchina.io/platform/WebTunnel/include -I/home/talel/Documents/macchina.io/platform/JWT/include   -Wall -Wno-sign-compare -DPOCO_BUILD_HOST='"'sofia'"' -DPOCO_TARGET_OSNAME='"'Linux'"' **-DPOCO_TARGET_OSARCH='"'x86_64'"'**  -D_XOPEN_SOURCE=600 -D_REENTRANT -D_THREAD_SAFE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DPOCO_HAVE_FD_EPOLL  -g -D_DEBUG -fPIC -c src/BundleActivator.cpp -o /home/talel/Documents/macchina.io/samples/HelloBundle/obj/Linux/x86_64/debug_shared/BundleActivator.o
In file included from /home/talel/Documents/macchina.io/platform/Foundation/include/Poco/Foundation.h:111,
                 from /home/talel/Documents/macchina.io/platform/OSP/include/Poco/OSP/OSP.h:23,
                 from /home/talel/Documents/macchina.io/platform/OSP/include/Poco/OSP/BundleActivator.h:21,
                 from src/BundleActivator.cpp:11:
/home/talel/Documents/macchina.io/platform/Foundation/include/Poco/Alignment.h:21:10: fatal error: type_traits: No such file or directory
   21 | #include <type_traits>
      |          ^~~~~~~~~~~~~
compilation terminated.
/home/talel/Documents/macchina.io/platform/build/rules/compile:56: recipe for target '/home/talel/Documents/macchina.io/samples/HelloBundle/obj/Linux/x86_64/debug_shared/BundleActivator.o' failed
make: *** [/home/talel/Documents/macchina.io/samples/HelloBundle/obj/Linux/x86_64/debug_shared/BundleActivator.o] Error 1

It is using the right toolchain : aarch64-poky-linux-g++ but it is passing the wrong flag: -DPOCO_TARGET_OSARCH='"'x86_64'"'

Is there a way to cross compile for aarch64 ? Help me.

Thanks, Talel

JakubNasko commented 2 years ago

Hi Talel, have you been able to solved this issue? I have the same one.

Thanks, Jakub

obiltschnig commented 2 years ago

You'll need to use the Yocto build configuration and override a few Make variables.

Something like:

$ make POCO_CONFIG=Yocto TOOL=aarch64-poky-linux POCO_TARGET_OSARCH=aarch64