All of 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.