On Sat, Dec 09, 2023 at 10:41:41PM +0100, Ludovic Courtès wrote: > Hello! > > Efraim Flashner skribis: > > > On Thu, Dec 07, 2023 at 10:26:36PM +0100, Ludovic Courtès wrote: > > [...] > > >> I was told on #glibc that (1) there’s no ‘localedef’ for the build > >> machine produced during cross-compilation, and (2) that more generally, > >> there’s no way to cross-build locale data, that endianness and other > >> things may matter. > >> > >> I suspect #2 was about the locale archive and not locale data, because > >> evidence suggests that locale data is system-independent: > >> > >> --8<---------------cut here---------------start------------->8--- > >> $ for s in aarch64-linux powerpc64le-linux armhf-linux i686-linux ; do diff -r $(guix build glibc-locales@2.35) $(guix build glibc-locales@2.35 -s "$s") && echo "$s same as x86_64-linux" ; done > >> aarch64-linux same as x86_64-linux > >> powerpc64le-linux same as x86_64-linux > >> armhf-linux same as x86_64-linux > >> i686-linux same as x86_64-linux > >> $ guix describe > >> guix 6e2dd51 > >> repository URL: https://git.savannah.gnu.org/git/guix.git > >> branch: master > >> commit: 6e2dd51df5f3f51e9056dd4f2e1b036195ab3caa > >> --8<---------------cut here---------------end--------------->8--- > >> > >> Efraim, could you check against powerpc-linux, which is the only > >> big-endian target we +/- support? > > > > I found a difference in almost every file. The tarball of the locales > > was too big to attach so I've uploaded it here¹. Looking at it in > > diffoscope it looked like most of the data that looked human readable > > was the same, but there was some endian switching with the other data > > bits. So without actually checking other big endian systems it looks > > like we could set target #f for the locales, but for those that share > > their endianness. > > OK, interesting, thanks for checking! > > So we won’t be able to reliably provide C.UTF-8 in cross-compiled libcs. > Maybe not a big problem, but it does mean that cross-compiled code will > be “less capable” because of that. We should be able to create some monstrosity of a #:target field to say that within an endianness group target is #f but otherwise is (%current-target-system). Should work for all the locale generators actually. untested: (if (and (target-little-endian? (%current-system)) (target-little-endian? (%current-target-system))) #f (%current-target-system)) Although if we are going to rely on target-little-endian we might want to define that field in (guix platform) too so we don't assign an endianness to 8-bit controllers or embedded systems. -- Efraim Flashner רנשלפ םירפא GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted