• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#	Makefile.MSVC: MSVC Makefile for LAME
2#
3#	2000-2010 Robert Hegemann
4#	dedicated to the LAME project https://lame.sourceforge.io/
5###############################################################################
6
7
8
9#__ readme ____________________________________________________________________
10#	nmake -f Makefile.MSVC
11#		-> build lame, but not mp3x
12#		-> use Robert's code modifications
13#		-> assume MSVC 6.0 compiler available
14#		-> assume NASM available
15#		-> assemble MMX code with NASM
16#		-> no compiler warnings
17#       -> use single precision float
18#
19#	passing arguments, one can modify the default behaviour:
20#	COMP=<not INTEL or BCC>    ->  use MS compiler
21#	WARN=<anything but OFF>    ->  give verbose compiler warnings
22#	ASM=<anything but YES>     ->  no NASM nor MMX
23#	MMX=<anything but YES>     ->  do not assemble MMX code
24#	CFG=<anything but RH>      ->  disable Robert's modifications
25#	CPU=P1                     ->  optimize for Pentium instead of P II/III
26#	CPU=P2                     ->  optimize for Pentium II/III, you need a PII or better
27#	CPU=P3                     ->  optimize for Pentium III, you need a PIII or better
28#	GTK=YES                    ->  have GTK, adds mp3x to default targets
29#	PREC=<anything but SINGLE> ->  use double instead of single float
30#	SNDFILE=<anything but YES> ->  do not use LibSndfile for reading input files
31#
32#	Example:
33#	nmake -f Makefile.MSVC CPU=P1 GTK=YES
34#____________________________________________________________________ readme __
35
36
37
38#	targets <-> DOS filenames
39
40T_LAME = lame.exe
41T_MP3X = mp3x.exe
42T_MP3RTP = mp3rtp.exe
43T_DLL = libmp3lame.dll
44T_LIB_DYNAMIC = libmp3lame.lib
45T_LIB_STATIC = libmp3lame-static.lib
46T_LEGACY_DLL = lame_enc.dll
47
48TARGET_DIR = .\output\
49
50#	default targets
51
52PGM = $(T_LAME)
53
54#	some default settings
55
56!	IF "$(MSVCVER)" != ""
57COMP = MS
58!	IF "$(MSVCVER)" == "Win64"
59!	IF "$(ASM)" == ""
60ASM = NO # or it could be ML64 if we want to use it...
61GTK = NO
62!	ENDIF
63!	ENDIF
64!	ELSE
65!	IF "$(COMP)" == ""
66COMP = MSVC
67!	ENDIF
68!	ENDIF
69
70!	IF "$(ASM)" == ""
71ASM = YES
72!	ENDIF
73
74!	IF "$(MMX)" == ""
75MMX = YES
76!	ENDIF
77
78!	IF "$(CFG)" == ""
79CFG = RH
80!	ENDIF
81
82!	IF "$(CPU)" == ""
83CPU = P2auto
84!if "$(PROCESSOR_LEVEL)"=="6"
85CPU = P6
86!endif
87!	ENDIF
88
89!	IF "$(WARN)" == ""
90WARN = OFF
91!	ENDIF
92
93!	IF "$(PREC)" == ""
94PREC = SINGLE
95!	ENDIF
96
97!	IF "$(SNDFILE)" == ""
98SNDFILE = NO
99!	ENDIF
100
101OFF = win32
102MACHINE = /machine:I386
103LIB_OPTS = /nologo $(MACHINE)
104
105!	MESSAGE ----------------------------------------------------------------------
106!	IF "$(CFG)" == ""
107!	 MESSAGE building LAME
108!	ELSE
109!	 MESSAGE building LAME featuring $(CFG)
110!	ENDIF
111!	IF "$(ASM)" == "YES"
112!	 MESSAGE + ASM
113!	 IF "$(MMX)" == "YES"
114!	  MESSAGE + MMX
115!	 ENDIF
116!	ENDIF
117!	IF "$(GTK)" == "YES"
118!	 MESSAGE + GTK
119!	ENDIF
120!	IF "$(COMP)" == "INTEL"
121!	 MESSAGE using INTEL COMPILER
122!	 IF "$(CPU)" == "P1"
123!	  MESSAGE + optimizing for Pentium (MMX)
124!	 ELSE
125!	  IF "$(CPU)" == "P2"
126!	   MESSAGE + you need a Pentium II or better
127!	  ELSE
128!	   IF "$(CPU)" == "P3"
129!	    MESSAGE + you need a Pentium III or better
130!	   ELSE
131!	    MESSAGE + optimizing for Pentium II/III
132!	   ENDIF
133!	  ENDIF
134!	 ENDIF
135!	ELSE
136!	 IF "$(MSVCVER)" == "6.0"
137!	  MESSAGE + using MSVC 6.0 32-Bit Compiler
138!	  IF "$(CPU)" == "P1"
139!	   MESSAGE + optimizing for Pentium (MMX) (may slow down PIII a few percent)
140!	  ELSE
141!	   MESSAGE + optimizing for Pentium II/III
142!	  ENDIF
143!	 ELSEIF "$(MSVCVER)" == "8.0"
144!	  MESSAGE + using MSVC 8.0 32-Bit Compiler
145!	  IF "$(CPU)" == "P1"
146!	   MESSAGE + optimizing for Pentium (MMX) (may slow down PIII a few percent)
147!	  ELSE
148!	   MESSAGE + optimizing for Pentium II/III
149!	  ENDIF
150!	 ELSE
151!	  IF "$(MSVCVER)" == "Win64"
152!	   MESSAGE + using MS 64-Bit Compiler
153!	  ELSE
154!	   MESSAGE using MS COMPILER
155!	   IF "$(CPU)" == "P1"
156!	    MESSAGE + optimizing for Pentium (MMX) (may slow down PIII a few percent)
157!	   ELSE
158!	    MESSAGE + optimizing for Pentium II/III
159!	   ENDIF
160!	  ENDIF
161!	 ENDIF
162!	ENDIF
163!	IF "$(PREC)" == "SINGLE"
164!	 MESSAGE + using Single precision
165!	ENDIF
166!	IF "$(SNDFILE)" == "YES"
167!	 MESSAGE + using LibSndfile reading input files
168!	ENDIF
169!	MESSAGE ----------------------------------------------------------------------
170
171!	IF "$(COMP)" != "INTEL"
172!	IF "$(COMP)" != "BCC"
173
174#__ Microsoft C options _______________________________________________________
175#
176#	/O2     maximize speed
177#	/Ob<n>  inline expansion
178#	/Og     enable global optimizations
179#	/Oi     enable intrinsic functions
180#	/Ot     favor code speed
181#	/Oy     enable frame pointer omission
182#	/G5     Pentium optimization
183#	/G6     Pentium II/III optimization
184#	/GA     optimize for Windows Application
185#	/GF     enable read-only string pooling
186#	/Gf     enable string spooling
187#	/Gs     disable stack checking calls
188#	/Gy     separate functions for linker
189#	/QIfdiv generate code for Pentium FDIV fix
190#	/QI0f   generate code for Pentium 0x0f erratum fix
191#
192#	remarks:
193#	 - aliasing options seem to break code
194#	 - try to get the Intel compiler demonstration code!
195#	   ICL produces faster code.
196
197# debugging options
198# CC_OPTS = /nologo /Zi /Ge /GZ
199# LN_OPTS = /nologo /debug:full /debugtype:cv /fixed:no
200
201# profiling options
202# CC_OPTS = /nologo /Zi /O2b2gity /G6As /DNDEBUG
203# LN_OPTS = /nologo /debug:full /debugtype:cv /fixed:no /profile
204
205# release options
206!	IF "$(MSVCVER)" == "Win64"
207CC_OPTS = /nologo /DWin64 /O2b2ity /GAy /Gs1024 /Zp8 /GL /GS- /Zi
208!	ELSEIF "$(MSVCVER)" == "8.0"
209CC_OPTS = /nologo /O2 /Wp64 /Oi /GL /arch:SSE /fp:precise
210!	ELSEif "$(CPU)"=="P6"
211CC_OPTS = /nologo /O2 /Ob2 /GAy /Gs1024 /Zp8 /Zi
212!else
213CC_OPTS = /nologo /O2 /Ob2 /GAy /Gs1024 /QIfdiv /QI0f /YX
214!	ENDIF
215
216!	IF "$(MSVCVER)" == "6.0"
217!	IF "$(CPU)" == "P1"
218CC_OPTS = $(CC_OPTS) /G5
219!	ELSE
220CC_OPTS = $(CC_OPTS) /G6
221!	ENDIF
222!	ENDIF
223
224!	IF "$(WARN)" == "OFF"
225CC_OPTS = $(CC_OPTS) /w
226!	ELSE
227CC_OPTS = $(CC_OPTS) /W$(WARN)
228!	ENDIF
229
230!	IF "$(PREC)" == "SINGLE"
231CC_OPTS = $(CC_OPTS) /DFLOAT8=float /DREAL_IS_FLOAT=1
232!	ENDIF
233
234# temporary remove NDEBUG, see configure.in
235#CC_OPTS = $(CC_OPTS) /DNDEBUG /MT
236CC_OPTS = $(CC_OPTS) /MT
237
238LN_OPTS = /nologo /pdb:none
239LN_DLL = /nologo /DLL
240
241CC_OUT = /Fo
242LN_OUT = /OUT:
243
244CC = cl
245LN = link
246
247#_______________________________________________________ Microsoft C options __
248
249
250!	ELSE
251
252#__ Borland BCC options _______________________________________________________
253#
254#	first draft, DLL not working, generates very slow code!
255BCCINST = C:/Borland/BCC55
256
257CC_OPTS = -pc -q -ff -fp -jb -j1 -tWC -tWM -O2 -OS -I$(BCCINST)/include -DNDEBUG -DWIN32
258# dll >> -tWD
259LN_OPTS = -lGn -lGi -lap -lx -L$(BCCINST)/lib
260# dll >> -Tpd
261!	IF "$(CPU)" == "P1"
262CC_OPTS = $(CC_OPTS) -5
263!	ELSE
264CC_OPTS = $(CC_OPTS) -6
265!	ENDIF
266
267!	IF "$(WARN)" == "OFF"
268CC_OPTS = $(CC_OPTS) -w-
269!	ELSE
270CC_OPTS = $(CC_OPTS)
271!	ENDIF
272
273LN_DLL =
274#$(CCINST)/lib/cw32R.lib
275LN_OUT = -e
276CC_OUT = -o
277
278CC = bcc32
279LN = bcc32
280
281OFF = obj
282
283!	ENDIF
284#_______________________________________________________ Borland BCC options __
285
286
287!	ELSE
288
289#__ Intel 4.5 options _________________________________________________________
290#
291#	/YX         enable automatic precompiled header file creation/usage
292#	/Ox         maximum optimization same as /O2 without /Gfy
293#	/O2         same as /Gfsy /Ob1gyti
294#	/Gd      1) make cdecl the default calling convention
295#	/G5      2) optimized for Pentium
296#	/G6      3) optimized for Pentium II/III
297#	/GA         assume single threaded
298#	/Gs[n]      disable stack checks for functions with <n bytes of locals
299#	/GF         read-only string pooling optimization
300#	/Gy         separate functions for the linker
301#	/Qunroll    unroll loops with default heuristic
302#	/QIfist     enable fast float to int conversion
303#	/QIfdiv     enable patch for Pentium with FDIV erratum
304#	/QI0f       enable patch for Pentium with 0f erratum
305#	/Qip     2) enable single-file IP optimizations (within files)
306#	/Qipo       enable multi-file IP optimizations (between files)
307#	/Qipo_wp 4) enable entire program multi-file IP optimizations
308#	/QaxiMK     automatic use of specialized code for PII/III, MMX, SIMD
309#
310#	remarks:
311#	1) slows speed down, not using
312#	2) faster compared to 3) or 4) on Pentium MMX at 200 MHz
313
314!	IF "$(CPU)" == "P1"
315CC_OPTS = /G5 /QaxiMK /QIfdiv /QI0f
316!	ELSE
317!	IF "$(CPU)" == "P2"
318CC_OPTS = /G6 /Qxi /QaxMK
319!	ELSE
320!	IF "$(CPU)" == "P3"
321CC_OPTS = /G6 /QxiMK
322!	ELSE
323CC_OPTS = /G6 /QaxiMK /QIfdiv /QI0f
324!	ENDIF
325!	ENDIF
326!	ENDIF
327
328!	IF "$(WARN)" == "OFF"
329CC_OPTS = $(CC_OPTS) /w
330!	ELSE
331CC_OPTS = $(CC_OPTS) /W2 /Wport
332!	ENDIF
333
334!	IF "$(PREC)" == "SINGLE"
335CC_OPTS = $(CC_OPTS) /DFLOAT8=float /DREAL_IS_FLOAT=1
336!	ENDIF
337
338CC_OPTS = /nologo /DNDEBUG /YX /GA /Ox /Ob2 \
339          /Qunroll /Qsox- /Qip $(CC_OPTS)
340
341
342LN_OPTS = $(CC_OPTS)
343LN_DLL = /LD
344LN_OUT = /Fe
345CC_OUT = /Fo
346
347CC = icl
348LN = icl
349#_________________________________________________________ Intel 4.5 options __
350
351!	ENDIF
352
353
354
355#__ LIBSNDFILE ________________________________________________________________
356#
357#	uncomment the following if you want LibSndfile for input
358#	It's always a good idea to compile it in!
359#
360!	IF "$(SNDFILE)" == "YES"
361SNDFILE_OPTS = /DLIBSNDFILE
362LIBSNDFILE = $(SNDFILE_DIR)libsndfile.lib
363!   ENDIF
364#________________________________________________________________ LIBSNDFILE __
365
366
367
368#-- MISC --
369CPP_OPTS = /DHAVE_CONFIG_H -I.
370
371
372
373#__ FRAME ANALYZER SUPPORT ____________________________________________________
374#
375#	Assuming you have "glib-dev" and "gtk+-dev" installed and the system
376#	DLLs "glib-1.3.dll", "gdk-1.3.dll" and "gtk-1.3.dll" copied into the
377#	"Win\System" folder
378#
379#	To compile in the frame analyzer support, you need the above mentioned
380#	libraries. You can pass the appropriate path to them in GTK_DIRS.
381#
382!	IF "$(GTK)" == "YES"
383!	IF "$(GTK_DIRS)" == ""
384GTK_DIRS = ../3rdparty
385!	ENDIF
386GTK_OPTS = -I$(GTK_DIRS)/glib     \
387           -I$(GTK_DIRS)/gtk+     \
388           -I$(GTK_DIRS)/gtk+/gtk \
389           -I$(GTK_DIRS)/gtk+/gdk
390GTK_LIBS = $(GTK_DIRS)/gtk+/gtk/gtk-1.3.lib \
391           $(GTK_DIRS)/gtk+/gdk/gdk-1.3.lib \
392           $(GTK_DIRS)/glib/glib-1.3.lib
393
394PGM = $(T_MP3X) $(PGM)
395!	ELSE
396!	IF "$(GTK)" == ""
397!	MESSAGE Pass GTK=YES to build the frame analyzer. (requires installed GTK)
398!	ENDIF
399!	ENDIF
400#____________________________________________________ FRAME ANALYZER SUPPORT __
401
402
403
404#__ HIP DECODING ______________________________________________________________
405#
406#	uncomment the following if you want decoding support
407#	It's always a good idea to compile it in!
408#
409CPP_OPTS = $(CPP_OPTS) /DHAVE_MPGLIB
410#___________________________________________________________ HIP DECODING _____
411
412
413
414#__ Takehiro's IEEE hack ______________________________________________________
415#
416#	uncomment the following to enable Takehiro's IEEE hack
417#	You'll want it on a x86 machine with i387 FPU
418#
419CPP_OPTS = $(CPP_OPTS) /DTAKEHIRO_IEEE754_HACK
420#______________________________________________________ Takehiro's IEEE hack __
421
422
423
424#__ Robert's alternate code ___________________________________________________
425!	IF "$(CFG)" == "RH"
426!	IF "$(MSVCVER)" == "8.0"
427LIB_OPTS = $(LIB_OPTS) /LTCG
428LN_OPTS = $(LN_OPTS) /LTCG
429!   ENDIF
430!	ENDIF
431#___________________________________________________ Robert's alternate code __
432
433
434
435CC_SWITCHES = $(CC_OPTS) $(SNDFILE_OPTS) \
436              $(GTK_OPTS) /DBS_FORMAT=BINARY
437
438LN_SWITCHES = $(LN_OPTS)
439
440lame_sources = \
441	frontend/lame_main.c
442
443mpx_sources = \
444	frontend/gpkplotting.c \
445	frontend/gtkanal.c \
446	frontend/mp3x.c
447
448mp3rtp_sources = \
449	frontend/rtp.c \
450	frontend/mp3rtp.c
451
452dll_sources = \
453	dll/BladeMP3EncDll.c
454
455common_sources = \
456	frontend/main.c \
457	frontend/get_audio.c \
458	frontend/parse.c \
459	frontend/timestatus.c \
460	frontend/lametime.c \
461	frontend/console.c \
462	frontend/brhist.c
463
464lamelib_sources = \
465	libmp3lame/bitstream.c \
466	libmp3lame/encoder.c \
467	libmp3lame/fft.c \
468	libmp3lame/gain_analysis.c \
469	libmp3lame/id3tag.c \
470	libmp3lame/lame.c \
471	libmp3lame/newmdct.c \
472	libmp3lame/psymodel.c \
473	libmp3lame/quantize.c \
474	libmp3lame/quantize_pvt.c \
475	libmp3lame/vector/xmm_quantize_sub.c \
476	libmp3lame/set_get.c \
477	libmp3lame/vbrquantize.c \
478	libmp3lame/reservoir.c \
479	libmp3lame/tables.c \
480	libmp3lame/takehiro.c \
481	libmp3lame/util.c \
482	libmp3lame/mpglib_interface.c \
483	libmp3lame/VbrTag.c \
484	libmp3lame/presets.c \
485	libmp3lame/version.c
486
487mpglib_sources = \
488	mpglib/common.c \
489	mpglib/dct64_i386.c \
490	mpglib/decode_i386.c \
491	mpglib/layer1.c \
492	mpglib/layer2.c \
493	mpglib/layer3.c \
494	mpglib/tabinit.c \
495	mpglib/interface.c
496
497
498!IF "$(MSVCVER)" == "Win64"
499ADDL_OBJ = bufferoverflowU.lib
500!ENDIF
501
502LIB_OBJ = $(lamelib_sources:.c=.obj)
503HIP_OBJ = $(mpglib_sources:.c=.obj)
504CMMN_OBJ = $(common_sources:.c=.obj)
505LAME_OBJ = $(lame_sources:.c=.obj)
506MPX_OBJ = $(mpx_sources:.c=.obj)
507MPRTP_OBJ = $(mp3rtp_sources:.c=.obj)
508DLL_OBJ = $(dll_sources:.c=.obj)
509
510.c.obj:
511	@$(CC) $(CPP_OPTS) $(CC_SWITCHES) -Iinclude -Ilibmp3lame -Impglib \
512	       $(CC_OUT)$@  -c $<
513
514
515#__ MASM ______________________________________________________________________
516#
517#	MASM: Microsoft Assembler
518#
519!	IF "$(ASM)" == "ML64"
520#
521.SUFFIXES : .nas
522.nas.obj:
523	@echo $<
524	@ml64 -Ilibmp3lame\i386 -Sf -DWIN32 -DWIN64 $< -Fo$@
525
526CC_SWITCHES = $(CC_SWITCHES) -DHAVE_NASM
527ASM_OBJ = $(ASM_OBJ) \
528	libmp3lame\i386\cpu_feat.obj \
529	libmp3lame\i386\fft3dn.obj \
530	libmp3lame\i386\fftsse.obj
531
532#	not yet coded
533#CC_SWITCHES = $(CC_SWITCHES) -DUSE_FFTFPU
534#ASM_OBJ = $(ASM_OBJ) libmp3lame\i386\fftfpu.obj
535#______________________________________________________________________ MASM __
536
537
538#__ NASM ______________________________________________________________________
539#
540#	NASM: Netwide Assembler
541#
542!	ELSEIF "$(ASM)" == "YES"
543#
544.SUFFIXES : .nas
545.nas.obj:
546	@echo $<
547	@nasmw -f $(OFF) -i libmp3lame/i386/ -DWIN32 $< -o $@
548
549CC_SWITCHES = $(CC_SWITCHES) /DHAVE_NASM
550ASM_OBJ = $(ASM_OBJ) \
551	libmp3lame\i386\cpu_feat.obj \
552	libmp3lame\i386\fft3dn.obj \
553	libmp3lame\i386\fftsse.obj
554
555#	not yet coded
556#CC_SWITCHES = $(CC_SWITCHES) /DUSE_FFTFPU
557#ASM_OBJ = $(ASM_OBJ) libmp3lame/i386/fftfpu.obj
558#______________________________________________________________________ NASM __
559
560!	ELSE
561!	MESSAGE Pass ASM=YES to build the assembler optimizations
562!	ENDIF
563
564
565#__ MMX _______________________________________________________________________
566#
567#	you need NASM but *not necessarily* a processor with MMX
568#	The above CPU feature detection code allows to run the same
569#	binary on a CPU without MMX too!
570#
571!	IF "$(ASM)" == "YES"
572!	IF "$(MMX)" == "YES"
573CC_SWITCHES = $(CC_SWITCHES) /DMMX_choose_table
574ASM_OBJ = $(ASM_OBJ) libmp3lame/i386/choose_table.obj
575!	ENDIF
576!	ENDIF
577#_______________________________________________________________________ MMX __
578
579!	MESSAGE
580
581no_target_specified :	$(PGM)
582	@echo.
583	@echo --=*  $(PGM) uptodate  *=--
584	@echo.
585
586target_directory :
587	@if not exist $(TARGET_DIR) mkdir $(TARGET_DIR)
588
589common:	$(CMMN_OBJ)
590	@echo.
591	@echo --- COMMON FRONTEND STUFF UPTODATE ---
592	@echo.
593
594libA:	$(LIB_OBJ)
595	@echo.
596	@echo --- LAME MP3 ENCODING LIBRARY UPTODATE ---
597	@echo.
598
599libB:	$(HIP_OBJ)
600	@echo.
601	@echo --- HIP DECODING LIBRARY UPTODATE ---
602	@echo.
603
604lib: $(ASM_OBJ) libA libB
605
606lame.res: ./libmp3lame/lame.rc
607	@rc.exe /d "NDEBUG" /d "_APP=lame.exe" /l 0x409 /fo"./frontend/lame.res" "./libmp3lame/lame.rc"
608
609mp3rtp.res: ./libmp3lame/lame.rc
610	@rc.exe /d "NDEBUG" /d "_APP=mp3rtp.exe" /l 0x409 /fo"./frontend/mp3rtp.res" "./libmp3lame/lame.rc"
611
612mp3x.res: ./libmp3lame/lame.rc
613	@rc.exe /d "NDEBUG" /d "_APP=mp3x.exe" /l 0x409 /fo"./frontend/mp3x.res" "./libmp3lame/lame.rc"
614
615lame_enc.res: ./libmp3lame/lame.rc
616	@rc.exe /d "NDEBUG" /d "_DLL=lame_enc.dll" /l 0x409 /fo"./frontend/lame_enc.res" "./libmp3lame/lame.rc"
617
618$(T_LAME) : target_directory config.h $(T_LIB_STATIC) common $(LAME_OBJ) lame.res
619	@$(LN) $(LN_OUT)$(TARGET_DIR)$@ $(LN_SWITCHES) $(LIBSNDFILE) \
620	       $(TARGET_DIR)$(T_LIB_STATIC) $(CMMN_OBJ) $(LAME_OBJ) $(ADDL_OBJ) \
621	       ./frontend/lame.res
622	@echo.
623	@echo --=*  $(TARGET_DIR)$@ ready  *=--
624	@echo.
625
626$(T_MP3X) : target_directory config.h lib common $(MPX_OBJ) mp3x.res
627	@$(LN) $(LN_OUT)$(TARGET_DIR)$@ $(LN_SWITCHES) $(GTK_LIBS) $(LIBSNDFILE) \
628	       $(TARGET_DIR)$(T_LIB_STATIC) $(CMMN_OBJ) $(MPX_OBJ) $(ADDL_OBJ) \
629	       ./frontend/mp3x.res
630	@echo.
631	@echo --=*  $(TARGET_DIR)$@ ready  *=--
632	@echo.
633
634$(T_MP3RTP) : target_directory config.h lib common $(MPRTP_OBJ) mp3rtp.res
635	@$(LN) $(LN_OUT)$(TARGET_DIR)$@ $(LN_SWITCHES) $(LIBSNDFILE) \
636	       $(TARGET_DIR)$(T_LIB_STATIC) $(CMMN_OBJ) $(MPRTP_OBJ) $(ADDL_OBJ) \
637	       ./frontend/mp3rtp.res wsock32.lib
638	@echo.
639	@echo --=*  $(TARGET_DIR)$@ ready  *=--
640	@echo.
641
642$(T_LEGACY_DLL) : target_directory config.h $(DLL_OBJ) lame_enc.res
643	@$(LN) $(LN_OUT)$(TARGET_DIR)$@ $(LN_SWITCHES) \
644	       $(TARGET_DIR)$(T_LIB_STATIC) $(LN_DLL) \
645	       $(DLL_OBJ) $(ADDL_OBJ) ./frontend/lame_enc.res user32.lib
646	@echo.
647	@echo --=*  $(TARGET_DIR)$@ ready  *=--
648	@echo.
649
650$(T_DLL) : target_directory config.h $(T_LIB_STATIC)
651	@$(LN) $(LN_DLL) $(MACHINE) \
652		/DEF:"include\lame.def" \
653		$(ADDL_OBJ) \
654		$(LN_OUT)"$(TARGET_DIR)$@" \
655		$(TARGET_DIR)$(T_LIB_STATIC) libmp3lame\version.obj
656	@echo.
657	@echo --=*  $(TARGET_DIR)$@ ready  *=--
658	@echo.
659
660$(T_LIB_STATIC) : target_directory lib
661	@lib $(LIB_OPTS) \
662		/OUT:"$(TARGET_DIR)$@" \
663		$(ASM_OBJ) $(LIB_OBJ) $(HIP_OBJ)
664	@echo.
665	@echo --=*  $(TARGET_DIR)$@ ready  *=--
666	@echo.
667
668config.h : configMS.h
669	@-copy configMS.h config.h
670
671clean:
672	@-del $(TARGET_DIR)$(T_LAME)
673	@-del $(TARGET_DIR)$(T_MP3X)
674	@-del $(TARGET_DIR)$(T_MP3RTP)
675	@-del $(TARGET_DIR)$(T_DLL)
676	@-del $(TARGET_DIR)$(T_LIB_STATIC)
677	@-del $(TARGET_DIR)$(T_LIB_DYNAMIC)
678	@-del $(TARGET_DIR)$(T_LEGACY_DLL)
679	@-del lame.pdb
680	@-del icl.pch
681	@-del $(TARGET_DIR)lame_enc.*
682	@-del frontend\*.obj
683	@-del dll\*.obj
684	@-del mpglib\*.obj
685	@-del libmp3lame\*.obj
686	@-del libmp3lame\i386\*.obj
687	@-del libmp3lame\vector\*.obj
688	@-del libmp3lame\*.res
689	@-del frontend\*.res
690
691
692rebuild: clean all
693
694
695lame	:	$(T_LAME)
696lame_enc:	$(T_LEGACY_DLL)
697dll 	:	$(T_DLL) $(T_LEGACY_DLL)
698mp3x	:	$(T_MP3X)
699mp3rtp	:	$(T_MP3RTP)
700
701
702all :	$(PGM) mp3rtp dll lame_enc
703	@echo.
704	@echo --=*  all uptodate  *=--
705	@echo.
706