Merge 12735:15568 from xmlbuildsystem branch
[reactos.git] / reactos / Makefile
1 # Accepted environment variables:
2 #
3 # ROS_PREFIX
4 # This variable specifies the prefix of the MinGW installation. On Windows
5 # a prefix is usually not needed, but on linux it is usually "mingw32-". If
6 # not present and no executable named "gcc" can be found, then the prefix is
7 # assumed to be "mingw32-".
8 #
9 # ROS_INTERMEDIATE
10 # This variable controls where to put intermediate files. Intermediate
11 # files are generated files that are needed to generate the final
12 # output files. Examples of intermediate files include *.o, *.a, and
13 # *.coff. N.B. Don't put a path separator at the end. The variable
14 # defaults to .\obj-i386.
15 #
16 # ROS_OUTPUT
17 # This variable controls where to put output files. Output files are
18 # generated files that makes up the result of the build process.
19 # Examples of output files include *.exe, *.dll, and *.sys. N.B. Don't
20 # put a path separator at the end. The variable defaults to .\output-i386.
21 #
22 # ROS_TEMPORARY
23 # This variable controls where to put temporary files. Temporary files
24 # are (usually small) generated files that are needed to generate the
25 # intermediate or final output files. Examples of temporary files include
26 # *.rci (preprocessed .rc files for wrc), *.tmp, and *.exp. N.B. Don't put
27 # a path separator at the end. The variable defaults to the current
28 # directory.
29 #
30 # ROS_INSTALL
31 # This variable controls where to install output files to when using
32 # 'make install'. N.B. Don't put a path separator at the end. The variable
33 # defaults to .\reactos.
34 #
35 # ROS_BUILDMAP
36 # This variable controls if map files are to be generated for executable
37 # output files. Map files have the extension .map. The value can be either
38 # full (to build map files with assembly code), yes (to build map files
39 # without source code) or no (to not build any map files). The variable
40 # defaults to no.
41 #
42 # ROS_BUILDNOSTRIP
43 # This variable controls if non-symbol-stripped versions are to be built
44 # of executable output files. Non-symbol-stripped executable output files
45 # have .nostrip added to the filename just before the extension. The value
46 # can be either yes (to build non-symbol-stripped versions of executable
47 # output files) or no (to not build non-symbol-stripped versions of
48 # executable output files). The variable defaults to no.
49 #
50 # ROS_RBUILDFLAGS
51 # Pass parameters to rbuild.
52
53 .PHONY: all
54 .PHONY: clean
55 all: makefile.auto
56
57 .SUFFIXES:
58
59 ifeq ($(HOST),)
60 ifeq ($(word 1,$(shell gcc -dumpmachine)),mingw32)
61 HOST=mingw32-windows
62 else
63 HOST=mingw32-linux
64 endif
65 endif
66
67 # Default to half-verbose mode
68 ifeq ($(VERBOSE),no)
69 Q = @
70 HALFVERBOSEECHO = no
71 BUILDNO_QUIET = -q
72 else
73 ifeq ($(VERBOSE),yes)
74 Q =
75 HALFVERBOSEECHO = no
76 BUILDNO_QUIET =
77 else
78 Q = @
79 HALFVERBOSEECHO = yes
80 BUILDNO_QUIET = -q
81 endif
82 endif
83 ifeq ($(HALFVERBOSEECHO),yes)
84 ECHO_CP =@echo [COPY] $@
85 ECHO_MKDIR =@echo [MKDIR] $@
86 ECHO_BUILDNO =@echo [BUILDNO] $@
87 ECHO_INVOKE =@echo [INVOKE] $<
88 ECHO_PCH =@echo [PCH] $@
89 ECHO_CC =@echo [CC] $<
90 ECHO_GAS =@echo [GAS] $<
91 ECHO_NASM =@echo [NASM] $<
92 ECHO_AR =@echo [AR] $@
93 ECHO_WINEBLD =@echo [WINEBLD] $@
94 ECHO_WRC =@echo [WRC] $@
95 ECHO_WIDL =@echo [WIDL] $@
96 ECHO_BIN2RES =@echo [BIN2RES] $<
97 ECHO_DLLTOOL =@echo [DLLTOOL] $@
98 ECHO_LD =@echo [LD] $@
99 ECHO_NM =@echo [NM] $@
100 ECHO_OBJDUMP =@echo [OBJDUMP] $@
101 ECHO_RBUILD =@echo [RBUILD] $@
102 ECHO_RSYM =@echo [RSYM] $@
103 ECHO_WMC =@echo [WMC] $@
104 ECHO_NCI =@echo [NCI] $@
105 ECHO_CABMAN =@echo [CABMAN] $<
106 ECHO_CDMAKE =@echo [CDMAKE] $@
107 ECHO_MKHIVE =@echo [MKHIVE] $@
108 ECHO_REGTESTS=@echo [REGTESTS] $@
109 ECHO_TEST =@echo [TEST] $@
110 else
111 ECHO_CP =
112 ECHO_MKDIR =
113 ECHO_BUILDNO =
114 ECHO_INVOKE =
115 ECHO_PCH =
116 ECHO_CC =
117 ECHO_GAS =
118 ECHO_NASM =
119 ECHO_AR =
120 ECHO_WINEBLD =
121 ECHO_WRC =
122 ECHO_WIDL =
123 ECHO_BIN2RES =
124 ECHO_DLLTOOL =
125 ECHO_LD =
126 ECHO_NM =
127 ECHO_OBJDUMP =
128 ECHO_RBUILD =
129 ECHO_RSYM =
130 ECHO_WMC =
131 ECHO_NCI =
132 ECHO_CABMAN =
133 ECHO_CDMAKE =
134 ECHO_MKHIVE =
135 ECHO_REGTESTS=
136 ECHO_TEST =
137 endif
138
139
140 host_gcc = $(Q)gcc
141 host_gpp = $(Q)g++
142 host_ld = $(Q)ld
143 host_ar = $(Q)ar
144 host_objcopy = $(Q)objcopy
145 ifeq ($(HOST),mingw32-linux)
146 EXEPREFIX = ./
147 EXEPOSTFIX =
148 SEP = /
149 mkdir = -$(Q)mkdir -p
150 gcc = $(Q)mingw32-gcc
151 gpp = $(Q)mingw32-g++
152 ld = $(Q)mingw32-ld
153 nm = $(Q)mingw32-nm
154 objdump = $(Q)mingw32-objdump
155 ar = $(Q)mingw32-ar
156 objcopy = $(Q)mingw32-objcopy
157 dlltool = $(Q)mingw32-dlltool
158 windres = $(Q)mingw32-windres
159 rm = $(Q)rm -f
160 cp = $(Q)cp
161 NUL = /dev/null
162 else # mingw32-windows
163 EXEPREFIX =
164 EXEPOSTFIX = .exe
165 ROS_EMPTY =
166 SEP = \$(ROS_EMPTY)
167 mkdir = -$(Q)mkdir
168 gcc = $(Q)gcc
169 gpp = $(Q)g++
170 ld = $(Q)ld
171 nm = $(Q)nm
172 objdump = $(Q)objdump
173 ar = $(Q)ar
174 objcopy = $(Q)objcopy
175 dlltool = $(Q)dlltool
176 windres = $(Q)windres
177 rm = $(Q)del /f /q
178 cp = $(Q)copy /y
179 NUL = NUL
180 endif
181
182 ifneq ($(ROS_INTERMEDIATE),)
183 INTERMEDIATE := $(ROS_INTERMEDIATE)
184 else
185 INTERMEDIATE := obj-i386
186 endif
187 INTERMEDIATE_ := $(INTERMEDIATE)$(SEP)
188
189 ifneq ($(ROS_OUTPUT),)
190 OUTPUT := $(ROS_OUTPUT)
191 else
192 OUTPUT := output-i386
193 endif
194 OUTPUT_ := $(OUTPUT)$(SEP)
195
196 ifneq ($(ROS_TEMPORARY),)
197 TEMPORARY := $(ROS_TEMPORARY)
198 else
199 TEMPORARY :=
200 endif
201 TEMPORARY_ := $(TEMPORARY)$(SEP)
202
203 ifneq ($(ROS_INSTALL),)
204 INSTALL := $(ROS_INSTALL)
205 else
206 INSTALL := reactos
207 endif
208 INSTALL_ := $(INSTALL)$(SEP)
209
210 $(INTERMEDIATE):
211 ${mkdir} $@
212
213 ifneq ($(INTERMEDIATE),$(OUTPUT))
214 $(OUTPUT):
215 ${mkdir} $@
216 endif
217
218
219 NTOSKRNL_MC = ntoskrnl$(SEP)ntoskrnl.mc
220 KERNEL32_MC = lib$(SEP)kernel32$(SEP)kernel32.mc
221 BUILDNO_H = include$(SEP)reactos$(SEP)buildno.h
222 BUGCODES_H = include$(SEP)reactos$(SEP)bugcodes.h
223 BUGCODES_RC = ntoskrnl$(SEP)bugcodes.rc
224 ERRCODES_H = include$(SEP)reactos$(SEP)errcodes.h
225 ERRCODES_RC = lib$(SEP)kernel32$(SEP)errcodes.rc
226
227 include lib/lib.mak
228 include tools/tools.mak
229 -include makefile.auto
230
231 PREAUTO := \
232 $(BIN2RES_TARGET) \
233 $(BUILDNO_H) \
234 $(BUGCODES_H) \
235 $(BUGCODES_RC) \
236 $(ERRCODES_H) \
237 $(ERRCODES_RC) \
238 $(NCI_SERVICE_FILES)
239
240 makefile.auto: $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES)
241 $(ECHO_RBUILD)
242 $(Q)$(RBUILD_TARGET) $(ROS_RBUILDFLAGS) mingw
243
244
245 $(BUGCODES_H) $(BUGCODES_RC): $(WMC_TARGET) $(NTOSKRNL_MC)
246 $(ECHO_WMC)
247 $(Q)$(WMC_TARGET) -i -H $(BUGCODES_H) -o $(BUGCODES_RC) $(NTOSKRNL_MC)
248
249 $(ERRCODES_H) $(ERRCODES_RC): $(WMC_TARGET) $(KERNEL32_MC)
250 $(ECHO_WMC)
251 $(Q)$(WMC_TARGET) -i -H $(ERRCODES_H) -o $(ERRCODES_RC) $(KERNEL32_MC)
252
253 .PHONY: makefile_auto_clean
254 makefile_auto_clean:
255 -@$(rm) makefile.auto $(PREAUTO) 2>$(NUL)
256
257 .PHONY: clean
258 clean: makefile_auto_clean