OSDN Git Service

Generalise 'all' rule to arbitrary prerequisite sub-directories.
[pf3gnuchains/pf3gnuchains4x.git] / winsup / Makefile.common
1 # Makefile.common - common definitions for the winsup directory
2 #
3 # Copyright 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc.
4 #
5 # This file is part of Cygwin.
6 #
7 # This software is a copyrighted work licensed under the terms of the
8 # Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
9 # details.
10
11 # This makefile requires GNU make.
12
13 CFLAGS_COMMON:=-Wall -Wstrict-aliasing -Wwrite-strings -fno-common -pipe -fbuiltin -fmessage-length=0# -finline-functions
14 MALLOC_DEBUG:=#-DMALLOC_DEBUG -I/cygnus/src/uberbaum/winsup/cygwin/dlmalloc
15 MALLOC_OBJ:=#/cygnus/src/uberbaum/winsup/cygwin/dlmalloc/malloc.o
16
17 override srcdir:=${shell cd $(srcdir); pwd}
18 ifneq (,${filter-out /%,$(srcdir)})
19     updir:=$(srcdir)/..
20     updir1:=$(updir)/..
21 else
22     updir:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(srcdir)):::}}
23 ifneq (,${findstring /,$(updir)})
24     updir1:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(updir)):::}}
25 else
26     updir1:=$(updir)/..
27 endif
28 endif
29
30 pwd:=${shell pwd}
31 ifneq "${filter winsup%,${notdir $(pwd)}}" ""
32     here:=${pwd}/cygwin
33 else
34     here:=${dir $(pwd)}cygwin
35 endif
36 bupdir:=${shell cd $(here)/..; pwd}
37 ifneq (,${filter-out /%,$(bupdir)})
38     bupdir1:=../..
39     bupdir2:=../../..
40 else
41 ifneq (,${findstring /,$(bupdir)})
42     bupdir1:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(bupdir)):::}}
43 else
44     bupdir1:=$(bupdir)/..
45 endif
46 ifneq (,${findstring /,$(bupdir1)})
47     bupdir2:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(bupdir1)):::}}
48 else
49     bupdir2:=$(bupdir1)/..
50 endif
51 endif
52
53 zlib_source:=$(updir)/zlib
54 zlib_build:=$(bupdir)/zlib
55 bz2lib_source:=$(updir)/bz2lib
56 bz2lib_build:=$(bupdir)/bz2lib
57 w32api_source:=$(updir)/w32api
58 w32api_build:=$(bupdir)/w32api
59 w32api_lib:=$(w32api_build)/lib
60 newlib_source:=$(updir1)/newlib
61 newlib_build:=$(bupdir1)/newlib
62 cygwin_build:=$(bupdir)/cygwin
63 cygwin_source:=$(updir)/cygwin
64 mingw_build:=$(bupdir)/mingw
65 mingw_source:=$(updir)/mingw
66 utils_build:=$(bupdir)/utils
67 utils_source:=$(updir)/utils
68 ifeq (,${findstring $(newlib_source)/libc/include,$(CFLAGS) $(CXXFLAGS) $(CXX) $(CC)})
69 newlib_include:=-I$(newlib_source)/libc/include
70 endif
71 ifeq (,${findstring $(cygwin_source)/include,$(CFLAGS) $(CXXFLAGS) $(CXX) $(CC)})
72 cygwin_include:=-I$(cygwin_source)/include
73 endif
74
75 # Try to determine what directories are available in winsup.
76 # Attempt to properly detect missing mingw or w32api and adjust command
77 # line parameters appropriately
78
79 # nostdinc:=${shell [ -d "$(updir)/w32api" ] && echo "-nostdinc"}
80 # ifneq (,$(nostdinc))
81 nostdincxx:=-nostdinc++
82 # ifeq (,${findstring $(w32api_source),$(CFLAGS) $(CXXFLAGS) $(CXX) $(CC)})
83 w32api_include:=-I$(w32api_source)/include
84 # endif
85 # endif
86
87 mingw_include:=${shell [ -d "$(mingw_source)/include" ] && echo "-I$(mingw_source)/include"}
88 ifneq (,$(mingw_include))
89 nostdlib:=-nostdlib
90 else
91 nostdlib:=
92 endif
93
94 ifeq (,${nostdlib})
95 nostdinc:=
96 endif
97
98 INCLUDES:=-I. $(cygwin_include) -I$(cygwin_source) $(newlib_include) $(w32api_include)
99 ifdef CONFIG_DIR
100 INCLUDES+=-I$(CONFIG_DIR)
101 endif
102
103 MINGW_INCLUDES:=${mingw_include} $(w32api_include)
104 MINGW_CFLAGS:=-mno-cygwin $(MINGW_INCLUDES)
105 MINGW_CXXFLAGS:=${filter-out $(newlib_source)/%,$(CXXFLAGS)} -mno-cygwin $(MINGW_INCLUDES)
106 MINGW_LDFLAGS:=-L${mingw_build} -L${mingw_build}/mingwex
107
108 GCC_DEFAULT_OPTIONS:=$(CFLAGS_COMMON) $(CFLAGS_CONFIG) $(INCLUDES)
109
110 # Link in libc and libm from newlib
111
112 LIBC:=$(newlib_build)/libc/libc.a
113 LIBM:=$(newlib_build)/libm/libm.a
114 CRT0:=$(cygwin_build)/crt0.o
115
116 ALL_CFLAGS:=$(DEFS) $(MALLOC_DEBUG) $(CFLAGS) $(GCC_DEFAULT_OPTIONS)
117 ALL_CXXFLAGS=$(DEFS) $(MALLOC_DEBUG) $(CXXFLAGS) $(GCC_DEFAULT_OPTIONS)
118
119 ifndef PREPROCESS
120 c=-c
121 o=.o
122 else
123 c=-E -dD
124 o=.E
125 endif
126
127 libgcc:=${subst \,/,${shell $(CC_FOR_TARGET) -print-libgcc-file-name}}
128 gcc_libdir:=${word 1,${dir $(libgcc)}}
129 ifeq (,${findstring $(gcc_libdir),$(CFLAGS) $(CXXFLAGS) $(CXX) $(CC)})
130 GCC_INCLUDE:=${subst //,/,-I$(gcc_libdir)/include}
131 endif
132
133 COMPILE_CXX=$(CXX) $c $(if $($(*F)_STDINCFLAGS),,$(nostdincxx) $(nostdinc)) \
134              $(ALL_CXXFLAGS) $(GCC_INCLUDE) -fno-rtti -fno-exceptions
135 COMPILE_CC=$(CC) $c $(if $($(*F)_STDINCFLAGS),,$(nostdinc)) $(ALL_CFLAGS) $(GCC_INCLUDE)
136
137 vpath %.a       $(cygwin_build):$(w32api_lib):$(newlib_build)/libc:$(newlib_build)/libm
138
139 MAKEOVERRIDES_WORKAROUND=${wordlist 2,1,a b c}
140
141 ifneq ($(MAKEOVERRIDES_WORKAROUND),)
142     override MAKE:=$(MAKE) $(MAKEOVERRIDES)
143     MAKEOVERRIDES:=
144     export MAKEOVERRIDES
145 endif
146
147 ifdef RPATH_ENVVAR
148 VERBOSE=1
149 endif
150
151 ifneq "${findstring -B,$(COMPILE_CXX) $(COMPILE_CC)}" ""
152 VERBOSE=1
153 endif
154
155 .PRECIOUS: %.o
156
157 %.o: %.cc
158 ifdef VERBOSE
159         $(COMPILE_CXX) -o $(@D)/$(*F)$o $<
160 else
161         @echo $(CXX) $c $(CXXFLAGS) ... $(*F).cc
162         @$(COMPILE_CXX) -o $(@D)/$(*F)$o $<
163 endif
164
165 %.o: %.c
166 ifdef VERBOSE
167         $(COMPILE_CC) -o $(@D)/$(*F)$o $<
168 else
169         @echo $(CC) $c $(CFLAGS) ... $(*F).c
170         @$(COMPILE_CC) -o $(@D)/$(*F)$o $<
171 endif
172
173 $(bupdir1)/libiberty/%.o: $(updir1)/libiberty/%.c
174         @$(MAKE) -C $(@D) $(@F)
175
176 $(w32api_lib)/%.a: $(w32api_lib)/Makefile
177         @$(MAKE) --no-print-dir -C $(@D) $(@F)
178
179 $(bz2lib)/%.a: $(bz2lib)/Makefile
180         @$(MAKE) --no-print-dir -C $(@D) $(@F)
181
182 $(zlib)/%.a: $(zlib)/Makefile
183         @$(MAKE) --no-print-dir -C $(@D) $(@F)
184
185 all:
186
187 # For auto-rebuilding the Makefile
188
189 .PRECIOUS: Makefile
190
191 Makefile: Makefile.in $(srcdir)/configure.in config.status
192         $(SHELL) config.status
193
194 config.status: configure
195         $(SHELL) config.status --recheck