[klibc] Mips cross-compiling whos

Olliver Schinagl oliver at schinagl.nl
Tue Aug 2 12:43:47 PDT 2022


On 01-08-2022 20:21, Ben Hutchings wrote:
> On Tue, 2022-07-26 at 22:30 +0200, Olliver Schinagl wrote:
>> Hey list,
>>
>> I'm trying to cross-compile klibc on mips. As I packaged it for alpine
>> before, I figured it shouldn't be that hard ;) Sadly, alpine doesn't
>> support mips[32|64] so I have to cross-compile it.
> Cross-compilation should work, and I regularly test this for all the
> architectures that Debian provides cross-compilers for.
>
>> I'm doing this from within an alpine based docker container, using a
>> simple script (setup vars, unzip, make).
>>
>>
>> There's a few things I don't understand why they are the way they are,
>> but have a somewhat easy work-around (haven't spend time to figure out
>> if it is the correct one at all or not :p).
>>
>>
>> First, this work-around I have also in the alpine packages, since it's
>> just shuffling stuff around, but keeping all definitions, I don't
>> mind/care much.
>>
>> ```
>>
>>           if [ ! -e 'usr/include/sys/sysinfo.h.orig' ]; then
>>               mv 'usr/include/sys/sysinfo.h' \
>>                  'usr/include/sys/sysinfo.h.orig'
>>           fi
>>           cat \
>>               '/usr/include/linux/sysinfo.h' \
>>               'usr/include/sys/sysinfo.h.orig' > \
>>               'usr/include/sys/sysinfo.h'
>> ```
> This doesn't make any sense to me.  Our sys/sysinfo.h already includes
> <linux/kernel.h>, which includes <linux/sysinfo.h>.
>
>> excuse the uglyness :p
>>
>>
>> Secondly, specificaly on mips, I get re-definition errors, I haven't
>> looked into detail why `f_owner_ex` is redefined, but I use the
>> following here:
>>
>> ```
>>
>>           sed -i \
>>               -e '/^typedef struct flock {$/i # define
>> HAVE_ARCH_STRUCT_FLOCK/' \
>>               -e '/^struct f_owner_ex {$/,+6d' \
>>               'usr/include/arch/mips/klibc/archfcntl.h'
>>
>> ```
> It's also defined in <asm/fcntl.h>, which I think is "wrong" on MIPS.
> We try to prevent including both <klibc/archfcntl.h> and <asm/fcntl.h>,
> though it looks like that check broke about 10 years ago in the UAPI
> split!
>
>> Lastly, _KLIBC_USE_RT_SIG supposedly 'can' be used on mips, but it
>> causes a `-1` unnamed array definition error, so 'can' means 'does not
>> needed to be', so I just disabled it.
>>
>>
>> ```
>>
>>           sed -i 's|^\(#define _KLIBC_USE_RT_SIG \).*$|\1 0|'
>> 'usr/include/arch/mips/klibc/archconfig.h'
>>
>> ```
> This is not a configuration option.  You can't change it without
> changing the architecture implementation too.
>
> [...]
>> Now, to compile, I use
>>
>> ```
>>
>>           make \
>>                KBUILD_REPRODUCIBLE=1 \
>>                KLIBCARCH="mips" \
>>                KLIBCKERNELSRC='/usr/' \
>>                ;
>>
>> ```
> [...]
>
> This causes klibc to use the kernel headers for the build machine's
> architecture, which is wrong for cross-builds.  This is probably the
> source of all or most of the errors.

Ah hah! That explains a lot then.


So for arm, I didn't have much of a problem; but I did use the 'general 
amd64' linux-headers. I wasn't aware that linux-headers was a 'per 
target' specific package. I know I can easily of course install the 
target's header package.

>
> If you have a working cross-compiler then it must have a copy of the
> kernel headers for the target architecture installed somewhere, and you
> need to tell klibc where that is or link to it.  I don't know how
> Alpine packages cross-tools, but this is what we do in Debian:
> https://salsa.debian.org/kernel-team/klibc/-/blob/master/debian/rules#L58

In alpine, you run/install everything 'nativily' usually. E.g. the 
linux-headers package gets created once per arch, on supported arches. 
There is no mips32 support on alpine; so I can't "just install 
linux-headers" from mips; which means I'll figure out (what debian does) 
to get the appropiate headers. Probably means I have to fix my alpine 
builds as well, which probably is the trigger of my (only) workaround 
with the sysconf.h stuff.


I'll fix this stuff and will get back to you. Sorry for my 
headers-ignorance :p

>
> Ben.
>



More information about the klibc mailing list