From: DRC Date: Tue, 27 Jun 2017 02:58:32 +0000 (-0500) Subject: Merge branch 'master' into dev X-Git-Tag: 1.5.90~76 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ac4e9d914353eac83b2395ee992a1c262489bb0;p=libjpeg-turbo Merge branch 'master' into dev --- 2ac4e9d914353eac83b2395ee992a1c262489bb0 diff --cc BUILDING.md index 24d3bb9,2725f30..6894a16 --- a/BUILDING.md +++ b/BUILDING.md @@@ -535,21 -387,23 +535,21 @@@ needs # It should not be necessary to modify the rest HOST=arm-linux-androideabi SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm - ANDROID_CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \ - --sysroot=${SYSROOT}" - + export CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays --sysroot=${SYSROOT}" + export LDFLAGS=-pie TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - export CPP=${TOOLCHAIN}/bin/${HOST}-cpp - export AR=${TOOLCHAIN}/bin/${HOST}-ar - export NM=${TOOLCHAIN}/bin/${HOST}-nm - export CC=${TOOLCHAIN}/bin/${HOST}-gcc - export LD=${TOOLCHAIN}/bin/${HOST}-ld - export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib - export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump - export STRIP=${TOOLCHAIN}/bin/${HOST}-strip + - cat <android.cmake ++ cat <toolchain.cmake + set(CMAKE_SYSTEM_NAME Linux) + set(CMAKE_SYSTEM_PROCESSOR arm) + set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) + set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) + EOF + cd {build_directory} - sh {source_directory}/configure --host=${HOST} \ - CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \ - CPPFLAGS="${ANDROID_CFLAGS}" \ - LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} + cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ + -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ + [additional CMake flags] {source_directory} make @@@ -570,44 -424,390 +570,115 @@@ needs # It should not be necessary to modify the rest HOST=aarch64-linux-android SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm64 - export CFLAGS="--sysroot ${SYSROOT}" - ANDROID_CFLAGS="--sysroot=${SYSROOT}" - ++ export CFLAGS="--sysroot=${SYSROOT}" + export LDFLAGS=-pie TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - export CPP=${TOOLCHAIN}/bin/${HOST}-cpp - export AR=${TOOLCHAIN}/bin/${HOST}-ar - export NM=${TOOLCHAIN}/bin/${HOST}-nm - export CC=${TOOLCHAIN}/bin/${HOST}-gcc - export LD=${TOOLCHAIN}/bin/${HOST}-ld - export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib - export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump - export STRIP=${TOOLCHAIN}/bin/${HOST}-strip + + cat <toolchain.cmake + set(CMAKE_SYSTEM_NAME Linux) + set(CMAKE_SYSTEM_PROCESSOR aarch64) + set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) + set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) + EOF + cd {build_directory} - sh {source_directory}/configure --host=${HOST} \ - CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \ - CPPFLAGS="${ANDROID_CFLAGS}" \ - LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} + cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ + -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ + [additional CMake flags] {source_directory} make + + ### x86 (32-bit) + + The following is a general recipe script that can be modified for your specific + needs. + + # Set these variables to suit your needs + NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle} + BUILD_PLATFORM={the platform name for the NDK package you installed-- + for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"} + TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a + toolchain directory under ${NDK_PATH}/toolchains/.} + ANDROID_VERSION={The minimum version of Android to support-- for example, + "16", "19", etc.} + + # It should not be necessary to modify the rest + HOST=i686-linux-android + SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86 - ANDROID_CFLAGS="--sysroot=${SYSROOT}" - ++ export CFLAGS="--sysroot=${SYSROOT}" ++ export LDFLAGS=-pie + TOOLCHAIN=${NDK_PATH}/toolchains/x86-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - export CPP=${TOOLCHAIN}/bin/${HOST}-cpp - export AR=${TOOLCHAIN}/bin/${HOST}-ar - export NM=${TOOLCHAIN}/bin/${HOST}-nm - export CC=${TOOLCHAIN}/bin/${HOST}-gcc - export LD=${TOOLCHAIN}/bin/${HOST}-ld - export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib - export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump - export STRIP=${TOOLCHAIN}/bin/${HOST}-strip ++ ++ cat <toolchain.cmake ++ set(CMAKE_SYSTEM_NAME Linux) ++ set(CMAKE_SYSTEM_PROCESSOR i386) ++ set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) ++ set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) ++ EOF ++ + cd {build_directory} - sh {source_directory}/configure --host=${HOST} \ - CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \ - CPPFLAGS="${ANDROID_CFLAGS}" \ - LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} ++ cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ ++ -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ ++ [additional CMake flags] {source_directory} + make + + + ### x86-64 (64-bit) + + The following is a general recipe script that can be modified for your specific + needs. + + # Set these variables to suit your needs + NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle} + BUILD_PLATFORM={the platform name for the NDK package you installed-- + for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"} + TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a + toolchain directory under ${NDK_PATH}/toolchains/.} + ANDROID_VERSION={The minimum version of Android to support. "21" or later + is required for a 64-bit build.} + + # It should not be necessary to modify the rest + HOST=x86_64-linux-android + SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86_64 - ANDROID_CFLAGS="--sysroot=${SYSROOT}" - ++ export CFLAGS="--sysroot=${SYSROOT}" ++ export LDFLAGS=-pie + TOOLCHAIN=${NDK_PATH}/toolchains/x86_64-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - export CPP=${TOOLCHAIN}/bin/${HOST}-cpp - export AR=${TOOLCHAIN}/bin/${HOST}-ar - export NM=${TOOLCHAIN}/bin/${HOST}-nm - export CC=${TOOLCHAIN}/bin/${HOST}-gcc - export LD=${TOOLCHAIN}/bin/${HOST}-ld - export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib - export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump - export STRIP=${TOOLCHAIN}/bin/${HOST}-strip - cd {build_directory} - sh {source_directory}/configure --host=${HOST} \ - CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \ - CPPFLAGS="${ANDROID_CFLAGS}" \ - LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} - make - - -If building for Android 4.0.x (API level < 16) or earlier, remove `-fPIE` from -`CFLAGS` and `-pie` from `LDFLAGS`. - - -Installing libjpeg-turbo ------------------------- - -To install libjpeg-turbo after it is built, replace `make` in the build -instructions with `make install`. - -The `--prefix` argument to configure (or the `prefix` configure variable) can -be used to specify an installation directory of your choosing. If you don't -specify an installation directory, then the default is to install libjpeg-turbo -under **/opt/libjpeg-turbo** and to place the libraries in -**/opt/libjpeg-turbo/lib32** (32-bit) or **/opt/libjpeg-turbo/lib64** (64-bit.) - -The `bindir`, `datadir`, `docdir`, `includedir`, `libdir`, and `mandir` -configure variables allow a finer degree of control over where specific files in -the libjpeg-turbo distribution should be installed. These variables can either -be specified at configure time or passed as arguments to `make install`. - - -Windows (Visual C++ or MinGW) -============================= - - -Build Requirements ------------------- - -- [CMake](http://www.cmake.org) v2.8.11 or later - -- [NASM](http://www.nasm.us) or [YASM](http://yasm.tortall.net) - * If using NASM, 0.98 or later is required for an x86 build. - * If using NASM, 2.05 or later is required for an x86-64 build. - * **nasm.exe**/**yasm.exe** should be in your `PATH`. - -- Microsoft Visual C++ 2005 or later - - If you don't already have Visual C++, then the easiest way to get it is by - installing the - [Windows SDK](http://msdn.microsoft.com/en-us/windows/bb980924.aspx). - The Windows SDK includes both 32-bit and 64-bit Visual C++ compilers and - everything necessary to build libjpeg-turbo. - - * You can also use Microsoft Visual Studio Express/Community Edition, which - is a free download. (NOTE: versions prior to 2012 can only be used to - build 32-bit code.) - * If you intend to build libjpeg-turbo from the command line, then add the - appropriate compiler and SDK directories to the `INCLUDE`, `LIB`, and - `PATH` environment variables. This is generally accomplished by - executing `vcvars32.bat` or `vcvars64.bat` and `SetEnv.cmd`. - `vcvars32.bat` and `vcvars64.bat` are part of Visual C++ and are located in - the same directory as the compiler. `SetEnv.cmd` is part of the Windows - SDK. You can pass optional arguments to `SetEnv.cmd` to specify a 32-bit - or 64-bit build environment. - - ... OR ... - -- MinGW - - [MSYS2](http://msys2.github.io/) or [tdm-gcc](http://tdm-gcc.tdragon.net/) - recommended if building on a Windows machine. Both distributions install a - Start Menu link that can be used to launch a command prompt with the - appropriate compiler paths automatically set. - -- If building the TurboJPEG Java wrapper, JDK 1.5 or later is required. This - can be downloaded from . - - -Out-of-Tree Builds ------------------- - -Binary objects, libraries, and executables are generated in the directory from -which CMake is executed (the "binary directory"), and this directory need not -necessarily be the same as the libjpeg-turbo source directory. You can create -multiple independent binary directories, in which different versions of -libjpeg-turbo can be built from the same source tree using different compilers -or settings. In the sections below, *{build_directory}* refers to the binary -directory, whereas *{source_directory}* refers to the libjpeg-turbo source -directory. For in-tree builds, these directories are the same. - - -Build Procedure ---------------- - -NOTE: The build procedures below assume that CMake is invoked from the command -line, but all of these procedures can be adapted to the CMake GUI as -well. - - -### Visual C++ (Command Line) - - cd {build_directory} - cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release [additional CMake flags] {source_directory} - nmake - -This will build either a 32-bit or a 64-bit version of libjpeg-turbo, depending -on which version of **cl.exe** is in the `PATH`. - -The following files will be generated under *{build_directory}*: + -**jpeg-static.lib**
-Static link library for the libjpeg API - -**sharedlib/jpeg{version}.dll**
-DLL for the libjpeg API - -**sharedlib/jpeg.lib**
-Import library for the libjpeg API - -**turbojpeg-static.lib**
-Static link library for the TurboJPEG API - -**turbojpeg.dll**
-DLL for the TurboJPEG API - -**turbojpeg.lib**
-Import library for the TurboJPEG API - -*{version}* is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or -v8 emulation is enabled. - - -### Visual C++ (IDE) - -Choose the appropriate CMake generator option for your version of Visual Studio -(run `cmake` with no arguments for a list of available generators.) For -instance: ++ cat <toolchain.cmake ++ set(CMAKE_SYSTEM_NAME Linux) ++ set(CMAKE_SYSTEM_PROCESSOR x86_64) ++ set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) ++ set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) ++ EOF + + cd {build_directory} - cmake -G"Visual Studio 10" [additional CMake flags] {source_directory} - -NOTE: Add "Win64" to the generator name (for example, "Visual Studio 10 -Win64") to build a 64-bit version of libjpeg-turbo. A separate build directory -must be used for 32-bit and 64-bit builds. - -You can then open **ALL_BUILD.vcproj** in Visual Studio and build one of the -configurations in that project ("Debug", "Release", etc.) to generate a full -build of libjpeg-turbo. - -This will generate the following files under *{build_directory}*: - -**{configuration}/jpeg-static.lib**
-Static link library for the libjpeg API - -**sharedlib/{configuration}/jpeg{version}.dll**
-DLL for the libjpeg API - -**sharedlib/{configuration}/jpeg.lib**
-Import library for the libjpeg API - -**{configuration}/turbojpeg-static.lib**
-Static link library for the TurboJPEG API - -**{configuration}/turbojpeg.dll**
-DLL for the TurboJPEG API - -**{configuration}/turbojpeg.lib**
-Import library for the TurboJPEG API - -*{configuration}* is Debug, Release, RelWithDebInfo, or MinSizeRel, depending -on the configuration you built in the IDE, and *{version}* is 62, 7, or 8, -depending on whether libjpeg v6b (default), v7, or v8 emulation is enabled. - - -### MinGW - -NOTE: This assumes that you are building on a Windows machine using the MSYS -environment. If you are cross-compiling on a Un*x platform (including Mac and -Cygwin), then see "Build Recipes" below. - - cd {build_directory} - cmake -G"MSYS Makefiles" [additional CMake flags] {source_directory} ++ cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ ++ -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ ++ [additional CMake flags] {source_directory} + make + -This will generate the following files under *{build_directory}*: - -**libjpeg.a**
-Static link library for the libjpeg API - -**sharedlib/libjpeg-{version}.dll**
-DLL for the libjpeg API - -**sharedlib/libjpeg.dll.a**
-Import library for the libjpeg API - -**libturbojpeg.a**
-Static link library for the TurboJPEG API - -**libturbojpeg.dll**
-DLL for the TurboJPEG API - -**libturbojpeg.dll.a**
-Import library for the TurboJPEG API - -*{version}* is 62, 7, or 8, depending on whether libjpeg v6b (default), v7, or -v8 emulation is enabled. - + -### Debug Build +If building for Android 4.0.x (API level < 16) or earlier, remove +`-DCMAKE_POSITION_INDEPENDENT_CODE=1` from the CMake arguments and `-pie` from +`LDFLAGS`. -Add `-DCMAKE_BUILD_TYPE=Debug` to the CMake command line. Or, if building -with NMake, remove `-DCMAKE_BUILD_TYPE=Release` (Debug builds are the default -with NMake.) +Advanced CMake Options +---------------------- -### libjpeg v7 or v8 API/ABI Emulation +To list and configure other CMake options not specifically mentioned in this +guide, run -Add `-DWITH_JPEG7=1` to the CMake command line to build a version of -libjpeg-turbo that is API/ABI-compatible with libjpeg v7. Add `-DWITH_JPEG8=1` -to the CMake command line to build a version of libjpeg-turbo that is -API/ABI-compatible with libjpeg v8. See [README.md](README.md) for more -information about libjpeg v7 and v8 emulation. + ccmake {source_directory} +or -### In-Memory Source/Destination Managers - -When using libjpeg v6b or v7 API/ABI emulation, add `-DWITH_MEM_SRCDST=0` to -the CMake command line to build a version of libjpeg-turbo that lacks the -`jpeg_mem_src()` and `jpeg_mem_dest()` functions. These functions were not -part of the original libjpeg v6b and v7 APIs, so removing them ensures strict -conformance with those APIs. See [README.md](README.md) for more information. + cmake-gui {source_directory} - -### Arithmetic Coding Support - -Since the patent on arithmetic coding has expired, this functionality has been -included in this release of libjpeg-turbo. libjpeg-turbo's implementation is -based on the implementation in libjpeg v8, but it works when emulating libjpeg -v7 or v6b as well. The default is to enable both arithmetic encoding and -decoding, but those who have philosophical objections to arithmetic coding can -add `-DWITH_ARITH_ENC=0` or `-DWITH_ARITH_DEC=0` to the CMake command line to -disable encoding or decoding (respectively.) - - -### TurboJPEG Java Wrapper - -Add `-DWITH_JAVA=1` to the CMake command line to incorporate an optional Java -Native Interface (JNI) wrapper into the TurboJPEG shared library and build the -Java front-end classes to support it. This allows the TurboJPEG shared library -to be used directly from Java applications. See [java/README](java/README) for -more details. - -If Java is not in your `PATH`, or if you wish to use an alternate JDK to -build/test libjpeg-turbo, then (prior to running CMake) set the `JAVA_HOME` -environment variable to the location of the JDK that you wish to use. The -`Java_JAVAC_EXECUTABLE`, `Java_JAVA_EXECUTABLE`, and `Java_JAR_EXECUTABLE` -CMake variables can also be used to specify alternate commands or locations for -javac, jar, and java (respectively.) You can also set the `JAVACFLAGS` CMake -variable to specify arguments that should be passed to the Java compiler when -building the TurboJPEG classes. - - -Build Recipes -------------- - - -### 32-bit MinGW Build on Un*x (including Mac and Cygwin) - -Create a file called **toolchain.cmake** under *{build_directory}*, with the -following contents: - - set(CMAKE_SYSTEM_NAME Windows) - set(CMAKE_SYSTEM_PROCESSOR X86) - set(CMAKE_C_COMPILER {mingw_binary_path}/i686-w64-mingw32-gcc) - set(CMAKE_RC_COMPILER {mingw_binary_path}/i686-w64-mingw32-windres) - -*{mingw\_binary\_path}* is the directory under which the MinGW binaries are -located (usually **/usr/bin**.) Next, execute the following commands: - - cd {build_directory} - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ - [additional CMake flags] {source_directory} - make - - -### 64-bit MinGW Build on Un*x (including Mac and Cygwin) - -Create a file called **toolchain.cmake** under *{build_directory}*, with the -following contents: - - set(CMAKE_SYSTEM_NAME Windows) - set(CMAKE_SYSTEM_PROCESSOR AMD64) - set(CMAKE_C_COMPILER {mingw_binary_path}/x86_64-w64-mingw32-gcc) - set(CMAKE_RC_COMPILER {mingw_binary_path}/x86_64-w64-mingw32-windres) - -*{mingw\_binary\_path}* is the directory under which the MinGW binaries are -located (usually **/usr/bin**.) Next, execute the following commands: - - cd {build_directory} - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ - [additional CMake flags] {source_directory} - make +from the build directory after initially configuring the build. CCMake is a +text-based interactive version of CMake, and CMake-GUI is a GUI version. Both +will display all variables that are relevant to the libjpeg-turbo build, their +current values, and a help string describing what they do. Installing libjpeg-turbo diff --cc djpeg.1 index ed39286,b1e7f76..1b13b7e --- a/djpeg.1 +++ b/djpeg.1 @@@ -1,4 -1,4 +1,4 @@@ - .TH DJPEG 1 "19 January 2017" -.TH DJPEG 1 "18 March 2017" ++TH DJPEG 1 "18 March 2017" .SH NAME djpeg \- decompress a JPEG file to an image file .SH SYNOPSIS