blob: c751da2fde01874ed96455828f670fc2eacbaa4d [file] [log] [blame]
Josh Coalson6b05bc52001-06-08 00:13:21 +00001/* FLAC - Free Lossless Audio Codec
Erik de Castro Lopof84287e2012-01-31 19:28:14 +11002 * Copyright (C) 2012 Xiph.org Foundation
Erik de Castro Lopob1982fb2013-05-25 17:11:19 +10003 * Copyright (C) 2001-2009 Josh Coalson
4 * Copyright (C) 2011-2013 Xiph.Org Foundation
Josh Coalson6b05bc52001-06-08 00:13:21 +00005 *
Josh Coalsone8a76012003-02-07 00:14:32 +00006 * This file is part the FLAC project. FLAC is comprised of several
7 * components distributed under difference licenses. The codec libraries
8 * are distributed under Xiph.Org's BSD-like license (see the file
9 * COPYING.Xiph in this distribution). All other programs, libraries, and
Josh Coalsonf37520b2006-11-20 06:46:07 +000010 * plugins are distributed under the LGPL or GPL (see COPYING.LGPL and
11 * COPYING.GPL). The documentation is distributed under the Gnu FDL (see
12 * COPYING.FDL). Each file in the FLAC distribution contains at the top the
13 * terms under which it may be distributed.
Josh Coalson6b05bc52001-06-08 00:13:21 +000014 *
Josh Coalsone8a76012003-02-07 00:14:32 +000015 * Since this particular file is relevant to all components of FLAC,
16 * it may be distributed under the Xiph.Org license, which is the least
17 * restrictive of those mentioned above. See the file COPYING.Xiph in this
18 * distribution.
Josh Coalson6b05bc52001-06-08 00:13:21 +000019 */
20
21
Erik de Castro Lopof84287e2012-01-31 19:28:14 +110022FLAC is an Open Source lossless audio codec developed by Josh Coalson from 2001
23to 2009.
24
25From January 2012 FLAC is being maintained by Erik de Castro Lopo under the
26auspices of the Xiph.org Foundation.
Josh Coalson6b05bc52001-06-08 00:13:21 +000027
Josh Coalsonbc869502002-06-14 06:36:16 +000028FLAC is comprised of
29 * `libFLAC', a library which implements reference encoders and
Josh Coalson8da98c82006-10-15 04:24:05 +000030 decoders for native FLAC and Ogg FLAC, and a metadata interface
Josh Coalsonbc869502002-06-14 06:36:16 +000031 * `libFLAC++', a C++ object wrapper library around libFLAC
Josh Coalson0c3524c2002-08-22 04:21:54 +000032 * `flac', a command-line program for encoding and decoding files
Josh Coalsoncf3f3382003-09-24 04:36:57 +000033 * `metaflac', a command-line program for viewing and editing FLAC
34 metadata
Josh Coalson0c3524c2002-08-22 04:21:54 +000035 * player plugins for XMMS and Winamp
36 * user and API documentation
37
Josh Coalson8da98c82006-10-15 04:24:05 +000038The libraries (libFLAC, libFLAC++) are
Josh Coalsonafd81072003-01-31 23:34:56 +000039licensed under Xiph.org's BSD-like license (see COPYING.Xiph). All other
Josh Coalson0c3524c2002-08-22 04:21:54 +000040programs and plugins are licensed under the GNU General Public License
Josh Coalsonafd81072003-01-31 23:34:56 +000041(see COPYING.GPL). The documentation is licensed under the GNU Free
42Documentation License (see COPYING.FDL).
Josh Coalson0c3524c2002-08-22 04:21:54 +000043
Josh Coalson6b05bc52001-06-08 00:13:21 +000044
Josh Coalson310b9ec2002-07-31 06:39:21 +000045===============================================================================
Josh Coalson09b164b2007-09-14 00:11:52 +000046FLAC - 1.2.1 - Contents
Josh Coalson310b9ec2002-07-31 06:39:21 +000047===============================================================================
48
49- Introduction
Josh Coalsonb445ebe2004-09-26 00:54:28 +000050- Prerequisites
Josh Coalson8c8eb712007-09-12 01:03:20 +000051- Note to embedded developers
Josh Coalson310b9ec2002-07-31 06:39:21 +000052- Building in a GNU environment
53- Building with Makefile.lite
54- Building with MSVC
55- Building on Mac OS X
Josh Coalson310b9ec2002-07-31 06:39:21 +000056
57
58===============================================================================
59Introduction
60===============================================================================
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000061
Josh Coalson6b05bc52001-06-08 00:13:21 +000062This is the source release for the FLAC project. See
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000063
Josh Coalsonc28ec322004-09-10 00:20:04 +000064 doc/html/index.html
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000065
66for full documentation.
67
68A brief description of the directory tree:
69
Josh Coalson917df862002-07-03 07:39:05 +000070 doc/ the HTML documentation
Josh Coalson917df862002-07-03 07:39:05 +000071 include/ public include files for libFLAC and libFLAC++
72 man/ the man page for `flac'
73 src/ the source code and private headers
74 test/ the test scripts
Josh Coalsonbb7f6b92000-12-10 04:09:52 +000075
76
Josh Coalson310b9ec2002-07-31 06:39:21 +000077===============================================================================
Josh Coalsonb445ebe2004-09-26 00:54:28 +000078Prerequisites
79===============================================================================
80
81To build FLAC with support for Ogg FLAC you must have built and installed
82libogg according to the specific instructions below. You must have
83libogg 1.1.2 or greater, or there will be seeking problems with Ogg FLAC.
84
85If you are building on x86 and want the assembly optimizations, you will
Josh Coalsondf8e7322005-01-21 01:25:43 +000086need to have NASM >= 0.98.30 installed according to the specific instructions
87below.
Josh Coalsonb445ebe2004-09-26 00:54:28 +000088
89
90===============================================================================
Josh Coalson8c8eb712007-09-12 01:03:20 +000091Note to embedded developers
92===============================================================================
93
94libFLAC has grown larger over time as more functionality has been
95included, but much of it may be unnecessary for a particular embedded
96implementation. Unused parts may be pruned by some simple editing of
Ulrich Klauereaae8e02013-04-30 23:10:11 +020097configure.ac and src/libFLAC/Makefile.am; the following dependency
Josh Coalson8c8eb712007-09-12 01:03:20 +000098graph shows which modules may be pruned without breaking things
99further down:
100
101metadata.h
102 stream_decoder.h
103 format.h
104
105stream_encoder.h
106 stream_decoder.h
107 format.h
108
109stream_decoder.h
110 format.h
111
112In other words, for pure decoding applications, both the stream encoder
113and metadata editing interfaces can be safely removed.
114
115There is a section dedicated to embedded use in the libFLAC API
116HTML documentation (see doc/html/api/index.html).
117
118Also, there are several places in the libFLAC code with comments marked
119with "OPT:" where a #define can be changed to enable code that might be
120faster on a specific platform. Experimenting with these can yield faster
121binaries.
122
123
124===============================================================================
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000125Building in a GNU environment
Josh Coalson310b9ec2002-07-31 06:39:21 +0000126===============================================================================
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000127
Josh Coalson172ac002001-10-31 18:30:19 +0000128FLAC uses autoconf and libtool for configuring and building.
129Better documentation for these will be forthcoming, but in
130general, this should work:
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000131
Josh Coalsonc220cf42002-08-23 06:41:31 +0000132./configure && make && make check && make install
133
134The 'make check' step is optional; omit it to skip all the tests,
Josh Coalsonccea6aa2002-12-17 08:14:42 +0000135which can take several hours and use around 70-80 megs of disk space.
Josh Coalson9d260d82003-08-28 23:47:15 +0000136Even though it will stop with an explicit message on any failure, it
137does print out a lot of stuff so you might want to capture the output
138to a file if you're having a problem. Also, don't run 'make check'
139as root because it confuses some of the tests.
Josh Coalsonbfe42f12000-12-22 22:42:25 +0000140
Josh Coalson917df862002-07-03 07:39:05 +0000141NOTE: Despite our best efforts it's entirely possible to have
142problems when using older versions of autoconf, automake, or
143libtool. If you have the latest versions and still can't get it
144to work, see the next section on Makefile.lite.
Josh Coalson04032562001-07-20 23:43:15 +0000145
Josh Coalson3643db32001-07-18 00:23:06 +0000146There are a few FLAC-specific arguments you can give to
147`configure':
148
149--enable-debug : Builds everything with debug symbols and some
150extra (and more verbose) error checking.
151
152--disable-asm-optimizations : Disables the compilation of the
153assembly routines. Many routines have assembly versions for
154speed and `configure' is pretty good about knowing what is
155supported, but you can use this option to build only from the
Josh Coalson5988dd52007-09-16 20:58:12 +0000156C sources. May be necessary for building on OS X (Intel)
Josh Coalson3643db32001-07-18 00:23:06 +0000157
Josh Coalsone3268482001-12-04 06:46:12 +0000158--enable-sse : If you are building for an x86 CPU that supports
Josh Coalson3643db32001-07-18 00:23:06 +0000159SSE instructions, you can enable some of the faster routines
160if your operating system also supports SSE instructions. flac
161can tell if the CPU supports the instructions but currently has
162no way to test if the OS does, so if it does, you must pass
163this argument to configure to use the SSE routines. If flac
164crashes when built with this option you will have to go back and
Josh Coalsone3268482001-12-04 06:46:12 +0000165configure without --enable-sse. Note that
166--disable-asm-optimizations implies --disable-sse.
Josh Coalson9e6efb62001-05-29 18:48:42 +0000167
Josh Coalson3d730722003-01-14 06:59:50 +0000168--enable-local-xmms-plugin : Installs the FLAC XMMS plugin in
169$HOME/.xmms/Plugins, instead of the global XMMS plugin area
170(usually /usr/lib/xmms/Input).
Josh Coalsonc69f8782001-11-13 23:08:22 +0000171
Josh Coalson822eef62002-09-12 06:40:44 +0000172--with-ogg=
Josh Coalson822eef62002-09-12 06:40:44 +0000173--with-xmms-prefix=
174--with-libiconv-prefix=
175Use these if you have these packages but configure can't find them.
176
Josh Coalson71fb9ff2002-12-03 06:29:10 +0000177If you want to build completely from scratch (i.e. starting with just
Ulrich Klauereaae8e02013-04-30 23:10:11 +0200178configure.ac and Makefile.am) you should be able to just run 'autogen.sh'
Josh Coalson71fb9ff2002-12-03 06:29:10 +0000179but make sure and read the comments in that file first.
180
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000181
Josh Coalson310b9ec2002-07-31 06:39:21 +0000182===============================================================================
Josh Coalson04032562001-07-20 23:43:15 +0000183Building with Makefile.lite
Josh Coalson310b9ec2002-07-31 06:39:21 +0000184===============================================================================
Josh Coalson04032562001-07-20 23:43:15 +0000185
186There is a more lightweight build system for do-it-yourself-ers.
187It is also useful if configure isn't working, which may be the
188case since lately we've had some problems with different versions
189of automake and libtool. The Makefile.lite system should work
Josh Coalson71fb9ff2002-12-03 06:29:10 +0000190on GNU systems with few or no adjustments.
Josh Coalson04032562001-07-20 23:43:15 +0000191
192From the top level just 'make -f Makefile.lite'. You can
193specify zero or one optional target from 'release', 'debug',
194'test', or 'clean'. The default is 'release'. There is no
195'install' target but everything you need will end up in the
196obj/ directory.
197
198If you are not on an x86 system or you don't have nasm, you
199may have to change the DEFINES in src/libFLAC/Makefile.lite. If
200you don't have nasm, remove -DFLAC__HAS_NASM. If your target is
201not an x86, change -DFLAC__CPU_IA32 to -DFLAC__CPU_UNKNOWN.
202
203
Josh Coalson310b9ec2002-07-31 06:39:21 +0000204===============================================================================
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000205Building with MSVC
Josh Coalson310b9ec2002-07-31 06:39:21 +0000206===============================================================================
Josh Coalsonbb7f6b92000-12-10 04:09:52 +0000207
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100208There are .vcproj projects and a master FLAC.sln solution to build all
209the libraries and executables with MSVC 2005 or newer.
Josh Coalson3a17d3c2002-10-18 05:49:44 +0000210
Josh Coalson630d22e2003-01-25 18:32:56 +0000211Prerequisite: you must have the Ogg libraries installed as described
212later.
Josh Coalson71fb9ff2002-12-03 06:29:10 +0000213
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100214Prerequisite: you must have nasm installed, and nasm.exe must be in
215your PATH, or the path to nasm.exe must be added to the list of
Josh Coalson64fbc8f2004-09-10 00:57:17 +0000216directories for executable files in the MSVC global options.
Josh Coalson3a17d3c2002-10-18 05:49:44 +0000217
Josh Coalson32821c02007-02-22 02:56:16 +0000218VC++ 2005:
219To build everything, run Visual Studio, do File|Open and open FLAC.sln.
220From the dropdown in the toolbar, select "Release" instead of "Debug",
221then hit F7 to build.
222
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100223This will build all libraries both statically (e.g.
Erik de Castro Lopof67928d2013-01-02 22:48:59 +1100224objs\release\lib\libFLAC_static.lib) and as DLLs (e.g.
225objs\release\lib\libFLAC.dll), and it will build all binaries, statically
226linked (e.g. objs\release\bin\flac.exe).
Josh Coalson3a17d3c2002-10-18 05:49:44 +0000227
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100228Everything will end up in the "objs" directory. DLLs and .exe files
Josh Coalson71fb9ff2002-12-03 06:29:10 +0000229are all that are needed and can be copied to an installation area and
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100230added to the PATH.
Josh Coalson5676eb12001-11-09 19:23:50 +0000231
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100232By default the code is configured with Ogg support. Before building FLAC
Josh Coalson71fb9ff2002-12-03 06:29:10 +0000233you will need to get the Ogg source distribution
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100234(see http://xiph.org/downloads/), build libogg_static.lib (load
235win32\libogg_static.sln, change solution configuration to "Release" and
236code generation to "Multi-threaded (/MT)", then build), copy libogg_static.lib
237into FLAC's 'objs\release\lib' directory, and copy the entire include\ogg tree
238into FLAC's 'include' directory (so that there is an 'ogg' directory in FLAC's
Josh Coalson71fb9ff2002-12-03 06:29:10 +0000239'include' directory with the files ogg.h, os_types.h and config_types.h).
240
Erik de Castro Lopoc152d1a2013-03-18 06:22:51 +1100241If you want to build without Ogg support, instead edit all .vcproj files
242and remove any "FLAC__HAS_OGG" definitions.
Josh Coalson32821c02007-02-22 02:56:16 +0000243
Josh Coalson5676eb12001-11-09 19:23:50 +0000244
Josh Coalson310b9ec2002-07-31 06:39:21 +0000245===============================================================================
Josh Coalson5676eb12001-11-09 19:23:50 +0000246Building on Mac OS X
Josh Coalson310b9ec2002-07-31 06:39:21 +0000247===============================================================================
Josh Coalson5676eb12001-11-09 19:23:50 +0000248
Ulrich Klauereaae8e02013-04-30 23:10:11 +0200249If you have Fink or a recent version of OS X with the proper autotools,
Erik de Castro Lopo4ff213b2013-05-01 08:08:11 +1000250the GNU flow above should work.