Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Tom <fivemiletom@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] Buildroot compilation errors (libintl) in cygwin.
Date: Thu, 19 Jul 2007 10:49:24 -0700	[thread overview]
Message-ID: <469FA424.6040709@gmail.com> (raw)
In-Reply-To: <6311fe0b0707190651yc690699ne5f14452b56155ad@mail.gmail.com>


Rex Ashbaugh wrote:
> Just an FYI to all those building a toolchain under cygwin..
> The last time I built buildroot under cygwin, there was a particularly 
> nasty bug in which one of the uClibc libraries (*.so) was built incorrectly.
> It was built with a mix of both static and dynamic functions, instead of 
> just the dynamic functions.
> This happened because the build process used a filename twice, both with 
> an upper case *.S and lower case *.s suffix, but for different purposes. 
> (I can't remember which file it was now)
> Because cygwin has case insensitivity, one file overwrote the other, 
> corrupting the build.
> The failure was silent. There was no clue it was happening. I came 
> across the problem later when trying to build an app with the toolchain 
> that made use of the library, causing the app either to fail to build, 
> or to crash at runtime. This caused me alot of hair pulling.
> Seeing no easy fix for this, I solved the problem by building the same 
> buildroot version under linux and copying the correctly built uClibc 
> library over to my cygwin toolchain.
> If you absolutely need to build under cygwin, its not a bad strategy to 
> build under linux in parallel to gain understanding.

Thanks for the heads up, Rex. Yes, after too many issues encountered on 
cygwin I have switched to linux. There buildroot does an excellent job 
and I can use this as my reference build. However I will probably have 
to revisit cygwin soon...


> 
> -Rex
> 
> On 7/18/07, *Tom* <fivemiletom at gmail.com <mailto:fivemiletom@gmail.com>> 
> wrote:
> 
>     Gabbar Singh wrote:
>      > Thanks a lot for the input Rex.
>      > I did indeed add -lintl to the makefile and the error stopped. So
>     every
>      > place where there is any configuration happening, I need to
>     change that
>      > makefile.. correct ?
>      > I had to make changes in two places to make it run.
> 
>     As Rex said, there were and are several places, some of which not
>     directly in buildroot but in the extracted archives. Gabbar, if you can
>     give us a list of all the places that you needed to fix for a more
>     recent buildroot than the one I was talking about below, that would be
>     appreciated.
> 
>     Thanks,
>     Tom
> 
> 
>     ---
>     Hi Bernhard, All
> 
>     Enclosed is cygwin-1.patch for buildroot-20050524.tar.bz2.
> 
>     - requires cygwin 1.5.24 with development package
> 
>     - configure buildroot for arm, arm-generic, eabi, "pc-cygwin",
>     uclibc-0.9.29, buildroot toolchain with gcc 4.1.2
> 
>     - FIRST do one build attempt (will fail, just to get and extract uclibc)
> 
>     - apply cygwin-1.patch with p1 (it is at very bottom of this email)
> 
>     - THEN do another build attempt, which will build
>        gmp, mpfr, newlib and arm-linux-uclibcgnueabi-gcc-4.1.2.exe
>        before failing (*).
> 
>     Thanks
>     Tom
> 
>     PS: if someone could take care of the apple part, that would be great.
>     Also, the one fix belongs to uclibc and not to buildroot...
> 
> 
>     (*) it fails when cross compiling uclibc, maybe my UCLIBC options? Hints
>     appreciated, need this to test on target.
> 
>     make MAKE="make -j1" -C /tw/buildroot/toolchain_build_arm/uClibc-0.9.29
>     \
>                      PREFIX= \
>                      DEVEL_PREFIX=/ \
>                      RUNTIME_PREFIX=/ \
>                      HOSTCC="gcc" \
>                      all
>     arm-linux-uclibcgnueabi-gcc: n: No such file or directory
>     make[1]: Entering directory
>     `/tw/buildroot/toolchain_build_arm/uClibc-0.9.29'
>     arm-linux-uclibcgnueabi-gcc: n: No such file or directory
>     make[2]: `conf' is up to date.
>     arm-linux-uclibcgnueabi-gcc: n: No such file or directory
>        CC ldso/ldso/ldso.oS
>     arm-linux-uclibcgnueabi-gcc: n: No such file or directory
>     make[1]: *** [ldso/ldso/ldso.oS] Error 1
>     make[1]: Leaving directory
>     `/tw/buildroot/toolchain_build_arm/uClibc-0.9.29'
>     make: *** [/tw/buildroot/toolchain_build_arm/uClibc-0.9.29/lib/libc.a]
>     Error 2
> 
> 
> 
> 
> 
>      > On Fri, May 25, 2007 at 11:52:35PM -0700, Tom wrote:
>      >> Hi Bernhard and all,
>      >>
>      >> sorry if this thread is a little out of sequence, had problems with
>     text attachment.
>      >>
>      >> Bernhard Fischer wrote:
>      >>> Before you report it to the mpfr folks, please paste the error
>     here,
>      >>> since i suspect that it could have to do something with the
>      >>> binary/library name extensions, which (IIRC) we currently do
>     not handle
>      >>> at all (there's a bug somewhere about this, if memory serves me
>     right).
>      >>>
>      >> You were right about extensions, below is the error as produced by
>      >> buildroot-20050516 built, I just added -verbose for ld.
>      >> It can not resolve the depency to libgmp.so, because cygwin ld
>     assumes libs to end in .a, .lib or .dll, and will append them to .so
>     libs, which thus can never be found.
>      >> Can I help to add support for this?
>      >
>      > Yes, you can.
>      >
>      > Depending on the target, set
>      > ifneq $($(findstring linux,$(BR2_GNU_BUILD_SUFFIX)),)
>      > EXEEXT:=
>      > LIBEXT:=.a
>      > SHREXT:=.so
>      > endif
>      > ifneq $($(findstring apple,$(BR2_GNU_BUILD_SUFFIX)),)
>      > EXEEXT:=.pear
>      > LIBEXT:=.dunno
>      > SHREXT:=.dylib
>      > endif
>      > ifneq $($(findstring cygwin,$(BR2_GNU_BUILD_SUFFIX)),)
>      > EXEEXT:=.exe
>      > LIBEXT:=.dunno
>      > SHREXT:=.dll
>      > endif
>      > ifneq $($(findstring mingw,$(BR2_GNU_BUILD_SUFFIX)),)
>      > EXEEXT:=.exe
>      > LIBEXT:=.dunno
>      > SHREXT:=.dll
>      > endif
>      >
>      > in the toplevel Makefile, before the
>      > all: world
>      > target, and use them accordingly.
>      >
>      >
>      > While you're at it, it would be awesome if you could deal with
>     this too:
>      > We want to be able to select which flavour of lib is built (shared or
>      > static) with a single config-option.
>      > So, instead of changing all ".so" blindly to $(SHREXT), change it to
>      > $(LIBTGTEXT) which is set either to
>      >
>      > ifeq $($(BR2_DEFAULT_LIB_TARGET),shared)
>      > LIBTGTEXT=$(SHREXT)
>      > else
>      > LIBTGTEXT=$(LIBEXT)
>      > endif
>      >
>      > below the newly added block i mentioned above.
>      >
>      > TIA and cheers,
>      >
> 
> 
>     cygwin-1.patch:
> 
>     --- buildroot.orig/Makefile    2007-05-29 11:55:38.025317600 -0700
>     +++ buildroot/Makefile    2007-05-29 19:54:26.130869700 -0700
>     @@ -66,7 +66,32 @@
>       #
>       #############################################################
> 
>     +ifneq (,$(findstring linux,$(BR2_GNU_BUILD_SUFFIX)))
>     +EXEEXT:=
>     +LIBEXT:=.a
>     +SHREXT:=.so
>     +endif
>     +ifneq (,$(findstring apple,$(BR2_GNU_BUILD_SUFFIX)))
>     +EXEEXT:=.pear
>     +LIBEXT:=.dunno
>     +SHREXT:=.dylib
>     +endif
>     +ifneq (,$(findstring cygwin,$(BR2_GNU_BUILD_SUFFIX)))
>     +EXEEXT:=.exe
>     +LIBEXT:=.lib
>     +SHREXT:=.dll
>     +endif
>     +ifneq (,$(findstring mingw,$(BR2_GNU_BUILD_SUFFIX)))
>     +EXEEXT:=.exe
>     +LIBEXT:=.lib
>     +SHREXT:=.dll
>     +endif
> 
>     +ifeq ($(BR2_PREFER_STATIC_LIB),y)
>     +LIBTGTEXT=$(LIBEXT)
>     +else
>     +LIBTGTEXT=$(SHREXT)
>     +endif
> 
>       all:   world
> 
>     --- buildroot.orig/Config.in    2007-05-29 11:54: 55.651131200 -0700
>     +++ buildroot/Config.in    2007-05-29 19:39:05.976662000 -0700
>     @@ -373,6 +373,19 @@
>           help
>             This option hides outdated/obsolete versions of packages.
> 
>     +config BR2_PREFER_STATIC_LIB
>     +    bool "prefer static libraries"
>     +    default n
>     +    help
>     +      Where possible, use static libraries.
>     +      This increases your code size a lot and should only be
>     +      used with a good reason why not use the default, which
>     +      is dynamic libraries.
>     +
>     +      If unsure, say No.
>     +
>     +      WARNING: This is highly experimental at the moment.
>     +
>       endmenu
> 
>       source "toolchain/Config.in"
>     --- buildroot.orig /package/gmp/gmp.mk    2007-05-29
>     11:56:19.118278600 -0700
>     +++ buildroot/package/gmp/gmp.mk    2007-05-29 19:34:47.184755900 -0700
>     @@ -18,6 +18,18 @@
>       GMP_BE:=no
>       endif
> 
>     +ifeq ($(BR2_PREFER_STATIC_LIB),y)
>     +GMP_LIB_FLAGS:=--enable-static --disable-shared
>     +else
>     +GMP_LIB_FLAGS:=--disable-static --enable-shared
>     +endif
>     +
>     +ifeq ($(EXEEXT),".exe")
>     +GMP_CPP_FLAGS:=-DDLL_EXPORT
>     +else
>     +GMP_CPP_FLAGS:=-DDLL_EXPORT
>     +endif
>     +
>       $(DL_DIR)/$(GMP_SOURCE):
>            $(WGET) -P $(DL_DIR) $(GMP_SITE)/$(GMP_SOURCE)
> 
>     @@ -35,6 +47,7 @@
>               $(TARGET_CONFIGURE_OPTS) \
>               CFLAGS="$(TARGET_CFLAGS)" \
>               LDFLAGS="$(TARGET_LDFLAGS)" \
>     +        CPPFLAGS="$(GMP_CPP_FLAGS)" \
>               ac_cv_c_bigendian=$(GMP_BE) \
>               $(GMP_DIR)/configure \
>               --target=$(GNU_TARGET_NAME) \
>     @@ -52,7 +65,7 @@
>               --includedir=/include \
>               --mandir=/usr/man \
>               --infodir=/usr/info \
>     -        --enable-shared \
>     +        $(GMP_LIB_FLAGS) \
>               $(DISABLE_NLS) \
>           );
>           touch $@
>     @@ -105,12 +118,12 @@
>               CC_FOR_BUILD="$(HOSTCC)" \
>               CC="$(HOSTCC)" \
>               CFLAGS="$(HOST_CFLAGS)" \
>     +        CPPFLAGS="$(GMP_CPP_FLAGS)" \
>               $(GMP_DIR)/configure \
>               --prefix="$(GMP_HOST_DIR)" \
>               --build=$(GNU_HOST_NAME) \
>               --host=$(GNU_HOST_NAME) \
>     -        --enable-shared \
>     -        --enable-static \
>     +        $(GMP_LIB_FLAGS) \
>               $(DISABLE_NLS) \
>           );
>           touch $@
>     ---
>     buildroot.orig/toolchain_build_arm/uClibc-0.9.29/extra/config/Makefile
>     2007-04-17 04:38:21.000000000 -0700
>     +++ buildroot/toolchain_build_arm/uClibc- 0.9.29/extra/config/Makefile
>     2007-05-29 19:34:47.200380600 -0700
>     @@ -21,7 +21,7 @@
>           $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@)
>     $(HOST_LOADLIBES) $< -o $@
> 
>       $(host-cmulti): %: $(host-cobjs) $(host-cshlib)
>     -    $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@)
>     $(HOST_LOADLIBES) $($@-objs) -o $@
>     +    $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@)
>     $(HOST_LOADLIBES) $($@-objs) -lintl -o $@
> 
>       $(host-cobjs): %.o: %.c
>           $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) -c $<
>     -o $@
> 
> 

  reply	other threads:[~2007-07-19 17:49 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <6311fe0b0707180831sca30362ve3369fdcbafed7b1@mail.gmail.com>
2007-07-19  3:56 ` [Buildroot] Buildroot compilation errors (libintl) in cygwin Gabbar Singh
2007-07-19  6:46   ` Tom
2007-07-19 13:51     ` Rex Ashbaugh
2007-07-19 17:49       ` Tom [this message]
2007-07-20  4:05       ` Gabbar Singh
2007-07-18  9:59 Gururaja Hebbar K R
  -- strict thread matches above, loose matches on Subject: below --
2007-07-18  4:51 Gabbar Singh
2007-07-18  5:34 ` Hebbar
2007-07-18  9:08   ` Gabbar Singh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=469FA424.6040709@gmail.com \
    --to=fivemiletom@gmail.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox