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