[Skiboot] build system: HOSTCC -m64?
Michael Tokarev
mjt at tls.msk.ru
Sun Dec 1 16:54:48 AEDT 2024
Hi!
I initially sent this to skiboot@ list, but it never appeared there.
Truing qemu-ppc too.
I stumbled across a somewhat stupid "issue", - while building skiboot
as part of qemu package build in debian, I tried running the build on
an i386 host (usually I do this on amd64 or aarch64 host). And skiboot
build failed:
In file included from /usr/lib/gcc/i686-linux-gnu/12/include/stdint.h:9,
from roms/skiboot/ccan/short_types/short_types.h:4,
from roms/skiboot/extract-gcov.c:5:
/usr/include/stdint.h:26:10: fatal error: bits/libc-header-start.h: No such file or directory
This is ${HOSTCC}, not ${CC} - which is supposed to be a compiler for
native architecture - it is building a helper binary to generate some
build-time tables, so any native/default architecture is fine.
However, skiboot build procedure tries to force -m64 flag to the
default/native ${HOSTCC}:
Makefile.main: HOSTCFLAGS += $(call try-cflag,$(HOSTCC),-m64)
And on i386, native gcc does support this option. But it does no
necessary have all the headers/libraries to actually build any 64bit
executable - which is exactly the case here.
This -m64 flag has been introduced by this commit:
commit 241daa24feaf9c9aa84ac45887b67ceb6918980a
Author: Stewart Smith <stewart at linux.vnet.ibm.com>
Date: Tue Oct 25 19:43:53 2016 +1100
extract-gcov: build with -m64 if compiler supports it
Fixes build break on 32bit ppc64 (e.g. PowerMac G5, where user space
is mostly 32bit).
Fixes: https://github.com/open-power/skiboot/issues/42
Reported-by: Andrei Warkenti <andrey.warkentin at gmail.com>
Signed-off-by: Stewart Smith <stewart at linux.vnet.ibm.com>
diff --git a/Makefile.main b/Makefile.main
index 86a54be45..7918a180b 100644
--- a/Makefile.main
+++ b/Makefile.main
@@ -35,6 +35,7 @@ HOSTCC=gcc
HOSTEND=$(shell uname -m | sed -e 's/^i.*86$$/LITTLE/' -e 's/^x86.*/LITTLE/' -e 's/^ppc64le/LITTLE/' -e 's/^ppc.*/BIG/')
HOSTCFLAGS=-O1 $(CWARNS) -DHAVE_$(HOSTEND)_ENDIAN -MMD
HOSTCFLAGS += $(call try-cflag,$(HOSTCC),-std=gnu11)
+HOSTCFLAGS += $(call try-cflag,$(HOSTCC),-m64)
HOSTCFLAGS += $(call try-cflag,$(HOSTCC),-Wjump-misses-init) \
$(call try-cflag,$(HOSTCC),-Wsuggest-attribute=const) \
$(call try-cflag,$(HOSTCC),-Wsuggest-attribute=noreturn) \
which seems a bit wrong, since checking just for the -m64
*option* is obviously not enough. Also, even if the compiler
can actually produce a 64bit executable, it isn't necessary
for this executable to be able to *run* on this platform, -
gcc might be configured to produce either 32 or 64 bit code
even on ppc platform, and we might be running on a hardware
not capable to run 64bit code.
Now, having in mind diminishing role of 32bit platforms, I'm
not sure what to do with this one.. :)
Thanks,
/mjt
More information about the Skiboot
mailing list