OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / include / Makefile
1 #
2 # build a smart "symlink" header tree so the compile lines are
3 # much shorter and the problems with include paths are much smaller
4 #
5 # David McCullough <davidm@snapgear.com>
6 #
7
8 #
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).
12 #
13 ALTARCH=$(subst i386,x86,$(subst nommu,,$(ARCH)))
14
15 #
16 # glibc contains lots of nasty headers in a bad location,  so we need
17 # to cheat a little here
18 #
19
20 include $(ROOTDIR)/vendors/config/common/config.arch
21 ifneq ($(wildcard $(ROOTDIR)/$(LINUXDIR)/usr/include),)
22 LINUXAUTOCONF = $(ROOTDIR)/$(LINUXDIR)/include/linux/autoconf.h
23 LINKHDRS = \
24         $(ROOTDIR)/$(LINUXDIR)/usr/include/*,. \
25         $(LINUXAUTOCONF),linux
26 else
27 LINUXAUTOCONF = $(ROOTDIR)/$(LINUXDIR)/include/generated/autoconf.h
28 LINKHDRS = \
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,.
37 endif
38
39 LINKHDRS += \
40         $(ROOTDIR)/autoconf.h,vendor \
41         $(ROOTDIR)/config,. \
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,.
46
47 #
48 # link in the files,  avoid missing or CVS files,  existing files take
49 # precedance so we do not try to overwrite them
50 #
51
52 INCDIR=$(STAGEDIR)/include
53 AUTOCONF=$(INCDIR)/vendor/autoconf.h $(INCDIR)/config/autoconf.h $(INCDIR)/modules/autoconf.h $(INCDIR)/linux/autoconf.h
54
55 TARGETS=
56 ifdef HOSTBUILD
57 TARGETS+=$(AUTOCONF)
58 else
59 TARGETS+=link
60 ifndef CONFIG_DEFAULTS_LIBC_NONE
61 TARGETS+=cpplink
62 endif
63 endif
64
65 .PHONY: all
66 all: $(TARGETS)
67
68 .PHONY: link
69 link:
70         @echo "Making symlinks in $(INCDIR)"
71         @mkdir -p $(INCDIR)
72         @for p in $(LINKHDRS); do \
73                 src=`expr "$$p" : '\(.*\),.*'` ; \
74                 dst=$(INCDIR)/`expr "$$p" : '.*,\(.*\)'` ; \
75                 for i in $$src; do \
76                         [ ! -e "$$i" ] && continue; \
77                         [ "`basename $$i`" = CVS ] && continue; \
78                         [ -L "$$dst/`basename $$i`" ] && continue; \
79                         [ -d $$dst ] || mkdir $$dst; \
80                         ln -s $$i $$dst/.; \
81                 done ; \
82         done
83
84 .PHONY: cpplink
85 cpplink:
86         @echo "Making include/c++ symlink to compiler c++ includes"
87         @rm -f $(INCDIR)/c++
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; \
91         done
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 ; \
103                         break; \
104                  fi; \
105          done
106
107 $(INCDIR)/vendor/autoconf.h: $(ROOTDIR)/autoconf.h
108         @mkdir -p $(INCDIR)/vendor
109         grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
110
111 $(INCDIR)/config/autoconf.h: $(ROOTDIR)/config/autoconf.h
112         @mkdir -p $(INCDIR)/config
113         grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
114
115 $(INCDIR)/modules/autoconf.h: $(ROOTDIR)/modules/autoconf.h
116         @mkdir -p $(INCDIR)/modules
117         grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
118
119 $(INCDIR)/linux/autoconf.h: $(LINUXAUTOCONF)
120         @mkdir -p $(INCDIR)/linux
121         grep -v '^#undef' $^ | grep -vw $(CONFIG_BLACKLIST_GREP) >$@
122
123 .PHONY: romfs
124 romfs:
125
126 .PHONY: clean
127 clean:
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
130         -rm $(AUTOCONF)