1 # $Id: helper.mk,v 1.46 2003/12/02 11:38:47 gvg Exp $
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_CPPAPP = C++ application (no,yes) (optional)
23 # $TARGET_HEADERS = Header files that the object files depend on (optional)
24 # $TARGET_DEFNAME = Base name of .def and .edf files (optional)
25 # $TARGET_BASENAME = Base name of output file (overrides $TARGET_NAME if it exists) (optional)
26 # $TARGET_EXTENSION = Extension of the output file (optional)
27 # $TARGET_DDKLIBS = DDK libraries that are to be imported by the module (optional)
28 # $TARGET_SDKLIBS = SDK libraries that are to be imported by the module (optional)
29 # $TARGET_LIBS = Other libraries that are to be imported by the module (optional)
30 # $TARGET_GCCLIBS = GCC libraries imported with -l (optional)
31 # $TARGET_LFLAGS = GCC flags when linking (optional)
32 # $TARGET_CFLAGS = GCC flags (optional)
33 # $TARGET_CPPFLAGS = G++ flags (optional)
34 # $TARGET_ASFLAGS = GCC assembler flags (optional)
35 # $TARGET_NFLAGS = NASM flags (optional)
36 # $TARGET_RCFLAGS = Windres flags (optional)
37 # $TARGET_CLEAN = Files that are part of the clean rule (optional)
38 # $TARGET_PATH = Relative path for *.def, *.edf, and *.rc (optional)
39 # $TARGET_BASE = Default base address (optional)
40 # $TARGET_ENTRY = Entry point (optional)
41 # $TARGET_DEFONLY = Use .def instead of .edf extension (no,yes) (optional)
42 # $TARGET_NORC = Do not include standard resource file (no,yes) (optional)
43 # $TARGET_LIBPATH = Destination path for import libraries (optional)
44 # $TARGET_INSTALLDIR = Destination path when installed (optional)
45 # $TARGET_PCH = Filename of header to use to generate a PCH if supported by the compiler (optional)
46 # $TARGET_BOOTSTRAP = Whether this file is needed to bootstrap the installation (no,yes) (optional)
47 # $TARGET_BOOTSTRAP_NAME = Name on the installation medium (optional)
48 # $TARGET_GENREGTESTS = Generate regression test registrations (optional)
49 # $WINE_MODE = Compile using WINE headers (no,yes) (optional)
50 # $WINE_RC = Name of .rc file for WINE modules (optional)
51 # $SUBDIRS = Subdirs in which to run make (optional)
53 include $(PATH_TO_TOP
)/config
56 ifeq ($(TARGET_PATH
),)
65 MK_ARCH_ID
:= _M_ALPHA
72 ifeq ($(ARCH
),powerpc
)
76 # unknown architecture
78 MK_ARCH_ID
:= _M_UNKNOWN
81 ifeq ($(TARGET_TYPE
),program
)
85 MK_DEFENTRY
:= _DEFINE_TARGET_APPTYPE
88 ifneq ($(WINE_MODE
),yes
)
89 MK_CFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
90 MK_CPPFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
91 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
93 MK_CFLAGS
:= -I
$(PATH_TO_TOP
)/include/wine
-I.
/ -I
$(WINE_INCLUDE
)
94 MK_CPPFLAGS
:= -I
$(PATH_TO_TOP
)/include/wine
-I.
/ -I
$(WINE_INCLUDE
)
95 MK_RCFLAGS
:= --include-dir
$(PATH_TO_TOP
)/include/wine
--include-dir
$(WINE_INCLUDE
)
102 MK_BOOTCDDIR
:= system32
105 MK_RES_BASE
:= $(TARGET_NAME
)
107 MK_RES_BASE
:= $(WINE_RC
)
111 ifeq ($(TARGET_TYPE
),proglib
)
115 MK_DEFENTRY
:= _WinMain@
16
118 MK_CFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
119 MK_CPPFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
120 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
123 MK_IMPLIBDEFPATH
:= $(SDK_PATH_LIB
)
126 MK_BOOTCDDIR
:= system32
128 MK_RES_BASE
:= $(TARGET_NAME
)
131 ifeq ($(TARGET_TYPE
),dynlink
)
135 MK_DEFENTRY
:= _DllMain@
12
138 ifneq ($(WINE_MODE
),yes
)
139 MK_CFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
140 MK_CPPFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
141 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
143 MK_CFLAGS
:= -I
$(PATH_TO_TOP
)/include/wine
-I.
/ -I
$(WINE_INCLUDE
)
144 MK_CPPFLAGS
:= -I
$(PATH_TO_TOP
)/include/wine
-I.
/ -I
$(WINE_INCLUDE
)
145 MK_RCFLAGS
:= --include-dir
$(PATH_TO_TOP
)/include/wine
--include-dir
$(WINE_INCLUDE
)
149 MK_IMPLIBDEFPATH
:= $(SDK_PATH_LIB
)
151 MK_INSTALLDIR
:= system32
152 MK_BOOTCDDIR
:= system32
155 MK_RES_BASE
:= $(TARGET_NAME
)
157 MK_RES_BASE
:= $(WINE_RC
)
161 ifeq ($(TARGET_TYPE
),library
)
169 MK_CFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
170 MK_CPPFLAGS
:= -I.
/ -I
$(SDK_PATH_INC
)
171 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
176 MK_INSTALLDIR
:= # none
177 MK_BOOTCDDIR
:= system32
182 ifeq ($(TARGET_TYPE
),driver_library
)
189 MK_CFLAGS
:= -I.
/ -I
$(DDK_PATH_INC
)
190 MK_CPPFLAGS
:= -I.
/ -I
$(DDK_PATH_INC
)
191 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
194 MK_IMPLIBDEFPATH
:= $(DDK_PATH_LIB
)
196 MK_INSTALLDIR
:= $(DDK_PATH_INC
)
198 MK_DISTDIR
:= # FIXME
202 ifeq ($(TARGET_TYPE
),driver
)
206 MK_DEFENTRY
:= _DriverEntry@
8
207 MK_DDKLIBS
:= ntoskrnl.a hal.a
209 MK_CFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
210 MK_CPPFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
211 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
216 MK_INSTALLDIR
:= system32
/drivers
218 MK_DISTDIR
:= drivers
219 MK_RES_BASE
:= $(TARGET_NAME
)
222 ifeq ($(TARGET_TYPE
),export_driver
)
226 MK_DEFENTRY
:= _DriverEntry@
8
227 MK_DDKLIBS
:= ntoskrnl.a hal.a
229 MK_CFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
230 MK_CPPFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
231 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
234 MK_IMPLIBDEFPATH
:= $(DDK_PATH_LIB
)
236 MK_INSTALLDIR
:= system32
/drivers
238 MK_DISTDIR
:= drivers
239 MK_RES_BASE
:= $(TARGET_NAME
)
242 ifeq ($(TARGET_TYPE
),hal
)
246 MK_DEFENTRY
:= _DriverEntry@
8
247 MK_DDKLIBS
:= ntoskrnl.a
249 MK_CFLAGS
:= -D__NTHAL__
-I.
/ -I
$(DDK_PATH_INC
)
250 MK_CPPFLAGS
:= -D__NTHAL__
-I.
/ -I
$(DDK_PATH_INC
)
251 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
256 MK_INSTALLDIR
:= system32
259 MK_RES_BASE
:= $(TARGET_NAME
)
262 ifeq ($(TARGET_TYPE
),bootpgm
)
266 MK_DEFENTRY
:= _DriverEntry@
8
269 MK_CFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
270 MK_CPPFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
271 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
276 MK_INSTALLDIR
:= system32
277 MK_BOOTCDDIR
:= system32
278 MK_DISTDIR
:= # FIXME
279 MK_RES_BASE
:= $(TARGET_NAME
)
282 ifeq ($(TARGET_TYPE
),miniport
)
286 MK_DEFENTRY
:= _DriverEntry@
8
289 MK_CFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
290 MK_CPPFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
291 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
296 MK_INSTALLDIR
:= system32
/drivers
298 MK_DISTDIR
:= drivers
299 MK_RES_BASE
:= $(TARGET_NAME
)
302 ifeq ($(TARGET_TYPE
),gdi_driver
)
306 MK_DEFENTRY
:= _DrvEnableDriver@
12
307 MK_DDKLIBS
:= ntoskrnl.a hal.a win32k.a
309 MK_CFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
310 MK_CPPFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
311 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
314 MK_IMPLIBDEFPATH
:= $(DDK_PATH_LIB
)
316 MK_INSTALLDIR
:= system32
319 MK_RES_BASE
:= $(TARGET_NAME
)
323 # can be overidden with $(CXX) for linkage of c++ executables
327 ifeq ($(TARGET_TYPE
),program
)
328 ifeq ($(TARGET_APPTYPE
),windows
)
329 MK_DEFENTRY
:= _WinMainCRTStartup
330 MK_SDKLIBS
:= ntdll.a kernel32.a gdi32.a user32.a
331 TARGET_LFLAGS
+= -Wl
,--subsystem
,windows
334 ifeq ($(TARGET_APPTYPE
),native
)
335 MK_DEFENTRY
:= _NtProcessStartup@
4
336 MK_SDKLIBS
:= ntdll.a
337 TARGET_LFLAGS
+= -Wl
,--subsystem
,native
-nostartfiles
340 ifeq ($(TARGET_APPTYPE
),console
)
341 MK_DEFENTRY
:= _mainCRTStartup
343 TARGET_LFLAGS
+= -Wl
,--subsystem
,console
347 ifeq ($(TARGET_TYPE
),proglib
)
348 ifeq ($(TARGET_APPTYPE
),windows
)
349 MK_DEFENTRY
:= _WinMainCRTStartup
350 MK_SDKLIBS
:= ntdll.a kernel32.a gdi32.a user32.a
351 TARGET_LFLAGS
+= -Wl
,--subsystem
,windows
354 ifeq ($(TARGET_APPTYPE
),native
)
355 MK_DEFENTRY
:= _NtProcessStartup@
4
356 MK_SDKLIBS
:= ntdll.a
357 TARGET_LFLAGS
+= -Wl
,--subsystem
,native
-nostartfiles
360 ifeq ($(TARGET_APPTYPE
),console
)
361 MK_DEFENTRY
:= _mainCRTStartup
363 TARGET_LFLAGS
+= -Wl
,--subsystem
,console
367 ifeq ($(TARGET_TYPE
),subsystem
)
371 MK_DEFENTRY
:= _DriverEntry@
8
372 MK_DDKLIBS
:= ntoskrnl.a hal.a
374 MK_CFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
375 MK_CPPFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
376 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
379 MK_IMPLIBDEFPATH
:= $(DDK_PATH_LIB
)
381 MK_INSTALLDIR
:= system32
382 MK_DISTDIR
:= drivers
383 MK_RES_BASE
:= $(TARGET_NAME
)
386 ifeq ($(TARGET_TYPE
),kmdll
)
391 MK_DDKLIBS
:= ntoskrnl.a hal.a
393 MK_CFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
394 MK_CPPFLAGS
:= -D__NTDRIVER__
-I.
/ -I
$(DDK_PATH_INC
)
395 MK_RCFLAGS
:= --include-dir
$(SDK_PATH_INC
)
398 MK_IMPLIBDEFPATH
:= $(DDK_PATH_LIB
)
400 MK_INSTALLDIR
:= system32
401 MK_DISTDIR
:= drivers
402 MK_RES_BASE
:= $(TARGET_NAME
)
406 MK_RESOURCE
:= $(MK_RES_BASE
).coff
409 ifneq ($(TARGET_INSTALLDIR
),)
410 MK_INSTALLDIR
:= $(TARGET_INSTALLDIR
)
414 ifneq ($(BOOTCD_INSTALL
),)
419 ifeq ($(TARGET_LIBPATH
),)
420 MK_IMPLIBPATH
:= $(MK_IMPLIBDEFPATH
)
422 MK_IMPLIBPATH
:= $(TARGET_LIBPATH
)
426 ifeq ($(TARGET_BASENAME
),)
427 MK_BASENAME
:= $(TARGET_NAME
)
429 MK_BASENAME
:= $(TARGET_BASENAME
)
433 ifeq ($(TARGET_EXTENSION
),)
434 MK_EXT
:= $(MK_DEFEXT
)
436 MK_EXT
:= $(TARGET_EXTENSION
)
440 ifeq ($(TARGET_NORC
),yes
)
443 MK_FULLRES
:= $(TARGET_PATH
)/$(MK_RESOURCE
)
446 ifeq ($(TARGET_DEFNAME
),)
447 MK_DEFBASE
:= $(TARGET_NAME
)
449 MK_DEFBASE
:= $(TARGET_DEFNAME
)
452 MK_DEFNAME
:= $(TARGET_PATH
)/$(MK_DEFBASE
).def
453 ifeq ($(TARGET_DEFONLY
),yes
)
454 MK_EDFNAME
:= $(MK_DEFNAME
)
456 MK_EDFNAME
:= $(TARGET_PATH
)/$(MK_DEFBASE
).edf
460 ifeq ($(MK_MODE
),user
)
461 ifeq ($(MK_EXETYPE
),dll
)
462 MK_DEFBASE
:= 0x10000000
464 MK_DEFBASE
:= 0x400000
466 ifneq ($(TARGET_SDKLIBS
),)
467 MK_LIBS
:= $(addprefix $(SDK_PATH_LIB
)/, $(TARGET_SDKLIBS
))
469 MK_LIBS
:= $(addprefix $(SDK_PATH_LIB
)/, $(MK_SDKLIBS
))
474 ifeq ($(MK_MODE
),kernel
)
475 MK_DEFBASE
:= 0x10000
476 MK_LIBS
:= $(addprefix $(DDK_PATH_LIB
)/, $(MK_DDKLIBS
) $(TARGET_DDKLIBS
))
480 ifneq ($(TARGET_LIBS
),)
481 MK_LIBS
:= $(TARGET_LIBS
) $(MK_LIBS
)
485 ifeq ($(TARGET_BASE
),)
486 TARGET_BASE
:= $(MK_DEFBASE
)
490 ifeq ($(TARGET_ENTRY
),)
491 TARGET_ENTRY
:= $(MK_DEFENTRY
)
496 # Include details of the OS configuration
498 include $(PATH_TO_TOP
)/config
501 TARGET_ASFLAGS
+= -march
=$(ARCH
) -D
$(MK_ARCH_ID
)
502 TARGET_CFLAGS
+= $(MK_CFLAGS
)
503 TARGET_CFLAGS
+= -pipe
-march
=$(ARCH
) -D
$(MK_ARCH_ID
)
510 TARGET_CPPFLAGS
+= $(MK_CPPFLAGS
)
511 TARGET_CPPFLAGS
+= -pipe
-march
=$(ARCH
) -D
$(MK_ARCH_ID
)
513 TARGET_RCFLAGS
+= $(MK_RCFLAGS
)
515 TARGET_ASFLAGS
+= $(MK_ASFLAGS
)
516 TARGET_ASFLAGS
+= -pipe
-march
=$(ARCH
)
518 TARGET_NFLAGS
+= $(MK_NFLAGS
)
521 MK_GCCLIBS
:= $(addprefix -l
, $(TARGET_GCCLIBS
))
523 ifeq ($(MK_MODE
),static
)
524 MK_FULLNAME
:= $(SDK_PATH_LIB
)/$(MK_BASENAME
)$(MK_EXT
)
526 MK_FULLNAME
:= $(MK_BASENAME
)$(MK_EXT
)
529 MK_IMPLIB_FULLNAME
:= $(MK_BASENAME
)$(MK_IMPLIB_EXT
)
531 MK_NOSTRIPNAME
:= $(MK_BASENAME
).nostrip
$(MK_EXT
)
533 # We don't want to link header files
534 MK_OBJECTS
:= $(filter-out %.h
,$(TARGET_OBJECTS
))
536 # There is problems with C++ applications and ld -r. Ld can cause errors like:
537 # reloc refers to symbol `.text$_ZN9CCABCodecC2Ev' which is not being output
538 ifeq ($(TARGET_CPPAPP
),yes
)
539 MK_STRIPPED_OBJECT
:= $(MK_OBJECTS
)
541 MK_STRIPPED_OBJECT
:= $(MK_BASENAME
).stripped.o
544 ifeq ($(MK_IMPLIBONLY
),yes
)
546 TARGET_CLEAN
+= $(MK_IMPLIBPATH
)/$(MK_IMPLIB_FULLNAME
)
548 all: $(MK_IMPLIBPATH
)/$(MK_IMPLIB_FULLNAME
)
550 $(MK_IMPLIBPATH
)/$(MK_IMPLIB_FULLNAME
): $(TARGET_OBJECTS
) $(MK_DEFNAME
)
552 --dllname
$(MK_FULLNAME
) \
553 --def
$(MK_DEFNAME
) \
554 --output-lib
$(MK_IMPLIBPATH
)/$(MK_BASENAME
).a \
560 all: $(MK_GENREGTESTS
) $(MK_FULLNAME
) $(MK_NOSTRIPNAME
) $(SUBDIRS
:%=%_all
)
563 ifeq ($(TARGET_GENREGTESTS
),yes
)
566 .PHONY
: _regtests_phony
567 _regtests.c
: _regtests_phony
568 $(REGTESTS
) . _regtests.c
569 MK_GENREGTESTS
:= _regtests_phony
570 MK_GENREGTESTS_CLEAN
:= _regtests.c _regtests.o
573 MK_GENREGTESTS_CLEAN
:=
577 ifeq ($(MK_IMPLIB
),yes
)
578 MK_EXTRACMD
:= --def
$(MK_EDFNAME
)
584 ifeq ($(MK_MODE
),user
)
586 ifeq ($(MK_EXETYPE
),dll
)
587 TARGET_LFLAGS
+= -mdll
-Wl
,--image-base
,$(TARGET_BASE
)
588 MK_EXTRADEP
:= $(MK_EDFNAME
)
589 MK_EXTRACMD2
:= -Wl
,temp.exp
595 $(MK_NOSTRIPNAME
): $(MK_FULLRES
) $(TARGET_OBJECTS
) $(MK_EXTRADEP
) $(MK_LIBS
)
596 ifeq ($(MK_EXETYPE
),dll
)
597 $(LD_CC
) -Wl
,--base-file
,base.tmp \
598 -Wl
,--entry
,$(TARGET_ENTRY
) \
601 $(MK_FULLRES
) $(MK_OBJECTS
) $(MK_LIBS
) $(MK_GCCLIBS
)
603 $(DLLTOOL
) --dllname
$(MK_FULLNAME
) \
604 --base-file base.tmp \
605 --output-exp temp.exp
$(MK_EXTRACMD
)
607 $(LD_CC
) -Wl
,--base-file
,base.tmp \
608 -Wl
,--entry
,$(TARGET_ENTRY
) \
612 $(MK_FULLRES
) $(MK_OBJECTS
) $(MK_LIBS
) $(MK_GCCLIBS
)
614 $(DLLTOOL
) --dllname
$(MK_FULLNAME
) \
615 --base-file base.tmp \
616 --output-exp temp.exp
$(MK_EXTRACMD
)
619 $(LD_CC
) $(TARGET_LFLAGS
) \
620 -Wl
,--entry
,$(TARGET_ENTRY
) $(MK_EXTRACMD2
) \
621 -o
$(MK_NOSTRIPNAME
) \
622 $(MK_FULLRES
) $(MK_OBJECTS
) $(MK_LIBS
) $(MK_GCCLIBS
)
624 - $(RSYM
) $(MK_NOSTRIPNAME
) $(MK_BASENAME
).sym
625 ifeq ($(FULL_MAP
),yes
)
626 $(OBJDUMP
) -d
-S
$(MK_NOSTRIPNAME
) > $(MK_BASENAME
).map
628 $(NM
) --numeric-sort
$(MK_NOSTRIPNAME
) > $(MK_BASENAME
).map
631 $(MK_FULLNAME
): $(MK_NOSTRIPNAME
) $(MK_EXTRADEP
)
633 ifneq ($(TARGET_CPPAPP
),yes
)
634 $(LD
) -r
-o
$(MK_STRIPPED_OBJECT
) $(MK_OBJECTS
)
635 $(STRIP
) --strip-debug
$(MK_STRIPPED_OBJECT
)
637 ifeq ($(MK_EXETYPE
),dll
)
638 $(LD_CC
) -Wl
,--base-file
,base.tmp \
639 -Wl
,--entry
,$(TARGET_ENTRY
) \
643 $(MK_FULLRES
) $(MK_STRIPPED_OBJECT
) $(MK_LIBS
) $(MK_GCCLIBS
)
645 $(DLLTOOL
) --dllname
$(MK_FULLNAME
) \
646 --base-file base.tmp \
647 --output-exp temp.exp
$(MK_EXTRACMD
)
649 $(LD_CC
) -Wl
,--base-file
,base.tmp \
650 -Wl
,--entry
,$(TARGET_ENTRY
) \
655 $(MK_FULLRES
) $(MK_STRIPPED_OBJECT
) $(MK_LIBS
) $(MK_GCCLIBS
)
657 $(DLLTOOL
) --dllname
$(MK_FULLNAME
) \
658 --base-file base.tmp \
659 --output-exp temp.exp
$(MK_EXTRACMD
)
662 $(LD_CC
) $(TARGET_LFLAGS
) \
663 -Wl
,--entry
,$(TARGET_ENTRY
) \
667 $(MK_FULLRES
) $(MK_STRIPPED_OBJECT
) $(MK_LIBS
) $(MK_GCCLIBS
)
668 ifneq ($(TARGET_CPPAPP
),yes
)
669 - $(RM
) temp.exp
$(MK_STRIPPED_OBJECT
)
676 # Kernel mode targets
677 ifeq ($(MK_MODE
),kernel
)
679 ifeq ($(MK_IMPLIB
),yes
)
680 MK_EXTRACMD
:= --def
$(MK_EDFNAME
)
681 MK_EXTRADEP
:= $(MK_EDFNAME
)
687 $(MK_NOSTRIPNAME
): $(MK_FULLRES
) $(TARGET_OBJECTS
) $(MK_EXTRADEP
) $(MK_LIBS
)
688 $(LD_CC
) -Wl
,--base-file
,base.tmp \
689 -Wl
,--entry
,$(TARGET_ENTRY
) \
691 -nostartfiles
-nostdlib \
693 $(MK_FULLRES
) $(MK_OBJECTS
) $(MK_LIBS
) $(MK_GCCLIBS
)
695 $(DLLTOOL
) --dllname
$(MK_FULLNAME
) \
696 --base-file base.tmp \
697 --output-exp temp.exp
$(MK_EXTRACMD
)
699 $(LD_CC
) $(TARGET_LFLAGS
) \
700 -Wl
,--subsystem
,native \
701 -Wl
,--image-base
,$(TARGET_BASE
) \
702 -Wl
,--file-alignment
,0x1000 \
703 -Wl
,--section-alignment
,0x1000 \
704 -Wl
,--entry
,$(TARGET_ENTRY
) \
706 -mdll
-nostartfiles
-nostdlib \
707 -o
$(MK_NOSTRIPNAME
) \
708 $(MK_FULLRES
) $(MK_OBJECTS
) $(MK_LIBS
) $(MK_GCCLIBS
)
710 $(RSYM
) $(MK_NOSTRIPNAME
) $(MK_BASENAME
).sym
711 ifeq ($(FULL_MAP
),yes
)
712 $(OBJDUMP
) -d
-S
$(MK_NOSTRIPNAME
) > $(MK_BASENAME
).map
714 $(NM
) --numeric-sort
$(MK_NOSTRIPNAME
) > $(MK_BASENAME
).map
717 $(MK_FULLNAME
): $(MK_FULLRES
) $(TARGET_OBJECTS
) $(MK_EXTRADEP
) $(MK_LIBS
) $(MK_NOSTRIPNAME
)
719 ifneq ($(TARGET_CPPAPP
),yes
)
720 $(LD
) -r
-o
$(MK_STRIPPED_OBJECT
) $(MK_OBJECTS
)
721 $(STRIP
) --strip-debug
$(MK_STRIPPED_OBJECT
)
723 $(LD_CC
) -Wl
,--base-file
,base.tmp \
724 -Wl
,--entry
,$(TARGET_ENTRY
) \
726 -nostartfiles
-nostdlib \
728 $(MK_FULLRES
) $(MK_STRIPPED_OBJECT
) $(MK_LIBS
) $(MK_GCCLIBS
)
730 $(DLLTOOL
) --dllname
$(MK_FULLNAME
) \
731 --base-file base.tmp \
732 --output-exp temp.exp
$(MK_EXTRACMD
)
734 $(LD_CC
) $(TARGET_LFLAGS
) \
735 -Wl
,--subsystem
,native \
736 -Wl
,--image-base
,$(TARGET_BASE
) \
737 -Wl
,--file-alignment
,0x1000 \
738 -Wl
,--section-alignment
,0x1000 \
739 -Wl
,--entry
,$(TARGET_ENTRY
) \
741 -mdll
-nostartfiles
-nostdlib \
743 $(MK_FULLRES
) $(MK_STRIPPED_OBJECT
) $(MK_LIBS
) $(MK_GCCLIBS
)
744 ifneq ($(TARGET_CPPAPP
),yes
)
745 - $(RM
) temp.exp
$(MK_STRIPPED_OBJECT
)
752 # Static library target
753 ifeq ($(MK_MODE
),static
)
755 $(MK_FULLNAME
): $(TARGET_OBJECTS
)
756 $(AR
) -r
$(MK_FULLNAME
) $(TARGET_OBJECTS
)
758 # Static libraries dont have a nostrip version
762 .phony
: $(MK_NOSTRIPNAME
)
766 endif # MK_IMPLIBONLY
769 $(MK_FULLRES
): $(PATH_TO_TOP
)/include/reactos
/buildno.h
$(TARGET_PATH
)/$(MK_RES_BASE
).rc
771 ifeq ($(MK_DEPENDS
),yes
)
777 ifeq ($(MK_IMPLIB
),yes
)
778 $(MK_IMPLIBPATH
)/$(MK_BASENAME
).a
: $(MK_DEFNAME
)
779 $(DLLTOOL
) --dllname
$(MK_FULLNAME
) \
780 --def
$(MK_DEFNAME
) \
781 --output-lib
$(MK_IMPLIBPATH
)/$(MK_BASENAME
).a \
784 implib
: $(MK_IMPLIBPATH
)/$(MK_BASENAME
).a
786 implib
: $(SUBDIRS
:%=%_implib
)
789 # Be carefull not to clean non-object files
790 MK_CLEANFILES
:= $(filter %.o
,$(MK_OBJECTS
))
791 MK_CLEANFILTERED
:= $(MK_OBJECTS
:.o
=.d
)
792 MK_CLEANDEPS
:= $(join $(dir $(MK_CLEANFILTERED
)), $(addprefix .
, $(notdir $(MK_CLEANFILTERED
))))
794 clean: $(SUBDIRS
:%=%_clean
)
795 - $(RM
) *.o depend.d
*.pch
$(MK_BASENAME
).sym
$(MK_BASENAME
).a
$(TARGET_PATH
)/$(MK_RES_BASE
).coff \
796 $(MK_FULLNAME
) $(MK_NOSTRIPNAME
) $(MK_CLEANFILES
) $(MK_CLEANDEPS
) $(MK_GENREGTESTS_CLEAN
) $(MK_BASENAME
).map \
797 junk.tmp base.tmp temp.exp \
800 ifneq ($(TARGET_HEADERS
),)
801 $(TARGET_OBJECTS
): $(TARGET_HEADERS
)
804 # install and bootcd rules
806 ifeq ($(MK_IMPLIBONLY
),yes
)
808 # Don't install import libraries
817 # Don't install static libraries
818 ifeq ($(MK_MODE
),static
)
826 ifeq ($(INSTALL_SYMBOLS
),yes
)
828 install: $(SUBDIRS
:%=%_install
)
829 -$(CP
) $(MK_FULLNAME
) $(INSTALL_DIR
)/$(MK_INSTALLDIR
)/$(MK_FULLNAME
)
830 -$(CP
) $(MK_BASENAME
).sym
$(INSTALL_DIR
)/symbols
/$(MK_BASENAME
).sym
832 else # INSTALL_SYMBOLS
834 install: $(SUBDIRS
:%=%_install
)
835 -$(CP
) $(MK_FULLNAME
) $(INSTALL_DIR
)/$(MK_INSTALLDIR
)/$(MK_FULLNAME
)
837 endif # INSTALL_SYMBOLS
840 # Bootstrap files for the bootable CD
841 ifeq ($(TARGET_BOOTSTRAP
),yes
)
843 ifneq ($(TARGET_BOOTSTRAP_NAME
),)
844 MK_BOOTSTRAP_NAME
:= $(TARGET_BOOTSTRAP_NAME
)
845 else # TARGET_BOOTSTRAP_NAME
846 MK_BOOTSTRAP_NAME
:= $(MK_FULLNAME
)
847 endif # TARGET_BOOTSTRAP_NAME
849 bootcd
: $(SUBDIRS
:%=%_bootcd
)
850 - $(CP
) $(MK_FULLNAME
) $(BOOTCD_DIR
)/reactos
/$(MK_BOOTCDDIR
)/$(MK_BOOTSTRAP_NAME
)
852 else # TARGET_BOOTSTRAP
856 endif # TARGET_BOOTSTRAP
860 endif # MK_IMPLIBONLY
863 .phony
: all depends implib
clean install dist bootcd depends
866 $(SUBDIRS
:%=%_all
): %_all
:
867 $(MAKE
) -C
$* SUBDIRS
= all
869 $(SUBDIRS
:%=%_implib
): %_implib
:
870 $(MAKE
) -C
$* SUBDIRS
= implib
872 $(SUBDIRS
:%=%_clean
): %_clean
:
873 $(MAKE
) -C
$* SUBDIRS
= clean
875 $(SUBDIRS
:%=%_install
): %_install
:
876 $(MAKE
) -C
$* SUBDIRS
= install
878 $(SUBDIRS
:%=%_dist
): %_dist
:
879 $(MAKE
) -C
$* SUBDIRS
= dist
881 $(SUBDIRS
:%=%_bootcd
): %_bootcd
:
882 $(MAKE
) -C
$* SUBDIRS
= bootcd
884 .phony
: $(SUBDIRS
:%=%_all
) $(SUBDIRS
:%=%_implib
) $(SUBDIRS
:%=%_clean
) \
885 $(SUBDIRS
:%=%_install
) $(SUBDIRS
:%=%_dist
) $(SUBDIRS
:%=%_bootcd
)
888 # Precompiled header support
889 # When using PCHs, use dependency tracking to keep the .pch files up-to-date.
892 ifeq ($(ROS_USE_PCH
),yes
)
893 ifneq ($(TARGET_PCH
),)
894 MK_PCHNAME
= $(TARGET_PCH
).pch
896 # GCC generates wrong dependencies for header files.
897 MK_PCHFAKE
= $(TARGET_PCH
:.h
=.o
)
899 - $(RTOUCH
) $(MK_PCHFAKE
)
901 $(MK_PCHNAME
): depend.d
902 - $(RTOUCH
) $(MK_PCHNAME
)
903 - $(CC
) $(TARGET_CFLAGS
) $(TARGET_PCH
)
905 depend.d
: $(MK_PCHFAKE
)
907 - $(CC
) $(TARGET_CFLAGS
) $(TARGET_PCH
) -M
-MF depend.d
915 %.o
: %.c
$(MK_PCHNAME
)
916 $(CC
) $(TARGET_CFLAGS
) -c
$< -o
$@
918 $(CXX
) $(TARGET_CPPFLAGS
) -c
$< -o
$@
920 $(CXX
) $(TARGET_CPPFLAGS
) -c
$< -o
$@
922 $(CXX
) $(TARGET_CPPFLAGS
) -c
$< -o
$@
924 $(AS
) $(TARGET_ASFLAGS
) -c
$< -o
$@
926 $(AS
) $(TARGET_ASFLAGS
) -c
$< -o
$@
928 $(NASM_CMD
) $(NFLAGS
) $(TARGET_NFLAGS
) $< -o
$@
930 $(RC
) $(TARGET_RCFLAGS
) $(RCINC
) $< -o
$@
935 CFLAGS
:= $(TARGET_CFLAGS
)