[FIX] the z13 baseline was only half applied
gcc failed at stage 2 with gfortran: error: unrecognized argument in option '-march=x86-64' configure: error: GNU Fortran is not working; please report a bug ... Worth reading twice: gcc reported that its OWN freshly-built Fortran compiler was not working, when the compiler was fine and had been handed another architecture's flags. Everything about the message points at the wrong thing. Arch splits makepkg.conf into /etc/makepkg.conf.d/*.conf, read AFTER the main file. fortran.conf sets FFLAGS to the x86_64 list and FCFLAGS from it; rust.conf does the same for RUSTFLAGS. So the override appended to makepkg.conf was itself overridden -- silently, and only for the variables it did not mention. CFLAGS survived by luck: no drop-in sets it. Every flag variable now lives in a drop-in named to sort last, and the run prints which drop-ins are still read after it. A drop-in that does not sort last does nothing and looks like it worked. --- FR --- gcc a échoué à l'étage 2 sur gfortran: error: unrecognized argument in option '-march=x86-64' configure: error: GNU Fortran is not working; please report a bug ... À lire deux fois : gcc annonçait que SON PROPRE compilateur Fortran fraîchement bâti ne fonctionnait pas, alors qu'il allait bien et qu'on lui avait passé les drapeaux d'une autre architecture. Tout dans le message désigne la mauvaise chose. Arch éclate makepkg.conf en /etc/makepkg.conf.d/*.conf, lus APRÈS le fichier principal. fortran.conf met FFLAGS à la liste x86_64 et FCFLAGS d'après lui ; rust.conf fait de même pour RUSTFLAGS. Le remplacement ajouté en fin de makepkg.conf était donc lui-même écrasé — silencieusement, et seulement pour les variables qu'il ne nommait pas. CFLAGS a survécu par chance : aucun appoint ne le définit. Toutes les variables de drapeaux vivent maintenant dans un appoint nommé pour passer en dernier, et la construction affiche quels appoints sont encore lus après lui. Un appoint qui ne passe pas en dernier ne fait rien et en a l'air. Assisted-by: Claude Opus 5
This commit is contained in:
parent
4eca3612f9
commit
7c7a1260d7
1 changed files with 35 additions and 34 deletions
|
|
@ -341,49 +341,50 @@ configure_chroot() {
|
||||||
#
|
#
|
||||||
# An override at the end of the file needs no parsing of what came before:
|
# An override at the end of the file needs no parsing of what came before:
|
||||||
# the last assignment is the one that counts.
|
# the last assignment is the one that counts.
|
||||||
sudo tee -a "$ROOT/etc/makepkg.conf" > /dev/null <<'EOC'
|
# A DROP-IN, not an append to makepkg.conf.
|
||||||
|
#
|
||||||
# --- stage 2: the shipped values are Arch's x86_64 ones ---
|
# Appending was wrong, and gcc is what proved it:
|
||||||
#
|
#
|
||||||
# THE BASELINE CPU OF THIS PORT, which was being decided by accident.
|
# gfortran: error: unrecognized argument in option '-march=x86-64'
|
||||||
#
|
# configure: error: GNU Fortran is not working; please report a bug ...
|
||||||
# zlib stopped on
|
#
|
||||||
#
|
# Arch splits makepkg.conf into /etc/makepkg.conf.d/*.conf, sourced AFTER
|
||||||
# contrib/crc32vx/crc32_vx.c:205:10: error:
|
# the main file. fortran.conf sets FFLAGS to the x86_64 list and FCFLAGS
|
||||||
# '__builtin_s390_vec_unpackl' requires '-mvx'
|
# from it; rust.conf does the same for RUSTFLAGS. So an override at the end
|
||||||
#
|
# of makepkg.conf is itself overridden, silently, for exactly the variables
|
||||||
# after its own configure had detected vector support and defined
|
# it does not mention -- CFLAGS survived only because no drop-in sets it.
|
||||||
# -DHAVE_S390X_VX. Both halves were right, which is what made it worth
|
#
|
||||||
# measuring instead of patching:
|
# The error is worth noting for its shape: gcc reported that ITS OWN
|
||||||
#
|
# freshly-built Fortran compiler "is not working", when the compiler was
|
||||||
# host gcc (Ubuntu) --with-arch=z13 --with-tune=z16 default -march=arch11
|
# fine and had been handed another architecture's flags. Everything about
|
||||||
# our gcc (nothing) default -march=arch5
|
# the message points at the wrong thing.
|
||||||
#
|
#
|
||||||
# arch5 is z900, from 2000. arch11 is z13, from 2015. Arch's PKGBUILD names no
|
# zz- so it sorts last: the drop-ins are read in glob order, and this has to
|
||||||
# s390x baseline because Arch has no s390x, so our gcc fell back to the oldest
|
# be the final word. Owned by no package, and remade on every run since
|
||||||
# machine the port could possibly run on -- and every package using a vector
|
# make_rootfs wipes the tree.
|
||||||
# intrinsic failed, while zlib's configure went on detecting a CPU the compiler
|
sudo install -d -m0755 "$ROOT/etc/makepkg.conf.d"
|
||||||
# had been told to forget.
|
sudo tee "$ROOT/etc/makepkg.conf.d/zz-s390x.conf" > /dev/null <<'EOC'
|
||||||
#
|
# stage 2: every flag variable, because Arch's are x86_64's and the drop-ins
|
||||||
# z13 is not a guess: it is what Ubuntu s390x, the host distribution, already
|
# under this directory would otherwise put them back.
|
||||||
# requires, so nothing that runs here today stops running. Every distribution
|
|
||||||
# picks one of these; this port had simply never said which, and silence chose
|
|
||||||
# the year 2000.
|
|
||||||
#
|
|
||||||
# TWO PLACES, because they answer different questions. Here is how this
|
|
||||||
# distribution is COMPILED. patches/pkgbuild/gcc.sh passes --with-arch to the
|
|
||||||
# compiler we SHIP, so a build done later on the target assumes the same
|
|
||||||
# machine. Setting only this one leaves a gcc that quietly reverts to arch5.
|
|
||||||
CFLAGS="-march=z13 -mtune=z16 -O2 -pipe -fno-plt -fexceptions"
|
CFLAGS="-march=z13 -mtune=z16 -O2 -pipe -fno-plt -fexceptions"
|
||||||
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
|
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
|
||||||
|
FFLAGS="$CFLAGS"
|
||||||
|
FCFLAGS="$CFLAGS"
|
||||||
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now"
|
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now"
|
||||||
LTOFLAGS=""
|
LTOFLAGS=""
|
||||||
RUSTFLAGS=""
|
RUSTFLAGS=""
|
||||||
DEBUG_CFLAGS=""
|
DEBUG_CFLAGS=""
|
||||||
DEBUG_CXXFLAGS=""
|
DEBUG_CXXFLAGS=""
|
||||||
|
DEBUG_FFLAGS=""
|
||||||
|
DEBUG_FCFLAGS=""
|
||||||
|
DEBUG_RUSTFLAGS=""
|
||||||
EOC
|
EOC
|
||||||
sudo grep -E '^(CARCH|CHOST|MAKEFLAGS|OPTIONS)=' "$ROOT/etc/makepkg.conf" | sed 's/^/ /'
|
sudo grep -E '^(CARCH|CHOST|MAKEFLAGS|OPTIONS)=' "$ROOT/etc/makepkg.conf" | sed 's/^/ /'
|
||||||
printf ' baseline: -march=z13 -mtune=z16 (host Ubuntu uses the same)\n'
|
printf ' baseline: -march=z13 -mtune=z16, in makepkg.conf.d/zz-s390x.conf\n'
|
||||||
|
# Named, because a drop-in that does not sort last does nothing and looks
|
||||||
|
# like it worked.
|
||||||
|
printf ' drop-ins read after it: %s\n' \
|
||||||
|
"$(sudo ls "$ROOT/etc/makepkg.conf.d" | awk '$0 > "zz-s390x.conf"' | tr '\n' ' ')none"
|
||||||
|
|
||||||
# --auto-features auto, for this chroot only.
|
# --auto-features auto, for this chroot only.
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue