Hi,
This project is really awesome, great job everyone and thank you for all your efforts.
I'm trying to make my qt app run on my ARM target device, but using copperspice instead of qt.
So far I've noted ARM isn't yet an officially supported target, and I've worked around that by changing src/core/global/qglobal.h to #define Q_PROCESSOR_ARM instead of bailing out with an error.
What are your thoughts on this endeavor? Is ARM something you would eventually like to support or are there any major obstacles that could make it not worth while?
I guess I'm just looking for a general discussion before spending too much time on something that you've already deemed pointless.
Thanks again.
CopperSpice on arm target
Re: CopperSpice on arm target
Thank you so much for your interest in CopperSpice. We are absolutely interested in supporting ARM processors and would greatly appreciate working with you to ensure this happens. Please let us know what you have found or where you might need some assistance. The team will do our very best to help out. Pull requests are more than welcome.
Can you let us know what target hardware you are using and any other relevant information.
We look forward to working with you.
Barbara
Can you let us know what target hardware you are using and any other relevant information.
We look forward to working with you.
Barbara
Re: CopperSpice on arm target
My target is something that resembles a raspberry pi in that it has an arm cpu, and a gpu that's GLESv2 capable.
I will later try to make copperspice render to a framebuffer device, but for now my experiments is focused around making CsCore build.
The most important change would be to add the Q_PROCESSOR_ARM:
Then there's a couple of small things for cscore:
copperspice/src/core/string/qstring8.cpp:657:29: error: conversion from ‘wchar_t’ to ‘QChar32’ is ambiguous
Same goes for qstring16.cpp:658.
I'm not too familiar with wchar_t, but it seems it's not the same size as char16_t on arm, so likely 4 bytes. Perhaps one could use the gcc define __ARM_SIZEOF_WCHAR_T?
Not sure if this one is a good idea:
I was able to set up cmake to only build CsCore, and then I went on to add CsGui and opengl. cmake then tried to build the rcc tool, but that one had a dependency on XML, so I had to add that too in order to make it move on to building CsGui.
To complicate matters even more, I eventually have to builds copperspice with openembedded, and I haven't quite nailed putting together a working recipe file there yet.
I will later try to make copperspice render to a framebuffer device, but for now my experiments is focused around making CsCore build.
The most important change would be to add the Q_PROCESSOR_ARM:
Code: Select all
diff --git a/src/core/global/qglobal.h b/src/core/global/qglobal.h
index 2842c30c5..f1931c03c 100755
--- a/src/core/global/qglobal.h
+++ b/src/core/global/qglobal.h
@@ -84,6 +84,8 @@
# endif
+#elif defined(__ARM_ARCH)
+# define Q_PROCESSOR_ARM
#else
#error Unable to detect system architecture, contact CopperSpice development
copperspice/src/core/string/qstring8.cpp:657:29: error: conversion from ‘wchar_t’ to ‘QChar32’ is ambiguous
Same goes for qstring16.cpp:658.
I'm not too familiar with wchar_t, but it seems it's not the same size as char16_t on arm, so likely 4 bytes. Perhaps one could use the gcc define __ARM_SIZEOF_WCHAR_T?
Not sure if this one is a good idea:
Code: Select all
diff --git a/src/core/string/qstring8.cpp b/src/core/string/qstring8.cpp
index 4fd4b5266..1acc201a9 100644
--- a/src/core/string/qstring8.cpp
+++ b/src/core/string/qstring8.cpp
@@ -654,7 +654,7 @@ QString8 QString8::fromStdWString(const std::wstring &str, size_type numOfChars)
break;
}
- retval.push_back(ch);
+ retval.push_back(static_cast<char32_t>(ch));
--numOfChars;
}
}
To complicate matters even more, I eventually have to builds copperspice with openembedded, and I haven't quite nailed putting together a working recipe file there yet.
Re: CopperSpice on arm target
Just trying to build Cs on raspberry pi (Pi4 8GB). Looks like the build system does not like it much ![;-) ;-)](./images/smilies/icon_e_wink.gif)
[1/3890] Building CXX object src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o
FAILED: src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o
/usr/bin/c++ @src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o.rsp -MD -MT src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o -MF src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o.d -o src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o -c ../src/core/animation/qpropertyanimation.cpp
In file included from ../src/core/kernel/csobject_macro.h:29,
from ../src/core/kernel/qobject.h:27,
from ../src/core/animation/qabstractanimation.h:27,
from ../src/core/animation/qvariantanimation.h:27,
from ../src/core/animation/qpropertyanimation.h:27,
from ../src/core/animation/qpropertyanimation.cpp:24:
../src/core/global/qglobal.h:90:2: error: #error Unable to detect system architecture, contact CopperSpice development
90 | #error Unable to detect system architecture, contact CopperSpice development
![;-) ;-)](./images/smilies/icon_e_wink.gif)
[1/3890] Building CXX object src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o
FAILED: src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o
/usr/bin/c++ @src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o.rsp -MD -MT src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o -MF src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o.d -o src/core/CMakeFiles/CsCore.dir/animation/qpropertyanimation.cpp.o -c ../src/core/animation/qpropertyanimation.cpp
In file included from ../src/core/kernel/csobject_macro.h:29,
from ../src/core/kernel/qobject.h:27,
from ../src/core/animation/qabstractanimation.h:27,
from ../src/core/animation/qvariantanimation.h:27,
from ../src/core/animation/qpropertyanimation.h:27,
from ../src/core/animation/qpropertyanimation.cpp:24:
../src/core/global/qglobal.h:90:2: error: #error Unable to detect system architecture, contact CopperSpice development
90 | #error Unable to detect system architecture, contact CopperSpice development
Re: CopperSpice on arm target
This modification moved it forward
But now getting
Code: Select all
diff --git a/src/core/global/qglobal.h b/src/core/global/qglobal.h
index 3e576b0..ba602e0 100755
--- a/src/core/global/qglobal.h
+++ b/src/core/global/qglobal.h
@@ -85,7 +85,8 @@
# define Q_PROCESSOR_X86 3
# endif
-
+#elif defined(__ARM_ARCH)
+# define Q_PROCESSOR_ARM 1
#else
#error Unable to detect system architecture, contact CopperSpice development
Code: Select all
[138/3874] Building CXX object src/core/CMakeFiles/CsCore.dir/string/qstring8.cpp.o
FAILED: src/core/CMakeFiles/CsCore.dir/string/qstring8.cpp.o
/usr/bin/c++ @src/core/CMakeFiles/CsCore.dir/string/qstring8.cpp.o.rsp -MD -MT src/core/CMakeFiles/CsCore.dir/string/qstring8.cpp.o -MF src/core/CMakeFiles/CsCore.dir/string/qstring8.cpp.o.d -o src/core/CMakeFiles/CsCore.dir/string/qstring8.cpp.o -c ../src/core/string/qstring8.cpp
../src/core/string/qstring8.cpp: In static member function ‘static QString8 QString8::fromStdWString(const wstring&, QString8::size_type)’:
../src/core/string/qstring8.cpp:648:29: error: conversion from ‘wchar_t’ to ‘QChar32’ is ambiguous
648 | retval.push_back(ch);
| ^
In file included from include/QtCore/qstring8.h:33,
from ../src/core/string/qstring8.cpp:26:
include/QtCore/qchar32.h:378:7: note: candidate: ‘QChar32::QChar32(int)’
378 | QChar32(int c)
| ^~~~~~~
include/QtCore/qchar32.h:374:7: note: candidate: ‘QChar32::QChar32(char16_t)’
374 | QChar32(char16_t c)
| ^~~~~~~
include/QtCore/qchar32.h:370:7: note: candidate: ‘QChar32::QChar32(char32_t)’
370 | QChar32(char32_t c)
| ^~~~~~~
In file included from ../src/core/string/qstring8.cpp:26:
include/QtCore/qstring8.h:661:30: note: initializing argument 1 of ‘void QString8::push_back(QChar32)’
661 | void push_back(QChar32 c) {
| ~~~~~~~~^
Re: CopperSpice on arm target
Apparently, wchar_t is 4 bytes by default on ARM64 and likely Cs was never complied as such.
I could:
1) patch it in qstring8 to directly cast to (char32_t)ch (or even to char16_t)
2) make explicit constructor QChar32(wchar_t)
3) change the default size of wchar_t via compile option -fshort-wchar
Any preferences?
I could:
1) patch it in qstring8 to directly cast to (char32_t)ch (or even to char16_t)
2) make explicit constructor QChar32(wchar_t)
3) change the default size of wchar_t via compile option -fshort-wchar
Any preferences?
Re: CopperSpice on arm target
As per our CS Overview Documentation, raspberry pi is not currently a supported platform. The following is a link to the list of what we support and test in our CI.Just trying to build Cs on raspberry pi (Pi4 8GB). Looks like the build system does not like it much
https://www.copperspice.com/docs/cs_overview/supported-platforms.html
I know this is a bit odd to say, but we have nothing against raspberry pi and this is not about the build system not liking a particular platform. If this is a platform you or anyone would like supported please supply the necessary suggested changes and we will add this to our road map.
Re: CopperSpice on arm target
Thanks for looking at this and proposing a solution. The code you added assumes there is only one version of ARM, whereas there are many variants and they will all have to be accounted for. Based on the hardware you said you are using, it is very likely you are running a 32-bit version of Linux. However, that is a guess at this point. Setting up a new platform requires changing multiple items and setting up more than simply the processor detection. You will need to review everything in the global folder to see what may need to be adjusted.michkrom wrote: ↑Sat Apr 17 2021 9:30 pm This modification moved it forwardCode: Select all
... #elif defined(__ARM_ARCH) # define Q_PROCESSOR_ARM 1 ...
The wchar_t data type is 4 bytes on all Linux platforms, including ARM32, ARM64, and x86_64. I develop primarily on Debian x86_64, and wchar_t is 4 bytes on this machine so yes, we have tested this. Not sure why you are seeing different results on your build. Did you make any other changes we are not aware of?
Can you provide the following information about your build environment?
- Compiler and version
- OS Image being used
- 32-bit LPAE or 64-bit kernel
- 32-bit or 64-bit userspace
- Exact CMake command line
Ansel Sermersheim
CopperSpice Cofounder
CopperSpice Cofounder