[MJ2] Avoid index out of bounds access to pi->include[]
[openjpeg.git] / INSTALL.md
index 368f5aecf4e88c4b97e303cf3b8994b0143f8923..1c0f1e4ed99034923a16aaa1048c1a4c6a2495de 100644 (file)
@@ -9,7 +9,7 @@ To build the library, type from source tree directory:
 ```
 mkdir build
 cd build
-cmake ..
+cmake .. -DCMAKE_BUILD_TYPE=Release
 make
 ```
 Binaries are then located in the 'bin' directory.
@@ -30,7 +30,9 @@ Main available cmake flags:
   * To specify the install path: '-DCMAKE\_INSTALL\_PREFIX=/path'
   * To build the shared libraries and links the executables against it: '-DBUILD\_SHARED\_LIBS:bool=on' (default: 'ON')
 > Note: when using this option, static libraries are not built and executables are dynamically linked.
+  * PKG_CONFIG files are by default built for Unix compile, you can force to build on other platforms by adding: '-DBUILD_PKGCONFIG_FILES=on'
   * To build the CODEC executables: '-DBUILD\_CODEC:bool=on' (default: 'ON')
+  * To build opjstyle (internal version of astyle) for OpenJPEG development: '-DWITH_ASTYLE=ON'
   * [OBSOLETE] To build the MJ2 executables: '-DBUILD\_MJ2:bool=on' (default: 'OFF')
   * [OBSOLETE] To build the JPWL executables and JPWL library: '-DBUILD\_JPWL:bool=on' (default: 'OFF')
   * [OBSOLETE] To build the JPIP client (java compiler recommended) library and executables: '-DBUILD\_JPIP:bool=on' (default: 'OFF')
@@ -60,7 +62,68 @@ Note 4 : On MacOS, if it does not work, try adding the following flag to the cma
 ## MacOS (XCode) - WINDOWS (VisualStudio, etc)
 
 You can use cmake to generate the project files for the IDE you are using (VC2010, XCode, etc).
-Type 'cmake --help' for available generators on your platform.
+Type `cmake --help` for available generators on your platform.
+
+Examples for Windows with Visual Studio C++ compiler:
+
+If using directly the cl compiler:
+
+```
+cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+To compile a 64-bit application, open 64-Bit Visual C\+\+ toolset on the command line and run cmake. For further information, please refer to: [How to: Enable a 64-Bit Visual C\+\+ Toolset on the Command Line](https://msdn.microsoft.com/en-us/library/x4d2c09s.aspx).
+
+
+If you do not want directly use the cl compiler, you could use:
+
+```
+cmake -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+To create Visual Studio solution (.sln) and project files (.vcproj / .vcxproj):
+```
+cmake -G "Visual Studio 14 2015" -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+64-bit application:
+```
+cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE:string="Release" -DBUILD_SHARED_LIBS:bool=on -DCMAKE_INSTALL_PREFIX:path="%USERPROFILE%" -DCMAKE_LIBRARY_PATH:path="%USERPROFILE%" -DCMAKE_INCLUDE_PATH:path="%USERPROFILE%\include" ..
+```
+
+
+# Enabling CPU specific optimizations
+
+For Intel/AMD processors, OpenJPEG implements optimizations using the SSE4.1
+instruction set (for example, for the 9x7 inverse MCT transform) and the AVX2
+instruction set (for example, for the 5x3 inverse discrete wavelet transform).
+Currently, those optimizations are only available if OpenJPEG is built to
+use those instruction sets (and the resulting binary will only run on compatible
+CPUs)
+
+With gcc/clang, it is possible to enable those instruction sets with the following :
+
+```
+cmake -DCMAKE_C_FLAGS="-O3 -msse4.1 -DNDEBUG" ..
+```
+
+```
+cmake -DCMAKE_C_FLAGS="-O3 -mavx2 -DNDEBUG" ..
+```
+
+(AVX2 implies SSE4.1)
+
+Or if the binary is dedicated to run on the machine where it has
+been compiled :
+
+```
+cmake -DCMAKE_C_FLAGS="-O3 -march=native -DNDEBUG" ..
+```
+
+# Modifying OpenJPEG
+
+Before committing changes, run:
+```scripts/prepare-commit.sh```
 
 # Using OpenJPEG