[klibc] Mips cross-compiling whos
Olliver Schinagl
oliver at schinagl.nl
Tue Jul 26 13:30:13 PDT 2022
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.
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'
```
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'
```
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'
```
Now, to compile, I use
```
make \
KBUILD_REPRODUCIBLE=1 \
KLIBCARCH="mips" \
KLIBCKERNELSRC='/usr/' \
;
```
with the kernel header package installed under '/usr'; but I'm thrown a
`syscalls.h` missing header error, that I can't figure out. It seems
like `syscalls.pl` would generate them, but I get no warnings or errors
on the failure thereof, which kinda puts me at a loss.
```
usr/klibc/sigsuspend.c:8:10: fatal error: klibc/havesyscall.h: No such
file or directory
8 | #include <klibc/havesyscall.h>
| ^~~~~~~~~~~~~~~~~~~~~
```
Any idea what's missing, what's failing? Perl is available and working;
This is perl 5, version 34, subversion 1 (v5.34.1) built for
x86_64-linux-thread-multi
and gcc is working fine for the other stuffs
mips-mti-elf-gcc (Alpine Linux) 11.2.0
Any thoughts or points would be greatly appreciated ...
Olliver
P.S. I'm not subscribed to the list; so please keep me in the CC :)
More information about the klibc
mailing list