Message ID | 20181112224351.2050-1-abrodkin@synopsys.com |
---|---|
State | New |
Headers | show |
Series | locale: Allow usage of cross-localedef for ARC | expand |
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@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 ? -Vineet
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@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
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
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@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(-)