[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