diff options
Diffstat (limited to 'Makefile.unix')
-rw-r--r-- | Makefile.unix | 624 |
1 files changed, 624 insertions, 0 deletions
diff --git a/Makefile.unix b/Makefile.unix new file mode 100644 index 0000000..bac4610 --- /dev/null +++ b/Makefile.unix @@ -0,0 +1,624 @@ +# Makefile for LAME 3.xx -*- makefile -*- +# +# LAME is reported to work under: +# Linux (i86), NetBSD 1.3.2 (StrongARM), FreeBSD (i86) +# Compaq Alpha(OSF, Linux, Tru64 Unix), Sun Solaris, SGI IRIX, +# OS2 Warp, Macintosh PPC, BeOS, Amiga and even VC++ +# + +# these variables are available on command line: +# +# make UNAME=xxxxx ARCH=xxxxx - specify a type of host +# make PGM=lame_exp - specify a name of an executable file +# +# if you have mingw32-gcc, try: +# make -fMakefile.unix UNAME=MSDOS +# or if you get the error +# "process_begin: CreateProcess((null), copy configMS.h config.h, ...)": +# make -fMakefile.unix UNAME=MSDOS NOUNIXCMD=NO +# or if you have NASM: +# make -fMakefile.unix UNAME=MSDOS HAVE_NASM=YES +# + +ifeq ($(UNAME),MSDOS) + UNAME ?= UNKNOWN + ARCH = x86 + NOUNIXCMD = YES +else + UNAME = $(shell uname) + ARCH = $(shell uname -m) + iARCH = $(patsubst i%86,x86,$(ARCH)) +endif + +HAVE_NASM = NO +HAVE_NEWER_GLIBC = NO + +# generic defaults. OS specific options go in versious sections below +PGM = lame +CC = gcc +CC_OPTS = -O +CPP_OPTS = -Iinclude -Impglib -Ifrontend -Ilibmp3lame +AR = ar +RANLIB = ranlib +GTK = +GTKLIBS = +LIBSNDFILE = +LIBS = -lm +MP3LIB = libmp3lame/libmp3lame.a +MP3LIB_SHARED = libmp3lame/libmp3lame.so +MAKEDEP = -M +BRHIST_SWITCH = +LIBTERMCAP = +RM = rm -f + +CPP_OPTS += -DHAVE_CONFIG_H -I. + +########################################################################## +# -DHAVEMPGLIB compiles the mpglib *decoding* library into libmp3lame +########################################################################## +CPP_OPTS += -DHAVE_MPGLIB + +########################################################################## +# -DUSE_LAYER_1/2 enables Layer1 or Layer2 *decoding* abilities +########################################################################## +CPP_OPTS += -DUSE_LAYER_1 -DUSE_LAYER_2 + +########################################################################## +# -DTAKEHIRO_IEEE754_HACK enables Takehiro's IEEE hack +########################################################################## +ifeq ($(iARCH),x86) + CPP_OPTS += -DTAKEHIRO_IEEE754_HACK +endif + +########################################################################## +# Define these in the OS specific sections below to compile in code +# for the optional VBR bitrate histogram. +# Requires ncurses, but libtermcap also works. +# If you have any trouble, just dont define these +# +# BRHIST_SWITCH = -DBRHIST -DHAVE_TERMCAP -DHAVE_{NCURSES_}TERMCAP_H +# LIBTERMCAP = -lncurses +# LIBTERMCAP = -ltermcap +# +# or, to try and simulate TERMCAP (ANSI), use: +# BRHIST_SWITCH = -DBRHIST +# +########################################################################## + + +########################################################################## +# Define these in the OS specific sections below to compile in code for: +# +# SNDLIB = -DLIBSNDFILE to use Erik de Castro Lopo's libsndfile +# http://www.zip.com.au/~erikd/libsndfile/ instead of LAME's internal +# routines. Also set: +# +# LIBSNDFILE = -lsndfile +# or +# LIBSNDFILE = -L/location_of_libsndfile -lsndfile +# +########################################################################## + + +########################################################################## +# Define these in the OS specific sections below to compile in code for +# the GTK mp3 frame analyzer +# +# Requires -DHAVE_MPGLIB +# +# GTK = -DHAVE_GTK `gtk-config --cflags` +# GTKLIBS = `gtk-config --libs` +# +########################################################################## + + + + +########################################################################## +# LINUX +########################################################################## +ifeq ($(UNAME),Linux) +# The frame analyzer depends on gtk1.2. Uncomment the next 2 lines to get it +# GTK = -DHAVE_GTK `gtk-config --cflags` +# GTKLIBS = `gtk-config --libs` +# Comment out next 2 lines if you want to remove VBR histogram capability + BRHIST_SWITCH = -DBRHIST -DHAVE_TERMCAP -DHAVE_TERMCAP_H + LIBTERMCAP = -lncurses +# uncomment to use LIBSNDFILE +# SNDLIB = -DLIBSNDFILE +# LIBSNDFILE=-lsndfile + +# suggested for gcc-2.7.x +# CC_OPTS = -O3 -fomit-frame-pointer -funroll-loops -ffast-math -finline-functions -Wall -pedantic +# CC_OPTS = -O9 -fomit-frame-pointer -fno-strength-reduce -mpentiumpro -ffast-math -finline-functions -funroll-loops -Wall -malign-double -g -march=pentiumpro -mfancy-math-387 -pipe -pedantic + +# Suggested for GCC 4.* & machines with sse+sse2+sse3: -Os might reduce +# the use of the instruction cache and, thus, get better performance, +# but this should be experimented by the user. Customize at your own +# convenience. +# +#CC_OPTS = -pipe -O3 \ +# -Wall -Wextra -pedantic \ +# -Wmissing-declarations -Wfloat-equal -Wshadow \ +# -Wcast-qual -Wcast-align -Wdisabled-optimization \ +# -ffast-math -ftree-vectorize -ftree-vect-loop-version \ +# -mtune=nocona -march=nocona -mfpmath=sse -msse -msse2 -msse3 \ +# -malign-double -maccumulate-outgoing-args + +# for debugging: + CC_OPTS = -UNDEBUG -O -Wall -pedantic -ggdb -DABORTFP + +# for lots of debugging: +# CC_OPTS = -DDEBUG -UNDEBUG -O -Wall -pedantic -g -DABORTFP + + +ifeq ($(CFG),RH) + GTK = -DHAVE_GTK `gtk-config --cflags` + GTKLIBS = `gtk-config --libs` + CPP_OPTS += -DFLOAT8=float -DREAL_IS_FLOAT=1 -DHAVE_ICONV -DHAVE_XMMINTRIN_H -D_ALLOW_INTERNAL_OPTIONS +# these options for gcc-3.2 & AthlonXP + CC_OPTS = \ + -pipe -O3 \ + -Wall -W -Wmissing-declarations -Wfloat-equal \ + -Wcast-qual -Wcast-align -Wdisabled-optimization -Wshadow \ + -march=athlon-xp \ + -malign-double \ + -maccumulate-outgoing-args +# -Wconversion -Wunreachable-code \ + + HAVE_NEWER_GLIBC = YES + HAVE_NASM = YES +endif + +ifeq ($(CFG),PFK) + CPP_OPTS += -DKLEMM -DKLEMM_00 -DKLEMM_01 -DKLEMM_02 -DKLEMM_03 -DKLEMM_04 -DKLEMM_05 -DKLEMM_06 -DKLEMM_07 -DKLEMM_08 -DKLEMM_09 -DKLEMM_10 -DKLEMM_11 -DKLEMM_12 -DKLEMM_13 -DKLEMM_14 -DKLEMM_15 -DKLEMM_16 -DKLEMM_17 -DKLEMM_18 -DKLEMM_19 -DKLEMM_20 -DKLEMM_21 -DKLEMM_22 -DKLEMM_23 -DKLEMM_24 -DKLEMM_25 -DKLEMM_26 -DKLEMM_27 -DKLEMM_28 -DKLEMM_29 -DKLEMM_30 -DKLEMM_31 -DKLEMM_32 -DKLEMM_33 -DKLEMM_34 -DKLEMM_35 -DKLEMM_36 -DKLEMM_37 -DKLEMM_38 -DKLEMM_39 -DKLEMM_40 -DKLEMM_41 -DKLEMM_42 -DKLEMM_43 -DKLEMM_44 -DKLEMM_45 -DKLEMM_46 -DKLEMM_47 -DKLEMM_48 -DKLEMM_49 -DKLEMM_50 + CC_OPTS = \ + -Wall -O9 -fomit-frame-pointer -march=pentium \ + -finline-functions -fexpensive-optimizations \ + -funroll-loops -funroll-all-loops -pipe -fschedule-insns2 \ + -fstrength-reduce \ + -malign-double -mfancy-math-387 -ffast-math + + HAVE_NEWER_GLIBC = YES + HAVE_NASM = YES +endif + +########################################################################## +# LINUX on Digital/Compaq Alpha CPUs +########################################################################## +ifeq ($(ARCH),alpha) + +################################################################ +#### Check if 'ccc' is in our path +#### if not, use 'gcc' +################################################################ +ifeq ($(shell which ccc 2>/dev/null | grep -c ccc),0) + +# double is faster than float on Alpha +CC_OPTS = -O4 -pedantic -Wall -fomit-frame-pointer -ffast-math -funroll-loops \ + -mfp-regs -fschedule-insns -fschedule-insns2 \ + -finline-functions \ +# -DFLOAT=double +# add "-mcpu=21164a -Wa,-m21164a" to optimize for 21164a (ev56) CPU + +################################################################ +#### else, use 'ccc' +################################################################ +else + +# Compaq's C Compiler +CC = ccc + +################################################################ +#### set 'CC_OPTS = -arch host -tune host' to generate/tune instructions for this machine +#### 'CC_OPTS += -migrate -fast -inline speed -unroll 0' tweak to run as fast as possible :) +#### 'CC_OPTS += -w0 -pedantic -Wall' set warning and linking flags +################################################################ +CC_OPTS = -arch host -tune host +CC_OPTS += -migrate -fast -inline speed -unroll 0 +CC_OPTS += -w0 -pedantic -Wall + + +################################################################ +#### to debug, uncomment +################################################################ +# For Debugging +#CC_OPTS += -g3 + +################################################################ +#### define __DECALPHA__ (i was getting re-declaration warnings +#### in machine.h +################################################################ +# Define DEC Alpha +CPP_OPTS += -D__DECALPHA__ + +# standard Linux libm +#LIBS = -lm +# optimized libffm (free fast math library) +#LIBS = -lffm +# Compaq's fast math library +LIBS = -lcpml +endif # gcc or ccc? +endif # alpha +endif # linux + + + +########################################################################## +# FreeBSD +########################################################################## +ifeq ($(UNAME),FreeBSD) +# remove if you do not have GTK or do not want the GTK frame analyzer + GTK = -DHAVE_GTK `gtk12-config --cflags` + GTKLIBS = `gtk12-config --libs` +# Comment out next 2 lines if you want to remove VBR histogram capability + BRHIST_SWITCH = -DBRHIST -DHAVE_TERMCAP -DHAVE_TERMCAP_H + LIBTERMCAP = -lncurses + +endif + + + +########################################################################## +# OpenBSD +########################################################################## +ifeq ($(UNAME),OpenBSD) +# remove if you do not have GTK or do not want the GTK frame analyzer + GTK = -DHAVE_GTK `gtk-config --cflags` + GTKLIBS = `gtk-config --libs` +# Comment out next 2 lines if you want to remove VBR histogram capability + BRHIST_SWITCH = -DBRHIST -DHAVE_TERMCAP -DHAVE_TERMCAP_H + LIBTERMCAP = -lcurses +endif + + + + +########################################################################## +# SunOS +########################################################################## +ifeq ($(UNAME),SunOS) + CC = cc + CC_OPTS = -O -xCC + MAKEDEP = -xM +# for gcc, use instead: +# CC = gcc +# CC_OPTS = -O +# MAKEDEP = -M +endif + + + +########################################################################## +# SGI +########################################################################## +ifeq ($(UNAME),IRIX64) + CC = cc + CC_OPTS = -O3 -woff all + +#optonal: +# GTK = -DHAVE_GTK `gtk-config --cflags` +# GTKLIBS = `gtk-config --libs` +# BRHIST_SWITCH = -DBRHIST -DHAVE_TERMCAP -DHAVE_TERMCAP_H +# LIBTERMCAP = -lncurses + +endif +ifeq ($(UNAME),IRIX) + CC = cc + CC_OPTS = -O3 -woff all +endif + + + +########################################################################## +# Compaq Alpha running Dec Unix (OSF) +########################################################################## +ifeq ($(UNAME),OSF1) + CC = cc + CC_OPTS = -fast -O3 -std -g3 -non_shared +endif + +########################################################################## +# BeOS +########################################################################## +ifeq ($(UNAME),BeOS) + CC = $(BE_C_COMPILER) + LIBS = +ifeq ($(ARCH),BePC) + CC_OPTS = -O9 -fomit-frame-pointer -march=pentium \ + -mcpu=pentium -ffast-math -funroll-loops \ + -fprofile-arcs -fbranch-probabilities +else + CC_OPTS = -opt all + MAKEDEP = -make +endif +endif + +########################################################################### +# MOSXS (Rhapsody PPC) +########################################################################### +ifeq ($(UNAME),Rhapsody) + CC = cc + LIBS = + CC_OPTS = -O9 -ffast-math -funroll-loops -fomit-frame-pointer + MAKEDEP = -make + +endif +########################################################################## +# OS/2 +########################################################################## +# Properly installed EMX runtime & development package is a prerequisite. +# tools I used: make 3.76.1, uname 1.12, sed 2.05, PD-ksh 5.2.13 +# +########################################################################## +ifeq ($(UNAME),OS/2) + SHELL=sh + CC = gcc + CC_OPTS = -O3 -D__OS2__ + PGM = lame.exe + LIBS = + RANLIB = touch + +# I use the following for slightly better performance on my Pentium-II +# using pgcc-2.91.66: +# CC_OPTS = -O6 -ffast-math -funroll-loops -mpentiumpro -march=pentiumpro -D__OS2__ +# for the unfortunates with a regular pentium (using pgcc): +# CC_OPTS = -O6 -ffast-math -funroll-loops -mpentium -march=pentium -D__OS2__ + +# Comment out next 2 lines if you want to remove VBR histogram capability + BRHIST_SWITCH = -DBRHIST -DHAVE_TERMCAP -DHAVE_{NCURSES_}TERMCAP_H + LIBTERMCAP = -lncurses + +# Uncomment & inspect the 2 GTK lines to use MP3x GTK frame analyzer. +# Properly installed XFree86/devlibs & GTK+ is a prerequisite. +# The following works for me using Xfree86/OS2 3.3.5 and GTK+ 1.2.3: +# GTK = -DHAVE_GTK -IC:/XFree86/include/gtk12 -Zmt -D__ST_MT_ERRNO__ -IC:/XFree86/include/glib12 -IC:/XFree86/include +# GTKLIBS = -LC:/XFree86/lib -Zmtd -Zsysv-signals -Zbin-files -lgtk12 -lgdk12 -lgmodule -lglib12 -lXext -lX11 -lshm -lbsd -lsocket -lm +endif + + + +########################################################################### +# MSDOS/Windows +########################################################################### +ifeq ($(UNAME),MSDOS) + RM = + CC_OPTS = \ + -Wall -pipe -O3 -fomit-frame-pointer -ffast-math -funroll-loops \ + -fschedule-insns2 -fmove-all-movables -freduce-all-givs \ + -mcpu=pentium -march=pentium -mfancy-math-387 + CC_OPTS += -D_cdecl=__cdecl + PGM = lame.exe +endif + + + +########################################################################### +# AmigaOS +########################################################################### +# Type 'Make ARCH=PPC' for PowerUP and 'Make ARCH=WOS' for WarpOS +# +########################################################################### +ifeq ($(UNAME),AmigaOS) + CC = gcc -noixemul + CC_OPTS = -O3 -ffast-math -funroll-loops -m68020-60 -m68881 + BRHIST_SWITCH = -DBRHIST + MAKEDEP = -MM + ifeq ($(ARCH),WOS) + CC = ppc-amigaos-gcc -warpup + CC_OPTS = -O3 -ffast-math -fomit-frame-pointer -funroll-loops \ + -mmultiple -mcpu=603e + AR = ppc-amigaos-ar + RANLIB = ppc-amigaos-ranlib + LIBS = + endif + ifeq ($(ARCH),PPC) + CC = ppc-amigaos-gcc + CC_OPTS = -O3 -ffast-math -fomit-frame-pointer -funroll-loops \ + -mmultiple -mcpu=603e + AR = ppc-amigaos-ar + RANLIB = ppc-amigaos-ranlib + LIBS = + endif +endif + + +# 10/99 added -D__NO_MATH_INLINES to fix a bug in *all* versions of +# gcc 2.8+ as of 10/99. + +ifeq ($(HAVE_NEWER_GLIBC),YES) +CC_SWITCHES = +else +CC_SWITCHES = -D__NO_MATH_INLINES # only needed by some older glibc +endif + +CC_SWITCHES += -DNDEBUG $(CC_OPTS) $(SNDLIB) $(BRHIST_SWITCH) +frontend_sources = \ + frontend/amiga_mpega.c \ + frontend/brhist.c \ + frontend/get_audio.c \ + frontend/lametime.c \ + frontend/parse.c \ + frontend/portableio.c \ + frontend/timestatus.c \ + frontend/console.c \ + +lib_sources = \ + libmp3lame/bitstream.c \ + libmp3lame/encoder.c \ + libmp3lame/fft.c \ + libmp3lame/gain_analysis.c \ + libmp3lame/id3tag.c \ + libmp3lame/lame.c \ + libmp3lame/newmdct.c \ + libmp3lame/psymodel.c \ + libmp3lame/quantize.c \ + libmp3lame/quantize_pvt.c \ + libmp3lame/set_get.c \ + libmp3lame/vbrquantize.c \ + libmp3lame/reservoir.c \ + libmp3lame/tables.c \ + libmp3lame/takehiro.c \ + libmp3lame/util.c \ + libmp3lame/mpglib_interface.c \ + libmp3lame/VbrTag.c \ + libmp3lame/version.c \ + libmp3lame/presets.c \ + libmp3lame/vector/xmm_quantize_sub.c \ + mpglib/common.c \ + mpglib/dct64_i386.c \ + mpglib/decode_i386.c \ + mpglib/layer1.c \ + mpglib/layer2.c \ + mpglib/layer3.c \ + mpglib/tabinit.c \ + mpglib/interface.c + + +#ifeq ($(UNAME),MSDOS) +# frontend_sources := $(subst /,\,$(frontend_sources)) +# lib_sources := $(subst /,\,$(lib_sources)) +#endif + +frontend_obj = $(frontend_sources:.c=.o) +lib_obj = $(lib_sources:.c=.o) + +DEP = $(frontend_sources:.c=.d) $(lib_sources:.c=.d ) + +gtk_sources = frontend/gtkanal.c frontend/gpkplotting.c frontend/mp3x.c +gtk_obj = $(gtk_sources:.c=.gtk.o) +gtk_dep = $(gtk_sources:.c=.d) + + + +NASM = nasm +ASFLAGS=-f elf -i libmp3lame/i386/ + +# for people with nasmw +ifeq ($(UNAME),MSDOS) + NASM = nasmw + ASFLAGS=-f win32 -DWIN32 -i libmp3lame/i386/ +endif + +%.o: %.nas + $(NASM) $(ASFLAGS) $< -o $@ +%.o: %.s + gcc -c $< -o $@ + + +#HAVE_NASM = YES + +ifeq ($(HAVE_NASM),YES) +## have NASM +CC_SWITCHES += -DHAVE_NASM +lib_obj += libmp3lame/i386/cpu_feat.o + +## use MMX extension. you need nasm and MMX supported CPU. +CC_SWITCHES += -DMMX_choose_table +lib_obj += libmp3lame/i386/choose_table.o + +## use 3DNow! extension. you need nasm and 3DNow! supported CPU. +lib_obj += libmp3lame/i386/fft3dn.o + +## use SSE extension. you need nasm and SSE supported CPU. +lib_obj += libmp3lame/i386/fftsse.o + +## not yet coded +#CC_SWITCHES += -DUSE_FFTFPU +#lib_obj += libmp3lame/i386/fftfpu.o +endif + + + +# +# Makefile rules---you probably won't have to modify below this line +# +%.o: %.c + $(CC) $(CPP_OPTS) $(CC_SWITCHES) -c $< -o $@ + +%.d: %.c + ifeq ($(NOUNIXCMD),YES) + $(CC) $(MAKEDEP) $(CPP_OPTS) $(CC_SWITCHES) $< > $@ + else + $(SHELL) -ec '$(CC) $(MAKEDEP) $(CPP_OPTS) $(CC_SWITCHES) $< | sed '\''s;$*.o;& $@;g'\'' > $@' + endif + +%.gtk.o: %.c + $(CC) $(CPP_OPTS) $(CC_SWITCHES) $(GTK) -c $< -o $@ + +all: frontend/$(PGM) + + +$(lib_sources) $(frontend_sources) $(gtk_sources) : config.h + +config.h: configMS.h + ifeq ($(NOUNIXCMD),YES) + copy configMS.h config.h + else + cp configMS.h config.h + endif + +frontend/$(PGM): frontend/main.o $(frontend_obj) $(MP3LIB) + $(CC) $(CC_OPTS) -o frontend/$(PGM) frontend/main.o $(frontend_obj) \ + $(MP3LIB) $(LIBS) $(LIBSNDFILE) $(LIBTERMCAP) + +mp3x: $(frontend_obj) $(gtk_obj) $(MP3LIB) + $(CC) $(CC_OPTS) -o frontend/mp3x $(frontend_obj) $(gtk_obj) \ + $(MP3LIB) $(LIBS) $(LIBSNDFILE) $(LIBTERMCAP) $(GTKLIBS) + +mp3rtp: frontend/rtp.o frontend/mp3rtp.o $(frontend_obj) $(MP3LIB) + $(CC) $(CC_OPTS) -o frontend/mp3rtp frontend/mp3rtp.o frontend/rtp.o $(frontend_obj) $(MP3LIB) \ + $(LIBS) $(LIBSNDFILE) $(LIBTERMCAP) + +libmp3lame/libmp3lame.a: $(lib_obj) + echo $(lib_obj) + $(AR) cr libmp3lame/libmp3lame.a $(lib_obj) + $(RANLIB) libmp3lame/libmp3lame.a + +#shared library. GNU specific? +libmp3lame/libmp3lame.so: $(lib_obj) + gcc -shared -Wl,-soname,libmp3lame/libmp3lame.so -o libmp3lame/libmp3lame.so $(lib_obj) + +install: frontend/$(PGM) #libmp3lame.a + cp frontend/$(PGM) /usr/bin + #cp libmp3lame.a /usr/lib + #cp lame.h /usr/lib + +clean: + ifeq ($(UNAME),MSDOS) + -del $(subst /,\,$(frontend_obj)) + -del $(subst /,\,$(lib_obj)) + -del $(subst /,\,$(gtk_obj)) + -del $(subst /,\,$(DEP)) + -del frontend\$(PGM) + -del frontend\main.o + -del libmp3lame\libmp3lame.a + else + -$(RM) $(gtk_obj) $(frontend_obj) $(lib_obj) $(DEP) frontend/$(PGM) \ + frontend/main.o frontend/lame libmp3lame/libmp3lame.a \ + frontend/mp3x.o frontend/mp3x + endif + + +tags: TAGS + +TAGS: ${c_sources} + etags -T ${c_sources} + +ifneq ($(MAKECMDGOALS),clean) + -include $(DEP) +endif + + +# +# testcase.mp3 is a 2926 byte file. The first number output by +# wc is the number of bytes which differ between new output +# and 'official' results. +# +# Because of compiler options and effects of roundoff, the +# number of bytes which are different may not be zero, but +# should be at most 30. +# +test: frontend/$(PGM) + frontend/$(PGM) --nores testcase.wav testcase.new.mp3 + cmp -l testcase.new.mp3 testcase.mp3 | wc -l |