3 # Helper makefile for ReactOS modules
4 # Variables this makefile accepts:
5 # $TARGET_TYPE = Type of target:
6 # program = User mode program
7 # proglib = Executable program that have exported functions
8 # dynlink = Dynamic Link Library (DLL)
9 # library = Library that will be linked with other code
10 # driver_library = Import library for a driver
11 # driver = Kernel mode driver
12 # export_driver = Kernel mode driver that have exported functions
13 # hal = Hardware Abstraction Layer
14 # bootpgm = Boot program
15 # miniport = Kernel mode driver that does not link with ntoskrnl.exe or hal.dll
16 # gdi_driver = Kernel mode graphics driver that link with win32k.sys
17 # subsystem = Kernel subsystem
18 # kmdll = Kernel mode DLL
19 # $TARGET_APPTYPE = Application type (windows,native,console)
20 # $TARGET_NAME = Base name of output file and .rc, .def, and .edf files
21 # $TARGET_OBJECTS = Object files that compose the module
22 # $TARGET_HEADERS = Header files that the object files depend on (optional)
23 # $TARGET_DEFNAME = Base name of .def and .edf files (optional)
24 # $TARGET_BASENAME = Base name of output file (overrides $TARGET_NAME if it exists) (optional)
25 # $TARGET_EXTENSION = Extension of the output file (optional)
26 # $TARGET_DDKLIBS = DDK libraries that are to be imported by the module (optional)
27 # $TARGET_SDKLIBS = SDK libraries that are to be imported by the module (optional)
28 # $TARGET_LIBS = Other libraries that are to be imported by the module (optional)
29 # $TARGET_GCCLIBS = GCC libraries imported with -l (optional)
30 # $TARGET_LFLAGS = GCC flags when linking (optional)
31 # $TARGET_CFLAGS = GCC flags (optional)
32 # $TARGET_CPPFLAGS = G++ flags (optional)
33 # $TARGET_ASFLAGS = GCC assembler flags (optional)
34 # $TARGET_NFLAGS = NASM flags (optional)
35 # $TARGET_RCFLAGS = Windres flags (optional)
36 # $TARGET_CLEAN = Files that are part of the clean rule (optional)
37 # $TARGET_PATH = Relative path for *.def, *.edf, and *.rc (optional)
38 # $TARGET_BASE = Default base address (optional)
39 # $TARGET_ENTRY = Entry point (optional)
40 # $TARGET_DEFONLY = Use .def instead of .edf extension (no,yes) (optional)
41 # $TARGET_NORC = Do not include standard resource file (no,yes) (optional)
42 # $TARGET_LIBPATH = Destination path for import libraries (optional)
43 # $TARGET_INSTALLDIR = Destination path when installed (optional)
44 # $TARGET_PCH = Filename of header to use to generate a PCH if supported by the compiler (optional)
45 # $TARGET_BOOTSTRAP = Wether this file is needed to bootstrap the installation (no,yes) (optional)
46 # $TARGET_BOOTSTRAP_NAME = Name on the installation medium (optional)
47 # $WINE_MODE = Compile using WINE headers (no,yes) (optional)
48 # $WINE_RC = Name of .rc file for WINE modules (optional)
50 include $(PATH_TO_TOP)/config
53 ifeq ($(TARGET_PATH),)
62 MK_ARCH_ID := _M_ALPHA
69 ifeq ($(ARCH),powerpc)
73 # unknown architecture
75 MK_ARCH_ID := _M_UNKNOWN
78 ifeq ($(TARGET_TYPE),program)
82 MK_DEFENTRY := _DEFINE_TARGET_APPTYPE
85 ifneq ($(WINE_MODE),yes)
86 MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
87 MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
88 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
90 MK_CFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
91 MK_CPPFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
92 MK_RCFLAGS := --include-dir $(PATH_TO_TOP)/include/wine --include-dir $(WINE_INCLUDE)
99 MK_BOOTCDDIR := system32
102 MK_RES_BASE := $(TARGET_NAME)
104 MK_RES_BASE := $(WINE_RC)
108 ifeq ($(TARGET_TYPE),proglib)
112 MK_DEFENTRY := _WinMain@16
115 MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
116 MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
117 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
120 MK_IMPLIBDEFPATH := $(SDK_PATH_LIB)
123 MK_BOOTCDDIR := system32
125 MK_RES_BASE := $(TARGET_NAME)
128 ifeq ($(TARGET_TYPE),dynlink)
132 MK_DEFENTRY := _DllMain@12
135 ifneq ($(WINE_MODE),yes)
136 MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
137 MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
138 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
140 MK_CFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
141 MK_CPPFLAGS := -I$(PATH_TO_TOP)/include/wine -I./ -I$(WINE_INCLUDE)
142 MK_RCFLAGS := --include-dir $(PATH_TO_TOP)/include/wine --include-dir $(WINE_INCLUDE)
146 MK_IMPLIBDEFPATH := $(SDK_PATH_LIB)
148 MK_INSTALLDIR := system32
149 MK_BOOTCDDIR := system32
152 MK_RES_BASE := $(TARGET_NAME)
154 MK_RES_BASE := $(WINE_RC)
158 ifeq ($(TARGET_TYPE),library)
166 MK_CFLAGS := -I./ -I$(SDK_PATH_INC)
167 MK_CPPFLAGS := -I./ -I$(SDK_PATH_INC)
168 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
173 MK_INSTALLDIR := # none
174 MK_BOOTCDDIR := system32
179 ifeq ($(TARGET_TYPE),driver_library)
186 MK_CFLAGS := -I./ -I$(DDK_PATH_INC)
187 MK_CPPFLAGS := -I./ -I$(DDK_PATH_INC)
188 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
191 MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
193 MK_INSTALLDIR := $(DDK_PATH_INC)
195 MK_DISTDIR := # FIXME
199 ifeq ($(TARGET_TYPE),driver)
203 MK_DEFENTRY := _DriverEntry@8
204 MK_DDKLIBS := ntoskrnl.a hal.a
206 MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
207 MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
208 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
213 MK_INSTALLDIR := system32/drivers
215 MK_DISTDIR := drivers
216 MK_RES_BASE := $(TARGET_NAME)
219 ifeq ($(TARGET_TYPE),export_driver)
223 MK_DEFENTRY := _DriverEntry@8
224 MK_DDKLIBS := ntoskrnl.a hal.a
226 MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
227 MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
228 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
231 MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
233 MK_INSTALLDIR := system32/drivers
235 MK_DISTDIR := drivers
236 MK_RES_BASE := $(TARGET_NAME)
239 ifeq ($(TARGET_TYPE),hal)
243 MK_DEFENTRY := _DriverEntry@8
244 MK_DDKLIBS := ntoskrnl.a
246 MK_CFLAGS := -D__NTHAL__ -I./ -I$(DDK_PATH_INC)
247 MK_CPPFLAGS := -D__NTHAL__ -I./ -I$(DDK_PATH_INC)
248 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
253 MK_INSTALLDIR := system32
256 MK_RES_BASE := $(TARGET_NAME)
259 ifeq ($(TARGET_TYPE),bootpgm)
263 MK_DEFENTRY := _DriverEntry@8
266 MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
267 MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
268 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
273 MK_INSTALLDIR := system32
274 MK_BOOTCDDIR := system32
275 MK_DISTDIR := # FIXME
276 MK_RES_BASE := $(TARGET_NAME)
279 ifeq ($(TARGET_TYPE),miniport)
283 MK_DEFENTRY := _DriverEntry@8
286 MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
287 MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
288 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
293 MK_INSTALLDIR := system32/drivers
295 MK_DISTDIR := drivers
296 MK_RES_BASE := $(TARGET_NAME)
299 ifeq ($(TARGET_TYPE),gdi_driver)
303 MK_DEFENTRY := _DrvEnableDriver@12
304 MK_DDKLIBS := ntoskrnl.a hal.a win32k.a
306 MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
307 MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
308 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
311 MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
313 MK_INSTALLDIR := system32
316 MK_RES_BASE := $(TARGET_NAME)
320 ifeq ($(TARGET_TYPE),program)
321 ifeq ($(TARGET_APPTYPE),windows)
322 MK_DEFENTRY := _WinMainCRTStartup
323 MK_SDKLIBS := ntdll.a kernel32.a gdi32.a user32.a
324 TARGET_LFLAGS += -Wl,--subsystem,windows
327 ifeq ($(TARGET_APPTYPE),native)
328 MK_DEFENTRY := _NtProcessStartup@4
329 MK_SDKLIBS := ntdll.a
330 TARGET_LFLAGS += -Wl,--subsystem,native -nostartfiles
333 ifeq ($(TARGET_APPTYPE),console)
334 MK_DEFENTRY := _mainCRTStartup
336 TARGET_LFLAGS += -Wl,--subsystem,console
340 ifeq ($(TARGET_TYPE),proglib)
341 ifeq ($(TARGET_APPTYPE),windows)
342 MK_DEFENTRY := _WinMainCRTStartup
343 MK_SDKLIBS := ntdll.a kernel32.a gdi32.a user32.a
344 TARGET_LFLAGS += -Wl,--subsystem,windows
347 ifeq ($(TARGET_APPTYPE),native)
348 MK_DEFENTRY := _NtProcessStartup@4
349 MK_SDKLIBS := ntdll.a
350 TARGET_LFLAGS += -Wl,--subsystem,native -nostartfiles
353 ifeq ($(TARGET_APPTYPE),console)
354 MK_DEFENTRY := _mainCRTStartup
356 TARGET_LFLAGS += -Wl,--subsystem,console
360 ifeq ($(TARGET_TYPE),subsystem)
364 MK_DEFENTRY := _DriverEntry@8
365 MK_DDKLIBS := ntoskrnl.a hal.a
367 MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
368 MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
369 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
372 MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
374 MK_INSTALLDIR := system32
375 MK_DISTDIR := drivers
376 MK_RES_BASE := $(TARGET_NAME)
379 ifeq ($(TARGET_TYPE),kmdll)
384 MK_DDKLIBS := ntoskrnl.a hal.a
386 MK_CFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
387 MK_CPPFLAGS := -D__NTDRIVER__ -I./ -I$(DDK_PATH_INC)
388 MK_RCFLAGS := --include-dir $(SDK_PATH_INC)
391 MK_IMPLIBDEFPATH := $(DDK_PATH_LIB)
393 MK_INSTALLDIR := system32
394 MK_DISTDIR := drivers
395 MK_RES_BASE := $(TARGET_NAME)
399 MK_RESOURCE := $(MK_RES_BASE).coff
402 ifneq ($(TARGET_INSTALLDIR),)
403 MK_INSTALLDIR := $(TARGET_INSTALLDIR)
407 ifneq ($(BOOTCD_INSTALL),)
412 ifeq ($(TARGET_LIBPATH),)
413 MK_IMPLIBPATH := $(MK_IMPLIBDEFPATH)
415 MK_IMPLIBPATH := $(TARGET_LIBPATH)
419 ifeq ($(TARGET_BASENAME),)
420 MK_BASENAME := $(TARGET_NAME)
422 MK_BASENAME := $(TARGET_BASENAME)
426 ifeq ($(TARGET_EXTENSION),)
427 MK_EXT := $(MK_DEFEXT)
429 MK_EXT := $(TARGET_EXTENSION)
433 ifeq ($(TARGET_NORC),yes)
436 MK_FULLRES := $(TARGET_PATH)/$(MK_RESOURCE)
440 ifeq ($(TARGET_DEFNAME),)
441 MK_DEFBASE := $(TARGET_NAME)
443 MK_DEFBASE := $(TARGET_DEFNAME)
446 MK_DEFNAME := $(TARGET_PATH)/$(MK_DEFBASE).def
447 ifeq ($(TARGET_DEFONLY),yes)
448 MK_EDFNAME := $(MK_DEFNAME)
450 MK_EDFNAME := $(TARGET_PATH)/$(MK_DEFBASE).edf
454 ifeq ($(MK_MODE),user)
455 MK_DEFBASE := 0x400000
456 ifneq ($(TARGET_SDKLIBS),)
457 MK_LIBS := $(addprefix $(SDK_PATH_LIB)/, $(TARGET_SDKLIBS))
459 MK_LIBS := $(addprefix $(SDK_PATH_LIB)/, $(MK_SDKLIBS))
464 ifeq ($(MK_MODE),kernel)
465 MK_DEFBASE := 0x10000
466 MK_LIBS := $(addprefix $(DDK_PATH_LIB)/, $(MK_DDKLIBS) $(TARGET_DDKLIBS))
470 ifneq ($(TARGET_LIBS),)
471 MK_LIBS := $(TARGET_LIBS) $(MK_LIBS)
475 ifeq ($(TARGET_BASE),)
476 TARGET_BASE := $(MK_DEFBASE)
480 ifeq ($(TARGET_ENTRY),)
481 TARGET_ENTRY := $(MK_DEFENTRY)
486 # Include details of the OS configuration
488 include $(PATH_TO_TOP)/config
491 TARGET_ASFLAGS += -march=$(ARCH) -D$(MK_ARCH_ID)
492 TARGET_CFLAGS += $(MK_CFLAGS)
493 TARGET_CFLAGS += -pipe -march=$(ARCH) -D$(MK_ARCH_ID)
500 TARGET_CPPFLAGS += $(MK_CPPFLAGS)
501 TARGET_CPPFLAGS += -pipe -march=$(ARCH) -D$(MK_ARCH_ID)
503 TARGET_RCFLAGS += $(MK_RCFLAGS)
505 TARGET_ASFLAGS += $(MK_ASFLAGS)
506 TARGET_ASFLAGS += -pipe -march=$(ARCH)
508 TARGET_NFLAGS += $(MK_NFLAGS)
511 MK_GCCLIBS := $(addprefix -l, $(TARGET_GCCLIBS))
513 ifeq ($(MK_MODE),static)
514 MK_FULLNAME := $(SDK_PATH_LIB)/$(MK_BASENAME)$(MK_EXT)
516 MK_FULLNAME := $(MK_BASENAME)$(MK_EXT)
519 MK_IMPLIB_FULLNAME := $(MK_BASENAME)$(MK_IMPLIB_EXT)
521 MK_NOSTRIPNAME := $(MK_BASENAME).nostrip$(MK_EXT)
523 # We don't want to link header files
524 MK_OBJECTS := $(filter-out %.h,$(TARGET_OBJECTS))
525 MK_STRIPPED_OBJECT := $(MK_BASENAME).stripped.o
527 ifeq ($(MK_IMPLIBONLY),yes)
529 TARGET_CLEAN += $(MK_IMPLIBPATH)/$(MK_IMPLIB_FULLNAME)
531 all: $(MK_IMPLIBPATH)/$(MK_IMPLIB_FULLNAME)
533 $(MK_IMPLIBPATH)/$(MK_IMPLIB_FULLNAME): $(TARGET_OBJECTS)
535 --dllname $(MK_FULLNAME) \
536 --def $(MK_DEFNAME) \
537 --output-lib $(MK_IMPLIBPATH)/$(MK_BASENAME).a \
543 all: $(MK_FULLNAME) $(MK_NOSTRIPNAME)
546 ifeq ($(MK_IMPLIB),yes)
547 MK_EXTRACMD := --def $(MK_EDFNAME)
553 ifeq ($(MK_MODE),user)
555 ifeq ($(MK_EXETYPE),dll)
556 TARGET_LFLAGS += -mdll -Wl,--image-base,$(TARGET_BASE)
557 MK_EXTRACMD2 := -Wl,temp.exp
562 $(MK_NOSTRIPNAME): $(MK_FULLRES) $(TARGET_OBJECTS) $(MK_LIBS)
563 ifeq ($(MK_EXETYPE),dll)
564 $(CC) -Wl,--base-file,base.tmp \
565 -Wl,--entry,$(TARGET_ENTRY) \
568 $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
570 $(DLLTOOL) --dllname $(MK_FULLNAME) \
571 --base-file base.tmp \
572 --output-exp temp.exp $(MK_EXTRACMD)
575 $(CC) $(TARGET_LFLAGS) \
576 -Wl,--entry,$(TARGET_ENTRY) $(MK_EXTRACMD2) \
577 -o $(MK_NOSTRIPNAME) \
578 $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
580 - $(RSYM) $(MK_NOSTRIPNAME) $(MK_BASENAME).sym
582 $(MK_FULLNAME): $(MK_NOSTRIPNAME)
583 $(CP) $(MK_NOSTRIPNAME) $(MK_FULLNAME)
584 # $(STRIP) --strip-debug $(MK_FULLNAME)
588 # Kernel mode targets
589 ifeq ($(MK_MODE),kernel)
591 ifeq ($(MK_IMPLIB),yes)
592 MK_EXTRACMD := --def $(MK_EDFNAME)
597 $(MK_NOSTRIPNAME): $(MK_FULLRES) $(TARGET_OBJECTS) $(MK_LIBS)
598 $(CC) -Wl,--base-file,base.tmp \
599 -Wl,--entry,$(TARGET_ENTRY) \
601 -nostartfiles -nostdlib \
603 $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
605 $(DLLTOOL) --dllname $(MK_FULLNAME) \
606 --base-file base.tmp \
607 --output-exp temp.exp $(MK_EXTRACMD)
609 $(CC) $(TARGET_LFLAGS) \
610 -Wl,--subsystem,native \
611 -Wl,--image-base,$(TARGET_BASE) \
612 -Wl,--file-alignment,0x1000 \
613 -Wl,--section-alignment,0x1000 \
614 -Wl,--entry,$(TARGET_ENTRY) \
616 -mdll -nostartfiles -nostdlib \
617 -o $(MK_NOSTRIPNAME) \
618 $(MK_FULLRES) $(MK_OBJECTS) $(MK_LIBS) $(MK_GCCLIBS)
620 $(RSYM) $(MK_NOSTRIPNAME) $(MK_BASENAME).sym
622 $(MK_FULLNAME): $(MK_FULLRES) $(TARGET_OBJECTS) $(MK_LIBS) $(MK_NOSTRIPNAME)
623 $(LD) -r -o $(MK_STRIPPED_OBJECT) $(MK_OBJECTS)
624 $(STRIP) --strip-debug $(MK_STRIPPED_OBJECT)
625 $(CC) -Wl,--base-file,base.tmp \
626 -Wl,--entry,$(TARGET_ENTRY) \
628 -nostartfiles -nostdlib \
630 $(MK_FULLRES) $(MK_STRIPPED_OBJECT) $(MK_LIBS) $(MK_GCCLIBS)
632 $(DLLTOOL) --dllname $(MK_FULLNAME) \
633 --base-file base.tmp \
634 --output-exp temp.exp $(MK_EXTRACMD)
636 $(CC) $(TARGET_LFLAGS) \
637 -Wl,--subsystem,native \
638 -Wl,--image-base,$(TARGET_BASE) \
639 -Wl,--file-alignment,0x1000 \
640 -Wl,--section-alignment,0x1000 \
641 -Wl,--entry,$(TARGET_ENTRY) \
643 -mdll -nostartfiles -nostdlib \
645 $(MK_FULLRES) $(MK_STRIPPED_OBJECT) $(MK_LIBS) $(MK_GCCLIBS)
650 # Static library target
651 ifeq ($(MK_MODE),static)
653 $(MK_FULLNAME): $(TARGET_OBJECTS)
654 $(AR) -r $(MK_FULLNAME) $(TARGET_OBJECTS)
656 # Static libraries dont have a nostrip version
660 .phony: $(MK_NOSTRIPNAME)
664 endif # MK_IMPLIBONLY
667 $(MK_FULLRES): $(PATH_TO_TOP)/include/reactos/buildno.h $(TARGET_PATH)/$(MK_RES_BASE).rc
669 ifeq ($(MK_DEPENDS),yes)
675 ifeq ($(MK_IMPLIB),yes)
676 $(MK_IMPLIBPATH)/$(MK_BASENAME).a: $(MK_DEFNAME)
677 $(DLLTOOL) --dllname $(MK_FULLNAME) \
678 --def $(MK_DEFNAME) \
679 --output-lib $(MK_IMPLIBPATH)/$(MK_BASENAME).a \
682 implib: $(MK_IMPLIBPATH)/$(MK_BASENAME).a
687 # Be carefull not to clean non-object files
688 MK_CLEANFILES := $(filter %.o,$(MK_OBJECTS))
691 - $(RM) *.o depend.d *.pch $(MK_BASENAME).sym $(MK_BASENAME).a $(TARGET_PATH)/$(MK_RES_BASE).coff \
692 $(MK_FULLNAME) $(MK_NOSTRIPNAME) $(MK_CLEANFILES) \
693 junk.tmp base.tmp temp.exp \
696 ifneq ($(TARGET_HEADERS),)
697 $(TARGET_OBJECTS): $(TARGET_HEADERS)
700 # install, dist and bootcd rules
702 ifeq ($(MK_IMPLIBONLY),yes)
704 # Don't install import libraries
715 # Don't install static libraries
716 ifeq ($(MK_MODE),static)
723 install: $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME)
728 ifeq ($(INSTALL_SYMBOLS),no)
730 $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME):
731 $(CP) $(MK_FULLNAME) $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME)
733 else # INSTALL_SYMBOLS
735 # Don't install static libraries
736 ifeq ($(MK_MODE),static)
743 $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME): $(MK_FULLNAME) $(MK_BASENAME).sym
744 $(CP) $(MK_FULLNAME) $(INSTALL_DIR)/$(MK_INSTALLDIR)/$(MK_FULLNAME)
745 $(CP) $(MK_BASENAME).sym $(INSTALL_DIR)/symbols/$(MK_BASENAME).sym
749 endif # INSTALL_SYMBOLS
751 dist: $(DIST_DIR)/$(MK_DISTDIR)/$(MK_FULLNAME)
753 $(DIST_DIR)/$(MK_DISTDIR)/$(MK_FULLNAME): $(MK_FULLNAME)
754 $(CP) $(MK_FULLNAME) $(DIST_DIR)/$(MK_DISTDIR)/$(MK_FULLNAME)
755 $(CP) $(MK_BASENAME).sym $(DIST_DIR)/symbols/$(MK_BASENAME).sym
757 # Bootstrap files for the bootable CD
758 ifeq ($(TARGET_BOOTSTRAP),yes)
760 ifneq ($(TARGET_BOOTSTRAP_NAME),)
761 MK_BOOTSTRAP_NAME := $(TARGET_BOOTSTRAP_NAME)
762 else # TARGET_BOOTSTRAP_NAME
763 MK_BOOTSTRAP_NAME := $(MK_FULLNAME)
764 endif # TARGET_BOOTSTRAP_NAME
766 bootcd: $(BOOTCD_DIR)/reactos/$(MK_BOOTCDDIR)/$(MK_BOOTSTRAP_NAME)
768 $(BOOTCD_DIR)/reactos/$(MK_BOOTCDDIR)/$(MK_BOOTSTRAP_NAME):
769 $(CP) $(MK_FULLNAME) $(BOOTCD_DIR)/reactos/$(MK_BOOTCDDIR)/$(MK_BOOTSTRAP_NAME)
771 else # TARGET_BOOTSTRAP
775 endif # TARGET_BOOTSTRAP
777 endif # MK_IMPLIBONLY
780 .phony: all depends implib clean install dist bootcd depends
783 # Precompiled header support
784 # When using PCHs, use dependency tracking to keep the .pch files up-to-date.
787 ifeq ($(ROS_USE_PCH),yes)
788 ifneq ($(TARGET_PCH),)
789 MK_PCHNAME = $(TARGET_PCH).pch
791 # GCC generates wrong dependencies for header files.
792 MK_PCHFAKE = $(TARGET_PCH:.h=.o)
794 - $(RTOUCH) $(MK_PCHFAKE)
796 $(MK_PCHNAME): depend.d
797 - $(RTOUCH) $(MK_PCHNAME)
798 - $(CC) $(TARGET_CFLAGS) $(TARGET_PCH)
800 depend.d: $(MK_PCHFAKE)
802 - $(CC) $(TARGET_CFLAGS) $(TARGET_PCH) -M -MF depend.d
810 %.o: %.c $(MK_PCHNAME)
811 $(CC) $(TARGET_CFLAGS) -c $< -o $@
813 $(CC) $(TARGET_CPPFLAGS) -c $< -o $@
815 $(CC) $(TARGET_CPPFLAGS) -c $< -o $@
817 $(AS) $(TARGET_ASFLAGS) -c $< -o $@
819 $(AS) $(TARGET_ASFLAGS) -c $< -o $@
821 $(NASM_CMD) $(NFLAGS) $(TARGET_NFLAGS) $< -o $@
823 $(RC) $(TARGET_RCFLAGS) $(RCINC) $< -o $@
827 CFLAGS := $(TARGET_CFLAGS)