| # |
| #//===----------------------------------------------------------------------===// |
| #// |
| #// The LLVM Compiler Infrastructure |
| #// |
| #// This file is dual licensed under the MIT and the University of Illinois Open |
| #// Source Licenses. See LICENSE.txt for details. |
| #// |
| #//===----------------------------------------------------------------------===// |
| # |
| |
| Building libiomp5 using CMake |
| ============================= |
| |
| ---- Version of CMake required: v2.8.0 or above ---- |
| |
| ============================================ |
| How to call cmake initially, then repeatedly |
| ============================================ |
| - When calling cmake for the first time, all needed compiler options |
| must be specified on the command line. After this initial call to |
| cmake, the compiler definitions must not be included for further calls |
| to cmake. Other options can be specified on the command line multiple |
| times including all definitions in the Build options section below. |
| - Example of configuring, building, reconfiguring, rebuilding: |
| $ mkdir build |
| $ cd build |
| $ cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -Darch=32 .. # Initial configuration |
| $ make all common |
| ... |
| $ make clean |
| $ cmake -Darch=32e -DCMAKE_BUILD_TYPE=Debug .. # Second configuration |
| $ make all common |
| ... |
| $ rm -rf * |
| $ cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -Darch=32e .. # Third configuration |
| $ make all common |
| - Notice in the example how the compiler definitions are only specified |
| for an empty build directory, but other Build options are used at any time. |
| - The file CMakeCache.txt which is created after the first call to cmake |
| is a configuration file which holds all the values for the Build options. |
| These configuration values can be changed using a text editor to modify |
| CMakeCache.txt as opposed to using definitions on the command line. |
| - To have cmake create a particular type of build generator file simply |
| inlude the -G <Generator name> option: |
| $ cmake -G "Unix Makefiles" ... |
| You can see a list of generators cmake supports by executing cmake with |
| no arguments and a list will be printed. |
| |
| ===================== |
| Instructions to Build |
| ===================== |
| $ cd libomp_top_level/ [ directory with src/ , exports/ , tools/ , etc. ] |
| $ mkdir build |
| $ cd build |
| |
| [ Linux* , Mac* Libraries ] |
| $ cmake -DCMAKE_C_COMPILER=<C Compiler> -DCMAKE_CXX_COMPILER=<C++ Compiler> .. |
| |
| [ Intel(R) Many Integrated Core Library (Intel(R) MIC Library) ] |
| $ cmake -DCMAKE_C_COMPILER=<C Compiler> -DCMAKE_CXX_COMPILER=<C++ Compiler> -Dos=mic -Darch=32e .. |
| |
| [ Windows Libraries ] |
| $ cmake -G "Unix Makefiles" -DCMAKE_C_COMPILER=<C Compiler> -DCMAKE_CXX_COMPILER=<C++ Compiler> -DCMAKE_ASM_MASM_COMPILER=[ml | ml64] -DCMAKE_BUILD_TYPE=Release .. |
| |
| $ make all common |
| |
| ================= |
| Mac* Fat Libraries |
| ================= |
| On OS X* machines, it is possible to build universal (or fat) libraries which |
| include both IA-32 architecture and Intel(R) 64 architecture objects in a |
| single archive; just build the 32 and 32e libraries separately: |
| $ cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -Darch=32 .. |
| $ make |
| $ cmake -Darch=32e .. |
| $ make |
| then invoke make again with a special argument as follows: |
| $ make fat |
| - The fat target is only available for the arch=32e configuration. |
| - The fat libraries will be put in exports/mac_32e/lib while the "thin" libraries |
| will be in exports/mac_32e/lib.thin and exports/mac_32/lib.thin |
| |
| ================ |
| Compiler options |
| ================ |
| -DCMAKE_C_COMPILER=<C compiler name> |
| -DCMAKE_CXX_COMPILER=<C++ compiler name> |
| |
| -DCMAKE_Fortran_COMPILER=<Fortran compiler name> |
| Unix* systems (Optional as compiler is default): |
| This option is only needed when -Dcreate_fortran_modules is true |
| |
| -DCMAKE_ASM_COMPILER=<Assembler name> |
| This option isn't usually needed for Non-Windows* builds |
| |
| -DCMAKE_ASM_MASM_COMPILER=[ml | ml64 ] |
| This option is Windows* Only |
| |
| ============= |
| Build options |
| ============= |
| |
| ========================== |
| ==== Operating System ==== |
| ========================== |
| -Dos=lin|mac|win|mic |
| * Operating system can be lin (Linux*), mac (Mac*), win (Windows*), or |
| mic (Intel(R) Many Integrated Core Architecture (Intel(R) MIC Architecture)). |
| If not specified, cmake will try to determine your current operating system. |
| |
| ====================== |
| ==== Architecture ==== |
| ====================== |
| -Darch=32|32e|arm|ppc64|aarch64 |
| * Architecture can be 32 (IA-32 architecture), 32e (Intel(R) 64 architecture), |
| arm (ARM architecture), aarch64 (ARMv8 architecture) or ppc64 (PPC64 architecture). |
| This option, by default is chosen based on the |
| CMake variable CMAKE_SIZEOF_VOID_P. If it is 8, then Intel(R) 64 architecture |
| is assumed. If it is 4, then IA-32 architecture is assumed. If you want to |
| use a different architecture other than x86 based architecture, you must specify |
| it when calling cmake initially using this -Darch=<arch> option or by changing |
| the arch value via CMakeCache.txt or the CMake GUI after the initial CMake run. |
| |
| ---- First values listed are the default value ---- |
| -Dlib_type=normal|profile|stubs |
| Library type can be normal, profile, or stubs. |
| |
| -DCMAKE_BUILD_TYPE=Release|Debug|RelWithDebInfo |
| Build type can be Release, Debug, or RelWithDebInfo. |
| See below for interaction when -DUSE_BUILDPL_RULES is on. |
| |
| -Dversion=5|4 |
| libiomp5 version can be 5 or 4. |
| |
| -Domp_version=40|30 |
| OpenMP version can be either 40 or 30. |
| |
| -Dmic_arch=knc|knf |
| Intel(R) MIC Architecture, can be knf or knc. |
| This value is ignored if os != mic |
| |
| -Dmic_os=lin|bsd |
| Operating system on Intel(R) MIC Architecture. |
| Can be either bsd or lin. This value is ignored if os != mic |
| |
| -Dcreate_fortran_modules=off|on |
| Should the Fortran modules be created (requires Fortran compiler) |
| |
| -Dstats=off|on |
| Should include stats-gathering code? |
| |
| ===================== |
| ==== Micro tests ==== |
| ===================== |
| After the library has been built, five microtests are performed. |
| Some will be skipped based upon the platform. |
| These tests can be turned on (default) or off with the following options: |
| -Dtest_touch=on|off -- Should the touch test be done? |
| -Dtest_relo=on|off -- Should the position independent code test be done? |
| -Dtest_execstack=on|off -- Should the stack be checked for executability? |
| -Dtest_instr=on|off -- Should the Intel(R) MIC Libraries be checked |
| for correct instruction set? |
| -Dtest_deps=on|off -- Should libiomp5's dependencies be checked? |
| -Dtests=off|on -- Should any of the above tests be done? |
| |
| ============================================ |
| ==== How to append flags to compilation ==== |
| ============================================ |
| - These flags are *appended*. They do not |
| overwrite any of the preset flags. |
| -DUSER_CPP_FLAGS=<space-separated flags> -- Additional C Preprocessor flags |
| (typically additional -Ddef=val flags) |
| -DUSER_C_FLAGS=<space-separated flags> -- Additional C compiler flags |
| -DUSER_CXX_FLAGS=<space-separated flags> -- Additional C++ compiler flags |
| -DUSER_ASM_FLAGS=<space-separated flags> -- Additional assembly flags |
| -DUSER_LD_FLAGS=<space-separated flags> -- Additional linker flags |
| -DUSER_LD_LIB_FLAGS=<space-separated flags> -- Additional libraries to link |
| to during link phase |
| -DUSER_F_FLAGS=<space-separated flags> -- Additional Fortran compiler flags |
| |
| =================================== |
| ==== Feature Based Compilation ==== |
| =================================== |
| -DUSE_BUILDPL_RULES=false|true |
| Should the build imitate build.pl's build process. |
| When this is true, the Unix* Release builds will build libiomp5 |
| with -O2 and -g flags activated (same as RelWithDebInfo). Then, |
| the debug info is stripped out of the library and put into libiomp5.dbg |
| This is done for interaction with Intel(R) Parallel Amplifier. |
| |
| -DUSE_ADAPTIVE_LOCKS=true|false |
| Should adaptive (TSX-based) locks be included? |
| These are x86 specific. This feature is turned on by default |
| for IA-32 architecture and Intel(R) 64 architecture. |
| Otherwise, it is turned off. |
| |
| -DUSE_PREDEFINED_LINKER_FLAGS=true|false |
| Should the predefined linker flags in CommonFlags.cmake be included |
| in the link command? This is true by default and should work for |
| Linux*, Mac*, and Windows*. The --version-script flag on Unix* based |
| operating systems will be included regardless. |
| |
| ======================== |
| Examples usages of CMake |
| ======================== |
| ---- Typical usage ---- |
| cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc .. |
| cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. |
| cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .. |
| |
| ---- With Various Options ---- |
| cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -Dos=lin -Darch=32 .. |
| cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -Dos=mac -Darch=32 -DCMAKE_BUILD_TYPE=Debug .. |
| cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_Fortran_COMPILER=ifort -Dtests=on -Dcreate_fortran_modules=on -DUSE_BUILDPL_RULES=on .. |
| cmake -DUSER_CFLAGS='Werror' -DUSER_CPP_FLAGS='-DNEW_FEATURE=1 -DOLD_FEATURE=0' -DUSER_CXX_FLAGS='-Werror -Wsign-compare' .. |
| |
| ---- Stubs library ---- |
| cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -Dlib_type=stubs .. |
| |
| ========= |
| Footnotes |
| ========= |
| [*] Other names and brands may be claimed as the property of others. |