Cygwin hosted toolchain (fs case sensitivity)

Ladislav Michl ladis@linux-mips.org
Thu Oct 7 09:53:00 GMT 2010


Hi,

I tried to build Cygwin hosted toolchain and failed to build glibc due to
case insensitive filesystem. So I looked how others are doing it (here
http://www.send-patches.org/ would be very usefull :-)) and found
crosstool-ng patch against glibc-2.5 which does the job and is used also
with glibc-2.7. Then it disapeared. I'm assuming it is because crosstool-ng
homepage indirectly refers to cygwin's description how to make filesystem
case sensitive: http://cygwin.com/cygwin-ug-net/using-specialnames.html
Correct?

For you reference, patch updated against glibc-2.9 can be found bellow.

And while there, crosstool-ng homepage also states: 
There are also a number of tools that build toolchains for specific needs,
which are not really scalable. Examples are: 
...
* ptxdist, whose purpose is very similar to buildroot,
...

and that's not completely true as:
* PTXdist itself does not build toolchains.
* ...is really scalable ;-)
* OSELAS.Toolchain is "BSP" for PTXdist which uses its framework to
  build toolchain (and is also really scalable ;-))

Yann, could you fix those typos?

Best regards,
	ladis

---

Idea from
http://sources.redhat.com/ml/bug-glibc/2002-01/msg00071/glibc-2.2-cygin-shared.patch
Basically, make glibc use .oST as suffix for 'object static'
instead of .oS, since cygwin has trouble distinguishing .os from .oS
(Original patch had .on, but .oST is more mnemonic for 'object static')

Taken from crosstool and forward ported to glibc-2.9
As glibc is using 'T' as last suffix letter for temporary files
make it .oSC as for 'object StatiC'.

Signed-off-by: Robert P. J. Day <rpjday@mindspring.com>
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---

diff -Naur glibc-2.9/extra-lib.mk glibc-2.9-cygwin/extra-lib.mk
--- glibc-2.9/extra-lib.mk	2004-12-02 23:54:47.000000000 +0100
+++ glibc-2.9-cygwin/extra-lib.mk	2010-09-23 12:55:49.000000000 +0200
@@ -13,7 +13,7 @@
 
 ifneq (,$($(lib)-static-only-routines))
 ifneq (,$(filter yesyes%,$(build-shared)$(elf)$($(lib).so-version)))
-object-suffixes-$(lib) += $(filter-out $($(lib)-inhibit-o),.oS)
+object-suffixes-$(lib) += $(filter-out $($(lib)-inhibit-o),.oSC)
 endif
 endif
 
@@ -29,7 +29,7 @@
 
 # Add each flavor of library to the lists of things to build and install.
 install-lib += $(foreach o,$(object-suffixes-$(lib)),$(lib:lib%=$(libtype$o)))
-extra-objs += $(foreach o,$(filter-out .os .oS,$(object-suffixes-$(lib))),\
+extra-objs += $(foreach o,$(filter-out .os .oSC,$(object-suffixes-$(lib))),\
 			$(patsubst %,%$o,$(filter-out \
 					   $($(lib)-shared-only-routines),\
 					   $(all-$(lib)-routines))))
@@ -57,7 +57,7 @@
 
 
 # Use o-iterator.mk to generate a rule for each flavor of library.
-ifneq (,$(filter-out .os .oS,$(object-suffixes-$(lib))))
+ifneq (,$(filter-out .os .oSC,$(object-suffixes-$(lib))))
 define o-iterator-doit
 $(objpfx)$(patsubst %,$(libtype$o),$(lib:lib%=%)): \
   $(patsubst %,$(objpfx)%$o,\
@@ -65,7 +65,7 @@
 			  $(all-$(lib)-routines))); \
 	$$(build-extra-lib)
 endef
-object-suffixes-left = $(filter-out .os .oS,$(object-suffixes-$(lib)))
+object-suffixes-left = $(filter-out .os .oSC,$(object-suffixes-$(lib)))
 include $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-left))
 endif
 
@@ -77,9 +77,9 @@
 	$(build-extra-lib)
 endif
 
-ifneq (,$(filter .oS,$(object-suffixes-$(lib))))
-$(objpfx)$(patsubst %,$(libtype.oS),$(lib:lib%=%)): \
-  $(patsubst %,$(objpfx)%.oS,\
+ifneq (,$(filter .oSC,$(object-suffixes-$(lib))))
+$(objpfx)$(patsubst %,$(libtype.oSC),$(lib:lib%=%)): \
+  $(patsubst %,$(objpfx)%.oSC,\
 	     $(filter $($(lib)-static-only-routines),\
 		      $(all-$(lib)-routines)))
 	$(build-extra-lib)
diff -Naur glibc-2.9/Makeconfig glibc-2.9-cygwin/Makeconfig
--- glibc-2.9/Makeconfig	2010-09-20 13:06:18.000000000 +0200
+++ glibc-2.9-cygwin/Makeconfig	2010-09-23 12:55:49.000000000 +0200
@@ -471,7 +471,7 @@
 # run the linked programs.
 link-libc = -Wl,-rpath-link=$(rpath-link) \
 	    $(common-objpfx)libc.so$(libc.so-version) \
-	    $(common-objpfx)$(patsubst %,$(libtype.oS),c) $(gnulib)
+	    $(common-objpfx)$(patsubst %,$(libtype.oSC),c) $(gnulib)
 # This is how to find at build-time things that will be installed there.
 rpath-dirs = math elf dlfcn nss nis rt resolv crypt
 endif
@@ -693,7 +693,7 @@
 # The compilation rules use $(CPPFLAGS-${SUFFIX}) and $(CFLAGS-${SUFFIX})
 # to pass different flags for each flavor.
 libtypes = $(foreach o,$(object-suffixes-for-libc),$(libtype$o))
-all-object-suffixes := .o .os .op .og .ob .oS
+all-object-suffixes := .o .os .op .og .ob .oSC
 object-suffixes :=
 CPPFLAGS-.o = $(pic-default)
 CFLAGS-.o = $(filter %frame-pointer,$(+cflags))
@@ -753,14 +753,14 @@
 
 ifeq (yes,$(build-shared))
 # Build special library that contains the static-only routines for libc.
-object-suffixes-for-libc += .oS
+object-suffixes-for-libc += .oSC
 
 # Must build the routines as PIC, though, because they can end up in (users')
 # shared objects.  We don't want to use CFLAGS-os because users may, for
 # example, make that processor-specific.
-CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag)
-CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1
-libtype.oS = lib%_nonshared.a
+CFLAGS-.oSC = $(CFLAGS-.o) $(PIC-ccflag)
+CPPFLAGS-.oSC = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1
+libtype.oSC = lib%_nonshared.a
 endif
 
 # The assembler can generate debug information too.
diff -Naur glibc-2.9/Makerules glibc-2.9-cygwin/Makerules
--- glibc-2.9/Makerules	2010-09-20 13:06:17.000000000 +0200
+++ glibc-2.9-cygwin/Makerules	2010-09-23 12:58:01.000000000 +0200
@@ -403,7 +403,7 @@
 # Bounded pointer thunks are only built for *.ob
 elide-bp-thunks = $(addprefix $(bppfx),$(bp-thunks))
 
-elide-routines.oS += $(filter-out $(static-only-routines),\
+elide-routines.oSC += $(filter-out $(static-only-routines),\
 				  $(routines) $(aux) $(sysdep_routines)) \
 		     $(elide-bp-thunks)
 elide-routines.os += $(static-only-routines) $(elide-bp-thunks)
@@ -978,7 +978,7 @@
 install: $(inst_libdir)/libc.so
 $(inst_libdir)/libc.so: $(common-objpfx)format.lds \
 			$(common-objpfx)libc.so$(libc.so-version) \
-			$(inst_libdir)/$(patsubst %,$(libtype.oS),\
+			$(inst_libdir)/$(patsubst %,$(libtype.oSC),\
 						  $(libprefix)$(libc-name)) \
 			$(+force)
 	(echo '/* GNU ld script';\
@@ -986,7 +986,7 @@
 	 echo '   the static library, so try that secondarily.  */';\
 	 cat $<; \
 	 echo 'GROUP ( $(slibdir)/libc.so$(libc.so-version)' \
-	      '$(libdir)/$(patsubst %,$(libtype.oS),$(libprefix)$(libc-name))'\
+	      '$(libdir)/$(patsubst %,$(libtype.oSC),$(libprefix)$(libc-name))'\
 	      ' AS_NEEDED (' $(slibdir)/$(rtld-installed-name) ') )' \
 	) > $@.new
 	mv -f $@.new $@
diff -Naur glibc-2.9/nptl/Makefile glibc-2.9-cygwin/nptl/Makefile
--- glibc-2.9/nptl/Makefile	2010-09-20 13:06:19.000000000 +0200
+++ glibc-2.9-cygwin/nptl/Makefile	2010-09-23 12:55:49.000000000 +0200
@@ -375,7 +375,7 @@
 
 $(inst_libdir)/libpthread.so: $(common-objpfx)format.lds \
 			      $(objpfx)libpthread.so$(libpthread.so-version) \
-			      $(inst_libdir)/$(patsubst %,$(libtype.oS),\
+			      $(inst_libdir)/$(patsubst %,$(libtype.oSC),\
 							$(libprefix)pthread) \
 			      $(+force)
 	(echo '/* GNU ld script';\
@@ -383,7 +383,7 @@
 	 echo '   the static library, so try that secondarily.  */';\
 	 cat $<; \
 	 echo 'GROUP ( $(slibdir)/libpthread.so$(libpthread.so-version)' \
-	      '$(libdir)/$(patsubst %,$(libtype.oS),$(libprefix)pthread)'\
+	      '$(libdir)/$(patsubst %,$(libtype.oSC),$(libprefix)pthread)'\
 	      ')' \
 	) > $@.new
 	mv -f $@.new $@
diff -Naur glibc-2.9/sysdeps/sparc/sparc32/sparcv9/Makefile glibc-2.9-cygwin/sysdeps/sparc/sparc32/sparcv9/Makefile
--- glibc-2.9/sysdeps/sparc/sparc32/sparcv9/Makefile	2004-08-16 08:46:14.000000000 +0200
+++ glibc-2.9-cygwin/sysdeps/sparc/sparc32/sparcv9/Makefile	2010-09-23 12:55:49.000000000 +0200
@@ -10,4 +10,4 @@
 ASFLAGS-.op += -Wa,-Av9a
 ASFLAGS-.og += -Wa,-Av9a
 ASFLAGS-.ob += -Wa,-Av9a
-ASFLAGS-.oS += -Wa,-Av9a
+ASFLAGS-.oSC += -Wa,-Av9a

--
For unsubscribe information see http://sourceware.org/lists.html#faq



More information about the crossgcc mailing list