summaryrefslogtreecommitdiffstats
path: root/meta/classes/cmake.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/cmake.bbclass')
-rw-r--r--meta/classes/cmake.bbclass118
1 files changed, 118 insertions, 0 deletions
diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
new file mode 100644
index 0000000000..30c1792ffa
--- /dev/null
+++ b/meta/classes/cmake.bbclass
@@ -0,0 +1,118 @@
1DEPENDS_prepend = "cmake-native "
2
3# We need to unset CCACHE otherwise cmake gets too confused
4CCACHE = ""
5
6# We want the staging and installing functions from autotools
7inherit autotools
8
9# Use in-tree builds by default but allow this to be changed
10# since some packages do not support them (e.g. llvm 2.5).
11OECMAKE_SOURCEPATH ?= "."
12
13# If declaring this, make sure you also set EXTRA_OEMAKE to
14# "-C ${OECMAKE_BUILDPATH}". So it will run the right makefiles.
15OECMAKE_BUILDPATH ?= ""
16B="${S}"
17
18# C/C++ Compiler (without cpu arch/tune arguments)
19OECMAKE_C_COMPILER ?= "`echo ${CC} | sed 's/^\([^ ]*\).*/\1/'`"
20OECMAKE_CXX_COMPILER ?= "`echo ${CXX} | sed 's/^\([^ ]*\).*/\1/'`"
21
22# Compiler flags
23OECMAKE_C_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CFLAGS}"
24OECMAKE_CXX_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS} -fpermissive"
25OECMAKE_C_FLAGS_RELEASE ?= "${SELECTED_OPTIMIZATION} ${CFLAGS} -DNDEBUG"
26OECMAKE_CXX_FLAGS_RELEASE ?= "${SELECTED_OPTIMIZATION} ${CXXFLAGS} -DNDEBUG"
27OECMAKE_C_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CPPFLAGS} ${LDFLAGS}"
28OECMAKE_CXX_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS} ${CXXFLAGS} ${LDFLAGS}"
29
30OECMAKE_RPATH ?= ""
31OECMAKE_PERLNATIVE_DIR ??= ""
32OECMAKE_EXTRA_ROOT_PATH ?= ""
33
34cmake_do_generate_toolchain_file() {
35 cat > ${WORKDIR}/toolchain.cmake <<EOF
36# CMake system name must be something like "Linux".
37# This is important for cross-compiling.
38set( CMAKE_SYSTEM_NAME `echo ${TARGET_OS} | sed -e 's/^./\u&/' -e 's/^\(Linux\).*/\1/'` )
39set( CMAKE_SYSTEM_PROCESSOR ${TARGET_ARCH} )
40set( CMAKE_C_COMPILER ${OECMAKE_C_COMPILER} )
41set( CMAKE_CXX_COMPILER ${OECMAKE_CXX_COMPILER} )
42set( CMAKE_C_FLAGS "${OECMAKE_C_FLAGS}" CACHE STRING "CFLAGS" )
43set( CMAKE_CXX_FLAGS "${OECMAKE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" )
44set( CMAKE_C_FLAGS_RELEASE "${OECMAKE_C_FLAGS_RELEASE}" CACHE STRING "CFLAGS for release" )
45set( CMAKE_CXX_FLAGS_RELEASE "${OECMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "CXXFLAGS for release" )
46set( CMAKE_C_LINK_FLAGS "${OECMAKE_C_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
47set( CMAKE_CXX_LINK_FLAGS "${OECMAKE_CXX_LINK_FLAGS}" CACHE STRING "LDFLAGS" )
48
49# only search in the paths provided so cmake doesnt pick
50# up libraries and tools from the native build machine
51set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_HOST} ${STAGING_DIR_NATIVE} ${CROSS_DIR} ${OECMAKE_PERLNATIVE_DIR} ${OECMAKE_EXTRA_ROOT_PATH} ${EXTERNAL_TOOLCHAIN})
52set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
53set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
54set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
55set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
56
57# Use qt.conf settings
58set( ENV{QT_CONF_PATH} ${WORKDIR}/qt.conf )
59
60# We need to set the rpath to the correct directory as cmake does not provide any
61# directory as rpath by default
62set( CMAKE_INSTALL_RPATH ${OECMAKE_RPATH} )
63
64# Use native cmake modules
65set( CMAKE_MODULE_PATH ${STAGING_DATADIR}/cmake/Modules/ )
66
67# add for non /usr/lib libdir, e.g. /usr/lib64
68set( CMAKE_LIBRARY_PATH ${libdir} ${base_libdir})
69
70EOF
71}
72
73addtask generate_toolchain_file after do_patch before do_configure
74
75cmake_do_configure() {
76 if [ ${OECMAKE_BUILDPATH} ]
77 then
78 mkdir -p ${OECMAKE_BUILDPATH}
79 cd ${OECMAKE_BUILDPATH}
80 fi
81
82 # Just like autotools cmake can use a site file to cache result that need generated binaries to run
83 if [ -e ${WORKDIR}/site-file.cmake ] ; then
84 OECMAKE_SITEFILE=" -C ${WORKDIR}/site-file.cmake"
85 else
86 OECMAKE_SITEFILE=""
87 fi
88
89 cmake \
90 ${OECMAKE_SITEFILE} \
91 ${OECMAKE_SOURCEPATH} \
92 -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
93 -DCMAKE_INSTALL_SO_NO_EXE=0 \
94 -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
95 -DCMAKE_VERBOSE_MAKEFILE=1 \
96 ${EXTRA_OECMAKE} \
97 -Wno-dev
98}
99
100cmake_do_compile() {
101 if [ ${OECMAKE_BUILDPATH} ]
102 then
103 cd ${OECMAKE_BUILDPATH}
104 fi
105
106 base_do_compile
107}
108
109cmake_do_install() {
110 if [ ${OECMAKE_BUILDPATH} ];
111 then
112 cd ${OECMAKE_BUILDPATH}
113 fi
114
115 autotools_do_install
116}
117
118EXPORT_FUNCTIONS do_configure do_compile do_install do_generate_toolchain_file