Collection of CMake toolchain files and their related environment.
A tipi.build environment is made of a build image + test image + toolchain definition
Hence when tipi build --toolchain linux-gcc-armhf
is run:
- tipi pulls the build image, which is a linux x86 system with a cross-compiler for arm
- tipi uses the CMake toolchain file to configure the compiler in the build image
- tipi starts a test system with the
.run
image ( when none present it uses the build image to run the tests )
Every toolchain defines compiler/flags and two variables:
POLLY_TOOLCHAIN_NAME
POLLY_TOOLCHAIN_TAG
First variable will be printed while processing file:
-- [polly] Used toolchain: Name of toolchain A
-- The CXX compiler identification is Clang 5.0.0
-- Check for working CXX compiler: /usr/bin/c++
-- [polly] Used toolchain: Name of toolchain A
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- [polly] Used toolchain: Name of toolchain A
-- Detecting CXX compiler ABI info - done
-- [polly] Used toolchain: Name of toolchain A
-- Configuring done
-- Generating done
-- Build files have been written to: ...
Second
variable coincide with toolchain file name and can be used to define CMAKE_INSTALL_PREFIX
like:
set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/_install/${POLLY_TOOLCHAIN_TAG}")
In this case targets can coexist simultaneously:
- Project\ -
- CMakeLists.txt
- sources\
- documentation\
- ...
- _install\ -
- toolchain-A\
- toolchain-B\
- toolchain-C\
- ...
Note: This is a core idea of the tagged builds in hunter package manager.
- default
- libcxx
- clang-lto
- clang-libstdcxx
- custom-libcxx
- xcode
- osx-*
- gcc
- gcc-4-8
- Android
- android-ndk-*
- iOS
- ios
- ios-i386-armv7
- ios-nocodesign
- Raspberry Pi
- raspberrypi2-cxx11
- Clang tools
- analyze
- sanitize-address
- sanitize-leak
- sanitize-memory
- sanitize-thread
- Windows
- vs-12-2013-win64
- vs-12-2013
- vs-12-2013-xp
- cygwin
- mingw
- msys
- nmake-vs-12-2013-win64
- nmake-vs-12-2013
- Cross compiling
- linux-gcc-x64
Just define CMAKE_TOOLCHAIN_FILE variable:
> cmake -H. -B_builds/clang-libstdcxx -DCMAKE_TOOLCHAIN_FILE=${POLLY_ROOT}/clang-libstdcxx.cmake -DCMAKE_VERBOSE_MAKEFILE=ON
-- [polly] Used toolchain: clang / GNU Standard C++ Library (libstdc++) / c++11 support
-- The CXX compiler identification is Clang 5.0.0
-- Check for working CXX compiler: /usr/bin/c++
-- [polly] Used toolchain: clang / GNU Standard C++ Library (libstdc++) / c++11 support
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- [polly] Used toolchain: clang / GNU Standard C++ Library (libstdc++) / c++11 support
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /.../_builds/make-debug
Take a look at make output, you must see -stdlib=libstdc++
string:
> cmake --build _builds/clang_libstdcxx
/usr/bin/c++ -std=c++11 -stdlib=libstdc++ -o CMakeFiles/.../main.cpp.o -c /.../main.cpp
This is a python script that wrap cmake for you and automatically set:
- build directory for your toolchain. E.g.
_builds/xcode
,_builds/libcxx-Debug
,_builds/nmake-Release
- local install directory. E.g.
_install/vs-12-2013-x64
,_install/libcxx
- start an IDE project (Xcode, Visual Studio) if option
--open
passed - run
ctest
after the build done if option--test
passed - run
cpack
after the build done if option--pack
passed - create
OS X
/iOS
framework if option--framework
passed (can be used for broken iOS framework creation on CMake)
Example of usage (also see polly.py --help
):
- build Debug Xcode project:
polly.py --toolchain xcode --config Debug
(_builds/xcode
)
- build and test Release Makefile project with
libcxx
:polly.py --toolchain libcxx --config Release --test
(_builds/libcxx-Release
)
- install Debug Xcode project:
polly.py --toolchain xcode --config Debug --install
(_builds/xcode
,_install/xcode
)
See examples. Please read coding style and agreements before start looking through examples (may explain a lot). Take a look at the Travis config files: mac and linux, it's quite self-explanatory.
See CONTRIBUTING.md.