[OpenSIPS-Users] Compiling for arm v7

Răzvan Crainea razvan at opensips.org
Wed Jan 12 11:26:52 UTC 2022


Hi, all!

I've documented this as a tutorial[1]. Feel free to add your additional 
experience there. If you cannot edit the Wiki page, do let me know.

[1] https://www.opensips.org/Documentation/Tutorials-CrossCompile#toc1

Best regards,

Răzvan Crainea
OpenSIPS Core Developer
http://www.opensips-solutions.com

On 1/5/22 18:27, Ovidiu Sas wrote:
> All this should go in the wiki, maybe on a dedicated section.
> 
> -ovidiu
> 
> On Wed, Jan 5, 2022 at 09:50 Micael <m8847 at abc.se <mailto:m8847 at abc.se>> 
> wrote:
> 
> 
>     So, in short, what I had to do to cross compile for armv7a using GCC 10.
> 
> 
>     1. Remove the section in Makefile.defs that tries to detect the arm
>     compiler version, since it is outdated afaict. This could of course be
>     fixed to also include newer GCC versions in the test. But you guys know
>     more about the history here, and if it is worth the effort. GCC stayed
>     still in versioning for a long while, and then it kind of exploded.
> 
>     2. For armv7a, also in Makefile.defs, change the macro test from
>     __ARM_ARCH_7__ to __ARM_ARCH_7A__ (this could probably be added as a
>     secondary test instead, since it is a rather clean test).
> 
>     3. Add -marm to CC options
> 
>     4. Edit modules/tls_wolfssl/Makfile, adding --host=arm
>     There's a good error message in the wolfssl output, so it did not take
>     too long to figure out this.
> 
> 
>     In my case, I used these options (again, gcc 10);
>     CC -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -marm
> 
>     I don't think they are all needed, but I include them as a 'known good'
>     setup. :)
> 
> 
>     Note;
>     I have not yet tested anything really, but the outlook is good.
> 
>     Thanks,
>        Micael
> 
> 
> 
>     On 2022-01-05 14:53, Bogdan-Andrei Iancu wrote:
>      > Guys,
>      >
>      > if you went thru all the pain of getting to the bottom of this,
>     should
>      > we document somewhere how this cross compiling should be done? to
>     spare
>      > some future pain of other users :).
>      >
>      > Regards,
>      >
>      > Bogdan-Andrei Iancu
>      >
>      > OpenSIPS Founder and Developer
>      > https://www.opensips-solutions.com
>     <https://www.opensips-solutions.com>
>      > OpenSIPS eBootcamp 2021
>      > https://opensips.org/training/OpenSIPS_eBootcamp_2021/
>     <https://opensips.org/training/OpenSIPS_eBootcamp_2021/>
>      >
>      > On 1/5/22 3:42 PM, Micael wrote:
>      >>
>      >> Hi again Răzvan,
>      >>
>      >> Yes!! That was the final missing bit of the puzzle!
>      >>
>      >> Everything compiles just fine now!
>      >>
>      >>
>      >> (I had to also make a minor change in wolfssl/Makefile, adding
>      >> "–host=arm")
>      >>
>      >>
>      >> Many thanks for your help,
>      >>
>      >>  Micael
>      >>
>      >>
>      >>
>      >>
>      >> On 2022-01-05 13:23, Răzvan Crainea wrote:
>      >>> Hi, Micael!
>      >>>
>      >>> Can you try to add `-marm` in your CC_EXRTA_FLAGS?
>      >>>
>      >>> Best regards,
>      >>>
>      >>> Răzvan Crainea
>      >>> OpenSIPS Core Developer
>      >>> http://www.opensips-solutions.com
>     <http://www.opensips-solutions.com>
>      >>>
>      >>> On 1/5/22 12:19, Micael wrote:
>      >>>>
>      >>>> Hi Răzvan,
>      >>>>
>      >>>> Thanks, with your input I learned more about what is happening!
>      >>>>
>      >>>> So I tried you suggestion and variants of it, but it gave the
>     same
>      >>>> result. So I grep'd the CC_ARCH, and found in Makefile.defs
>     that it
>      >>>> is overwritten by a compiler predefined macro test
>     (__ARM_ARCH_7__).
>      >>>> I checked my compiler (gcc 10), and it has __ARM_ARCH_7A__ set.
>      >>>> So I changed Makefile.defs into testing against that, and that
>      >>>> changed things.
>      >>>> First of all, I now see "Target architecture <arm7>", instead of
>      >>>> <arm> when compiling.
>      >>>>
>      >>>> But then I arrive into the next problem, I guess this is the same
>      >>>> code (fastlock.h). But now I'm getting into deep water, I suspect
>      >>>> the assembler code needs some TLC?
>      >>>>
>      >>>>
>      >>>> $ make
>      >>>> Target architecture <arm7>, host architecture <x86_64>
>      >>>> Compiling action.c
>      >>>> /tmp/ccrHaC9i.s: Assembler messages:
>      >>>> /tmp/ccrHaC9i.s:145: Error: thumb conditional instruction
>     should be
>      >>>> in IT block -- `strexeq r3,r1,[r2]'
>      >>>> make: *** [Makefile.rules:28: action.o] Error 1
>      >>>>
>      >>>>
>      >>>> I tried to test with different thumb and interwork options,
>     but that
>      >>>> did not change anything.
>      >>>>
>      >>>>
>      >>>> For reference, I added -v to see exactly which flags where
>     enabled,
>      >>>> on the build.
>      >>>>
>      >>>> COLLECT_GCC_OPTIONS= '-mthumb-interwork' '-mfloat-abi=hard'
>      >>>> '-mfpu=neon' '-v' '-g' '-I'
>      >>>>
>     '/volt001/tmp/sysroots-components/cortexa8hf-neon/openssl/usr/include'
>      >>>> '-D' 'PKG_MALLOC' '-D' 'SHM_MMAP' '-D' 'USE_MCAST' '-D'
>      >>>> 'DISABLE_NAGLE' '-D' 'STATISTICS' '-D' 'HAVE_RESOLV_RES' '-D'
>      >>>> 'F_MALLOC' '-D' 'Q_MALLOC' '-D' 'HP_MALLOC' '-D' 'DBG_MALLOC'
>     '-D'
>      >>>> 'HAVE_STDATOMIC' '-D' 'HAVE_GENERICS' '-D' 'NAME="opensips"' '-D'
>      >>>> 'VERSION="3.2.4"' '-D' 'ARCH="arm7"' '-D' 'OS="linux"' '-D'
>      >>>>
>     'COMPILER="/opt/toolchains/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc
> 
>      >>>> 10.2.1"' '-D' '__CPU_arm7' '-D' '__OS_linux' '-D' '__SMP_yes'
>     '-D'
>      >>>> 'CFG_DIR="./test//etc/opensips/"' '-D' 'VERSIONTYPE="git"' '-D'
>      >>>> 'THISREVISION="50407d340"' '-D' 'FAST_LOCK' '-D' 'ADAPTIVE_WAIT'
>      >>>> '-D' 'ADAPTIVE_WAIT_LOOPS=1024' '-D' 'HAVE_GETHOSTBYNAME2' '-D'
>      >>>> 'HAVE_UNION_SEMUN' '-D' 'HAVE_SCHED_YIELD' '-D'
>     'HAVE_MSG_NOSIGNAL'
>      >>>> '-D' 'HAVE_MSGHDR_MSG_CONTROL' '-D' 'HAVE_ALLOCA_H' '-D'
>      >>>> 'HAVE_TIMEGM' '-D' 'HAVE_EPOLL' '-D' 'HAVE_SIGIO_RT' '-D'
>      >>>> 'HAVE_SELECT' '-c' '-o' 'action.o' '-mthumb' '-mtls-dialect=gnu'
>      >>>> '-march=armv7-a+simd'
>      >>>>
>      >>>>
>     /opt/toolchains/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin/../lib/gcc/arm-none-linux-gnueabihf/10.2.1/../../../../arm-none-linux-gnueabihf/bin/as
> 
>      >>>> -v -I
>      >>>>
>     /volt001/tmp/sysroots-components/cortexa8hf-neon/openssl/usr/include
>      >>>> -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon
>      >>>> -meabi=5 -o action.o /tmp/ccZHK18t.s
>      >>>> GNU assembler version 2.35.1 (arm-none-linux-gnueabihf) using BFD
>      >>>> version (GNU Toolchain for the A-profile Architecture
>     10.2-2020.11
>      >>>> (arm-10.16)) 2.35.1.20201028
>      >>>>
>      >>>>
>      >>>> Many thanks,
>      >>>>    Micael
>      >>>>
>      >>>>
>      >>>> On 2022-01-05 09:25, Răzvan Crainea wrote:
>      >>>>> Hi, Micael!
>      >>>>>
>      >>>>> It is not the compiler that generates the swp/swpb instructions,
>      >>>>> but our locking code for backwards compatibility ARM
>     versions. It
>      >>>>> is using it because it does not properly detect the target
>      >>>>> architecture (armv7), but a generic (older) ARM version.
>      >>>>> I see that in your environment you are exporting the CPU
>     variable,
>      >>>>> which is not actually really used in the build.
>      >>>>> I'd suggest you try to export the `CC_ARCH` variable
>      >>>>> (`CC_ARCH=armv7`) - this should set the proper CPU type.
>      >>>>>
>      >>>>> Let us know how this goes.
>      >>>>>
>      >>>>> Best regards,
>      >>>>>
>      >>>>> Răzvan Crainea
>      >>>>> OpenSIPS Core Developer
>      >>>>> http://www.opensips-solutions.com
>     <http://www.opensips-solutions.com>
>      >>>>>
>      >>>>> On 1/3/22 18:18, Bogdan-Andrei Iancu wrote:
>      >>>>>> Hi Micael and Happy New Year ;)
>      >>>>>>
>      >>>>>> This is more an cross-compiling issue. The arm v6 and 7
>     obsoleted
>      >>>>>> the swp/swpb instructions - this is what the warning are
>     saying.
>      >>>>>> The problem is that your compiler is generating asm code with
>      >>>>>> those instruction; and the warnings are reported by assembler
>      >>>>>> (which knows that those instructions are not valid).
>      >>>>>>
>      >>>>>> I'm not a cross-compiling export (not even closer :P), but I
>     guess
>      >>>>>> you are passing some wrong compiling flags, leading to this
>      >>>>>> conflict here.
>      >>>>>>
>      >>>>>> Best regards,
>      >>>>>>
>      >>>>>> Bogdan-Andrei Iancu
>      >>>>>>
>      >>>>>> OpenSIPS Founder and Developer
>      >>>>>> https://www.opensips-solutions.com
>     <https://www.opensips-solutions.com>
>      >>>>>> OpenSIPS eBootcamp 2021
>      >>>>>> https://opensips.org/training/OpenSIPS_eBootcamp_2021/
>     <https://opensips.org/training/OpenSIPS_eBootcamp_2021/>
>      >>>>>>
>      >>>>>> On 1/1/22 11:48 AM, Micael wrote:
>      >>>>>>> Hi all,
>      >>>>>>>
>      >>>>>>> (Happy New Year!)
>      >>>>>>>
>      >>>>>>> I am trying to cross compile 3.2.4 for armv7. Now, I'm new to
>      >>>>>>> opensips,
>      >>>>>>> so I have no previous experience to fall back on..
>      >>>>>>>
>      >>>>>>> In short: I have issues, getting this warning when compiling
>      >>>>>>> "swp{b} use is deprecated for ARMv6 and ARMv7"
>      >>>>>>>
>      >>>>>>>
>      >>>>>>> What I have done is:
>      >>>>>>> export
>      >>>>>>>
>     CC_EXTRA_OPTS="--sysroot=/opt/toolchains/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc
> 
>      >>>>>>>
>      >>>>>>> -I
>      >>>>>>>
>     /volt001/tmp/sysroots-components/cortexa8hf-neon/openssl/usr/include"
>      >>>>>>>
>      >>>>>>>
>      >>>>>>>
>      >>>>>>> export LD_EXTRA_OPTS="-L
>      >>>>>>>
>     /volt001/tmp/sysroots-components/cortexa8hf-neon/openssl/usr/lib"
>      >>>>>>>
>      >>>>>>> export
>      >>>>>>>
>     CC="/opt/toolchains/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc
> 
>      >>>>>>> -marm -march=armv7-a -mthumb-interwork -mfloat-abi=hard
>     -mfpu=neon"
>      >>>>>>>
>      >>>>>>> export CPU=armv7a
>      >>>>>>>
>      >>>>>>>
>      >>>>>>> I then had to remove the following section in Makefile.defs,
>      >>>>>>> otherwise it would add strongarm1100 as cpu.
>      >>>>>>>
>      >>>>>>> ---8<---------8<------
>      >>>>>>> ifeq    ($(CC_CLASS), 4.x)
>      >>>>>>>         CFLAGS+=-mcpu=strongarm1100 -ftree-vectorize
>      >>>>>>> else
>      >>>>>>>     #if gcc 3.0+
>      >>>>>>> ifeq    ($(CC_CLASS), 3.x)
>      >>>>>>>         CFLAGS+= -mcpu=strongarm1100
>      >>>>>>> else
>      >>>>>>> ifeq    ($(CC_CLASS), 2.9x) #older gcc version (2.9[1-5])
>      >>>>>>> $(warning             Old gcc detected ($(CC_SHORTVER)),
>     use  gcc
>      >>>>>>> 3.0.x \
>      >>>>>>>     for better results)
>      >>>>>>>
>      >>>>>>>                     CFLAGS+=
>      >>>>>>> else
>      >>>>>>>                 #really old version
>      >>>>>>> $(warning            You are using an old and unsupported gcc \
>      >>>>>>>                      version ($(CC_SHORTVER)), compile at your
>      >>>>>>> own risk!)
>      >>>>>>>
>      >>>>>>> endif            # CC_CLASS, 2.9x
>      >>>>>>> endif            # CC_CLASS, 3.x
>      >>>>>>> ---8<---------8<------
>      >>>>>>>
>      >>>>>>>
>      >>>>>>>
>      >>>>>>>
>      >>>>>>>
>      >>>>>>>
>      >>>>>>> Once I have done that, everything compiles, but with one
>     and the
>      >>>>>>> same warning (lots, and lots of them);
>      >>>>>>>
>      >>>>>>>
>      >>>>>>> e.g.:
>      >>>>>>>
>      >>>>>>> Compiling ip_addr.c
>      >>>>>>> /tmp/ccj7cheW.s: Assembler messages:
>      >>>>>>> /tmp/ccj7cheW.s:1857: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> /tmp/ccj7cheW.s:1892: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> /tmp/ccj7cheW.s:1928: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> /tmp/ccj7cheW.s:2171: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> /tmp/ccj7cheW.s:2206: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> /tmp/ccj7cheW.s:2242: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> Compiling ipc.c
>      >>>>>>> Compiling main.c
>      >>>>>>> Compiling map.c
>      >>>>>>> /tmp/cc6q8n3v.s: Assembler messages:
>      >>>>>>> /tmp/cc6q8n3v.s:6001: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> /tmp/cc6q8n3v.s:6036: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> /tmp/cc6q8n3v.s:6072: swp{b} use is deprecated for ARMv6
>     and ARMv7
>      >>>>>>> Compiling md5.c
>      >>>>>>> Compiling md5utils.c
>      >>>>>>>
>      >>>>>>>
>      >>>>>>> I guess I must not be the only one compiling for arm, so I
>     hope
>      >>>>>>> someone can point me closer to whats wrong.
>      >>>>>>>
>      >>>>>>>
>      >>>>>>> Any help appreciated,
>      >>>>>>>   Micael
>      >>>>>>>
>      >>>>>>> _______________________________________________
>      >>>>>>> Users mailing list
>      >>>>>>> Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>      >>>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
>      >>>>>>
>      >>>>>>
>      >>>>>> _______________________________________________
>      >>>>>> Users mailing list
>      >>>>>> Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>      >>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
>      >>>>>
>      >>>>> _______________________________________________
>      >>>>> Users mailing list
>      >>>>> Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>      >>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
>      >>>>
>      >>>>
>      >>>> _______________________________________________
>      >>>> Users mailing list
>      >>>> Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>      >>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
>      >>>
>      >>> _______________________________________________
>      >>> Users mailing list
>      >>> Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>      >>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
>      >>
>      >>
>      >> _______________________________________________
>      >> Users mailing list
>      >> Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>      >> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
> 
> 
>     _______________________________________________
>     Users mailing list
>     Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>     http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
> 
> -- 
> VoIP Embedded, Inc.
> http://www.voipembedded.com <http://www.voipembedded.com>
> 
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users



More information about the Users mailing list