[OE-core] [PATCH] locale: Allow usage of cross-localedef for ARC
Alexey Brodkin
alexey.brodkin at synopsys.com
Tue Nov 13 10:44:24 UTC 2018
Hi Vineet,
On Mon, 2018-11-12 at 23:22 +0000, Vineet Gupta wrote:
>
> On 11/12/18 2:44 PM, Alexey Brodkin wrote:
> > With this it's possible to build locale data for ARC
> > and not do it instead on the first boot.
> >
> > Signed-off-by: Alexey Brodkin <abrodkin at synopsys.com>
> > ---
> > meta/classes/libc-package.bbclass | 2 ++
> > meta/lib/oe/package_manager.py | 2 ++
> > meta/recipes-core/glibc/glibc-locale.inc | 2 +-
> > 3 files changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/meta/classes/libc-package.bbclass b/meta/classes/libc-package.bbclass
> > index 9d09c7be6a..4c694ab5e2 100644
> > --- a/meta/classes/libc-package.bbclass
> > +++ b/meta/classes/libc-package.bbclass
> > @@ -242,6 +242,8 @@ python package_do_split_gconvs () {
> > if use_cross_localedef == "1":
> > target_arch = d.getVar('TARGET_ARCH')
> > locale_arch_options = { \
> > + "arc": " --uint32-align=4 --little-endian ", \
> > + "arceb": " --uint32-align=4 --big-endian ", \
> > "arm": " --uint32-align=4 --little-endian ", \
> > "armeb": " --uint32-align=4 --big-endian ", \
> > "aarch64": " --uint32-align=4 --little-endian ", \
> > diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
> > index 882e7c429f..aa4de6e7c3 100644
> > --- a/meta/lib/oe/package_manager.py
> > +++ b/meta/lib/oe/package_manager.py
> > @@ -94,6 +94,8 @@ def generate_locale_archive(d, rootfs, target_arch, localedir):
> > # Pretty sure we don't need this for locale archive generation but
> > # keeping it to be safe...
> > locale_arch_options = { \
> > + "arc": ["--uint32-align=4", "--little-endian"],
> > + "arceb": ["--uint32-align=4", "--big-endian"],
> > "arm": ["--uint32-align=4", "--little-endian"],
> > "armeb": ["--uint32-align=4", "--big-endian"],
> > "aarch64": ["--uint32-align=4", "--little-endian"],
> > diff --git a/meta/recipes-core/glibc/glibc-locale.inc b/meta/recipes-core/glibc/glibc-locale.inc
> > index 1b676dc26e..57b465dd5d 100644
> > --- a/meta/recipes-core/glibc/glibc-locale.inc
> > +++ b/meta/recipes-core/glibc/glibc-locale.inc
> > @@ -27,7 +27,7 @@ ENABLE_BINARY_LOCALE_GENERATION_pn-nativesdk-glibc-locale = "1"
> >
> > #enable locale generation on these arches
> > # BINARY_LOCALE_ARCHES is a space separated list of regular expressions
> > -BINARY_LOCALE_ARCHES ?= "arm.* aarch64 i[3-6]86 x86_64 powerpc mips mips64 riscv32 riscv64"
> > +BINARY_LOCALE_ARCHES ?= "arc arm.* aarch64 i[3-6]86 x86_64 powerpc mips mips64 riscv32 riscv64"
> >
> > # set "1" to use cross-localedef for locale generation
> > # set "0" for qemu emulation of native localedef for locale generation
>
> Interesting: How do we do that for other buildsystems / buildroot or when building
> by hand ?
1. Buildroot
In buildroot we do pretty-much the same things, see
https://git.buildroot.org/buildroot/tree/Makefile#n640
We build localedef (with help of "host-localedef" package) and
then generate requested locales for the target.
2. Crosstool-NG
Here we just build locales on host and copy them over to
built cross-toolchain, see
https://github.com/crosstool-ng/crosstool-ng/blob/master/scripts/build/libc/glibc.sh#L482
The problem here (and this is explicitly mentioned in the script above) -
this locale only makes sense if host and target have the same uint32_t alignment
and endianess, see https://github.com/crosstool-ng/crosstool-ng/blob/master/scripts/build/libc/glibc.sh#L533
So if we're lucky we may get useful locales. Though there's another caveat:
Glibc 2.28 requires GCC 4.9+ which means you cannot build locales for target
on CentOS/RHEL machine any longer as GCC 4.8 is used by default.
3. Manually you're free to do whatever pleases you but
since we cross-compile you'd need to use one of options discussed above:
a) Use localedef (http://www.pengutronix.de/software/ptxdist/temporary-src/localedef-eglibc-2.14.1-r17443-ptx1.tar.bz2)
b) Build natively on host and install on target
-Alexey
More information about the Openembedded-core
mailing list