[OE-core] [PATCH] ICU: libicudata corrupt on big endian systems

Stefano Babic sbabic at denx.de
Wed Jun 17 13:15:40 UTC 2015


Tools to generate libicudata are not able
to write the library according to the endianess.

Signed-off-by: Stefano Babic <sbabic at denx.de>
---

Issue was described in a previous:

https://www.mail-archive.com/openembedded-core@lists.openembedded.org/msg65155.html

 meta/recipes-support/icu/icu/0001-target.patch     | 35 +++++++++++++
 .../icu/icu/native_big_endian.patch                | 60 ++++++++++++++++++++++
 meta/recipes-support/icu/icu_54.1.bb               |  4 ++
 3 files changed, 99 insertions(+)
 create mode 100644 meta/recipes-support/icu/icu/0001-target.patch
 create mode 100644 meta/recipes-support/icu/icu/native_big_endian.patch

diff --git a/meta/recipes-support/icu/icu/0001-target.patch b/meta/recipes-support/icu/icu/0001-target.patch
new file mode 100644
index 0000000..f13ab69
--- /dev/null
+++ b/meta/recipes-support/icu/icu/0001-target.patch
@@ -0,0 +1,35 @@
+From 1878e1bfcd116dd3ed9519dd891bf18f860072b7 Mon Sep 17 00:00:00 2001
+From: Stefano Babic <sbabic at denx.de>
+Date: Thu, 4 Jun 2015 17:53:30 +0200
+Subject: [PATCH] target
+
+Signed-off-by: Stefano Babic <sbabic at denx.de>
+---
+ source/data/Makefile.in | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/source/data/Makefile.in b/source/data/Makefile.in
+index e600a84..67fedab 100644
+--- a/data/Makefile.in
++++ b/data/Makefile.in
+@@ -45,6 +45,7 @@ ifeq ($(CURDIR),)
+ CURDIR=.
+ endif
+ PKGDATA = $(TOOLBINDIR)/pkgdata $(PKGDATA_OPTS) -q -c -s $(CURDIR)/out/build/$(ICUDATA_PLATFORM_NAME) -d $(ICUPKGDATA_OUTDIR)
++GENCCODE = $(TOOLBINDIR)/genccode
+ OS390_PDS_NAME = -z -L $(BATCH_STUB_TARGET)
+
+ ifeq ($(OS390_STUBDATA),1)
+@@ -180,6 +181,10 @@ endif
+ endif
+ ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
+	$(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) $(PKGDATA_LIBNAME) $(PKGDATA_LIST)
++	cp $(OUTDIR)/$(ICUDATA_NAME).dat $(OUTDIR)/$(ICUDATA_BASENAME_VERSION).dat
++	$(INVOKE) $(GENCCODE) $(OUTDIR)/$(ICUDATA_BASENAME_VERSION).dat
++	$(INVOKE) $(COMPILE.c) -I$(top_srcdir)/common -I$(top_builddir)/common -o $(OUTDIR)/$(ICUDATA_BASENAME_VERSION)_dat.o -c $(ICUDATA_BASENAME_VERSION)_dat.c
++	$(INVOKE) $(SHLIB.c) -o ../lib/$(LIB_ICUDATA_NAME).so.$(VERSION) $(OUTDIR)/$(ICUDATA_BASENAME_VERSION)_dat.o -Wl,-soname -Wl,$(LIB_ICUDATA_NAME).so.$(VERSION)
+ ifeq ($(OS390BATCH),1)
+	$(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) $(OS390_PDS_NAME) $(PKGDATA_LIST)
+ endif
+--
+1.9.3
diff --git a/meta/recipes-support/icu/icu/native_big_endian.patch b/meta/recipes-support/icu/icu/native_big_endian.patch
new file mode 100644
index 0000000..b0270c9
--- /dev/null
+++ b/meta/recipes-support/icu/icu/native_big_endian.patch
@@ -0,0 +1,60 @@
+diff --git a/tools/icupkg/icupkg.cpp b/tools/icupkg/icupkg.cpp
+index 4ae7ac4..0d9c261 100644
+--- a/tools/icupkg/icupkg.cpp
++++ b/tools/icupkg/icupkg.cpp
+@@ -27,6 +27,8 @@
+ *   Will not work with data DLLs (shared libraries).
+ */
+
++#define U_IS_BIG_ENDIAN 1
++
+ #include "unicode/utypes.h"
+ #include "unicode/putil.h"
+ #include "cstring.h"
+diff --git a/tools/toolutil/pkg_genc.c b/tools/toolutil/pkg_genc.c
+index 5c041e9..a3ef4de 100644
+--- a/tools/toolutil/pkg_genc.c
++++ b/tools/toolutil/pkg_genc.c
+@@ -3,6 +3,7 @@
+  *   Corporation and others.  All Rights Reserved.
+  *******************************************************************************
+  */
++#define U_IS_BIG_ENDIAN 1
+ #include "unicode/utypes.h"
+
+ #if U_PLATFORM_HAS_WIN32_API
+@@ -411,9 +412,8 @@ writeCCode(const char *filename, const char *destdir, const char *optName, const
+         "#endif\n"
+         "U_CDECL_BEGIN\n"
+         "const struct {\n"
+-        "    double bogus;\n"
+         "    uint8_t bytes[%ld]; \n"
+-        "} %s={ 0.0, {\n",
++        "} %s={ {\n",
+         (long)T_FileStream_size(in), entry);
+     T_FileStream_writeLine(out, buffer);
+
+diff --git a/tools/toolutil/pkg_icu.cpp b/tools/toolutil/pkg_icu.cpp
+index 87ed091..79ba616 100644
+--- a/tools/toolutil/pkg_icu.cpp
++++ b/tools/toolutil/pkg_icu.cpp
+@@ -3,6 +3,7 @@
+  *   Corporation and others.  All Rights Reserved.
+  *******************************************************************************
+  */
++#define U_IS_BIG_ENDIAN 1
+ #include "unicode/utypes.h"
+ #include "unicode/putil.h"
+ #include "cstring.h"
+diff --git a/tools/toolutil/pkg_icu.h b/tools/toolutil/pkg_icu.h
+index 8451f8d..cb2f48b 100644
+--- a/tools/toolutil/pkg_icu.h
++++ b/tools/toolutil/pkg_icu.h
+@@ -7,6 +7,7 @@
+ #ifndef __PKG_ICU_H__
+ #define __PKG_ICU_H__
+
++#define U_IS_BIG_ENDIAN 1
+ #include "unicode/utypes.h"
+
+ #define U_PKG_RESERVED_CHARS "\"%&'()*+,-./:;<=>?_"
diff --git a/meta/recipes-support/icu/icu_54.1.bb b/meta/recipes-support/icu/icu_54.1.bb
index 45b5cb6..875b39b 100644
--- a/meta/recipes-support/icu/icu_54.1.bb
+++ b/meta/recipes-support/icu/icu_54.1.bb
@@ -11,11 +11,15 @@ ICU_PV = "${@icu_download_version(d)}"
 BASE_SRC_URI = "http://download.icu-project.org/files/icu4c/${PV}/icu4c-${ICU_PV}-src.tgz"
 SRC_URI = "${BASE_SRC_URI} \
            file://icu-pkgdata-large-cmd.patch \
+	   ${@base_conditional('SITEINFO_ENDIANNESS', 'le', '', 'file://0001-target.patch ', d)} \
           "
 
+
+SRC_URI_append_class-native = "${@base_conditional('TUNE_ARCH', 'powerpc', 'file://native_big_endian.patch', '', d)}"
 SRC_URI_append_class-target = "\
            file://0001-Disable-LDFLAGSICUDT-for-Linux.patch \
           "
 SRC_URI[md5sum] = "e844caed8f2ca24c088505b0d6271bc0"
 SRC_URI[sha256sum] = "d42bc9a8ca6a91c55eb0925c279f49e5b508d51ef26ac9850d9be55de5bb8ab3"
 
+EXTRA_OECONF_append_class-native = "${@base_conditional('TUNE_ARCH', 'powerpc', '--with-data-packaging=files', '', d)}"
-- 
1.9.1




More information about the Openembedded-core mailing list