Added .o -> .sys rule to simplify driver makefiles
[reactos.git] / reactos / rules.mak
1 #
2 # Important
3 #
4 .EXPORT_ALL_VARIABLES:
5
6 ifeq ($(HOST),mingw32-linux)
7 TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
8 endif
9
10 #
11 # Choose various options
12 #
13 ifeq ($(HOST),mingw32-linux)
14 NASM_FORMAT = win32
15 PREFIX = i586-mingw32-
16 EXE_POSTFIX =
17 EXE_PREFIX = ./
18 #CP = cp
19 CP = $(PATH_TO_TOP)/rcopy
20 DLLTOOL = $(PREFIX)dlltool --as=$(PREFIX)as
21 NASM_CMD = nasm
22 KM_SPECS = $(TOPDIR)/specs
23 FLOPPY_DIR = /a
24 # DIST_DIR should be relative from the top of the tree
25 DIST_DIR = dist
26 endif
27
28 ifeq ($(HOST),mingw32-windows)
29 NASM_FORMAT = win32
30 PREFIX =
31 EXE_POSTFIX = .exe
32 #CP = copy /B
33 CP = rcopy
34 DLLTOOL = $(PREFIX)dlltool --as=$(PREFIX)as
35 NASM_CMD = nasm
36 RM = del
37 RMDIR = rmdir
38 KM_SPECS = specs
39 DOSCLI = yes
40 FLOPPY_DIR = A:
41 # DIST_DIR should be relative from the top of the tree
42 DIST_DIR = dist
43 endif
44
45 #
46 # Create variables for all the compiler tools
47 #
48 ifeq ($(WITH_DEBUGGING),yes)
49 DEBUGGING_CFLAGS = -g
50 OPTIMIZATIONS = -O2
51 else
52 DEBUGGING_CFLAGS =
53 OPTIMIZATIONS = -O2
54 endif
55
56 ifeq ($(WARNINGS_ARE_ERRORS),yes)
57 EXTRA_CFLAGS = -Werror
58 endif
59
60 DEFINES = -DDBG
61
62 ifeq ($(WIN32_LEAN_AND_MEAN),yes)
63 LEAN_AND_MEAN_DEFINE = -DWIN32_LEAN_AND_MEAN
64 else
65 LEAN_AND_MEAN_DEFINE =
66 endif
67
68 CC = $(PREFIX)gcc
69 NATIVE_CC = gcc
70 NATIVE_NM = nm
71 CFLAGS = $(BASE_CFLAGS) \
72 -pipe \
73 $(OPTIMIZATIONS) \
74 $(LEAN_AND_MEAN_DEFINE) \
75 $(DEFINES) -Wall \
76 -Wstrict-prototypes $(DEBUGGING_CFLAGS) \
77 $(EXTRA_CFLAGS)
78 CXXFLAGS = $(CFLAGS)
79 NFLAGS = -i../../include/ -i../include/ -pinternal/asm.inc -f$(NASM_FORMAT) -d$(NASM_FORMAT)
80 LD = $(PREFIX)ld
81 NM = $(PREFIX)nm
82 OBJCOPY = $(PREFIX)objcopy
83 STRIP = $(PREFIX)strip
84 AS_INCLUDES = -I../include
85 AS = $(PREFIX)gcc -c -x assembler-with-cpp -D__ASM__ $(AS_BASEFLAGS) $(AS_INCLUDES)
86 CPP = $(PREFIX)cpp
87 AR = $(PREFIX)ar
88 RC = $(PREFIX)windres
89 RCINC = --include-dir ../include --include-dir ../../include --include-dir ../../../include
90
91 %.o: %.cc
92 $(CC) $(CFLAGS) -c $< -o $@
93 %.o: %.c
94 $(CC) $(CFLAGS) -c $< -o $@
95 %.o: %.asm
96 $(NASM_CMD) $(NFLAGS) $< -o $@
97 %.coff: %.rc
98 $(RC) $(RCINC) $< $@
99
100 %.sys: %.o
101 $(CC) \
102 -specs=$(PATH_TO_TOP)/services/svc_specs \
103 -mdll \
104 -o junk.tmp \
105 -Wl,--defsym,_end=end \
106 -Wl,--defsym,_edata=__data_end__ \
107 -Wl,--defsym,_etext=etext \
108 -Wl,--base-file,base.tmp $^
109 - $(RM) junk.tmp
110 $(DLLTOOL) \
111 --dllname $@ \
112 --base-file base.tmp \
113 --output-exp temp.exp \
114 --kill-at
115 - $(RM) base.tmp
116 $(CC) \
117 --verbose \
118 -Wl,--image-base,0x10000 \
119 -Wl,-e,_DriverEntry@8 \
120 -Wl,temp.exp \
121 -specs=$(PATH_TO_TOP)/services/svc_specs \
122 -mdll \
123 -o $@.unstripped \
124 $^
125 - $(RM) temp.exp
126 $(STRIP) --strip-debug $<
127 $(CC) \
128 -specs=$(PATH_TO_TOP)/services/svc_specs \
129 -mdll \
130 -o junk.tmp \
131 -Wl,--defsym,_end=end \
132 -Wl,--defsym,_edata=__data_end__ \
133 -Wl,--defsym,_etext=etext \
134 -Wl,--base-file,base.tmp $^
135 - $(RM) junk.tmp
136 $(DLLTOOL) \
137 --dllname $@ \
138 --base-file base.tmp \
139 --output-exp temp.exp \
140 --kill-at
141 - $(RM) base.tmp
142 $(CC) \
143 --verbose \
144 -Wl,--image-base,0x10000 \
145 -Wl,-e,_DriverEntry@8 \
146 -Wl,temp.exp \
147 -specs=$(PATH_TO_TOP)/services/svc_specs \
148 -mdll \
149 -o $@ \
150 $^
151 - $(RM) temp.exp
152
153 RULES_MAK_INCLUDED = 1