f7892750bb2497be768a97ebb6211cb80d384e74
[reactos.git] / reactos / ntoskrnl / Makefile
1 # $Id: Makefile,v 1.46 2001/07/12 17:17:06 ekohl Exp $
2 #
3 # ReactOS Operating System
4 #
5
6 #
7 # Path to the directory containing the root makefile
8 #
9 PATH_TO_TOP := ..
10
11 #
12 # Include details of the kernel configuration
13 #
14
15 include config
16
17 #
18 #
19 #
20 CONFIG :=
21
22 ifeq ($(DBG), 1)
23 CFLAGS_DBG := -g
24 CONFIG += DBG
25 LINKER_SCRIPT := ntoskrnl.lnk
26 STRIP_FLAGS := -Wl,-s
27 else
28 CFLAGS_DBG :=
29 LINKER_SCRIPT := ntoskrnl.lnk
30 STRIP_FLAGS := -Wl,-s
31 endif
32
33 ifeq ($(KDBG), 1)
34 OBJECTS_KDBG := dbg/kdb.o dbg/kdb_keyboard.o dbg/rdebug.o \
35 dbg/i386/kdb_help.o
36 CONFIG += KDBG
37 else
38 OBJECTS_KDBG :=
39 endif
40
41 ifeq ($(MP), 1)
42 CONFIG += MP
43 else
44 CONFIG += UP
45 endif
46
47 ifeq ($(ACPI), 1)
48 CONFIG += ACPI
49 else
50 CONFIG +=
51 endif
52
53 TARGETNAME := ntoskrnl
54
55 OBJECTS_PATH = objects
56
57 ASFLAGS = -Iinclude
58 CFLAGS = -Iinclude -D__NTOSKRNL__ $(CFLAGS_DBG) -Wall -Werror
59
60 include $(PATH_TO_TOP)/rules.mak
61
62 all: $(EXE_PREFIX)depends$(EXE_POSTFIX) include/internal/config.h \
63 $(OBJECTS_PATH) \
64 $(TARGETNAME).nostrip.exe \
65 $(TARGETNAME).exe \
66 $(TARGETNAME).sym
67
68 $(EXE_PREFIX)depends$(EXE_POSTFIX): depends.c
69 $(HOST_CC) -o depends$(EXE_POSTFIX) depends.c
70
71 #
72 # Architecture specific Makefile
73 # Defines $(OBJECTS_ARCH)
74 #
75 include Makefile.$(ARCH)
76
77 # System API (Nt/Zw)
78 OBJECTS_NT = \
79 nt/channel.o \
80 nt/evtpair.o \
81 nt/mutant.o \
82 nt/misc.o \
83 nt/nt.o \
84 nt/ntevent.o \
85 nt/ntsem.o \
86 nt/nttimer.o \
87 nt/plugplay.o \
88 nt/profile.o \
89 nt/zw.o \
90 nt/vdm.o
91
92 # Run-Time Library (Rtl)
93 OBJECTS_RTL = \
94 rtl/atom.o \
95 rtl/bitmap.o \
96 rtl/ctype.o \
97 rtl/error.o \
98 rtl/handle.o \
99 rtl/largeint.o \
100 rtl/mem.o \
101 rtl/memchr.o \
102 rtl/memcpy.o \
103 rtl/memmove.o \
104 rtl/memset.o \
105 rtl/message.o \
106 rtl/nls.o \
107 rtl/qsort.o \
108 rtl/regio.o \
109 rtl/sprintf.o \
110 rtl/stdlib.o \
111 rtl/string.o \
112 rtl/swprintf.o \
113 rtl/time.o \
114 rtl/timezone.o \
115 rtl/unicode.o \
116 rtl/wstring.o \
117 rtl/bitops.o \
118 rtl/memcmp.o
119
120 # Kernel (Ke)
121 OBJECTS_KE = \
122 ke/apc.o \
123 ke/bug.o \
124 ke/catch.o \
125 ke/critical.o \
126 ke/dpc.o \
127 ke/error.o \
128 ke/event.o \
129 ke/kqueue.o \
130 ke/main.o \
131 ke/mutex.o \
132 ke/process.o \
133 ke/sem.o \
134 ke/spinlock.o \
135 ke/timer.o \
136 ke/wait.o \
137 ke/kthread.o
138
139 # Memory Manager (Mm)
140 OBJECTS_MM = \
141 mm/aspace.o \
142 mm/cont.o \
143 mm/freelist.o \
144 mm/iospace.o \
145 mm/marea.o \
146 mm/mdl.o \
147 mm/mm.o \
148 mm/ncache.o \
149 mm/npool.o \
150 mm/pagfault.o \
151 mm/pagefile.o \
152 mm/paging.o \
153 mm/pool.o \
154 mm/ppool.o \
155 mm/section.o \
156 mm/virtual.o \
157 mm/pager.o \
158 mm/wset.o \
159 mm/mminit.o \
160 mm/kmap.o \
161 mm/mpw.o \
162 mm/pageop.o
163
164 # I/O Subsystem (Io)
165 OBJECTS_IO = \
166 io/adapter.o \
167 io/buildirp.o \
168 io/cancel.o \
169 io/cleanup.o \
170 io/cntrller.o \
171 io/create.o \
172 io/device.o \
173 io/dir.o \
174 io/drvlck.o \
175 io/errlog.o \
176 io/error.o \
177 io/event.o \
178 io/file.o \
179 io/flush.o \
180 io/fs.o \
181 io/iocomp.o \
182 io/ioctrl.o \
183 io/iomgr.o \
184 io/irp.o \
185 io/lock.o \
186 io/mailslot.o \
187 io/mdl.o \
188 io/npipe.o \
189 io/page.o \
190 io/pnpmgr.o \
191 io/pnproot.o \
192 io/process.o \
193 io/queue.o \
194 io/resource.o \
195 io/rw.o \
196 io/share.o \
197 io/shutdown.o \
198 io/symlink.o \
199 io/timer.o \
200 io/vpb.o \
201 io/xhaldisp.o \
202 io/xhaldrv.o
203
204 # Object Manager (Ob)
205 OBJECTS_OB = \
206 ob/dirobj.o \
207 ob/handle.o \
208 ob/namespc.o \
209 ob/ntobj.o \
210 ob/object.o \
211 ob/security.o
212
213 # Process Manager (Ps)
214 OBJECTS_PS = \
215 ps/create.o \
216 ps/idle.o \
217 ps/kill.o \
218 ps/locale.o \
219 ps/process.o \
220 ps/psmgr.o \
221 ps/thread.o \
222 ps/tinfo.o \
223 ps/debug.o \
224 ps/suspend.o
225
226 # Executive Subsystem (Ex)
227 OBJECTS_EX = \
228 ex/callback.o \
229 ex/fmutex.o \
230 ex/init.o \
231 ex/interlck.o \
232 ex/list.o \
233 ex/lookas.o \
234 ex/napi.o \
235 ex/power.o \
236 ex/resource.o \
237 ex/time.o \
238 ex/sysinfo.o \
239 ex/win32k.o \
240 ex/work.o \
241 ex/zone.o
242
243 # Installable File System Run-Time Library (FsRtl)
244 OBJECTS_FS = \
245 fs/dbcsname.o \
246 fs/filelock.o \
247 fs/mcb.o \
248 fs/mdl.o \
249 fs/name.o \
250 fs/notify.o \
251 fs/oplock.o \
252 fs/pool.o \
253 fs/tunnel.o \
254 fs/unc.o \
255 fs/util.o
256
257 # Security Subsystem
258 OBJECTS_SE = \
259 se/access.o \
260 se/acl.o \
261 se/luid.o \
262 se/priv.o \
263 se/sd.o \
264 se/semgr.o \
265 se/sid.o \
266 se/token.o
267
268 # Configuration Manager (Registry)
269 OBJECTS_CM = \
270 cm/registry.o \
271 cm/ntfunc.o \
272 cm/rtlfunc.o \
273 cm/regfile.o \
274 cm/regobj.o
275
276 # Debugger Support (Dbg)
277 OBJECTS_DBG = \
278 dbg/dbgctrl.o \
279 dbg/errinfo.o \
280 dbg/print.o \
281 dbg/user.o \
282 $(OBJECTS_KDBG)
283
284 # Loader
285 OBJECTS_LDR = \
286 ldr/init.o \
287 ldr/loader.o \
288 ldr/resource.o \
289 ldr/rtl.o \
290 ldr/sysdll.o \
291 ldr/userldr.o
292
293 # Local Procedure Call (Lpc)
294 OBJECTS_LPC = \
295 lpc/close.o \
296 lpc/complete.o \
297 lpc/connect.o \
298 lpc/create.o \
299 lpc/listen.o \
300 lpc/port.o \
301 lpc/query.o \
302 lpc/queue.o \
303 lpc/receive.o \
304 lpc/reply.o \
305 lpc/send.o
306
307 # Nation Language Support Library (Nls)
308 OBJECTS_NLS = nls/nls.o
309
310 # Power Management (Po)
311 OBJECTS_PO = po/power.o
312
313 # Cache Manager (Cc)
314 OBJECTS_CC = \
315 cc/cacheman.o \
316 cc/view.o
317
318 # Kernel Debugger Support (Kd)
319 OBJECTS_KD = \
320 kd/kdebug.o \
321 kd/service.o \
322 kd/dlog.o
323
324 C_OBJECTS := $(OBJECTS_NT) $(OBJECTS_HAL) $(OBJECTS_MM) $(OBJECTS_ARCH) \
325 $(OBJECTS_IO) $(OBJECTS_KE) $(OBJECTS_OB) \
326 $(OBJECTS_PS) $(OBJECTS_EX) $(OBJECTS_CC) $(OBJECTS_FS) $(OBJECTS_SE) \
327 $(OBJECTS_DBG) $(OBJECTS_CM) $(OBJECTS_LDR) $(OBJECTS_LPC) \
328 $(OBJECTS_PO) $(OBJECTS_KD) $(OBJECTS_RTL)
329
330 D_FILES := $(filter-out ex/napi.%, $(filter-out nt/zw.%, $(C_OBJECTS:.o=.d)))
331 D1_FILES := $(join $(dir $(D_FILES)), $(addprefix ., $(notdir $(D_FILES))))
332
333 # Resources
334 OBJECTS_RESOURCE = \
335 $(TARGETNAME).coff
336
337 # IMPORTS/EXPORTS
338 IE_DATA = \
339 $(TARGETNAME).def \
340 $(TARGETNAME).edf
341
342 $(OBJECTS_PATH):
343 mkdir $(OBJECTS_PATH)
344
345 #
346 # Build subsystem intermediate objects
347 #
348 $(OBJECTS_PATH)/hal.o: $(OBJECTS_HAL)
349 $(LD) \
350 -r \
351 -o $(OBJECTS_PATH)/hal.o \
352 $(OBJECTS_HAL)
353
354 $(OBJECTS_PATH)/arch.o: $(OBJECTS_ARCH)
355 $(LD) -r -o $(OBJECTS_PATH)/arch.o $(OBJECTS_ARCH)
356
357 $(OBJECTS_PATH)/io.o: $(OBJECTS_IO)
358 $(LD) \
359 -r \
360 -o $(OBJECTS_PATH)/io.o \
361 $(OBJECTS_IO)
362
363 $(OBJECTS_PATH)/ke.o: $(OBJECTS_KE)
364 $(LD) \
365 -r \
366 -o $(OBJECTS_PATH)/ke.o \
367 $(OBJECTS_KE)
368
369 $(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL)
370 $(LD) \
371 -r \
372 -o $(OBJECTS_PATH)/rtl.o \
373 $(OBJECTS_RTL)
374
375 $(OBJECTS_PATH)/mm.o: $(OBJECTS_MM)
376 $(LD) \
377 -r \
378 -o $(OBJECTS_PATH)/mm.o \
379 $(OBJECTS_MM)
380
381 $(OBJECTS_PATH)/ob.o: $(OBJECTS_OB)
382 $(LD) \
383 -r \
384 -o $(OBJECTS_PATH)/ob.o \
385 $(OBJECTS_OB)
386
387 $(OBJECTS_PATH)/ps.o: $(OBJECTS_PS)
388 $(LD) \
389 -r \
390 -o $(OBJECTS_PATH)/ps.o \
391 $(OBJECTS_PS)
392
393 $(OBJECTS_PATH)/ex.o: $(OBJECTS_EX)
394 $(LD) \
395 -r \
396 -o $(OBJECTS_PATH)/ex.o \
397 $(OBJECTS_EX)
398
399 $(OBJECTS_PATH)/fs.o: $(OBJECTS_FS)
400 $(LD) \
401 -r \
402 -o $(OBJECTS_PATH)/fs.o \
403 $(OBJECTS_FS)
404
405 $(OBJECTS_PATH)/se.o: $(OBJECTS_SE)
406 $(LD) \
407 -r \
408 -o $(OBJECTS_PATH)/se.o \
409 $(OBJECTS_SE)
410
411 $(OBJECTS_PATH)/cm.o: $(OBJECTS_CM)
412 $(LD) \
413 -r \
414 -o $(OBJECTS_PATH)/cm.o \
415 $(OBJECTS_CM)
416
417 $(OBJECTS_PATH)/dbg.o: $(OBJECTS_DBG)
418 $(LD) \
419 -r \
420 -o $(OBJECTS_PATH)/dbg.o \
421 $(OBJECTS_DBG)
422
423 $(OBJECTS_PATH)/ldr.o: $(OBJECTS_LDR)
424 $(LD) \
425 -r \
426 -o $(OBJECTS_PATH)/ldr.o \
427 $(OBJECTS_LDR)
428
429 $(OBJECTS_PATH)/lpc.o: $(OBJECTS_LPC)
430 $(LD) \
431 -r \
432 -o $(OBJECTS_PATH)/lpc.o \
433 $(OBJECTS_LPC)
434
435 $(OBJECTS_PATH)/nls.o: $(OBJECTS_NLS)
436 $(LD) \
437 -r \
438 -o $(OBJECTS_PATH)/nls.o \
439 $(OBJECTS_NLS)
440
441 $(OBJECTS_PATH)/nt.o: $(OBJECTS_NT)
442 $(LD) \
443 -r \
444 -o $(OBJECTS_PATH)/nt.o \
445 $(OBJECTS_NT)
446
447 $(OBJECTS_PATH)/po.o: $(OBJECTS_PO)
448 $(LD) \
449 -r \
450 -o $(OBJECTS_PATH)/po.o \
451 $(OBJECTS_PO)
452
453 $(OBJECTS_PATH)/cc.o: $(OBJECTS_CC)
454 $(LD) \
455 -r \
456 -o $(OBJECTS_PATH)/cc.o \
457 $(OBJECTS_CC)
458
459 $(OBJECTS_PATH)/kd.o: $(OBJECTS_KD)
460 $(LD) \
461 -r \
462 -o $(OBJECTS_PATH)/kd.o \
463 $(OBJECTS_KD)
464
465 $(TARGETNAME).coff: $(TARGETNAME).rc ../include/reactos/resource.h
466
467
468 # Note: arch.o MUST be the first file!!!
469 OBJECTS := \
470 $(OBJECTS_PATH)/arch.o \
471 $(OBJECTS_PATH)/ke.o \
472 $(OBJECTS_PATH)/hal.o \
473 $(OBJECTS_PATH)/cc.o \
474 $(OBJECTS_PATH)/cm.o \
475 $(OBJECTS_PATH)/dbg.o \
476 $(OBJECTS_PATH)/ex.o \
477 $(OBJECTS_PATH)/lpc.o \
478 $(OBJECTS_PATH)/fs.o \
479 $(OBJECTS_PATH)/io.o \
480 $(OBJECTS_PATH)/kd.o \
481 $(OBJECTS_PATH)/ldr.o \
482 $(OBJECTS_PATH)/mm.o \
483 $(OBJECTS_PATH)/nls.o \
484 $(OBJECTS_PATH)/nt.o \
485 $(OBJECTS_PATH)/ob.o \
486 $(OBJECTS_PATH)/po.o \
487 $(OBJECTS_PATH)/ps.o \
488 $(OBJECTS_PATH)/rtl.o \
489 $(OBJECTS_PATH)/se.o \
490 $(OBJECTS_RESOURCE)
491
492
493 ifeq ($(DOSCLI),yes)
494 CLEAN_FILES = $(OBJECTS_PATH)\*.o cc\*.o cm\*.o dbg\*.o dbg\i386\*.o ex\*.o hal\x86\*.o io\*.o \
495 ke\*.o ldr\*.o mm\*.o nt\*.o ob\*.o ps\*.o rtl\*.o se\*.o \
496 ke\i386\*.o mm\i386\*.o fs\*.o po\*.o nls\*.o lpc\*.o \
497 kd\*.o $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
498 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff $(D1_FILES)
499 else
500 CLEAN_FILES = $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o dbg/i386/*.o ex/*.o hal/x86/*.o io/*.o \
501 ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o rtl/*.o se/*.o \
502 ke/i386/*.o mm/i386/*.o fs/*.o po/*.o nls/*.o lpc/*.o \
503 kd/*.o $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \
504 $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym $(TARGETNAME).coff $(D1_FILES)
505 endif
506
507
508 $(TARGETNAME).nostrip.exe: $(TARGETNAME).o $(TARGETNAME).a $(IE_DATA)
509 $(CC) \
510 -Wl,-T,ntoskrnl.lnk \
511 -nostartfiles -nostdlib \
512 -mdll \
513 -o junk.tmp \
514 -Wl,--subsystem,native \
515 -Wl,--image-base,0xc0000000 \
516 -Wl,--file-alignment,0x1000 \
517 -Wl,--section-alignment,0x1000 \
518 -Wl,--base-file,base.tmp \
519 $(TARGETNAME).o -lgcc
520 - $(RM) junk.tmp
521 $(DLLTOOL) \
522 --dllname $(TARGETNAME).exe \
523 --base-file base.tmp \
524 --output-exp temp.exp \
525 --def $(TARGETNAME).edf \
526 --kill-at
527 - $(RM) base.tmp
528 $(CC) \
529 -nostartfiles -nostdlib \
530 -Wl,-T,ntoskrnl.lnk \
531 -mdll \
532 -o $(TARGETNAME).nostrip.exe \
533 -Wl,--subsystem,native \
534 -Wl,--image-base,0xc0000000 \
535 -Wl,--file-alignment,0x1000 \
536 -Wl,--section-alignment,0x1000 \
537 -Wl,temp.exp \
538 $(TARGETNAME).o -lgcc
539 - $(RM) temp.exp
540
541 $(TARGETNAME).exe: $(TARGETNAME).o $(TARGETNAME).a $(LINKER_SCRIPT)
542 $(CC) \
543 -Wl,-T,$(LINKER_SCRIPT) \
544 -nostartfiles -nostdlib \
545 -mdll \
546 -o junk.tmp \
547 -Wl,--subsystem,native \
548 -Wl,--image-base,0xc0000000 \
549 -Wl,--file-alignment,0x1000 \
550 -Wl,--section-alignment,0x1000 \
551 -Wl,--base-file,base.tmp \
552 $(TARGETNAME).o -lgcc
553 - $(RM) junk.tmp
554 $(DLLTOOL) \
555 --dllname $(TARGETNAME).exe \
556 --base-file base.tmp \
557 --output-exp temp.exp \
558 --def $(TARGETNAME).edf \
559 --kill-at
560 - $(RM) base.tmp
561 $(CC) \
562 -Wl,-T,$(LINKER_SCRIPT) $(STRIP_FLAGS)\
563 -nostartfiles -nostdlib \
564 -mdll \
565 -o $(TARGETNAME).exe \
566 -Wl,--subsystem,native \
567 -Wl,--image-base,0xc0000000 \
568 -Wl,--file-alignment,0x1000 \
569 -Wl,--section-alignment,0x1000 \
570 -Wl,temp.exp \
571 $(TARGETNAME).o -lgcc
572 - $(RM) temp.exp
573
574 $(TARGETNAME).dbg.o: $(TARGETNAME).o
575 $(STRIP) --strip-debug -o $(TARGETNAME).dbg.o $(TARGETNAME).o
576
577 $(TARGETNAME).dbg: $(TARGETNAME).dbg.o $(TARGETNAME).a $(TARGETNAME).dbg.lnk
578 $(CC) \
579 -Wl,-T,$(TARGETNAME).dbg.lnk \
580 -nostartfiles -nostdlib \
581 -mdll \
582 -o junk.tmp \
583 -Wl,--subsystem,native \
584 -Wl,--image-base,0xc0000000 \
585 -Wl,--file-alignment,0x1000 \
586 -Wl,--section-alignment,0x1000 \
587 -Wl,--base-file,base.tmp \
588 $(TARGETNAME).dbg.o -lgcc
589 - $(RM) junk.tmp
590 $(DLLTOOL) \
591 --dllname $(TARGETNAME).dbg \
592 --base-file base.tmp \
593 --output-exp temp.exp \
594 --def $(TARGETNAME).edf \
595 --kill-at
596 - $(RM) base.tmp
597 $(CC) \
598 -Wl,-T,$(TARGETNAME).dbg.lnk \
599 -nostartfiles -nostdlib \
600 -mdll \
601 -o $(TARGETNAME).dbg \
602 -Wl,--subsystem,native \
603 -Wl,--image-base,0xc0000000 \
604 -Wl,--file-alignment,0x1000 \
605 -Wl,--section-alignment,0x1000 \
606 -Wl,temp.exp \
607 $(TARGETNAME).dbg.o -lgcc
608 - $(RM) temp.exp
609
610 $(TARGETNAME).sym: $(TARGETNAME).nostrip.exe
611 $(NM) --numeric-sort $(TARGETNAME).nostrip.exe > $(TARGETNAME).sym
612
613 $(TARGETNAME).o: $(OBJECTS)
614 $(LD) \
615 -r \
616 -o $(TARGETNAME).o \
617 $(OBJECTS)
618
619 $(TARGETNAME).a: $(TARGETNAME).def
620 $(DLLTOOL) \
621 --dllname $(TARGETNAME).exe \
622 --def $(TARGETNAME).def \
623 --output-lib $(TARGETNAME).a \
624 --kill-at
625
626 clean: $(CLEAN_FILES:%=%_clean)
627
628 $(CLEAN_FILES:%=%_clean): %_clean:
629 - $(RM) $*
630
631 .PHONY: clean $(CLEAN_FILES:%=%_clean)
632
633 install: $(FLOPPY_DIR)/$(TARGETNAME).exe
634
635 $(FLOPPY_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
636 $(CP) $(TARGETNAME).exe $(FLOPPY_DIR)/$(TARGETNAME).exe
637
638 .PHONY: install
639
640 dist: ../$(DIST_DIR)/$(TARGETNAME).exe
641
642 ../$(DIST_DIR)/$(TARGETNAME).exe: $(TARGETNAME).exe
643 $(CP) $(TARGETNAME).exe ../$(DIST_DIR)/$(TARGETNAME).exe
644
645 .PHONY: dist
646
647 ex/napi.o: ex/napi.c ../include/ntdll/napi.h
648
649 ke/main.o: ke/main.c ../include/reactos/buildno.h
650
651 mkconfig$(EXE_SUFFIX): mkconfig.c
652 $(HOST_CC) -g -o mkconfig$(EXE_SUFFIX) mkconfig.c
653
654 config:
655 $(EXE_PREFIX)mkconfig$(EXE_SUFFIX) include/internal/config.h $(CONFIG)
656
657 include/internal/config.h: config mkconfig$(EXE_SUFFIX)
658 $(EXE_PREFIX)mkconfig$(EXE_SUFFIX) include/internal/config.h$(CONFIG)
659
660 ifneq ($(MAKECMDGOALS),clean)
661 include $(D1_FILES)
662 endif
663
664 .%.d: %.c $(EXE_PREFIX)depends$(EXE_POSTFIX)
665 $(CC) $(CFLAGS) -M $< | $(EXE_PREFIX)depends$(EXE_POSTFIX) $(@D) $@
666
667 .%.d: %.s
668 $(CC) $(CFLAGS) -M $< | $(EXE_PREFIX)depends$(EXE_POSTFIX) $(@D) $@
669
670 .%.d: %.S
671 $(CC) $(CFLAGS) -M $< | $(EXE_PREFIX)depends$(EXE_POSTFIX) $(@D) $@
672
673 .%.d: %.asm
674 $(NASM_CMD) $< | $(EXE_PREFIX)depends$(EXE_POSTFIX) $(@D) $@
675
676 # EOF