2 # build a smart "symlink" header tree so the compile lines are
3 # much shorter and the problems with include paths are much smaller
5 # David McCullough <davidm@snapgear.com>
9 # At least one architecture now uses a common include directory in the
10 # MMU and non-MMU kernel. Both m68k and m68knommu use the m68k includes.
11 # And i386 has now become x86 (from linux-2.6.29 onwards).
13 ALTARCH=$(subst i386,x86,$(subst nommu,,$(ARCH)))
16 # glibc contains lots of nasty headers in a bad location, so we need
17 # to cheat a little here
20 include $(ROOTDIR)/vendors/config/common/config.arch
21 ifneq ($(wildcard $(ROOTDIR)/$(LINUXDIR)/usr/include),)
22 LINUXAUTOCONF = $(ROOTDIR)/$(LINUXDIR)/include/linux/autoconf.h
24 $(ROOTDIR)/$(LINUXDIR)/usr/include/*,. \
25 $(LINUXAUTOCONF),linux
27 LINUXAUTOCONF = $(ROOTDIR)/$(LINUXDIR)/include/generated/autoconf.h
29 $(ROOTDIR)/$(LINUXDIR)/include/linux,. \
30 $(LINUXAUTOCONF),linux \
31 $(ROOTDIR)/$(LINUXDIR)/arch/$(ARCH)/include/asm-*,. \
32 $(ROOTDIR)/$(LINUXDIR)/include/asm-*,. \
33 $(ROOTDIR)/$(LINUXDIR)/arch/$(ARCH)/include/asm,. \
34 $(ROOTDIR)/$(LINUXDIR)/arch/$(ALTARCH)/include/asm,. \
35 $(ROOTDIR)/$(LINUXDIR)/include/asm,. \
36 $(ROOTDIR)/$(LINUXDIR)/include/mtd,.
40 $(ROOTDIR)/autoconf.h,vendor \
42 $(ROOTDIR)/modules/autoconf.h,modules \
43 $(ROOTDIR)/modules/ocf/cryptodev.h,crypto \
44 $(ROOTDIR)/user/gdb/include/ansidecl.h,. \
45 $(ROOTDIR)/user/gdb/include/symcat.h,.
48 # link in the files, avoid missing or CVS files, existing files take
49 # precedance so we do not try to overwrite them
52 INCDIR=$(STAGEDIR)/include
53 AUTOCONF=$(INCDIR)/vendor/autoconf.h $(INCDIR)/config/autoconf.h $(INCDIR)/modules/autoconf.h $(INCDIR)/linux/autoconf.h
60 ifndef CONFIG_DEFAULTS_LIBC_NONE
70 @echo "Making symlinks in $(INCDIR)"
72 @for p in $(LINKHDRS); do \
73 src=`expr "$$p" : '\(.*\),.*'` ; \
74 dst=$(INCDIR)/`expr "$$p" : '.*,\(.*\)'` ; \
76 [ ! -e "$$i" ] && continue; \
77 [ "`basename $$i`" = CVS ] && continue; \
78 [ -L "$$dst/`basename $$i`" ] && continue; \
79 [ -d $$dst ] || mkdir $$dst; \
86 @echo "Making include/c++ symlink to compiler c++ includes"
88 @ln -s /usr/local/include/g++-v3 $(INCDIR)/c++
89 @for i in `$(CXX) -v -E -xc++ /dev/null 2>&1 | sed -e '/^Reading specs/,/^#include <\.\.\.>/d' -e '/End of search list/Q'`; do \
90 if [ -f $$i/new ]; then rm -f $(INCDIR)/c++; ln -s $$i $(INCDIR)/c++; break; fi; \
92 @rm -f $(INCDIR)/bits ; \
93 GCCVER=`$(CC) -dumpversion` ; \
94 GCCMACH=`$(CC) -dumpmachine` ; \
95 GCCMULTI=`$(CC) -print-multi-directory` ; \
96 GCCPATH=`$(CC) -print-libgcc-file-name | sed -e 's?/lib/gcc/.*$$??g'` ; \
97 GPLUSBITS="$$GCCPATH/$$GCCMACH/include/c++/$$GCCVER/$$GCCMACH/$$GCCMULTI/bits $$GCCPATH/include/c++/$$GCCVER/$$GCCMACH/$$GCCMULTI/bits"; \
98 echo "Checking for modern c++ bits..."; \
99 for i in $$GPLUSBITS; do \
100 if [ -d $$i ] ; then \
101 echo "Using modern c++ bits, $$i" ; \
102 ln -s $$i $(INCDIR)/bits ; \
107 $(INCDIR)/vendor/autoconf.h: $(ROOTDIR)/autoconf.h
108 @mkdir -p $(INCDIR)/vendor
109 grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
111 $(INCDIR)/config/autoconf.h: $(ROOTDIR)/config/autoconf.h
112 @mkdir -p $(INCDIR)/config
113 grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
115 $(INCDIR)/modules/autoconf.h: $(ROOTDIR)/modules/autoconf.h
116 @mkdir -p $(INCDIR)/modules
117 grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
119 $(INCDIR)/linux/autoconf.h: $(LINUXAUTOCONF)
120 @mkdir -p $(INCDIR)/linux
121 grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
128 -find $(INCDIR) -depth -type l -a ! -name Makefile | xargs rm > /dev/null 2>&1 || exit 0
129 -find $(INCDIR) -depth -type d | grep -v .svn | xargs rmdir > /dev/null 2>&1 || exit 0