1# Makefile for FBA, for use with GNU make & Microsoft Visual C++ 2012
2#
3# The first pass makes sure all intermediary targets are present. The second pass updates
4# any targets, if necessary. (Intermediary) targets which have their own unique rules
5# are generated as required.
6
7MAKEOS = cygwin
8ifeq ($(MAKEOS),)
9MAKEOS = $(OSTYPE)
10endif
11
12unexport
13
14#
15#	Declare variables
16#
17
18# Specify the name of the executable file, without ".exe"
19NAME = fba
20COMPILENAME = 3
21
22ifdef BUILD_X64_EXE
23ifdef BUILD_A68K
24undefine BUILD_A68K
25endif
26ifdef BUILD_X86_ASM
27undefine BUILD_X86_ASM
28endif
29endif
30
31ifndef DEBUG
32undefine BUILD_A68K
33endif
34
35ifndef	CPUTYPE
36	CPUTYPE	= i686
37endif
38
39ifdef BUILD_X86_ASM
40	MMX	= 1
41else
42	MMX = 0
43endif
44
45ifndef BUILD_X86_ASM
46	NAME := $(NAME)x
47	COMPILENAME := $(COMPILENAME)x
48endif
49ifdef BUILD_X64_EXE
50	NAME = fba64
51	COMPILENAME = 6
52endif
53ifdef	DEBUG
54	NAME := $(NAME)d
55	COMPILENAME := $(COMPILENAME)d
56endif
57ifdef	SYMBOL
58	NAME := $(NAME)s
59	COMPILENAME := $(COMPILENAME)s
60endif
61ifndef UNICODE
62	NAME := $(NAME)a
63	COMPILENAME := $(COMPILENAME)a
64endif
65ifdef BUILD_VS_XP_TARGET
66	NAME := $(NAME)xp
67endif
68
69cpulevel = 6
70ifeq	($(CPUTYPE),i586)
71	cpulevel = 5
72endif
73ifeq	($(CPUTYPE),pentium)
74	cpulevel = 5
75endif
76ifeq	($(CPUTYPE),k6)
77	cpulevel = 5
78endif
79ifeq	($(CPUTYPE),i786)
80	cpulevel = 7
81endif
82ifeq	($(CPUTYPE),pentium4)
83	cpulevel = 7
84endif
85ifeq	($(CPUTYPE),athlon)
86	cpulevel = 7
87endif
88
89ifeq	($(cpulevel),6)
90	ppro = ppro
91else
92	NAME := $(NAME)$(CPUTYPE)
93endif
94
95
96
97
98#
99#	Specify paths/files
100#
101
102objdir	= obj/VC/$(COMPILENAME)/
103srcdir	= src/
104
105include makefile.burn_rules
106include makefile.burner_win32_rules
107
108incdir	= $(foreach dir,$(alldir),/I$(srcdir)$(dir)) /I$(objdir)dep/generated
109
110ifdef UNICODE
111# lib	= unicows.lib
112endif
113
114lib	+=	user32.lib gdi32.lib comdlg32.lib comctl32.lib shell32.lib winmm.lib ole32.lib shlwapi.lib advapi32.lib setupapi.lib wininet.lib
115
116ifdef INCLUDE_AVI_RECORDING
117lib +=	vfw32.lib
118endif
119
120ifdef	BUILD_X86_ASM
121autobj += hq3xs.o hq_shared32.o
122endif
123
124ifdef	BUILD_A68K
125a68k.o	= $(objdir)cpu/a68k/a68k.o
126endif
127
128license.rtf = $(srcdir)dep/generated/license.rtf
129driverlist.h = $(srcdir)dep/generated/driverlist.h
130ctv.h	= $(srcdir)dep/generated/ctv.h
131toa_gp9001_func.h = $(srcdir)dep/generated/toa_gp9001_func.h
132neo_sprite_func.h = $(srcdir)dep/generated/neo_sprite_func.h
133cave_tile_func.h = $(srcdir)dep/generated/cave_tile_func.h
134cave_sprite_func.h = $(srcdir)dep/generated/cave_sprite_func.h
135psikyo_tile_func.h = $(srcdir)dep/generated/psikyo_tile_func.h
136pgm_sprite.h = $(srcdir)dep/generated/pgm_sprite.h
137build_details.h = $(srcdir)dep/generated/build_details.h
138
139allobj	= $(objdir)cpu/m68k/m68kcpu.o $(objdir)cpu/m68k/m68kops.o $(objdir)burner/win32/resource.res \
140	  $(foreach file,$(autobj:.o=.c), \
141		$(foreach dir,$(alldir),$(subst $(srcdir),$(objdir), \
142		$(firstword $(subst .c,.o,$(wildcard $(srcdir)$(dir)/$(file))))))) \
143	  $(foreach file,$(autobj:.o=.cpp), \
144		$(foreach dir,$(alldir),$(subst $(srcdir),$(objdir), \
145		$(firstword $(subst .cpp,.o,$(wildcard $(srcdir)$(dir)/$(file))))))) \
146	  $(foreach file,$(autobj:.o=.asm), \
147		$(foreach dir,$(alldir),$(subst $(srcdir),$(objdir), \
148		$(firstword $(subst .asm,.o,$(wildcard $(srcdir)$(dir)/$(file)))))))
149
150ifdef BUILD_A68K
151allobj += $(a68k.o)
152endif
153
154autdrv	:= $(drvsrc:.cpp=.o)
155
156#
157#
158#	Specify compiler/linker/assembler
159#
160#
161
162CC	= cl
163CXX	= cl
164LD	= link
165AS	= nasm
166
167incdir +=  /Isrc\dep\VC\include
168
169ifndef BUILD_X64_EXE
170LDFLAGS	=  /NOLOGO /INCREMENTAL:NO /MACHINE:X86 /LIBPATH:src\VC\lib /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcd.lib # /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:libcp.lib /NODEFAULTLIB:libcpd.lib /NODEFAULTLIB:libcpmt.lib /NODEFAULTLIB:libcpmtd.lib
171else
172LDFLAGS	=  /NOLOGO /INCREMENTAL:NO /MACHINE:X64 /LIBPATH:src\VC\lib /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcd.lib # /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:libcp.lib /NODEFAULTLIB:libcpd.lib /NODEFAULTLIB:libcpmt.lib /NODEFAULTLIB:libcpmtd.lib
173endif
174
175ASFLAGS	=  -O1 -f coff -w-orphan-labels
176
177DEF		= /DBUILD_WIN32 /DUSE_SPEEDHACKS /DFILENAME=$(NAME) /DMMX=$(MMX) /DZLIB_WINAPI /DDECL_SPEC=__cdecl
178
179# For lib7z
180ifdef INCLUDE_7Z_SUPPORT
181DEF := $(DEF) /D_7ZIP_PPMD_SUPPPORT
182endif
183
184ifdef UNICODE
185	DEF	:= $(DEF) /D_UNICODE
186endif
187
188ifdef SPECIALBUILD
189	DEF	:= $(DEF) /DSPECIALBUILD=$(SPECIALBUILD)
190endif
191
192ifdef FASTCALL
193	DEF	:= $(DEF) /DFASTCALL
194endif
195
196ifdef DEBUG
197	DEF	:= $(DEF) /DFBA_DEBUG
198endif
199
200ifdef ROM_VERIFY
201	DEF	:= $(DEF) /DROM_VERIFY
202endif
203
204ifdef INCLUDE_7Z_SUPPORT
205	DEF := $(DEF) /DINCLUDE_7Z_SUPPORT
206endif
207
208ifdef INCLUDE_AVI_RECORDING
209	DEF := $(DEF) /DINCLUDE_AVI_RECORDING
210endif
211
212ifdef LSB_FIRST
213	DEF	:= $(DEF) /DLSB_FIRST
214endif
215
216ifdef INCLUDE_LIB_PNGH
217	DEF := $(DEF) /DINCLUDE_LIB_PNGH
218endif
219
220ifdef BUILD_A68K
221	DEF	:= $(DEF) /DBUILD_A68K
222endif
223
224ifdef BUILD_X86_ASM
225	DEF := $(DEF) /DBUILD_X86_ASM
226endif
227
228ifdef BUILD_X64_EXE
229	DEF := $(DEF) /DBUILD_X64_EXE /DXBYAK_NO_OP_NAMES /DMIPS3_X64_DRC
230endif
231
232ifdef BUILD_VS_XP_TARGET
233	DEF := $(DEF) /DBUILD_VS_XP_TARGET
234endif
235
236ifdef USE_SEGOE
237	DEF	:= $(DEF) /DUSE_SEGOE
238endif
239
240ifdef	SYMBOL
241	CFLAGS	 = /nologo /Od /GF /GS /RTC1 /Zi /Zc:forScope /MTd /EHsc /Fp$(objdir)/dep/generated/ # /Wall
242	ASFLAGS += -g
243	LDFLAGS += /DEBUG
244	DEF	:= $(DEF) /D_DEBUG
245
246ifdef PROFILE
247	CFLAGS	 += /Oy
248else
249	CFLAGS	 += /Oy-
250endif
251
252else
253	CFLAGS	 = /nologo /w /O2 /Ox /Oi /Ot /Oy /Ob2 /GF /Gs /Gy /GL /Zc:forScope /MT /EHsc
254	LDFLAGS += /LTCG:STATUS
255endif
256
257ifdef BUILD_VS_XP_TARGET
258	CFLAGS	+= /D_USING_V110_SDK71_
259	LDFLAGS += /SUBSYSTEM:WINDOWS,5.01
260endif
261
262# Change the priority of some warnings so they are only shown at warning level 4. They are:
263# lvl4 C4127: conditional expression is constant
264# lvl4 C4201: nonstandard extension used : nameless struct/union
265# lvl1 C4244: 'variable' : conversion from 'type' to 'type', possible loss of data
266#    3        'conversion' conversion from 'type1' to 'type2', possible loss of data
267# lvl4 C4505: 'function' : unreferenced local function has been removed
268# lvl4 C4514: 'function' : unreferenced inline function has been removed
269# lvl4 C4611: interaction between 'function' and C++ object destruction is non-portable
270# lvl4 C4710: 'function' : function not inlined
271# lvl1 C4799: No EMMS at end of function 'function'
272# lvl3 C4800: 'type' : forcing value to bool 'true' or 'false' (performance warning)
273CFLAGS +=  /w44201 /w44127 /w44244 /w44505 /w44514 /w44611 /w44710 /w44799 /w44800 $(DEF) $(incdir)
274CXXFLAGS = $(CFLAGS)
275
276#
277#
278#	Specify paths
279#
280#
281
282vpath %.asm	$(foreach dir,$(alldir),$(srcdir)$(dir)/ )
283vpath %.cpp	$(foreach dir,$(alldir),$(srcdir)$(dir)/ )
284vpath %.c	$(foreach dir,$(alldir),$(srcdir)$(dir)/ )
285vpath %.h	$(foreach dir,$(alldir),$(srcdir)$(dir)/ )
286vpath %.rc	$(foreach dir,$(alldir),$(srcdir)$(dir)/ )
287
288vpath %.o 	$(foreach dir,$(alldir),$(objdir)$(dir)/ )
289vpath %.res	$(foreach dir,$(alldir),$(srcdir)$(dir)/ )
290
291#
292#
293#	Rules
294#
295#
296
297.PHONY:	all init cleandep touch clean
298
299ifeq ($(MAKELEVEL),1)
300
301all:	init $(autdrv) $(autobj) resource.res
302	$(MAKE) -f makefile.vc
303
304else
305
306all:	$(NAME).exe
307
308endif
309
310#
311#
312#	Rule for linking the executable
313#
314#
315
316ifeq ($(MAKELEVEL),2)
317
318$(objdir)/drivers.lib:		$(autdrv)
319	@echo Linking drivers...
320ifdef BUILD_X64_EXE
321	@LIB /MACHINE:X64 /LTCG /OUT:$@ $^
322else
323	@LIB /MACHINE:X86 /LTCG /OUT:$@ $^
324endif
325
326$(NAME).exe:	$(allobj) $(objdir)/drivers.lib
327	@echo
328	@echo Linking executable $(NAME).exe...
329	$(LD) $(LDFLAGS) /OUT:$@ $^ $(lib)
330
331ifdef	DEBUG
332
333#	Don't compress when making a debug build
334
335else
336ifdef	COMPRESS
337	@upx --best $@
338endif
339endif
340endif
341
342ifeq ($(MAKELEVEL),1)
343ifdef FORCE_UPDATE
344$(build_details.h): FORCE
345endif
346endif
347
348#
349#	Generate the gamelist
350#
351
352burn.o burn.d:	driverlist.h
353
354$(driverlist.h): $(drvsrc) $(srcdir)dep/scripts/gamelist.pl
355ifdef	PERL
356	@$(srcdir)dep/scripts/gamelist.pl -o $@ -l gamelist.txt \
357		$(filter %.cpp,$(foreach file,$(drvsrc:.o=.cpp),$(foreach dir,$(alldir), \
358		$(firstword $(wildcard $(srcdir)$(dir)/$(file))))))
359else
360ifeq ($(MAKELEVEL),2)
361	@echo
362	@echo Warning: Perl is not available on this system.
363	@echo $@ cannot be updated or created!
364	@echo
365endif
366endif
367
368#
369# Verify if driverlist.h needs to be updated
370#
371
372#ifeq ($(MAKELEVEL),1)
373#ifdef FORCE_UPDATE
374#$(driverlist.h): FORCE
375#endif
376#endif
377
378
379#
380#	Fix the .rc file
381#
382
383resource.res resource.d:	app.rc version.rc version.h $(build_details.h) $(license.rtf)
384
385$(license.rtf): $(srcdir)license.txt $(srcdir)dep/scripts/license2rtf.pl
386
387ifdef	PERL
388ifdef USE_SEGOE
389	$(srcdir)dep/scripts/license2rtf.pl $< -o $(srcdir)dep/generated/$(@F:.rc=.rtf) -f 'Segoe UI'
390else
391	$(srcdir)dep/scripts/license2rtf.pl $< -o $(srcdir)dep/generated/$(@F:.rc=.rtf)
392endif
393else
394ifeq ($(MAKELEVEL),2)
395	@echo
396	@echo Warning: Perl is not available on this system.
397	@echo $@ cannot be updated or created!
398	@echo
399endif
400endif
401
402resource.rc: app.rc $(license.rc) $(srcdir)burner/resource/fba.ico $(srcdir)burner/resource/about.bmp $(srcdir)burner/resource/splash.bmp $(srcdir)burner/resource/misc.bmp
403
404#
405#	Generate some info on the build details
406#
407
408about.o about.d systeminfo.o systeminfo.d: $(build_details.h)
409
410$(build_details.h):	$(srcdir)dep/scripts/build_details.cpp
411	$(CC) $(CFLAGS) $< /Fo$(objdir)dep/generated/ /Fe$(objdir)dep/generated/build_details.exe
412	$(objdir)dep/generated/build_details.exe >$@
413
414#
415#	Compile 68000 cores
416#
417
418# A68K
419
420ifdef BUILD_A68K
421$(a68k.o):	fba_make68k.c
422	echo "Compiling A68K MC68000 core... "
423	$(CC) $(CFLAGS) -DWIN32 $< /Fo$(subst $(srcdir),$(objdir),$(<D))/ /Fe$(subst $(srcdir),$(objdir),$(<D))/$(<F:.c=.exe) /link $(LDFLAGS) /SUBSYSTEM:CONSOLE
424	$(subst $(srcdir),$(objdir),$(<D))/$(<F:.c=.exe) $(@:.o=.asm) $(@D)/a68k_tab.asm 00 $(ppro)
425	@echo Assembling A68K MC68000 core...
426	$(AS) $(ASFLAGS) $(@:.o=.asm) -o $@
427endif
428
429# Musashi
430
431$(objdir)cpu/m68k/m68kcpu.o: $(srcdir)cpu/m68k/m68kcpu.c $(objdir)dep/generated/m68kops.h $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h
432	@echo "Compiling Musashi MC680x0 core... "
433	$(CC) $(CFLAGS) /DINLINE="__inline static" /c $(srcdir)cpu/m68k/m68kcpu.c /Fo$(objdir)cpu/m68k/m68kcpu.o
434
435$(objdir)cpu/m68k/m68kops.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kops.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h
436	@echo "Compiling Musashi MC680x0 core... "
437	$(CC) $(CFLAGS) /DINLINE="__inline static" /c $(objdir)dep/generated/m68kops.c /Fo$(objdir)cpu/m68k/m68kops.o
438
439$(objdir)cpu/m68k/m68kopac.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kopac.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h
440	@echo "Compiling Musashi MC680x0 core... "
441	$(CC) $(CFLAGS) /DINLINE="__inline static" /c $(objdir)dep/generated/m68kopac.c /Fo$(objdir)cpu/m68k/m68kopac.o
442
443$(objdir)cpu/m68k/m68kopdm.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kopdm.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h
444	@echo "Compiling Musashi MC680x0 core... "
445	$(CC) $(CFLAGS) /DINLINE="__inline static" /c $(objdir)dep/generated/m68kopdm.c /Fo$(objdir)cpu/m68k/m68kopdm.o
446
447$(objdir)cpu/m68k/m68kopnz.o: $(objdir)cpu/m68k/m68kmake.exe $(objdir)dep/generated/m68kops.h $(objdir)dep/generated/m68kopnz.c $(srcdir)cpu/m68k/m68k.h $(srcdir)cpu/m68k/m68kconf.h
448	@echo "Compiling Musashi MC680x0 core... "
449	$(CC) $(CFLAGS) /DINLINE="__inline static" /c $(objdir)dep/generated/m68kopnz.c /Fo$(objdir)cpu/m68k/m68kopnz.o
450
451$(objdir)dep/generated/m68kops.h: $(objdir)cpu/m68k/m68kmake.exe $(srcdir)cpu/m68k/m68k_in.c
452	$(objdir)/cpu/m68k/m68kmake $(objdir)dep/generated/ $(srcdir)cpu/m68k/m68k_in.c
453
454$(objdir)cpu/m68k/m68kmake.exe: $(srcdir)cpu/m68k/m68kmake.c
455	@echo "Compiling Musashi MC680x0 core... "
456	$(CC) $(CFLAGS) /DINLINE="__inline static" $(srcdir)cpu/m68k/m68kmake.c /Fo$(objdir)cpu/m68k/ /Fe$(objdir)cpu/m68k/m68kmake.exe /link $(LDFLAGS) /SUBSYSTEM:CONSOLE
457
458
459#
460#	Extra rules for generated header file cvt.h, needed by ctv.cpp
461#
462
463ctv.o:	$(ctv.h)
464
465$(ctv.h):	ctv_make.cpp
466	@echo Generating... $(srcdir)dep/generated/$(@F)
467	$(CC) $(CXXFLAGS) $< /Fo$(subst $(srcdir),$(objdir),$(<D))/ /Fe$(subst $(srcdir),$(objdir),$(<D))/$(<F:.cpp=.exe) /link $(LDFLAGS) /SUBSYSTEM:CONSOLE
468	$(subst $(srcdir),$(objdir),$(<D))/$(<F:.cpp=.exe) >$@
469
470#
471#	Extra rules for generated header file toa_gp9001_func.h, needed by toa_gp9001.cpp
472#
473
474toa_bcu2.o toa_gp9001.o: $(toa_gp9001_func.h)
475
476$(toa_gp9001_func.h):	$(srcdir)dep/scripts/toa_gp9001_func.pl
477	$(srcdir)dep/scripts/toa_gp9001_func.pl -o $(toa_gp9001_func.h)
478
479#
480#	Extra rules for generated header file neo_sprite_func.h, needed by neo_sprite.cpp
481#
482
483neo_sprite.o: $(neo_sprite_func.h)
484
485$(neo_sprite_func.h):	$(srcdir)dep/scripts/neo_sprite_func.pl
486	$(srcdir)dep/scripts/neo_sprite_func.pl -o $(neo_sprite_func.h)
487
488#
489#	Extra rules for generated header file cave_tile_func.h, needed by cave_tile.cpp
490#
491
492cave_tile.o: $(cave_tile_func.h)
493
494$(cave_tile_func.h):	$(srcdir)dep/scripts/cave_tile_func.pl
495	$(srcdir)dep/scripts/cave_tile_func.pl -o $(cave_tile_func.h)
496
497#
498#	Extra rules for generated header file cave_sprite_func.h, needed by cave_sprite.cpp
499#
500
501cave_sprite.o: $(cave_sprite_func.h)
502
503$(cave_sprite_func.h):	$(srcdir)dep/scripts/cave_sprite_func.pl
504	$(srcdir)dep/scripts/cave_sprite_func.pl -o $(cave_sprite_func.h)
505
506#
507#	Extra rules for generated header file psikyo_tile_func.h / psikyo_sprite_func.h, needed by psikyo_tile.cpp / psikyo_sprite.cpp
508#
509
510psikyo_tile.o psikyo_sprite.o: $(psikyo_tile_func.h)
511
512$(psikyo_tile_func.h):	$(srcdir)dep/scripts/psikyo_tile_func.pl
513	$(srcdir)dep/scripts/psikyo_tile_func.pl -o $(psikyo_tile_func.h)
514
515#
516#	Extra rules for generated header file pgm_sprite.h, needed by pgm_draw.cpp
517#
518
519pgm_draw.d pgm_draw.o:	$(pgm_sprite.h)
520
521$(pgm_sprite.h):	pgm_sprite_create.cpp
522	@echo Generating... $(srcdir)dep/generated/$(@F)
523	$(CC) $(CXXFLAGS) $< /Fo$(subst $(srcdir),$(objdir),$(<D))/ /Fe$(subst $(srcdir),$(objdir),$(<D))/$(<F:.cpp=.exe) /link $(LDFLAGS) /SUBSYSTEM:CONSOLE
524	$(subst $(srcdir),$(objdir),$(<D))/$(<F:.cpp=.exe) >$@
525
526#
527#	Generic rule for resource files
528#
529
530%.res:	%.rc
531	@echo Compiling resource file... $(<F)
532	rc $(DEF) /n /Fo $(subst $(srcdir),$(objdir),$(<D))/$(@F) $(incdir) $<
533
534#
535#	Generic rules for C/C++ files
536#
537
538ifeq ($(MAKELEVEL),1)
539
540%.o:	%.cpp
541	@echo Compiling $<...
542	@$(CC) $(CXXFLAGS) /c $< /Fo$(subst $(srcdir),$(objdir),$(<D))/$(@F)
543
544%.o:	%.c
545	@echo Compiling $<...
546	@$(CC) $(CFLAGS) /c /Dinline=__inline $< /Fo$(subst $(srcdir),$(objdir),$(<D))/$(@F)
547
548%.o:	%.asm
549	@echo Assembling $<...
550	@$(AS) $(ASFLAGS) $< -o$(subst $(srcdir),$(objdir),$(<D))/$(@F)
551
552else
553
554%.o:	%.c
555	@echo Compiling $<...
556	@$(CC) $(CFLAGS) /c /Dinline=__inline $< /Fo $@
557
558%.o:	%.asm
559	@echo Assembling $<...
560	@$(AS) $(ASFLAGS) $< -o $@
561
562%.o:
563	@echo Compiling $<...
564	@$(CC) $(CXXFLAGS) /c $< /Fo $@
565
566endif
567
568#
569#	Phony targets
570#
571
572init:
573
574ifdef	DEBUG
575	@echo Making debug build...
576else
577	@echo Making normal build...
578endif
579	@echo
580ifeq ($(MAKEOS),cygwin)
581	@mkdir -p $(foreach dir, $(alldir),$(objdir)$(dir))
582	@mkdir -p $(srcdir)dep/generated
583else
584	@echo nt
585	@mkdir $(foreach dir, $(alldir),$(objdir)$(dir))
586	@mkdir $(srcdir)dep/generated
587endif
588
589touch:
590	@echo Marking all targets for $(NAME) as uptodate...
591	-@touch $(NAME).exe
592	-@touch -c -r $(NAME).exe $(srcdir)/dep/generated/*
593	-@for dir in $(alldir); do touch -c  -r $(NAME).exe $(objdir)$$dir/*; done
594
595clean:
596	@echo Removing all files from $(objdir)...
597ifeq ($(MAKEOS),cygwin)
598	-@rm -f -r $(objdir)
599	-@rm -f -r $(ctv.h)
600else
601	-@del -f -s $(objdir)
602	-@del -f -s $(ctv.h)
603endif
604
605ifdef	PERL
606	@echo Removing all files generated with perl scripts...
607ifeq ($(MAKEOS),cygwin)
608	-@rm -f -r $(driverlist)
609else
610	-@del -f -s $(driverlist)
611endif
612
613endif
614
615
616#
617#	Rule to force recompilation of any target that depends on it
618#
619
620FORCE:
621