Home | History | Annotate | Download | only in libjpeg-turbo
      1 *******************************************************************************
      2 **     Building on Un*x Platforms (including Cygwin and OS X)
      3 *******************************************************************************
      4 
      5 
      6 ==================
      7 Build Requirements
      8 ==================
      9 
     10 -- autoconf 2.56 or later
     11 -- automake 1.7 or later
     12 -- libtool 1.4 or later
     13    * If using Xcode 4.3 or later on OS X, autoconf and automake are no longer
     14      provided.  The easiest way to obtain them is from MacPorts
     15      (http://www.macports.org/).
     16 
     17 -- NASM or YASM (if building x86 or x86-64 SIMD extensions)
     18    * NASM 0.98, or 2.01 or later is required for an x86 build (0.99 and 2.00 do
     19      not work properly with libjpeg-turbo's x86 SIMD code.)
     20    * NASM 2.00 or later is required for an x86-64 build.
     21    * NASM 2.07, or 2.11.09 or later is required for an x86-64 Mac build
     22      (2.11.08 does not work properly with libjpeg-turbo's x86-64 SIMD code when
     23      building macho64 objects.)  NASM or YASM can be obtained from MacPorts
     24      (http://www.macports.org/).
     25 
     26    The binary RPMs released by the NASM project do not work on older Linux
     27    systems, such as Red Hat Enterprise Linux 4.  On such systems, you can
     28    easily build and install NASM from a source RPM by downloading one of the
     29    SRPMs from
     30 
     31    http://www.nasm.us/pub/nasm/releasebuilds
     32 
     33    and executing the following as root:
     34 
     35      ARCH=`uname -m`
     36      rpmbuild --rebuild nasm-{version}.src.rpm
     37      rpm -Uvh /usr/src/redhat/RPMS/$ARCH/nasm-{version}.$ARCH.rpm
     38 
     39    NOTE: the NASM build will fail if texinfo is not installed.
     40 
     41 -- GCC v4.1 or later recommended for best performance
     42    * Beginning with Xcode 4, Apple stopped distributing GCC and switched to
     43      the LLVM compiler.  Xcode v4.0 through v4.6 provides a GCC front end
     44      called LLVM-GCC.  Unfortunately, as of this writing, neither LLVM-GCC nor
     45      the LLVM (clang) compiler produces optimal performance with libjpeg-turbo.
     46      Building libjpeg-turbo with LLVM-GCC v4.2 results in a 10% performance
     47      degradation when compressing using 64-bit code, relative to building
     48      libjpeg-turbo with GCC v4.2.  Building libjpeg-turbo with LLVM (clang)
     49      results in a 20% performance degradation when compressing using 64-bit
     50      code, relative to building libjpeg-turbo with GCC v4.2.  If you are
     51      running Snow Leopard or earlier, it is suggested that you continue to use
     52      Xcode v3.2.6, which provides GCC v4.2.  If you are using Lion or later, it
     53      is suggested that you install Apple GCC v4.2 or GCC v5 through MacPorts.
     54 
     55 -- If building the TurboJPEG Java wrapper, JDK or OpenJDK 1.5 or later is
     56    required.  Some systems, such as Solaris 10 and later and Red Hat Enterprise
     57    Linux 5 and later, have this pre-installed.  On OS X 10.5 and later, it will
     58    be necessary to install the Java Developer Package, which can be downloaded
     59    from http://developer.apple.com/downloads (Apple ID required.)  For systems
     60    that do not have a JDK installed, you can obtain the Oracle Java Development
     61    Kit from http://www.java.com.
     62 
     63 
     64 ==================
     65 Out-of-Tree Builds
     66 ==================
     67 
     68 Binary objects, libraries, and executables are generated in the same directory
     69 from which configure was executed (the "binary directory"), and this directory
     70 need not necessarily be the same as the libjpeg-turbo source directory.  You
     71 can create multiple independent binary directories, in which different versions
     72 of libjpeg-turbo can be built from the same source tree using different
     73 compilers or settings.  In the sections below, {build_directory} refers to the
     74 binary directory, whereas {source_directory} refers to the libjpeg-turbo source
     75 directory.  For in-tree builds, these directories are the same.
     76 
     77 
     78 ======================
     79 Building libjpeg-turbo
     80 ======================
     81 
     82 The following procedure will build libjpeg-turbo on Linux, FreeBSD, Cygwin, and
     83 Solaris/x86 systems (on Solaris, this generates a 32-bit library.  See below
     84 for 64-bit build instructions.)
     85 
     86   cd {source_directory}
     87   autoreconf -fiv
     88   cd {build_directory}
     89   sh {source_directory}/configure [additional configure flags]
     90   make
     91 
     92 NOTE: Running autoreconf in the source directory is usually only necessary if
     93 building libjpeg-turbo from the SVN repository.
     94 
     95 This will generate the following files under .libs/
     96 
     97   libjpeg.a
     98       Static link library for the libjpeg API
     99 
    100   libjpeg.so.{version} (Linux, Unix)
    101   libjpeg.{version}.dylib (OS X)
    102   cygjpeg-{version}.dll (Cygwin)
    103       Shared library for the libjpeg API
    104 
    105   By default, {version} is 62.1.0, 7.1.0, or 8.0.2, depending on whether
    106   libjpeg v6b (default), v7, or v8 emulation is enabled.  If using Cygwin,
    107   {version} is 62, 7, or 8.
    108 
    109   libjpeg.so (Linux, Unix)
    110   libjpeg.dylib (OS X)
    111       Development symlink for the libjpeg API
    112 
    113   libjpeg.dll.a (Cygwin)
    114       Import library for the libjpeg API
    115 
    116   libturbojpeg.a
    117       Static link library for the TurboJPEG API
    118 
    119   libturbojpeg.so.0.1.0 (Linux, Unix)
    120   libturbojpeg.0.1.0.dylib (OS X)
    121   cygturbojpeg-0.dll (Cygwin)
    122       Shared library for the TurboJPEG API
    123 
    124   libturbojpeg.so (Linux, Unix)
    125   libturbojpeg.dylib (OS X)
    126       Development symlink for the TurboJPEG API
    127 
    128   libturbojpeg.dll.a (Cygwin)
    129       Import library for the TurboJPEG API
    130 
    131 
    132 libjpeg v7 or v8 API/ABI Emulation
    133 ----------------------------------
    134 
    135 Add --with-jpeg7 to the configure command line to build a version of
    136 libjpeg-turbo that is API/ABI-compatible with libjpeg v7.  Add --with-jpeg8 to
    137 the configure command to build a version of libjpeg-turbo that is
    138 API/ABI-compatible with libjpeg v8.  See README-turbo.txt for more information
    139 on libjpeg v7 and v8 emulation.
    140 
    141 
    142 In-Memory Source/Destination Managers
    143 -------------------------------------
    144 
    145 When using libjpeg v6b or v7 API/ABI emulation, add --without-mem-srcdst to the
    146 configure command line to build a version of libjpeg-turbo that lacks the
    147 jpeg_mem_src() and jpeg_mem_dest() functions.  These functions were not part of
    148 the original libjpeg v6b and v7 APIs, so removing them ensures strict
    149 conformance with those APIs.  See README-turbo.txt for more information.
    150 
    151 
    152 Arithmetic Coding Support
    153 -------------------------
    154 
    155 Since the patent on arithmetic coding has expired, this functionality has been
    156 included in this release of libjpeg-turbo.  libjpeg-turbo's implementation is
    157 based on the implementation in libjpeg v8, but it works when emulating libjpeg
    158 v7 or v6b as well.  The default is to enable both arithmetic encoding and
    159 decoding, but those who have philosophical objections to arithmetic coding can
    160 add --without-arith-enc or --without-arith-dec to the configure command line to
    161 disable encoding or decoding (respectively.)
    162 
    163 
    164 TurboJPEG Java Wrapper
    165 ----------------------
    166 Add --with-java to the configure command line to incorporate an optional Java
    167 Native Interface wrapper into the TurboJPEG shared library and build the Java
    168 front-end classes to support it.  This allows the TurboJPEG shared library to
    169 be used directly from Java applications.  See java/README for more details.
    170 
    171 You can set the JAVAC, JAR, and JAVA configure variables to specify
    172 alternate commands for javac, jar, and java (respectively.)  You can also
    173 set the JAVACFLAGS configure variable to specify arguments that should be
    174 passed to the Java compiler when building the front-end classes, and JNI_CFLAGS
    175 to specify arguments that should be passed to the C compiler when building the
    176 JNI wrapper.  Run 'configure --help' for more details.
    177 
    178 
    179 ========================
    180 Installing libjpeg-turbo
    181 ========================
    182 
    183 If you intend to install these libraries and the associated header files, then
    184 replace 'make' in the instructions above with
    185 
    186   make install prefix={base dir} libdir={library directory}
    187 
    188 For example,
    189 
    190   make install prefix=/usr/local libdir=/usr/local/lib64
    191 
    192 will install the header files in /usr/local/include and the library files in
    193 /usr/local/lib64.  If 'prefix' and 'libdir' are not specified, then the default
    194 is to install the header files in /opt/libjpeg-turbo/include and the library
    195 files in /opt/libjpeg-turbo/lib32 (32-bit) or /opt/libjpeg-turbo/lib64
    196 (64-bit.)
    197 
    198 NOTE: You can specify a prefix of /usr and a libdir of, for instance,
    199 /usr/lib64 to overwrite the system's version of libjpeg.  If you do this,
    200 however, then be sure to BACK UP YOUR SYSTEM'S INSTALLATION OF LIBJPEG before
    201 overwriting it.  It is recommended that you instead install libjpeg-turbo into
    202 a non-system directory and manipulate the LD_LIBRARY_PATH or create symlinks
    203 to force applications to use libjpeg-turbo instead of libjpeg.  See
    204 README-turbo.txt for more information.
    205 
    206 
    207 =============
    208 Build Recipes
    209 =============
    210 
    211 
    212 32-bit Build on 64-bit Linux
    213 ----------------------------
    214 
    215 Add
    216 
    217   --host i686-pc-linux-gnu CFLAGS='-O3 -m32' LDFLAGS=-m32
    218 
    219 to the configure command line.
    220 
    221 
    222 64-bit Build on 64-bit OS X
    223 ---------------------------
    224 
    225 Add
    226 
    227   --host x86_64-apple-darwin NASM=/opt/local/bin/nasm
    228 
    229 to the configure command line.  NASM 2.07 or later from MacPorts must be
    230 installed.
    231 
    232 
    233 32-bit Build on 64-bit OS X
    234 ---------------------------
    235 
    236 Add
    237 
    238   --host i686-apple-darwin CFLAGS='-O3 -m32' LDFLAGS=-m32
    239 
    240 to the configure command line.
    241 
    242 
    243 64-bit Backward-Compatible Build on 64-bit OS X
    244 -----------------------------------------------
    245 
    246 Add
    247 
    248   --host x86_64-apple-darwin NASM=/opt/local/bin/nasm \
    249   CFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
    250     -mmacosx-version-min=10.5 -O3' \
    251     LDFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
    252     -mmacosx-version-min=10.5'
    253 
    254 to the configure command line.  The OS X 10.5 SDK, and NASM 2.07 or later from
    255 MacPorts, must be installed.
    256 
    257 
    258 32-bit Backward-Compatible Build on OS X
    259 ----------------------------------------
    260 
    261 Add
    262 
    263   --host i686-apple-darwin \
    264     CFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
    265     -mmacosx-version-min=10.5 -O3 -m32' \
    266     LDFLAGS='-isysroot /Developer/SDKs/MacOSX10.5.sdk \
    267     -mmacosx-version-min=10.5 -m32'
    268 
    269 to the configure command line.  The OS X 10.5 SDK must be installed.
    270 
    271 
    272 64-bit Library Build on 64-bit Solaris
    273 --------------------------------------
    274 
    275 Add
    276 
    277   --host x86_64-pc-solaris CFLAGS='-O3 -m64' LDFLAGS=-m64
    278 
    279 to the configure command line.
    280 
    281 
    282 32-bit Build on 64-bit FreeBSD
    283 ------------------------------
    284 
    285 Add
    286 
    287   --host i386-unknown-freebsd CC='gcc -B /usr/lib32' CFLAGS='-O3 -m32' \
    288     LDFLAGS='-B/usr/lib32'
    289 
    290 to the configure command line.  NASM 2.07 or later from FreeBSD ports must be
    291 installed.
    292 
    293 
    294 Oracle Solaris Studio
    295 ---------------------
    296 
    297 Add
    298 
    299   CC=cc
    300 
    301 to the configure command line.  libjpeg-turbo will automatically be built with
    302 the maximum optimization level (-xO5) unless you override CFLAGS.
    303 
    304 To build a 64-bit version of libjpeg-turbo using Oracle Solaris Studio, add
    305 
    306   --host x86_64-pc-solaris CC=cc CFLAGS='-xO5 -m64' LDFLAGS=-m64
    307 
    308 to the configure command line.
    309 
    310 
    311 MinGW Build on Cygwin
    312 ---------------------
    313 
    314 Use CMake (see recipes below)
    315 
    316 
    317 ===========
    318 ARM Support
    319 ===========
    320 
    321 This release of libjpeg-turbo can use ARM NEON SIMD instructions to accelerate
    322 JPEG compression/decompression by approximately 2-4x on ARMv7 and later
    323 platforms.  If libjpeg-turbo is configured on an ARM Linux platform, then the
    324 build system will automatically include the NEON SIMD routines, if they are
    325 supported.  Build instructions for other ARM-based platforms follow.
    326 
    327 
    328 Building libjpeg-turbo for iOS
    329 ------------------------------
    330 
    331 iOS platforms, such as the iPhone and iPad, use ARM processors, some of which
    332 support NEON instructions.  Additional steps are required in order to build
    333 libjpeg-turbo for these platforms.
    334 
    335 Additional build requirements:
    336 
    337   gas-preprocessor.pl
    338   (https://raw.githubusercontent.com/libjpeg-turbo/gas-preprocessor/master/gas-preprocessor.pl)
    339   should be installed in your PATH.
    340 
    341 
    342 ARM 32-bit Build (Xcode 4.6.x and earlier, LLVM-GCC):
    343 
    344 Set the following shell variables for simplicity:
    345 
    346   Xcode 4.2 and earlier:
    347   IOS_PLATFORMDIR=/Developer/Platforms/iPhoneOS.platform
    348   Xcode 4.3 and later:
    349   IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
    350 
    351   IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk
    352   IOS_GCC=$IOS_PLATFORMDIR/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
    353 
    354   ARMv6 (code will run on all iOS devices, not SIMD-accelerated):
    355   [NOTE: Requires Xcode 4.4.x or earlier]
    356   IOS_CFLAGS="-march=armv6 -mcpu=arm1176jzf-s -mfpu=vfp"
    357 
    358   ARMv7 (code will run on iPhone 3GS-4S/iPad 1st-3rd Generation and newer):
    359   IOS_CFLAGS="-march=armv7 -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon"
    360 
    361   ARMv7s (code will run on iPhone 5/iPad 4th Generation and newer):
    362   [NOTE: Requires Xcode 4.5 or later]
    363   IOS_CFLAGS="-march=armv7s -mcpu=swift -mtune=swift -mfpu=neon"
    364 
    365 Follow the procedure under "Building libjpeg-turbo" above, adding
    366 
    367   --host arm-apple-darwin10 \
    368     CC="$IOS_GCC" LD="$IOS_GCC" \
    369     CFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT -O3 $IOS_CFLAGS" \
    370     LDFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT $IOS_CFLAGS"
    371 
    372 to the configure command line.
    373 
    374 
    375 ARM 32-bit Build (Xcode 5.0.x and later, Clang):
    376 
    377 Set the following shell variables for simplicity:
    378 
    379   IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
    380   IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk
    381   IOS_GCC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
    382 
    383   ARMv7 (code will run on iPhone 3GS-4S/iPad 1st-3rd Generation and newer):
    384   IOS_CFLAGS="-arch armv7"
    385 
    386   ARMv7s (code will run on iPhone 5/iPad 4th Generation and newer):
    387   IOS_CFLAGS="-arch armv7s"
    388 
    389 Follow the procedure under "Building libjpeg-turbo" above, adding
    390 
    391   --host arm-apple-darwin10 \
    392     CC="$IOS_GCC" LD="$IOS_GCC" \
    393     CFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT -O3 $IOS_CFLAGS" \
    394     LDFLAGS="-mfloat-abi=softfp -isysroot $IOS_SYSROOT $IOS_CFLAGS" \
    395     CCASFLAGS="-no-integrated-as $IOS_CFLAGS"
    396 
    397 to the configure command line.
    398 
    399 
    400 ARMv8 64-bit Build (Xcode 5.0.x and later, Clang):
    401 
    402 Code will run on iPhone 5S/iPad Mini 2/iPad Air and newer.
    403 
    404 Set the following shell variables for simplicity:
    405 
    406   IOS_PLATFORMDIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
    407   IOS_SYSROOT=$IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk
    408   IOS_GCC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
    409   IOS_CFLAGS="-arch arm64"
    410 
    411 Follow the procedure under "Building libjpeg-turbo" above, adding
    412 
    413   --host aarch64-apple-darwin \
    414     CC="$IOS_GCC" LD="$IOS_GCC" \
    415     CFLAGS="-isysroot $IOS_SYSROOT -O3 $IOS_CFLAGS" \
    416     LDFLAGS="-isysroot $IOS_SYSROOT $IOS_CFLAGS"
    417 
    418 to the configure command line.
    419 
    420 
    421 NOTE:  You can also add -miphoneos-version-min={version} to $IOS_CFLAGS above
    422 in order to support older versions of iOS than the default version supported by
    423 the SDK.
    424 
    425 Once built, lipo can be used to combine the ARMv6, v7, v7s, and/or v8 variants
    426 into a universal library.
    427 
    428 NOTE: If you are building libjpeg-turbo from the "official" project tarball,
    429 then it is highly likely that you will need to run 'autoreconf -fiv' in the
    430 source tree prior to building ARMv7, v7s, or v8 iOS binaries using the
    431 techniques described above.  Otherwise, you may get a libtool error such as
    432 "unable to infer tagged configuration."
    433 
    434 
    435 Building libjpeg-turbo for Android
    436 ----------------------------------
    437 
    438 Building libjpeg-turbo for Android platforms requires the Android NDK
    439 (https://developer.android.com/tools/sdk/ndk) and autotools.  The following is
    440 a general recipe script that can be modified for your specific needs.
    441 
    442   # Set these variables to suit your needs
    443   NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/ndk}
    444   BUILD_PLATFORM={the platform name for the NDK package you installed--
    445     for example, "windows-x86" or "linux-x86_64"}
    446   TOOLCHAIN_VERSION={"4.6", "4.8", etc.  This corresponds to a toolchain
    447     directory under ${NDK_PATH}/toolchains/.}
    448   ANDROID_VERSION={The minimum version of Android to support-- for example,
    449     "9", "19", etc.}
    450 
    451   HOST=arm-linux-androideabi
    452   TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
    453   SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm
    454   ANDROID_INCLUDES="-I${SYSROOT}/usr/include -I${TOOLCHAIN}/include"
    455   ANDROID_CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \
    456     -fstrict-aliasing --sysroot=${SYSROOT}"
    457   export CPP=${TOOLCHAIN}/bin/${HOST}-cpp
    458   export AR=${TOOLCHAIN}/bin/${HOST}-ar
    459   export AS=${TOOLCHAIN}/bin/${HOST}-as
    460   export NM=${TOOLCHAIN}/bin/${HOST}-nm
    461   export CC=${TOOLCHAIN}/bin/${HOST}-gcc
    462   export LD=${TOOLCHAIN}/bin/${HOST}-ld
    463   export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib
    464   export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump
    465   export STRIP=${TOOLCHAIN}/bin/${HOST}-strip
    466   cd {build_directory}
    467   sh {source_directory}/configure --host=${HOST} \
    468     CFLAGS="${ANDROID_INCLUDES} ${ANDROID_CFLAGS} -O3" \
    469     CPPFLAGS="${ANDROID_INCLUDES} ${ANDROID_CFLAGS}" \
    470     LDFLAGS="${ANDROID_CFLAGS}" --with-simd ${1+"$@"}
    471   make
    472 
    473 
    474 *******************************************************************************
    475 **     Building on Windows (Visual C++ or MinGW)
    476 *******************************************************************************
    477 
    478 
    479 ==================
    480 Build Requirements
    481 ==================
    482 
    483 -- CMake (http://www.cmake.org) v2.8.8 or later
    484 
    485 -- Microsoft Visual C++ 2005 or later
    486 
    487    If you don't already have Visual C++, then the easiest way to get it is by
    488    installing the Windows SDK:
    489 
    490    http://msdn.microsoft.com/en-us/windows/bb980924.aspx
    491 
    492    The Windows SDK includes both 32-bit and 64-bit Visual C++ compilers and
    493    everything necessary to build libjpeg-turbo.
    494 
    495    * You can also use Microsoft Visual Studio Express Edition, which is a free
    496      download.  (NOTE: versions prior to 2012 can only be used to build 32-bit
    497      code.)
    498    * If you intend to build libjpeg-turbo from the command line, then add the
    499      appropriate compiler and SDK directories to the INCLUDE, LIB, and PATH
    500      environment variables.  This is generally accomplished by executing
    501      vcvars32.bat or vcvars64.bat and SetEnv.cmd.  vcvars32.bat and
    502      vcvars64.bat are part of Visual C++ and are located in the same directory
    503      as the compiler.  SetEnv.cmd is part of the Windows SDK.  You can pass
    504      optional arguments to SetEnv.cmd to specify a 32-bit or 64-bit build
    505      environment.
    506 
    507 ... OR ...
    508 
    509 -- MinGW
    510 
    511    MinGW-builds (http://sourceforge.net/projects/mingwbuilds/) or
    512    tdm-gcc (http://tdm-gcc.tdragon.net/) recommended if building on a Windows
    513    machine.  Both distributions install a Start Menu link that can be used to
    514    launch a command prompt with the appropriate compiler paths automatically
    515    set.
    516 
    517 -- NASM (http://www.nasm.us/) 0.98 or later (NASM 2.05 or later is required for
    518    a 64-bit build)
    519 
    520 -- If building the TurboJPEG Java wrapper, JDK 1.5 or later is required.  This
    521    can be downloaded from http://www.java.com.
    522 
    523 
    524 ==================
    525 Out-of-Tree Builds
    526 ==================
    527 
    528 Binary objects, libraries, and executables are generated in the same directory
    529 from which cmake was executed (the "binary directory"), and this directory need
    530 not necessarily be the same as the libjpeg-turbo source directory.  You can
    531 create multiple independent binary directories, in which different versions of
    532 libjpeg-turbo can be built from the same source tree using different compilers
    533 or settings.  In the sections below, {build_directory} refers to the binary
    534 directory, whereas {source_directory} refers to the libjpeg-turbo source
    535 directory.  For in-tree builds, these directories are the same.
    536 
    537 
    538 ======================
    539 Building libjpeg-turbo
    540 ======================
    541 
    542 
    543 Visual C++ (Command Line)
    544 -------------------------
    545 
    546   cd {build_directory}
    547   cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release {source_directory}
    548   nmake
    549 
    550 This will build either a 32-bit or a 64-bit version of libjpeg-turbo, depending
    551 on which version of cl.exe is in the PATH.
    552 
    553 The following files will be generated under {build_directory}:
    554 
    555   jpeg-static.lib
    556       Static link library for the libjpeg API
    557   sharedlib/jpeg{version}.dll
    558       DLL for the libjpeg API
    559   sharedlib/jpeg.lib
    560       Import library for the libjpeg API
    561   turbojpeg-static.lib
    562       Static link library for the TurboJPEG API
    563   turbojpeg.dll
    564       DLL for the TurboJPEG API
    565   turbojpeg.lib
    566       Import library for the TurboJPEG API
    567 
    568 {version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
    569 v8 emulation is enabled.
    570 
    571 
    572 Visual C++ (IDE)
    573 ----------------
    574 
    575 Choose the appropriate CMake generator option for your version of Visual Studio
    576 (run "cmake" with no arguments for a list of available generators.)  For
    577 instance:
    578 
    579   cd {build_directory}
    580   cmake -G "Visual Studio 10" {source_directory}
    581 
    582 NOTE:  Add "Win64" to the generator name (for example, "Visual Studio 10
    583 Win64") to build a 64-bit version of libjpeg-turbo.  Recent versions of CMake
    584 no longer document that.  A separate build directory must be used for 32-bit
    585 and 64-bit builds.
    586 
    587 You can then open ALL_BUILD.vcproj in Visual Studio and build one of the
    588 configurations in that project ("Debug", "Release", etc.) to generate a full
    589 build of libjpeg-turbo.
    590 
    591 This will generate the following files under {build_directory}:
    592 
    593   {configuration}/jpeg-static.lib
    594       Static link library for the libjpeg API
    595   sharedlib/{configuration}/jpeg{version}.dll
    596       DLL for the libjpeg API
    597   sharedlib/{configuration}/jpeg.lib
    598       Import library for the libjpeg API
    599   {configuration}/turbojpeg-static.lib
    600       Static link library for the TurboJPEG API
    601   {configuration}/turbojpeg.dll
    602       DLL for the TurboJPEG API
    603   {configuration}/turbojpeg.lib
    604       Import library for the TurboJPEG API
    605 
    606 {configuration} is Debug, Release, RelWithDebInfo, or MinSizeRel, depending on
    607 the configuration you built in the IDE, and {version} is 62, 7, or 8,
    608 depending on whether libjpeg v6b (default), v7, or v8 emulation is enabled.
    609 
    610 
    611 MinGW
    612 -----
    613 
    614 NOTE: This assumes that you are building on a Windows machine.  If you are
    615 cross-compiling on a Linux/Unix machine, then see "Build Recipes" below.
    616 
    617   cd {build_directory}
    618   cmake -G "MinGW Makefiles" {source_directory}
    619   mingw32-make
    620 
    621 This will generate the following files under {build_directory}
    622 
    623   libjpeg.a
    624       Static link library for the libjpeg API
    625   sharedlib/libjpeg-{version}.dll
    626       DLL for the libjpeg API
    627   sharedlib/libjpeg.dll.a
    628       Import library for the libjpeg API
    629   libturbojpeg.a
    630       Static link library for the TurboJPEG API
    631   libturbojpeg.dll
    632       DLL for the TurboJPEG API
    633   libturbojpeg.dll.a
    634       Import library for the TurboJPEG API
    635 
    636 {version} is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or
    637 v8 emulation is enabled.
    638 
    639 
    640 Debug Build
    641 -----------
    642 
    643 Add "-DCMAKE_BUILD_TYPE=Debug" to the cmake command line.  Or, if building with
    644 NMake, remove "-DCMAKE_BUILD_TYPE=Release" (Debug builds are the default with
    645 NMake.)
    646 
    647 
    648 libjpeg v7 or v8 API/ABI Emulation
    649 -----------------------------------
    650 
    651 Add "-DWITH_JPEG7=1" to the cmake command line to build a version of
    652 libjpeg-turbo that is API/ABI-compatible with libjpeg v7.  Add "-DWITH_JPEG8=1"
    653 to the cmake command to build a version of libjpeg-turbo that is
    654 API/ABI-compatible with libjpeg v8.  See README-turbo.txt for more information
    655 on libjpeg v7 and v8 emulation.
    656 
    657 
    658 In-Memory Source/Destination Managers
    659 -------------------------------------
    660 
    661 When using libjpeg v6b or v7 API/ABI emulation, add -DWITH_MEM_SRCDST=0 to the
    662 CMake command line to build a version of libjpeg-turbo that lacks the
    663 jpeg_mem_src() and jpeg_mem_dest() functions.  These functions were not part of
    664 the original libjpeg v6b and v7 APIs, so removing them ensures strict
    665 conformance with those APIs.  See README-turbo.txt for more information.
    666 
    667 
    668 Arithmetic Coding Support
    669 -------------------------
    670 
    671 Since the patent on arithmetic coding has expired, this functionality has been
    672 included in this release of libjpeg-turbo.  libjpeg-turbo's implementation is
    673 based on the implementation in libjpeg v8, but it works when emulating libjpeg
    674 v7 or v6b as well.  The default is to enable both arithmetic encoding and
    675 decoding, but those who have philosophical objections to arithmetic coding can
    676 add "-DWITH_ARITH_ENC=0" or "-DWITH_ARITH_DEC=0" to the cmake command line to
    677 disable encoding or decoding (respectively.)
    678 
    679 
    680 TurboJPEG Java Wrapper
    681 ----------------------
    682 Add "-DWITH_JAVA=1" to the cmake command line to incorporate an optional Java
    683 Native Interface wrapper into the TurboJPEG shared library and build the Java
    684 front-end classes to support it.  This allows the TurboJPEG shared library to
    685 be used directly from Java applications.  See java/README for more details.
    686 
    687 If you are using CMake 2.8, you can set the Java_JAVAC_EXECUTABLE,
    688 Java_JAVA_EXECUTABLE, and Java_JAR_EXECUTABLE CMake variables to specify
    689 alternate commands or locations for javac, jar, and java (respectively.)  If
    690 you are using CMake 2.6, set JAVA_COMPILE, JAVA_RUNTIME, and JAVA_ARCHIVE
    691 instead.  You can also set the JAVACFLAGS CMake variable to specify arguments
    692 that should be passed to the Java compiler when building the front-end classes.
    693 
    694 
    695 ========================
    696 Installing libjpeg-turbo
    697 ========================
    698 
    699 You can use the build system to install libjpeg-turbo into a directory of your
    700 choosing (as opposed to creating an installer.)  To do this, add:
    701 
    702   -DCMAKE_INSTALL_PREFIX={install_directory}
    703 
    704 to the cmake command line.
    705 
    706 For example,
    707 
    708   cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release \
    709     -DCMAKE_INSTALL_PREFIX=c:\libjpeg-turbo {source_directory}
    710   nmake install
    711 
    712 will install the header files in c:\libjpeg-turbo\include, the library files
    713 in c:\libjpeg-turbo\lib, the DLL's in c:\libjpeg-turbo\bin, and the
    714 documentation in c:\libjpeg-turbo\doc.
    715 
    716 
    717 =============
    718 Build Recipes
    719 =============
    720 
    721 
    722 64-bit MinGW Build on Cygwin
    723 ----------------------------
    724 
    725   cd {build_directory}
    726   CC=/usr/bin/x86_64-w64-mingw32-gcc \
    727     cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
    728     -DCMAKE_RC_COMPILER=/usr/bin/x86_64-w64-mingw32-windres.exe \
    729     {source_directory}
    730   make
    731 
    732 This produces a 64-bit build of libjpeg-turbo that does not depend on
    733 cygwin1.dll or other Cygwin DLL's.  The mingw64-x86_64-gcc-core and
    734 mingw64-x86_64-gcc-g++ packages (and their dependencies) must be installed.
    735 
    736 
    737 32-bit MinGW Build on Cygwin
    738 ----------------------------
    739 
    740   cd {build_directory}
    741   CC=/usr/bin/i686-w64-mingw32-gcc \
    742     cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
    743     -DCMAKE_RC_COMPILER=/usr/bin/i686-w64-mingw32-windres.exe \
    744     {source_directory}
    745   make
    746 
    747 This produces a 32-bit build of libjpeg-turbo that does not depend on
    748 cygwin1.dll or other Cygwin DLL's.  The mingw64-i686-gcc-core and
    749 mingw64-i686-gcc-g++ packages (and their dependencies) must be installed.
    750 
    751 
    752 MinGW Build on Linux
    753 --------------------
    754 
    755   cd {build_directory}
    756   CC={mingw_binary_path}/i386-mingw32-gcc \
    757     cmake -G "Unix Makefiles" -DCMAKE_SYSTEM_NAME=Windows \
    758     -DCMAKE_AR={mingw_binary_path}/i386-mingw32-ar \
    759     -DCMAKE_RANLIB={mingw_binary_path}/i386-mingw32-ranlib \
    760     {source_directory}
    761   make
    762 
    763 
    764 *******************************************************************************
    765 **     Creating Release Packages
    766 *******************************************************************************
    767 
    768 The following commands can be used to create various types of release packages:
    769 
    770 
    771 Unix/Linux
    772 ----------
    773 
    774 make rpm
    775 
    776   Create Red Hat-style binary RPM package.  Requires RPM v4 or later.
    777 
    778 make srpm
    779 
    780   This runs 'make dist' to create a pristine source tarball, then creates a
    781   Red Hat-style source RPM package from the tarball.  Requires RPM v4 or later.
    782 
    783 make deb
    784 
    785   Create Debian-style binary package.  Requires dpkg.
    786 
    787 make dmg
    788 
    789   Create Macintosh package/disk image.  This requires pkgbuild and
    790   productbuild, which are installed by default on OS X 10.7 and later and which
    791   can be obtained by installing Xcode 3.2.6 (with the "Unix Development"
    792   option) on OS X 10.6.  Packages built in this manner can be installed on OS X
    793   10.5 and later, but they must be built on OS X 10.6 or later.
    794 
    795 make udmg [BUILDDIR32={32-bit build directory}]
    796 
    797   On 64-bit OS X systems, this creates a Macintosh package and disk image that
    798   contains universal i386/x86-64 binaries.  You should first configure a 32-bit
    799   out-of-tree build of libjpeg-turbo, then configure a 64-bit out-of-tree
    800   build, then run 'make udmg' from the 64-bit build directory.  The build
    801   system will look for the 32-bit build under {source_directory}/osxx86 by
    802   default, but you can override this by setting the BUILDDIR32 variable on the
    803   make command line as shown above.
    804 
    805 make iosdmg [BUILDDIR32={32-bit build directory}] \
    806   [BUILDDIRARMV6={ARMv6 build directory}] \
    807   [BUILDDIRARMV7={ARMv7 build directory}] \
    808   [BUILDDIRARMV7S={ARMv7s build directory}] \
    809   [BUILDDIRARMV8={ARMv8 build directory}]
    810 
    811   On OS X systems, this creates a Macintosh package and disk image in which the
    812   libjpeg-turbo static libraries contain ARM architectures necessary to build
    813   iOS applications.  If building on an x86-64 system, the binaries will also
    814   contain the i386 architecture, as with 'make udmg' above.  You should first
    815   configure ARMv6, ARMv7, ARMv7s, and/or ARMv8 out-of-tree builds of
    816   libjpeg-turbo (see "Building libjpeg-turbo for iOS" above.)  If you are
    817   building an x86-64 version of libjpeg-turbo, you should configure a 32-bit
    818   out-of-tree build as well.  Next, build libjpeg-turbo as you would normally,
    819   using an out-of-tree build.  When it is built, run 'make iosdmg' from the
    820   build directory.  The build system will look for the ARMv6 build under
    821   {source_directory}/iosarmv6 by default, the ARMv7 build under
    822   {source_directory}/iosarmv7 by default, the ARMv7s build under
    823   {source_directory}/iosarmv7s by default, the ARMv8 build under
    824   {source_directory}/iosarmv8 by default, and (if applicable) the 32-bit build
    825   under {source_directory}/osxx86 by default, but you can override this by
    826   setting the BUILDDIR32, BUILDDIRARMV6, BUILDDIRARMV7, BUILDDIRARMV7S, and/or
    827   BUILDDIRARMV8 variables on the make command line as shown above.
    828 
    829   NOTE: If including an ARMv8 build in the package, then you may need to use
    830   Xcode's version of lipo instead of the operating system's.  To do this, pass
    831   an argument of LIPO="xcrun lipo" on the make command line.
    832 
    833 make cygwinpkg
    834 
    835   Build a Cygwin binary package.
    836 
    837 
    838 Windows
    839 -------
    840 
    841 If using NMake:
    842 
    843   cd {build_directory}
    844   nmake installer
    845 
    846 If using MinGW:
    847 
    848   cd {build_directory}
    849   make installer
    850 
    851 If using the Visual Studio IDE, build the "installer" project.
    852 
    853 The installer package (libjpeg-turbo[-gcc][64].exe) will be located under
    854 {build_directory}.  If building using the Visual Studio IDE, then the installer
    855 package will be located in a subdirectory with the same name as the
    856 configuration you built (such as {build_directory}\Debug\ or
    857 {build_directory}\Release\).
    858 
    859 Building a Windows installer requires the Nullsoft Install System
    860 (http://nsis.sourceforge.net/.)  makensis.exe should be in your PATH.
    861 
    862 
    863 *******************************************************************************
    864 **     Regression testing
    865 *******************************************************************************
    866 
    867 The most common way to test libjpeg-turbo is by invoking 'make test' on
    868 Unix/Linux platforms or 'ctest' on Windows platforms, once the build has
    869 completed.  This runs a series of tests to ensure that mathematical
    870 compatibility has been maintained between libjpeg-turbo and libjpeg v6b.  This
    871 also invokes the TurboJPEG unit tests, which ensure that the colorspace
    872 extensions, YUV encoding, decompression scaling, and other features of the
    873 TurboJPEG C and Java APIs are working properly (and, by extension, that the
    874 equivalent features of the underlying libjpeg API are also working.)
    875 
    876 Invoking 'make testclean' or 'nmake testclean' (if using NMake) or building
    877 the 'testclean' target (if using the Visual Studio IDE) will clean up the
    878 output images generated by 'make test'.
    879 
    880 On Unix/Linux platforms, more extensive tests of the TurboJPEG C and Java
    881 wrappers can be run by invoking 'make tjtest'.  These extended TurboJPEG tests
    882 essentially iterate through all of the available features of the TurboJPEG APIs
    883 that are not covered by the TurboJPEG unit tests (this includes the lossless
    884 transform options) and compare the images generated by each feature to images
    885 generated using the equivalent feature in the libjpeg API.  The extended
    886 TurboJPEG tests are meant to test for regressions in the TurboJPEG wrappers,
    887 not in the underlying libjpeg API library.
    888