diff options
| author | Tudor Florea <tudor.florea@enea.com> | 2014-10-16 03:05:19 +0200 |
|---|---|---|
| committer | Tudor Florea <tudor.florea@enea.com> | 2014-10-16 03:05:19 +0200 |
| commit | c527fd1f14c27855a37f2e8ac5346ce8d940ced2 (patch) | |
| tree | bb002c1fdf011c41dbd2f0927bed23ecb5f83c97 /meta/classes/cmake.bbclass | |
| download | poky-daisy-140929.tar.gz | |
initial commit for Enea Linux 4.0-140929daisy-140929
Migrated from the internal git server on the daisy-enea-point-release branch
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Diffstat (limited to 'meta/classes/cmake.bbclass')
| -rw-r--r-- | meta/classes/cmake.bbclass | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass new file mode 100644 index 0000000000..c9c15f3076 --- /dev/null +++ b/meta/classes/cmake.bbclass | |||
| @@ -0,0 +1,115 @@ | |||
| 1 | DEPENDS_prepend = "cmake-native " | ||
| 2 | B = "${WORKDIR}/build" | ||
| 3 | |||
| 4 | # We need to unset CCACHE otherwise cmake gets too confused | ||
| 5 | CCACHE = "" | ||
| 6 | |||
| 7 | # We want the staging and installing functions from autotools | ||
| 8 | inherit autotools | ||
| 9 | |||
| 10 | # C/C++ Compiler (without cpu arch/tune arguments) | ||
| 11 | OECMAKE_C_COMPILER ?= "`echo ${CC} | sed 's/^\([^ ]*\).*/\1/'`" | ||
| 12 | OECMAKE_CXX_COMPILER ?= "`echo ${CXX} | sed 's/^\([^ ]*\).*/\1/'`" | ||
| 13 | |||
| 14 | # Compiler flags | ||
| 15 | OECMAKE_C_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CFLAGS}" | ||
| 16 | OECMAKE_CXX_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS} -fpermissive" | ||
| 17 | OECMAKE_C_FLAGS_RELEASE ?= "${SELECTED_OPTIMIZATION} ${CFLAGS} -DNDEBUG" | ||
| 18 | OECMAKE_CXX_FLAGS_RELEASE ?= "${SELECTED_OPTIMIZATION} ${CXXFLAGS} -DNDEBUG" | ||
| 19 | OECMAKE_C_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CPPFLAGS} ${LDFLAGS}" | ||
| 20 | OECMAKE_CXX_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS} ${LDFLAGS}" | ||
| 21 | |||
| 22 | OECMAKE_RPATH ?= "" | ||
| 23 | OECMAKE_PERLNATIVE_DIR ??= "" | ||
| 24 | OECMAKE_EXTRA_ROOT_PATH ?= "" | ||
| 25 | |||
| 26 | cmake_do_generate_toolchain_file() { | ||
| 27 | cat > ${WORKDIR}/toolchain.cmake <<EOF | ||
| 28 | # CMake system name must be something like "Linux". | ||
| 29 | # This is important for cross-compiling. | ||
| 30 | set( CMAKE_SYSTEM_NAME `echo ${TARGET_OS} | sed -e 's/^./\u&/' -e 's/^\(Linux\).*/\1/'` ) | ||
| 31 | set( CMAKE_SYSTEM_PROCESSOR ${TARGET_ARCH} ) | ||
| 32 | set( CMAKE_C_COMPILER ${OECMAKE_C_COMPILER} ) | ||
| 33 | set( CMAKE_CXX_COMPILER ${OECMAKE_CXX_COMPILER} ) | ||
| 34 | set( CMAKE_C_FLAGS "${OECMAKE_C_FLAGS}" CACHE STRING "CFLAGS" ) | ||
| 35 | set( CMAKE_CXX_FLAGS "${OECMAKE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" ) | ||
| 36 | set( CMAKE_C_FLAGS_RELEASE "${OECMAKE_C_FLAGS_RELEASE}" CACHE STRING "CFLAGS for release" ) | ||
| 37 | set( CMAKE_CXX_FLAGS_RELEASE "${OECMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "CXXFLAGS for release" ) | ||
| 38 | set( CMAKE_C_LINK_FLAGS "${OECMAKE_C_LINK_FLAGS}" CACHE STRING "LDFLAGS" ) | ||
| 39 | set( CMAKE_CXX_LINK_FLAGS "${OECMAKE_CXX_LINK_FLAGS}" CACHE STRING "LDFLAGS" ) | ||
| 40 | |||
| 41 | # only search in the paths provided so cmake doesnt pick | ||
| 42 | # up libraries and tools from the native build machine | ||
| 43 | set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_HOST} ${STAGING_DIR_NATIVE} ${CROSS_DIR} ${OECMAKE_PERLNATIVE_DIR} ${OECMAKE_EXTRA_ROOT_PATH} ${EXTERNAL_TOOLCHAIN}) | ||
| 44 | set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY ) | ||
| 45 | set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) | ||
| 46 | set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) | ||
| 47 | set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) | ||
| 48 | |||
| 49 | # Use qt.conf settings | ||
| 50 | set( ENV{QT_CONF_PATH} ${WORKDIR}/qt.conf ) | ||
| 51 | |||
| 52 | # We need to set the rpath to the correct directory as cmake does not provide any | ||
| 53 | # directory as rpath by default | ||
| 54 | set( CMAKE_INSTALL_RPATH ${OECMAKE_RPATH} ) | ||
| 55 | |||
| 56 | # Use native cmake modules | ||
| 57 | set( CMAKE_MODULE_PATH ${STAGING_DATADIR}/cmake/Modules/ ) | ||
| 58 | |||
| 59 | # add for non /usr/lib libdir, e.g. /usr/lib64 | ||
| 60 | set( CMAKE_LIBRARY_PATH ${libdir} ${base_libdir}) | ||
| 61 | |||
| 62 | EOF | ||
| 63 | } | ||
| 64 | |||
| 65 | addtask generate_toolchain_file after do_patch before do_configure | ||
| 66 | |||
| 67 | cmake_do_configure() { | ||
| 68 | if [ "${OECMAKE_BUILDPATH}" -o "${OECMAKE_SOURCEPATH}" ]; then | ||
| 69 | bbnote "cmake.bbclass no longer uses OECMAKE_SOURCEPATH and OECMAKE_BUILDPATH. The default behaviour is now out-of-tree builds with B=WORKDIR/build." | ||
| 70 | fi | ||
| 71 | |||
| 72 | if [ "${S}" != "${B}" ]; then | ||
| 73 | rm -rf ${B} | ||
| 74 | mkdir -p ${B} | ||
| 75 | cd ${B} | ||
| 76 | fi | ||
| 77 | |||
| 78 | # Just like autotools cmake can use a site file to cache result that need generated binaries to run | ||
| 79 | if [ -e ${WORKDIR}/site-file.cmake ] ; then | ||
| 80 | OECMAKE_SITEFILE=" -C ${WORKDIR}/site-file.cmake" | ||
| 81 | else | ||
| 82 | OECMAKE_SITEFILE="" | ||
| 83 | fi | ||
| 84 | |||
| 85 | cmake \ | ||
| 86 | ${OECMAKE_SITEFILE} \ | ||
| 87 | ${S} \ | ||
| 88 | -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \ | ||
| 89 | -DCMAKE_INSTALL_BINDIR:PATH=${bindir} \ | ||
| 90 | -DCMAKE_INSTALL_SBINDIR:PATH=${sbindir} \ | ||
| 91 | -DCMAKE_INSTALL_LIBEXECDIR:PATH=${libexecdir} \ | ||
| 92 | -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \ | ||
| 93 | -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${sharedstatedir} \ | ||
| 94 | -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \ | ||
| 95 | -DCMAKE_INSTALL_LIBDIR:PATH=${libdir} \ | ||
| 96 | -DCMAKE_INSTALL_INCLUDEDIR:PATH=${includedir} \ | ||
| 97 | -DCMAKE_INSTALL_DATAROOTDIR:PATH=${datadir} \ | ||
| 98 | -DCMAKE_INSTALL_SO_NO_EXE=0 \ | ||
| 99 | -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \ | ||
| 100 | -DCMAKE_VERBOSE_MAKEFILE=1 \ | ||
| 101 | ${EXTRA_OECMAKE} \ | ||
| 102 | -Wno-dev | ||
| 103 | } | ||
| 104 | |||
| 105 | cmake_do_compile() { | ||
| 106 | cd ${B} | ||
| 107 | base_do_compile | ||
| 108 | } | ||
| 109 | |||
| 110 | cmake_do_install() { | ||
| 111 | cd ${B} | ||
| 112 | autotools_do_install | ||
| 113 | } | ||
| 114 | |||
| 115 | EXPORT_FUNCTIONS do_configure do_compile do_install do_generate_toolchain_file | ||
