From 2cf61be2430ffca74ab6729bec85539778f31a9e Mon Sep 17 00:00:00 2001 From: patacongo Date: Wed, 24 Jun 2009 20:57:34 +0000 Subject: [PATCH] Fix a problem that was causing tools/incdir.sh to generate inappropriate paths for Cygwin tools git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1941 42af7a65-404d-4744-a932-0658087f49c3 --- ChangeLog | 5 +++ Documentation/NuttX.html | 4 ++ binfmt/Makefile | 7 +++- drivers/Makefile | 12 ++++-- examples/nxflat/Makefile | 10 ++--- examples/pashello/Makefile | 8 +++- graphics/Makefile | 18 ++++---- tools/incdir.sh | 84 ++++++++++++++++++++++++++++++++++---- 8 files changed, 119 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index b4764a1a69..fb7458acd5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -791,6 +791,11 @@ and probably breaks many builds. * examples/lib: Added qsort() * examples/nxflat: Added support for symbol tables + * Correct logic that creates compiler include paths. On Cygwin, the + include paths for Cygwin-based GCC were being converted to windows + native paths. That causes many problems -- breaking dependencies + for one. + diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html index bc6bfb91c8..be4af316c5 100644 --- a/Documentation/NuttX.html +++ b/Documentation/NuttX.html @@ -1483,6 +1483,10 @@ nuttx-0.4.9 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> and probably breaks many builds. * examples/lib: Added qsort() * examples/nxflat: Added support for symbol tables + * Correct logic that creates compiler include paths. On Cygwin, the + include paths for Cygwin-based GCC were being converted to windows + native paths. That causes many problems -- breaking dependencies + for one. pascal-0.1.3 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> diff --git a/binfmt/Makefile b/binfmt/Makefile index 30a2fb2605..0ba0c28622 100644 --- a/binfmt/Makefile +++ b/binfmt/Makefile @@ -35,7 +35,10 @@ -include $(TOPDIR)/Make.defs -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/sched} +ifeq ($(WINTOOL),y) +INCDIROPT = -w +endif +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/sched} ifeq ($(CONFIG_NXFLAT),y) include libnxflat/Make.defs @@ -81,7 +84,7 @@ $(BIN): $(OBJS) .depend: Makefile $(SRCS) @$(MKDEP) --dep-path . --dep-path libnxflat \ - $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep + $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep @touch $@ depend: .depend diff --git a/drivers/Makefile b/drivers/Makefile index dc6e43fcc6..ad9dcaa0fb 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -1,7 +1,7 @@ ############################################################################ # drivers/Makefile # -# Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. +# Copyright (C) 2007-2009 Gregory Nutt. All rights reserved. # Author: Gregory Nutt # # Redistribution and use in source and binary forms, with or without @@ -35,6 +35,10 @@ -include $(TOPDIR)/Make.defs +ifeq ($(WINTOOL),y) +INCDIROPT = -w +endif + ifeq ($(CONFIG_NET),y) include net/Make.defs ROOTDEPPATH = --dep-path . @@ -45,20 +49,20 @@ ifeq ($(CONFIG_USBDEV),y) include usbdev/Make.defs ROOTDEPPATH = --dep-path . USBDEVDEPPATH = --dep-path usbdev -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/drivers/usbdev} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/drivers/usbdev} endif include mmcsd/Make.defs ROOTDEPPATH = --dep-path . MMCSDDEPPATH = --dep-path mmcsd -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/drivers/mmcsd} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/drivers/mmcsd} ifneq ($(CONFIG_NFILE_DESCRIPTORS),0) ifneq ($(CONFIG_DISABLE_MOUNTPOINT),y) include bch/Make.defs ROOTDEPPATH = --dep-path . BCHDEPPATH = --dep-path bch -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/drivers/bch} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/drivers/bch} endif endif diff --git a/examples/nxflat/Makefile b/examples/nxflat/Makefile index 3dd485f4db..fa740370f6 100644 --- a/examples/nxflat/Makefile +++ b/examples/nxflat/Makefile @@ -1,5 +1,5 @@ ############################################################################ -# examples/hello/Makefile +# examples/nxflat/Makefile # # Copyright (C) 2008 Gregory Nutt. All rights reserved. # Author: Gregory Nutt @@ -63,17 +63,15 @@ $(BIN): headers $(OBJS) $(call ARCHIVE, $@, $${obj}); \ done ; ) -.depend: Makefile $(SRCS) - @$(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep - @touch $@ +# We can't make dependencies in this directory because the required +# header files may not yet exist. -depend: .depend +depend: clean: @rm -f $(BIN) *~ .*.swp $(call CLEAN) distclean: clean - @rm -f Make.dep .depend -include Make.dep diff --git a/examples/pashello/Makefile b/examples/pashello/Makefile index 8de5941bac..cce7b526ed 100644 --- a/examples/pashello/Makefile +++ b/examples/pashello/Makefile @@ -1,7 +1,7 @@ ############################################################################ # examples/pashello/Makefile # -# Copyright (C) 2008 Gregory Nutt. All rights reserved. +# Copyright (C) 2008-2009 Gregory Nutt. All rights reserved. # Author: Gregory Nutt # # Redistribution and use in source and binary forms, with or without @@ -36,8 +36,12 @@ -include $(TOPDIR)/.config -include $(TOPDIR)/Make.defs +ifeq ($(WINTOOL),y) +INCDIROPT = -w +endif + COMPILER = ${shell basename $(CC)} -USRINCLUDES = ${shell $(TOPDIR)/tools/incdir.sh "$CC" $(TOPDIR)/pcode/include $(TOPDIR)/pcode/insn/include} +USRINCLUDES = ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$CC" $(TOPDIR)/pcode/include $(TOPDIR)/pcode/insn/include} ifneq ($(ARCHSTDINCLUDES),) INCLUDES = $(ARCHSTDINCLUDES) $(USRINCLUDES) else diff --git a/graphics/Makefile b/graphics/Makefile index 14ffd613bc..22c0e6d7e8 100644 --- a/graphics/Makefile +++ b/graphics/Makefile @@ -1,7 +1,7 @@ ############################################################################ # graphics/Makefile # -# Copyright (C) 2008 Gregory Nutt. All rights reserved. +# Copyright (C) 2008-2009 Gregory Nutt. All rights reserved. # Author: Gregory Nutt # # Redistribution and use in source and binary forms, with or without @@ -38,31 +38,35 @@ DEPPATH = --dep-path . +ifeq ($(WINTOOL),y) +INCDIROPT = -w +endif + include nxglib/Make.defs DEPPATH += --dep-path nxglib -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/graphics/nxglib} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxglib} include nxbe/Make.defs DEPPATH += --dep-path nxbe -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/graphics/nxbe} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxbe} ifeq ($(CONFIG_NX_MULTIUSER),y) include nxmu/Make.defs DEPPATH += --dep-path nxmu -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/graphics/nxmu} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxmu} else include nxsu/Make.defs DEPPATH += --dep-path nxsu -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/graphics/nxsu} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxsu} endif include nxtk/Make.defs DEPPATH += --dep-path nxtk -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/graphics/nxtk} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxtk} include nxfonts/Make.defs DEPPATH += --dep-path nxfonts -CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh "$(CC)" $(TOPDIR)/graphics/nxfonts} +CFLAGS += ${shell $(TOPDIR)/tools/incdir.sh $(INCDIROPT) "$(CC)" $(TOPDIR)/graphics/nxfonts} ASRCS = $(NXGLIB_ASRCS) $(NXBE_ASRCS) $(NX_ASRCS) $(NXTK_ASRCS) $(NXFONTS_ASRCS) AOBJS = $(ASRCS:.S=$(OBJEXT)) diff --git a/tools/incdir.sh b/tools/incdir.sh index c9d1b7d407..447151ed30 100755 --- a/tools/incdir.sh +++ b/tools/incdir.sh @@ -1,7 +1,7 @@ #!/bin/bash # tools/incdir.sh # -# Copyright (C) 2008 Gregory Nutt. All rights reserved. +# Copyright (C) 2008-2009 Gregory Nutt. All rights reserved. # Author: Gregory Nutt # # Redistribution and use in source and binary forms, with or without @@ -32,25 +32,60 @@ # POSSIBILITY OF SUCH DAMAGE. # -# Input parameters: -# $1 : Compiler name as it appears in config/*/*/Make.defs -# $2, $3, ...: Include file paths +# Handle command line options + +progname=$0 +wintool=n +usage="USAGE: $progname [-w] [-d] [-l] [-h] [ [ ...]]" +advice="Try '$progname -h' for more information" + +while [ ! -z "$1" ]; do + case $1 in + -d ) + set -x + ;; + -w ) + wintool=y + ;; + -h ) + echo "$progname is a tool for flexible generate of include path arguments for a" + echo "variety of diffent compilers in a variety of compilation environments" + echo "" + echo $usage + echo "" + echo "Where:" + echo " " + echo " The full path to your compiler" + echo " [ [ ...]]" + echo " A list of include directories" + echo " -w" + echo " The compiler is a Windows native tool and requires Windows" + echo " style pathnames like C:\\Program Files" + echo " -d" + echo " Enable script debug" + ;; + * ) + break; + ;; + esac + shift +done ccpath=$1 shift dirlist=$@ -usage="USAGE: $0 [ [ ...]]" - if [ -z "$ccpath" ]; then echo "Missing compiler path" echo $usage + echo $advice exit 1 fi if [ -z "$dirlist" ]; then echo "Missing include directory list" echo $usage + echo $advice exit 1 fi @@ -75,15 +110,48 @@ fi # files. os=`uname -o` + +# Let's assume that all GCC compiler paths contain the string gcc and +# no non-GCC compiler pathes include this substring + +gcc=`echo $ccpath | grep gcc` +sdcc=`echo $ccpath | grep sdcc` + if [ "X$os" = "XCygwin" ]; then - windows=yes - compiler=`cygpath -u "$ccpath"` + # We can treat Cygwin native toolchains just like Linux native + # toolchains in the Linux. Let's assume: + # 1. GCC or SDCC are the only possible Cygwin native compilers + # 2. If this is a Window native GCC version, then -w provided + # on the command line (wintool=y) + + if [ -z "$gcc" -a -z "$sdcc" ]; then + + # Not GCC or SDCC, must be Windows native + windows=yes + compiler=`cygpath -u "$ccpath"` + else + if [ "X$wintool" == "Xy" ]; then + + # It is a native GCC or SDCC compiler + windows=yes + compiler=`cygpath -u "$ccpath"` + else + # GCC or SDCC and not for Windows + windows=no + compiler="$ccpath" + fi + fi else + # Otherwise, we must be in a Linux environment where there are + # only Linux native toolchains windows=no compiler="$ccpath" fi exefile=`basename "$compiler"` +# Check for some well known, non-GCC Windows native tools that require +# a special output format as well as special paths + if [ "X$exefile" = "Xez8cc.exe" -o "X$exefile" = "Xzneocc.exe" -o "X$exefile" = "Xez80cc.exe" ]; then fmt=userinc else