forked from OSchip/llvm-project
226 lines
9.2 KiB
Plaintext
226 lines
9.2 KiB
Plaintext
#
|
|
#//===----------------------------------------------------------------------===//
|
|
#//
|
|
#// 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
|
|
* Architecture can be 32 (IA-32 architecture), 32e (Intel(R) 64 architecture),
|
|
arm (ARM 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 (Knights Ferry) or knc (Knights Corner).
|
|
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.
|