7843c794c15b08755376221d792f4b4043f9a330
[reactos.git] / reactos / Makefile
1 # Accepted environment variables:
2 #
3 # ROS_INTERMEDIATE
4 # This variable controls where to put intermediate files. Intermediate
5 # files are generated files that are needed to generate the final
6 # output files. Examples of intermediate files include *.o, *.a, and
7 # *.coff. N.B. Don't put a path separator at the end. The variable
8 # defaults to .\obj-i386.
9 #
10 # ROS_OUTPUT
11 # This variable controls where to put output files. Output files are
12 # generated files that makes up the result of the build process.
13 # Examples of output files include *.exe, *.dll, and *.sys. N.B. Don't
14 # put a path separator at the end. The variable defaults to .\output-i386.
15 #
16
17 .PHONY: all
18 .PHONY: clean
19 all: makefile.auto
20
21 .SUFFIXES:
22
23 ifeq ($(HOST),)
24 ifeq ($(word 1,$(shell gcc -dumpmachine)),mingw32)
25 HOST=mingw32-windows
26 else
27 HOST=mingw32-linux
28 endif
29 endif
30
31 # Default to half-verbose mode
32 ifeq ($(VERBOSE),no)
33 Q = @
34 HALFVERBOSEECHO = no
35 else
36 ifeq ($(VERBOSE),yes)
37 Q =
38 HALFVERBOSEECHO = no
39 else
40 Q = @
41 HALFVERBOSEECHO = yes
42 endif
43 endif
44 ifeq ($(HALFVERBOSEECHO),yes)
45 ECHO_MKDIR =@echo [MKDIR] $@
46 ECHO_INVOKE =@echo [INVOKE] $<
47 ECHO_PCH =@echo [PCH] $@
48 ECHO_CC =@echo [CC] $<
49 ECHO_GAS =@echo [GAS] $<
50 ECHO_NASM =@echo [NASM] $<
51 ECHO_AR =@echo [AR] $@
52 ECHO_WINEBLD=@echo [WINEBLD] $@
53 ECHO_WRC =@echo [WRC] $@
54 ECHO_BIN2RES=@echo [BIN2RES] $<
55 ECHO_DLLTOOL=@echo [DLLTOOL] $@
56 ECHO_LD =@echo [LD] $@
57 ECHO_RBUILD =@echo [RBUILD] $@
58 ECHO_RSYM =@echo [RSYM] $@
59 ECHO_WMC =@echo [WMC] $@
60 ECHO_NCI =@echo [NCI] $@
61 ECHO_CABMAN =@echo [CABMAN] $<
62 ECHO_CDMAKE =@echo [CDMAKE] $@
63 ECHO_TEST =@echo [TEST] $@
64 else
65 ECHO_MKDIR =
66 ECHO_INVOKE =
67 ECHO_PCH =
68 ECHO_CC =
69 ECHO_GAS =
70 ECHO_NASM =
71 ECHO_AR =
72 ECHO_WINEBLD=
73 ECHO_WRC =
74 ECHO_BIN2RES=
75 ECHO_DLLTOOL=
76 ECHO_LD =
77 ECHO_RBUILD =
78 ECHO_RSYM =
79 ECHO_WMC =
80 ECHO_NCI =
81 ECHO_CABMAN =
82 ECHO_CDMAKE =
83 ECHO_TEST =
84 endif
85
86
87 host_gcc = $(Q)gcc
88 host_gpp = $(Q)g++
89 host_ld = $(Q)ld
90 host_ar = $(Q)ar
91 host_objcopy = $(Q)objcopy
92 ifeq ($(HOST),mingw32-linux)
93 EXEPREFIX = ./
94 EXEPOSTFIX =
95 SEP = /
96 nmkdir = -$(Q)mkdir -p
97 gcc = $(Q)mingw32-gcc
98 gpp = $(Q)mingw32-g++
99 ld = $(Q)mingw32-ld
100 ar = $(Q)mingw32-ar
101 objcopy = $(Q)mingw32-objcopy
102 dlltool = $(Q)mingw32-dlltool
103 windres = $(Q)mingw32-windres
104 rm = rm -f
105 cp = $(Q)cp
106 NUL = /dev/null
107 else # mingw32-windows
108 EXEPREFIX =
109 EXEPOSTFIX = .exe
110 ROS_EMPTY =
111 SEP = \$(ROS_EMPTY)
112 nmkdir = -$(Q)mkdir
113 gcc = $(Q)gcc
114 gpp = $(Q)g++
115 ld = $(Q)ld
116 ar = $(Q)ar
117 objcopy = $(Q)objcopy
118 dlltool = $(Q)dlltool
119 windres = $(Q)windres
120 rm = del /f /q
121 cp = $(Q)copy /y
122 NUL = NUL
123 endif
124
125 ifneq ($(ROS_INTERMEDIATE),)
126 INTERMEDIATE = .$(SEP)$(ROS_INTERMEDIATE)$(SEP)
127 INTERMEDIATE_NO_SLASH := $(ROS_INTERMEDIATE)
128 else
129 INTERMEDIATE = obj-i386$(SEP)
130 INTERMEDIATE_NO_SLASH = obj-i386
131 endif
132
133 ifneq ($(ROS_OUTPUT),)
134 OUTPUT = $(ROS_OUTPUT)$(SEP)
135 OUTPUT_NO_SLASH = $(ROS_OUTPUT)
136 else
137 OUTPUT = obj-i386$(SEP)
138 OUTPUT_NO_SLASH = obj-i386
139 endif
140
141 mkdir = -$(Q)$(INTERMEDIATE)rmkdir
142 EXISTS = .exists
143 INTERMEDIATE_EXISTS = $(INTERMEDIATE)$(EXISTS)
144
145 $(INTERMEDIATE_EXISTS):
146 ${nmkdir} $(INTERMEDIATE_NO_SLASH)
147 @echo . > $@
148
149 NTOSKRNL_MC = ntoskrnl$(SEP)ntoskrnl.mc
150 KERNEL32_MC = lib$(SEP)kernel32$(SEP)kernel32.mc
151 BUILDNO_H = include$(SEP)reactos$(SEP)buildno.h
152 BUGCODES_H = include$(SEP)reactos$(SEP)bugcodes.h
153 BUGCODES_RC = ntoskrnl$(SEP)bugcodes.rc
154 ERRCODES_H = include$(SEP)reactos$(SEP)errcodes.h
155 ERRCODES_RC = lib$(SEP)kernel32$(SEP)errcodes.rc
156
157 include tools/tools.mak
158 -include makefile.auto
159
160 PREAUTO := \
161 $(BUILDNO_H) \
162 $(BUGCODES_H) \
163 $(BUGCODES_RC) \
164 $(ERRCODES_H) \
165 $(ERRCODES_RC) \
166 $(NCI_SERVICE_FILES)
167
168 makefile.auto: $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES)
169 $(ECHO_RBUILD)
170 $(Q)$(RBUILD_TARGET) mingw
171
172
173 $(BUGCODES_H) $(BUGCODES_RC): $(WMC_TARGET) $(NTOSKRNL_MC)
174 $(ECHO_WMC)
175 $(Q)$(WMC_TARGET) -i -H $(BUGCODES_H) -o $(BUGCODES_RC) $(NTOSKRNL_MC)
176
177 $(ERRCODES_H) $(ERRCODES_RC): $(WMC_TARGET) $(KERNEL32_MC)
178 $(ECHO_WMC)
179 $(Q)$(WMC_TARGET) -i -H $(ERRCODES_H) -o $(ERRCODES_RC) $(KERNEL32_MC)
180
181 .PHONY: makefile_auto_clean
182 makefile_auto_clean:
183 -@$(rm) makefile.auto $(PREAUTO) 2>$(NUL)
184
185 .PHONY: clean
186 clean: makefile_auto_clean