36b081b425d74f870710c1bf4f86717820dd8419
[reactos.git] / reactos / tools / rbuild / backend / mingw / rules.mak
1 RBUILD_fullpath=${subst <<<,,${subst $(SEP)<<<,,${subst /,$(SEP),${subst \\,$(SEP),$(1)}}<<<}}
2
3 RBUILD_compress_prefix=${subst >>>,,${subst >>>$($(2)),$$($(2)),>>>$(1)}}
4 RBUILD_compress_prefixes=${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,$(1),INTERMEDIATE},OUTPUT},CDOUTPUT},TEMPORARY},INSTALL}
5
6 RBUILD_strip_prefix=${subst >>>,,${subst >>>$($(2)),,>>>$(1)}}
7 RBUILD_strip_prefixes=${subst >>>,,${subst >>>$(SEP),,>>>${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,$(1),INTERMEDIATE},OUTPUT},CDOUTPUT},TEMPORARY},INSTALL}}}
8
9 #(source)
10 RBUILD_intermediate_path_noext=${call RBUILD_intermediate_dir,$(1)}$(SEP)$(basename $(notdir $(1)))
11
12 #(module, source)
13 RBUILD_intermediate_path_unique=${call RBUILD_intermediate_path_noext,$(2)}_$(1)
14
15 #(source)
16 RBUILD_intermediate_dir=${call RBUILD_fullpath,$(value INTERMEDIATE)$(SEP)$(dir ${call RBUILD_strip_prefixes,$(1)})}
17
18 #(source)
19 RBUILD_source_name=$(basename $(notdir $(1)))
20
21 #(source)
22 RBUILD_dir=${call RBUILD_fullpath,$(dir ${call RBUILD_compress_prefixes,$(1)})}
23
24 # FIXME: when RosBE stops hijacking HOST_CFLAGS etc., add CFLAGS etc.
25
26 #(module, flags, includes, compiler, prefix)
27 RBUILD_compiler_flags=\
28 $$(BUILTIN_$(5)$(4)FLAGS) \
29 $$(PROJECT_$(5)$(4)FLAGS) \
30 $$(MODULETYPE$($(1)_TYPE)_$(4)FLAGS) \
31 $$($(1)_$(4)FLAGS) \
32 $(2)
33
34 #(module, flags, includes, compiler, prefix)
35 RBUILD_compiler_flags_with_cpp=\
36 $(3) \
37 $$($(1)_$(4)INCLUDES) $$($(1)_CPPINCLUDES) \
38 $$(MODULETYPE$($(1)_TYPE)_$(4)INCLUDES) $$(MODULETYPE$($(1)_TYPE)_CPPINCLUDES) \
39 $$(PROJECT_$(5)$(4)INCLUDES) $$(PROJECT_$(5)CPPINCLUDES) \
40 $$(BUILTIN_$(5)$(4)INCLUDES) $$(BUILTIN_$(5)CPPINCLUDES) \
41 $$(BUILTIN_$(5)CPPDEFINES) $$(BUILTIN_$(5)CPPFLAGS) $$(BUILTIN_$(5)$(4)DEFINES) $$(BUILTIN_$(5)$(4)FLAGS) \
42 $$(PROJECT_$(5)CPPDEFINES) $$(PROJECT_$(5)CPPFLAGS) $$(PROJECT_$(5)$(4)DEFINES) $$(PROJECT_$(5)$(4)FLAGS) \
43 $$(MODULETYPE$($(1)_TYPE)_CPPDEFINES) $$(MODULETYPE$($(1)_TYPE)_CPPFLAGS) $$(MODULETYPE$($(1)_TYPE)_$(4)DEFINES) $$(MODULETYPE$($(1)_TYPE)_$(4)FLAGS) \
44 $$($(1)_CPPDEFINES) $$($(1)_CPPFLAGS) $$($(1)_$(4)DEFINES) $$($(1)_$(4)FLAGS) \
45 $(2)
46
47 #(module, flags, includes, compiler, prefix)
48 RBUILD_compiler_flags_builtin_cpp=\
49 $(3) \
50 $$($(1)_$(4)INCLUDES) $$($(1)_CPPINCLUDES) \
51 $$(MODULETYPE$($(1)_TYPE)_$(4)INCLUDES) $$(MODULETYPE$($(1)_TYPE)_CPPINCLUDES) \
52 $$(PROJECT_$(5)$(4)INCLUDES) $$(PROJECT_$(5)CPPINCLUDES) \
53 $$(BUILTIN_$(5)$(4)INCLUDES) $$(BUILTIN_$(5)CPPINCLUDES) \
54 $$(BUILTIN_$(5)CPPDEFINES) $$(BUILTIN_$(5)$(4)DEFINES) $$(BUILTIN_$(5)$(4)FLAGS) \
55 $$(PROJECT_$(5)CPPDEFINES) $$(PROJECT_$(5)$(4)DEFINES) $$(PROJECT_$(5)$(4)FLAGS) \
56 $$(MODULETYPE$($(1)_TYPE)_CPPDEFINES) $$(MODULETYPE$($(1)_TYPE)_$(4)DEFINES) $$(MODULETYPE$($(1)_TYPE)_$(4)FLAGS) \
57 $$($(1)_CPPDEFINES) $$($(1)_$(4)DEFINES) $$($(1)_$(4)FLAGS) \
58 $(2)
59
60 #(module, flags, includes, compiler, prefix)
61 RBUILD_compiler_flags_with_includes=\
62 $(3) \
63 $$($(1)_$(4)INCLUDES) $$($(1)_CPPINCLUDES) \
64 $$(MODULETYPE$($(1)_TYPE)_$(4)INCLUDES) \
65 $$(PROJECT_$(5)$(4)INCLUDES) \
66 $$(BUILTIN_$(5)$(4)INCLUDES) \
67 $$(BUILTIN_$(5)$(4)FLAGS) \
68 $$(PROJECT_$(5)$(4)FLAGS) \
69 $$(MODULETYPE$($(1)_TYPE)_$(4)FLAGS) \
70 $$($(1)_$(4)FLAGS) \
71 $(2)
72
73 #(module, flags, includes, compiler, prefix)
74 RBUILD_compiler_flags_cpp=\
75 $(3) \
76 $$($(1)_$(4)INCLUDES) $$($(1)_CPPINCLUDES) \
77 $$(MODULETYPE$($(1)_TYPE)_$(4)INCLUDES) $$(MODULETYPE$($(1)_TYPE)_CPPINCLUDES) \
78 $$(PROJECT_$(5)$(4)INCLUDES) $$(PROJECT_$(5)CPPINCLUDES) \
79 $$(BUILTIN_$(5)$(4)INCLUDES) $$(BUILTIN_$(5)CPPINCLUDES) \
80 $$(BUILTIN_$(5)CPPFLAGS) $$(BUILTIN_$(5)CPPDEFINES) $$(BUILTIN_$(5)$(4)DEFINES) \
81 $$(PROJECT_$(5)CPPFLAGS) $$(PROJECT_$(5)CPPDEFINES) $$(PROJECT_$(5)$(4)DEFINES) \
82 $$(MODULETYPE$($(1)_TYPE)_CPPFLAGS) $$(MODULETYPE$($(1)_TYPE)_CPPDEFINES) $$(MODULETYPE$($(1)_TYPE)_$(4)DEFINES) \
83 $$($(1)_CPPFLAGS) $$($(1)_CPPDEFINES) $$($(1)_$(4)DEFINES) \
84 $(2)
85
86 #(module, flags, includes)
87 RBUILD_cflags=${call RBUILD_compiler_flags_with_cpp,$(1),$(2),$(3),C}
88 RBUILD_cxxflags=${call RBUILD_compiler_flags_with_cpp,$(1),$(2),$(3),CXX}
89 RBUILD_asflags=${call RBUILD_compiler_flags_with_cpp,$(1),$(2),$(3),AS}
90 RBUILD_nasmflags=${call RBUILD_compiler_flags_builtin_cpp,$(1),$(2),$(3),NASM}
91 RBUILD_rc_pp_flags=${call RBUILD_compiler_flags_cpp,$(1),-DRC_INVOKED=1 -D__WIN32__=1 -D__FLAT__=1,$(3) -I.,RC}
92 RBUILD_rc_flags=${call RBUILD_compiler_flags_with_includes,$(1),$(2),$(3),RC}
93 RBUILD_spec_pp_flags=${call RBUILD_compiler_flags_cpp,$(1),,$(3),SPEC}
94 RBUILD_spec_flags=${call RBUILD_compiler_flags,$(1),$(2),,SPEC}
95 RBUILD_midlflags=${call RBUILD_compiler_flags_builtin_cpp,$(1),$(2),$(3),MIDL}
96 RBUILD_host_cflags=${call RBUILD_compiler_flags_with_cpp,$(1),$(2),$(3),C,HOST_}
97 RBUILD_host_cxxflags=${call RBUILD_compiler_flags_with_cpp,$(1),$(2),$(3),CXX,HOST_}
98
99 CFLAG_WERROR:=-Werror
100 CFLAG_CRTDLL:=-D_DLL -D__USE_CRTIMP
101
102 CXXFLAG_WERROR:=-Werror
103 CXXFLAG_CRTDLL:=-D_DLL -D__USE_CRTIMP
104
105 CPPFLAG_WERROR:=-Werror
106 CPPFLAG_UNICODE:=-DUNICODE -D_UNICODE
107
108 RCFLAG_UNICODE:=-DUNICODE -D_UNICODE
109
110 BUILTIN_ASDEFINES+= -D__ASM__
111 BUILTIN_CPPFLAGS+= -nostdinc
112 BUILTIN_CFLAGS+= -fno-optimize-sibling-calls
113 BUILTIN_CXXFLAGS+= -fno-optimize-sibling-calls
114 BUILTIN_RCFLAGS+= --nostdinc
115 BUILTIN_RCDEFINES+= -DRC_INVOKED
116 BUILTIN_NASMFLAGS+= -f win32
117
118 #(module, source, dependencies, cflags, output)
119 define RBUILD_GCC
120
121 $(2): $${$(1)_precondition}
122
123 ifeq ($(ROS_BUILDDEPS),full)
124
125 $(5).d: $(2) | ${call RBUILD_dir,$(5)}
126 $$(ECHO_DEPENDS)
127 $${gcc} -MF $$@ ${call RBUILD_cflags,$(1),$(4)} -M -MP -MT $$@ $$<
128
129 -include $(5).d
130
131 $(5): $(2) $(5).d $(3) | ${call RBUILD_dir,$(5)}
132 $$(ECHO_CC)
133 $${gcc} -o $$@ ${call RBUILD_cflags,$(1),$(4)} -c $$<
134
135 else
136
137 $(5): $(2) $(3) | ${call RBUILD_dir,$(5)}
138 $$(ECHO_CC)
139 $${gcc} -o $$@ ${call RBUILD_cflags,$(1),$(4)} -c $$<
140
141 endif
142
143 endef
144
145 #(module, source, dependencies, cflags, output)
146 define RBUILD_GAS
147
148 $(2): $${$(1)_precondition}
149
150 ifeq ($(ROS_BUILDDEPS),full)
151
152 $(5).d: $(2) | ${call RBUILD_dir,$(5)}
153 $$(ECHO_DEPENDS)
154 $${gas} -MF $$@ ${call RBUILD_asflags,$(1),$(4)} -M -MP -MT $$@ $$<
155
156 -include $(5).d
157
158 $(5): $(2) $(5).d $(3) | ${call RBUILD_dir,$(5)}
159 $$(ECHO_AS)
160 $${gas} -o $$@ ${call RBUILD_asflags,$(1),$(4)} -c $$<
161
162 else
163
164 $(5): $(2) $(3) | ${call RBUILD_dir,$(5)}
165 $$(ECHO_AS)
166 $${gas} -o $$@ ${call RBUILD_asflags,$(1),$(4)} -c $$<
167
168 endif
169
170 endef
171
172 #(module, source, dependencies, cflags, output)
173 define RBUILD_GPP
174
175 $(2): $${$(1)_precondition}
176
177 ifeq ($(ROS_BUILDDEPS),full)
178
179 $(5).d: $(2) | ${call RBUILD_dir,$(5)}
180 $$(ECHO_DEPENDS)
181 $${gpp} -MF $$@ ${call RBUILD_cxxflags,$(1),$(4)} -M -MP -MT $$@ $$<
182
183 -include $(5).d
184
185 $(5): $(2) $(5).d $(3) | ${call RBUILD_dir,$(5)}
186 $$(ECHO_CC)
187 $${gpp} -o $$@ ${call RBUILD_cxxflags,$(1),$(4)} -c $$<
188
189 else
190
191 $(5): $(2) $(3) | ${call RBUILD_dir,$(5)}
192 $$(ECHO_CC)
193 $${gpp} -o $$@ ${call RBUILD_cxxflags,$(1),$(4)} -c $$<
194
195 endif
196
197 endef
198
199 #(module, source, dependencies, cflags)
200 RBUILD_GCC_RULE=${call RBUILD_GCC,$(1),$(2),$(3),$(4),${call RBUILD_intermediate_path_unique,$(1),$(2)}.o}
201 RBUILD_GPP_RULE=${call RBUILD_GPP,$(1),$(2),$(3),$(4),${call RBUILD_intermediate_path_unique,$(1),$(2)}.o}
202 RBUILD_GAS_RULE=${call RBUILD_GAS,$(1),$(2),$(3),$(4),${call RBUILD_intermediate_path_unique,$(1),$(2)}.o}
203
204 #(module, source, dependencies, cflags)
205 define RBUILD_GPP_RULE
206
207 $(2): $${$(1)_precondition}
208
209 ifeq ($(ROS_BUILDDEPS),full)
210
211 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d: $(2) | ${call RBUILD_intermediate_dir,$(2)}
212 $$(ECHO_DEPENDS)
213 $${gpp} -MF $$@ ${call RBUILD_cxxflags,$(1),$(4)} -M -MP -MT $$@ $$<
214
215 -include ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d
216
217 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d $(3) | ${call RBUILD_intermediate_dir,$(2)}
218 $$(ECHO_CC)
219 $${gpp} -o $$@ ${call RBUILD_cxxflags,$(1),$(4)} -c $$<
220
221 else
222
223 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)}
224 $$(ECHO_CC)
225 $${gpp} -o $$@ ${call RBUILD_cxxflags,$(1),$(4)} -c $$<
226
227 endif
228
229 endef
230
231 #(module, source, dependencies, cflags)
232 define RBUILD_GCC_PCH_RULE
233
234 $(2): $${$(1)_precondition}
235
236 ifeq ($$(ROS_BUILDDEPS),full)
237
238 ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch.d: $(2) | ${call RBUILD_intermediate_dir,$(2)}
239 $$(ECHO_DEPENDS)
240 $${gcc} -MF $$@ ${call RBUILD_cflags,$(1),$(4)} -x c-header -M -MP -MT $$@ $$<
241
242 -include $$(intermediate_dir)$$(SEP).gch_$$(module_name)$$(SEP)$(notdir $(2)).gch.d
243
244 ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch: $(2) ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch.d $(3) | ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)
245 $$(ECHO_PCH)
246 $${gcc} -MF $$@ ${call RBUILD_cflags,$(1),$(4)} -x c-header -M -MP -MT $$@ $$<
247
248 else
249
250 ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)
251 $$(ECHO_PCH)
252 $${gcc} -MF $$@ ${call RBUILD_cflags,$(1),$(4)} -x c-header -M -MP -MT $$@ $$<
253
254 endif
255
256 endef
257
258 #(module, source, dependencies, cflags)
259 define RBUILD_GPP_PCH_RULE
260
261 $(2): $${$(1)_precondition}
262
263 ifeq ($$(ROS_BUILDDEPS),full)
264
265 ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch.d: $(2) | ${call RBUILD_intermediate_dir,$(2)}
266 $$(ECHO_DEPENDS)
267 $${gpp} -MF $$@ ${call RBUILD_cxxflags,$(1),$(4)} -x c++-header -M -MP -MT $$@ $$<
268
269 -include $$(intermediate_dir)$$(SEP).gch_$$(module_name)$$(SEP)$(notdir $(2)).gch.d
270
271 ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch: $(2) ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch.d $(3) | ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)
272 $$(ECHO_PCH)
273 $${gpp} -MF $$@ ${call RBUILD_cxxflags,$(1),$(4)} -x c++-header -M -MP -MT $$@ $$<
274
275 else
276
277 ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)$$(SEP)$(notdir $(2)).gch: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)}$$(SEP).gch_$(1)
278 $$(ECHO_PCH)
279 $${gpp} -MF $$@ ${call RBUILD_cxxflags,$(1),$(4)} -x c++-header -M -MP -MT $$@ $$<
280
281 endif
282
283 endef
284
285 #(module, source, dependencies, cflags, output)
286 define RBUILD_NASM
287
288 $(2): $${$(1)_precondition}
289
290 $(5): $(2) $(3) | ${call RBUILD_dir,$(5)}
291 $$(ECHO_NASM)
292 $${nasm} -o $$@ ${call RBUILD_nasmflags,$(1),$(4)} $$<
293
294 endef
295
296 # TODO: module_dllname -> ${call RBUILD_module_dllname,$(1)}
297
298 #(module, source, dependencies, cflags, module_dllname, output)
299 define RBUILD_WINEBUILD_DEF
300
301 $(6): $(2) $$(WINEBUILD_TARGET) | ${call RBUILD_intermediate_dir,$(6)}
302 $$(ECHO_WINEBLD)
303 $$(Q)$$(WINEBUILD_TARGET) -o $$@ --def -E $$< --filename $(5) ${call RBUILD_spec_flags,$(1),$(4)}
304
305 endef
306
307 #(module, source, dependencies, cflags, module_dllname, output)
308 define RBUILD_WINEBUILD_STUBS
309
310 $(6): $(2) $$(WINEBUILD_TARGET) | ${call RBUILD_intermediate_dir,$(6)}
311 $$(ECHO_WINEBLD)
312 $$(Q)$$(WINEBUILD_TARGET) -o $$@ --pedll $$< --filename $(5) ${call RBUILD_spec_flags,$(1),$(4)}
313
314 endef
315
316 #(module, source, dependencies, cflags, module_dllname)
317 define RBUILD_WINEBUILD_WITH_CPP_RULE
318
319 ifeq ($$(ROS_BUILDDEPS),full)
320
321 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.spec.d: $(2) | ${call RBUILD_intermediate_dir,$(2)}
322 $$(ECHO_DEPENDS)
323 $${gcc} -xc -MF $$@ ${call RBUILD_spec_pp_flags,$(1),$(4)} -M -MP -MT $$@ $$<
324
325 -include ${call RBUILD_intermediate_path_unique,$(1),$(2)}.spec.d
326
327 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.spec: $(2) ${call RBUILD_intermediate_path_unique,$(1),$(2)}.spec.d $(3) | ${call RBUILD_intermediate_dir,$(2)}
328 $$(ECHO_CPP)
329 $${gcc} -xc -E ${call RBUILD_spec_pp_flags,$(1),$(4)} $$< > $$@
330
331 else
332
333 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.spec: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)}
334 $$(ECHO_CPP)
335 $${gcc} -xc -E ${call RBUILD_spec_pp_flags,$(1),$(4)} $$< > $$@
336
337 endif
338
339 ${call RBUILD_WINEBUILD_DEF,$(1),${call RBUILD_intermediate_path_unique,$(1),$(2)}.spec,,$(4),$(5),${call RBUILD_intermediate_path_unique,$(1),$(2)}.auto.def}
340 ${call RBUILD_WINEBUILD_STUBS,$(1),${call RBUILD_intermediate_path_unique,$(1),$(2)}.spec,,$(4),$(5),${call RBUILD_intermediate_path_unique,$(1),$(2)}.stubs.c}
341 ${call RBUILD_GCC,$(1),${call RBUILD_intermediate_path_unique,$(1),$(2)}.stubs.c,,,${call RBUILD_intermediate_path_unique,$(1),$(2)}.stubs.o}
342
343 endef
344
345 #(module, source, dependencies, cflags, module_dllname)
346 define RBUILD_WINEBUILD_RULE
347
348 ${call RBUILD_WINEBUILD_DEF,$(1),$(2),$(3),$(4),$(5),${call RBUILD_intermediate_path_unique,$(1),$(2)}.auto.def}
349 ${call RBUILD_WINEBUILD_STUBS,$(1),$(2),$(3),$(4),$(5),${call RBUILD_intermediate_path_unique,$(1),$(2)}.stubs.c}
350 ${call RBUILD_GCC,$(1),${call RBUILD_intermediate_path_unique,$(1),$(2)}.stubs.c,,,${call RBUILD_intermediate_path_unique,$(1),$(2)}.stubs.o}
351
352 endef
353
354 # FIXME: wrc butchers localized strings and doesn't implement -M, so we have to use an external preprocessor
355 #(module, source, dependencies, cflags)
356 define RBUILD_WRC_RULE
357
358 $(2): $${$(1)_precondition}
359
360 ifeq ($$(ROS_BUILDDEPS),full)
361
362 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.res.d: $(2) | ${call RBUILD_intermediate_dir,$(2)} $$(TEMPORARY)
363 $$(ECHO_DEPENDS)
364 $${gcc} -xc -MF $$@ ${call RBUILD_rc_pp_flags,$(1),$(4)} -M -MP -MT $$@ $$<
365
366 -include ${call RBUILD_intermediate_path_unique,$(1),$(2)}.coff.d
367
368 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.res: $(2) ${call RBUILD_intermediate_path_unique,$(1),$(2)}.res.d $(3) $$(WRC_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
369 $$(ECHO_RC)
370 $${gcc} -xc ${call RBUILD_rc_pp_flags,$(1),$(4)} -E $$< | $$(WRC_TARGET) -o $$@ ${call RBUILD_rc_flags,$(1),$(4),-I${call RBUILD_dir,$(2)}}
371
372 else
373
374 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.res: $(2) $(3) $$(WRC_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
375 $$(ECHO_RC)
376 $${gcc} -xc ${call RBUILD_rc_pp_flags,$(1),$(4)} -E $$< | $$(WRC_TARGET) -o $$@ ${call RBUILD_rc_flags,$(1),$(4),-I${call RBUILD_dir,$(2)}}
377
378 endif
379
380 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.coff: ${call RBUILD_intermediate_path_unique,$(1),$(2)}.res | ${call RBUILD_intermediate_dir,$(2)}
381 $$(ECHO_CVTRES)
382 $${windres} -i $$< -o $$@ -J res -O coff
383
384 endef
385
386 define RBUILD_WIDL
387
388 endef
389
390 define RBUILD_WIDL_HEADER_RULE
391
392 $(2): $${$(1)_precondition}
393
394 ${call RBUILD_intermediate_path_noext,$(2)}.h: $(2) $(3) $$(WIDL_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
395 $$(ECHO_WIDL)
396 $$(Q)$$(WIDL_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H $$@ $$<
397
398 endef
399
400 #(module, source, dependencies, cflags)
401 define RBUILD_WIDL_CLIENT_RULE
402
403 $(2): $${$(1)_precondition}
404
405 ${call RBUILD_intermediate_path_noext,$(2)}_c.c ${call RBUILD_intermediate_path_noext,$(2)}_c.h: $(2) $(3) $$(WIDL_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
406 $$(ECHO_WIDL)
407 $$(Q)$$(WIDL_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_c.h -c -C ${call RBUILD_intermediate_path_noext,$(2)}_c.c $(2)
408
409 ${call RBUILD_GCC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_c.o}
410
411 endef
412
413 #(module, source, dependencies, cflags)
414 define RBUILD_WIDL_SERVER_RULE
415
416 $(2): $${$(1)_precondition}
417
418 ${call RBUILD_intermediate_path_noext,$(2)}_s.c ${call RBUILD_intermediate_path_noext,$(2)}_s.h: $(2) $(3) $$(WIDL_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
419 $$(ECHO_WIDL)
420 $$(Q)$$(WIDL_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_s.h -s -S ${call RBUILD_intermediate_path_noext,$(2)}_s.c $(2)
421
422 ${call RBUILD_GCC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_s.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_s.o}
423
424 endef
425
426 #(module, source, dependencies, cflags)
427 define RBUILD_WIDL_PROXY_RULE
428
429 $(2): $${$(1)_precondition}
430
431 ${call RBUILD_intermediate_path_noext,$(2)}_p.c ${call RBUILD_intermediate_path_noext,$(2)}_p.h: $(2) $(3) $$(WIDL_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
432 $$(ECHO_WIDL)
433 $$(Q)$$(WIDL_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_p.h -p -P ${call RBUILD_intermediate_path_noext,$(2)}_p.c $(2)
434
435 ${call RBUILD_GCC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_p.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_p.o}
436
437 endef
438
439 #(module, source, dependencies, cflags)
440 define RBUILD_WIDL_INTERFACE_RULE
441
442 $(2): $${$(1)_precondition}
443
444 ${call RBUILD_intermediate_path_noext,$(2)}_i.c: $(2) $(3) $$(WIDL_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
445 $$(ECHO_WIDL)
446 $$(Q)$$(WIDL_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -u -U $$@ $$<
447
448 ${call RBUILD_GCC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_i.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_i.o}
449
450 endef
451
452 # FIXME: this rule sucks
453 #(module, source, dependencies, cflags, bare_dependencies)
454 define RBUILD_WIDL_DLLDATA_RULE
455
456 $(2): $(3) ${$(1)_precondition} $$(WIDL_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
457 $$(ECHO_WIDL)
458 $$(Q)$$(WIDL_TARGET) ${call RBUILD_midlflags,$(1),$(4)} --dlldata-only --dlldata=$(2) $(5)
459
460 ${call RBUILD_GCC,$(1),$(2),,,${call RBUILD_intermediate_path_noext,$(2)}.o}
461
462 endef
463
464 #(module, source, dependencies, cflags)
465 define RBUILD_WIDL_TLB_RULE
466
467 $(2): $${$(1)_precondition}
468
469 ${call RBUILD_intermediate_dir,$(2)}$$(SEP)$(1).tlb: $(2) $(3) $$(WIDL_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
470 $$(ECHO_WIDL)
471 $$(Q)$$(WIDL_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -t -T $$@ $$<
472
473 endef
474
475 #(module, source, dependencies, cflags)
476 define RBUILD_HOST_GCC_RULE
477
478 $(2): $${$(1)_precondition}
479
480 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)}
481 $$(ECHO_HOSTCC)
482 $${host_gcc} -o $$@ ${call RBUILD_host_cflags,$(1),$(4)} -c $$<
483
484 endef
485
486 #(module, source, dependencies, cflags)
487 define RBUILD_HOST_GPP_RULE
488
489 $(2): $${$(1)_precondition}
490
491 ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)}
492 $$(ECHO_HOSTCC)
493 $${host_gpp} -o $$@ ${call RBUILD_host_cxxflags,$(1),$(4)} -c $$<
494
495 endef
496
497 # EOF