From: Sonic Zhang Date: Tue, 4 Feb 2014 13:06:46 +0000 (+0100) Subject: icu: detect and add compiler symbol prefix to the assembly code X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=170d526e91ae5249647e60d5b845468aa6c561c0;p=buildroot.git icu: detect and add compiler symbol prefix to the assembly code Some compilers, such as the Blackfin GNU compiler, prefix a character to any C symbol in generated assembly code. If any assembly symbol is invoked from C code, it needs to be prefixed as well. Note: since autoreconf doesn't work with this package because automake isn't used. Fixes: http://autobuild.buildroot.net/results/c40a22814b405de2c5c75139cfc393c863ed4b81/ [Ryan: add information about why patching configure is ok] [Ryan: add renaming of patches to be consistent with standard] Signed-off-by: Sonic Zhang Signed-off-by: Ryan Barnett Signed-off-by: Peter Korsgaard --- diff --git a/package/icu/icu-001-dont-build-static-dynamic-twice.patch b/package/icu/icu-001-dont-build-static-dynamic-twice.patch new file mode 100644 index 0000000000..ccbe534aa2 --- /dev/null +++ b/package/icu/icu-001-dont-build-static-dynamic-twice.patch @@ -0,0 +1,37 @@ +Don't build object files twice + +When passed --enable-static and --enable-shared, icu will generate +both a shared and a static version of its libraries. + +However, in order to do so, it builds each and every object file +twice: once with -fPIC (for the shared library), and once without +-fPIC (for the static library). While admittedly building -fPIC for a +static library generates a slightly suboptimal code, this is what all +the autotools-based project are doing. They build each object file +once, and they use it for both the static and shared libraries. + +icu builds the object files for the shared library as .o files, and +the object files for static library as .ao files. By simply changing +the suffix of object files used for static libraries to ".o", we tell +icu to use the ones built for the shared library (i.e, with -fPIC), +and avoid the double build of icu. + +On a fast build server, this brings the target icu build from +3m41.302s down to 1m43.926s (approximate numbers: some other builds +are running on the system at the same time). + +Signed-off-by: Thomas Petazzoni + +Index: b/source/config/mh-linux +=================================================================== +--- a/source/config/mh-linux ++++ b/source/config/mh-linux +@@ -35,7 +35,7 @@ + ## Shared object suffix + SO = so + ## Non-shared intermediate object suffix +-STATIC_O = ao ++STATIC_O = o + + ## Compilation rules + %.$(STATIC_O): $(srcdir)/%.c diff --git a/package/icu/icu-002-workaround-toolchain-bugs.patch b/package/icu/icu-002-workaround-toolchain-bugs.patch new file mode 100644 index 0000000000..64d67a0c3b --- /dev/null +++ b/package/icu/icu-002-workaround-toolchain-bugs.patch @@ -0,0 +1,36 @@ +Workaround toolchain bugs + +Many of ARM Sourcery CodeBench toolchain have a bug when compiling +icu's translit.cpp source file. The bug is trigerred when there is a +combination of "-W -Wall" and "-Os", and causes an internal compiler +error. The bug has been reported to Mentor Graphics. + +Even though it is clearly a toolchain bug, having a workaround for it +is trivial in this case. So it will avoid our users falling into this +internal compiler error, and allow our autobuilders to test more +packages using this Sourcery CodeBench toolchain.qq + +[Gustavo: update for ICU4C 51.2] +Signed-off-by: Thomas Petazzoni + +diff -Nura icu.orig/source/configure icu/source/configure +--- icu.orig/source/configure 2013-05-23 17:06:32.000000000 -0300 ++++ icu/source/configure 2013-06-29 15:43:04.202320953 -0300 +@@ -4066,7 +4066,7 @@ + then + # Do not use -ansi. It limits us to C90, and it breaks some platforms. + # We use -std=c99 to disable the gnu99 defaults and its associated warnings +- CFLAGS="$CFLAGS -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings" ++ CFLAGS="$CFLAGS -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings" + else + case "${host}" in + *-*-cygwin) +@@ -4078,7 +4078,7 @@ + fi + if test "$GXX" = yes + then +- CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" ++ CXXFLAGS="$CXXFLAGS -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" + else + case "${host}" in + *-*-cygwin) diff --git a/package/icu/icu-003-detect-compiler-symbol-prefix.patch b/package/icu/icu-003-detect-compiler-symbol-prefix.patch new file mode 100644 index 0000000000..bfc985ff7e --- /dev/null +++ b/package/icu/icu-003-detect-compiler-symbol-prefix.patch @@ -0,0 +1,112 @@ +detect and add compiler symbol prefix to the assembly code + +Some compiler, such as Blackfin GNU compiler, prefix a charater to any +C symbol in generated assembly code. If any assembly symbol is invoked +from C code, it needs to be prefixed as well. + +Note: since autoreconf doesn't work with this package because automake +isn't support + +[Ryan: add information about why patching configure is ok] + +Signed-off-by: Sonic Zhang +Signed-off-by: Ryan Barnett + +--- icu-51.2/source/configure 2014-01-06 17:13:20.907249812 +0800 ++++ icu-51.2.bak/source/configure 2014-01-06 17:12:57.335248659 +0800 +@@ -612,6 +612,7 @@ + ICUDATA_CHAR + SAMPLES_TRUE + TESTS_TRUE ++SYMBOL_PREFIX + ICULIBSUFFIXCNAME + U_HAVE_LIB_SUFFIX + ICULIBSUFFIX +@@ -7226,7 +7227,16 @@ + U_HAVE_LIB_SUFFIX=0 + fi + ++# Check compiler generated symbol profix ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for symbol prefix" >&5 ++$as_echo "checking for symbol prefix... " >&6; } ++ SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \ ++ | ${CPP-${CC-gcc} -E} - 2>&1 \ ++ | ${EGREP-grep} "^PREFIX=" \ ++ | sed -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"` + ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SYMBOL_PREFIX" >&5 ++$as_echo "$SYMBOL_PREFIX" >&6; } + + # Enable/disable tests + # Check whether --enable-tests was given. +--- icu-51.2/source/extra/uconv/Makefile.in 2014-01-06 17:47:13.991347946 +0800 ++++ icu-51.2.bak/source/extra/uconv/Makefile.in 2014-01-06 17:48:01.571355282 +0800 +@@ -57,7 +57,7 @@ + ## Static mode + ifeq ($(UCONVMSG_MODE),static) + DEFS += -DUCONVMSG_LINK=$(MSGNAME) +-UCONVMSG_LIB = $(RESDIR)/$(LIBPREFIX)$(STATIC_PREFIX_WHEN_USED)$(MSGNAME).$(A) ++UCONVMSG_LIB = $(RESDIR)/$(LIBPREFIX)$(STATIC_PREFIX_WHEN_USED)@SYMBOL_PREFIX@$(MSGNAME).$(A) + LIBS += $(UCONVMSG_LIB) + PKGMODE=static + INSTALLTO=$(libdir) +@@ -151,7 +151,7 @@ + endif + + $(UCONVMSG_LIB): $(RESFILES) $(RESDIR)/$(RESDIR).lst pkgdata.inc +- $(INVOKE) $(PKGDATA_INVOKE_OPTS) $(TOOLBINDIR)/pkgdata -p $(MSGNAME) $(PKGDATA_OPTS) -m $(PKGMODE) -s $(RESDIR) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst ++ $(INVOKE) $(PKGDATA_INVOKE_OPTS) $(TOOLBINDIR)/pkgdata -p @SYMBOL_PREFIX@$(MSGNAME) $(PKGDATA_OPTS) -m $(PKGMODE) -s $(RESDIR) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst + + $(RESDIR)/$(RESDIR).lst: Makefile $(srcdir)/resfiles.mk + @-$(RMV) $@ +--- icu-51.2/source/data/Makefile.in 2014-01-06 19:00:28.879570005 +0800 ++++ icu-51.2.bak/source/data/Makefile.in 2014-01-06 19:00:07.891570170 +0800 +@@ -175,13 +175,13 @@ + packagedata: icupkg.inc $(PKGDATA_LIST) build-local + ifneq ($(ENABLE_STATIC),) + ifeq ($(PKGDATA_MODE),dll) +- $(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) -m static $(PKGDATA_VERSIONING) $(PKGDATA_LIST) ++ $(PKGDATA_INVOKE) $(PKGDATA) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) -m static $(PKGDATA_VERSIONING) $(PKGDATA_LIST) + 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) ++ $(PKGDATA_INVOKE) $(PKGDATA) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) + 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) ++ $(PKGDATA_INVOKE) $(PKGDATA) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) $(OS390_PDS_NAME) $(PKGDATA_LIST) + endif + else + $(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(OUTDIR) +@@ -203,11 +203,11 @@ + endif + ifneq ($(ENABLE_STATIC),) + ifeq ($(PKGDATA_MODE),dll) +- $(PKGDATA_INVOKE) $(PKGDATA) -m static -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_LIBDIR) ++ $(PKGDATA_INVOKE) $(PKGDATA) -m static -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_LIBDIR) + endif + endif + ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES) +- $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_DIR) ++ $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_DIR) + else + $(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(DESTDIR)$(ICUPKGDATA_DIR) + endif +@@ -218,7 +218,7 @@ + #### 390 support + install390: package390 + $(MKINSTALLDIRS) $(TMPDATADIR) $(DESTDIR)$(libdir) +- $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e $(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING) -I $(DESTDIR)$(ICUPKGDATA_DIR) ++ $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING) -I $(DESTDIR)$(ICUPKGDATA_DIR) + ifeq ($(PKGDATA_MODE),dll) + $(INSTALL-L) $(ICUPKGDATA_OUTDIR)/$(FINAL_IMPORT_LIB) $(DESTDIR)$(ICUPKGDATA_DIR)/$(FINAL_IMPORT_LIB) + endif +@@ -226,7 +226,7 @@ + #### $(LIB_ICUDATA_NAME)$(STUB_SUFFIX) is the subset data for batch mode + package390: $(OUTTMPDIR)/icudata390.lst $(PKGDATA_LIST) ./icupkg.inc packagedata + ln -s $(ICUDATA_NAME) $(OUTDIR)/build/$(ICUDATA_NAME)$(STUB_SUFFIX) +- $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e $(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING) ++ $(INVOKE) $(PKGDATA) -s $(BUILDDIR)$(STUB_SUFFIX) -T $(OUTTMPDIR_390STUB) -p $(ICUDATA_NAME)$(STUB_SUFFIX) $(PKGDATA_LIBNAME)$(STUB_SUFFIX) -e @SYMBOL_PREFIX@$(ICUDATA_ENTRY_POINT) $(OS390LIST) -m dll $(PKGDATA_VERSIONING) + cp $(ICUPKGDATA_OUTDIR)/$(LIB_ICUDATA_NAME)$(STUB_SUFFIX).$(SO) $(top_builddir)/stubdata/$(LIB_ICUDATA_NAME)$(STUB_SUFFIX).$(SO) + + diff --git a/package/icu/icu-dont-build-static-dynamic-twice.patch b/package/icu/icu-dont-build-static-dynamic-twice.patch deleted file mode 100644 index ccbe534aa2..0000000000 --- a/package/icu/icu-dont-build-static-dynamic-twice.patch +++ /dev/null @@ -1,37 +0,0 @@ -Don't build object files twice - -When passed --enable-static and --enable-shared, icu will generate -both a shared and a static version of its libraries. - -However, in order to do so, it builds each and every object file -twice: once with -fPIC (for the shared library), and once without --fPIC (for the static library). While admittedly building -fPIC for a -static library generates a slightly suboptimal code, this is what all -the autotools-based project are doing. They build each object file -once, and they use it for both the static and shared libraries. - -icu builds the object files for the shared library as .o files, and -the object files for static library as .ao files. By simply changing -the suffix of object files used for static libraries to ".o", we tell -icu to use the ones built for the shared library (i.e, with -fPIC), -and avoid the double build of icu. - -On a fast build server, this brings the target icu build from -3m41.302s down to 1m43.926s (approximate numbers: some other builds -are running on the system at the same time). - -Signed-off-by: Thomas Petazzoni - -Index: b/source/config/mh-linux -=================================================================== ---- a/source/config/mh-linux -+++ b/source/config/mh-linux -@@ -35,7 +35,7 @@ - ## Shared object suffix - SO = so - ## Non-shared intermediate object suffix --STATIC_O = ao -+STATIC_O = o - - ## Compilation rules - %.$(STATIC_O): $(srcdir)/%.c diff --git a/package/icu/icu-workaround-toolchain-bugs.patch b/package/icu/icu-workaround-toolchain-bugs.patch deleted file mode 100644 index 64d67a0c3b..0000000000 --- a/package/icu/icu-workaround-toolchain-bugs.patch +++ /dev/null @@ -1,36 +0,0 @@ -Workaround toolchain bugs - -Many of ARM Sourcery CodeBench toolchain have a bug when compiling -icu's translit.cpp source file. The bug is trigerred when there is a -combination of "-W -Wall" and "-Os", and causes an internal compiler -error. The bug has been reported to Mentor Graphics. - -Even though it is clearly a toolchain bug, having a workaround for it -is trivial in this case. So it will avoid our users falling into this -internal compiler error, and allow our autobuilders to test more -packages using this Sourcery CodeBench toolchain.qq - -[Gustavo: update for ICU4C 51.2] -Signed-off-by: Thomas Petazzoni - -diff -Nura icu.orig/source/configure icu/source/configure ---- icu.orig/source/configure 2013-05-23 17:06:32.000000000 -0300 -+++ icu/source/configure 2013-06-29 15:43:04.202320953 -0300 -@@ -4066,7 +4066,7 @@ - then - # Do not use -ansi. It limits us to C90, and it breaks some platforms. - # We use -std=c99 to disable the gnu99 defaults and its associated warnings -- CFLAGS="$CFLAGS -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings" -+ CFLAGS="$CFLAGS -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings" - else - case "${host}" in - *-*-cygwin) -@@ -4078,7 +4078,7 @@ - fi - if test "$GXX" = yes - then -- CXXFLAGS="$CXXFLAGS -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" -+ CXXFLAGS="$CXXFLAGS -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" - else - case "${host}" in - *-*-cygwin)