1 cmake_minimum_required (VERSION 2.8)
4 FIND_PACKAGE (Threads REQUIRED)
6 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fno-omit-frame-pointer ")
7 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall ")
8 set (LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Installation path for libraries")
10 # Set CMAKE_LIB_INSTALL_DIR if not defined
11 include(GNUInstallDirs)
13 # Appends the cmake/modules path to MAKE_MODULE_PATH variable.
14 set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
16 # Make a version file containing the current version from git.
17 include (GetGitRevisionDescription)
18 git_describe (VERSION "--tags")
19 if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_HEAD-HASH-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_-128-NOTFOUND")
20 message (WARNING " - Install git to compile a production libmraa!")
21 set (VERSION "v0.8.1-dirty")
24 message (INFO " - libmraa Version ${VERSION}")
26 #parse the version information into pieces.
27 string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
28 string (REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
29 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
30 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${VERSION}")
31 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-[0-9]+\\-(.*)" "\\1" VERSION_SHA1 "${VERSION}")
32 set (VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
34 if ("${VERSION_COMMIT}" MATCHES "^v.*")
35 set (VERSION_COMMIT "")
38 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/version.c.in
39 ${CMAKE_CURRENT_BINARY_DIR}/src/version.c)
41 # this is the library version, independant of git revision
42 set (mraa_VERSION_MAJOR ${VERSION_MAJOR})
43 set (mraa_VERSION_MINOR ${VERSION_MINOR})
44 set (mraa_VERSION_PATCH ${VERSION_PATCH})
45 set (mraa_VERSION_STRING ${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH})
47 set (CMAKE_SWIG_FLAGS "")
49 find_path (SYSTEM_USR_DIR "stdlib.h")
50 include_directories (${SYSTEM_USR_DIR})
52 option (BUILDDOC "Build all doc." OFF)
53 option (BUILDSWIG "Build swig modules." ON)
54 option (BUILDSWIGPYTHON "Build swig python modules." ON)
55 option (BUILDSWIGNODE "Build swig node modules." ON)
56 option (BUILDSWIGJAVA "Build Java API." OFF)
57 option (USBPLAT "Detection USB platform." OFF)
58 option (FTDI4222 "Build with FTDI FT4222 subplatform support." OFF)
59 option (IPK "Generate IPK using CPack" OFF)
60 option (RPM "Generate RPM using CPack" OFF)
61 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
62 option (ENABLEEXAMPLES "Disable building of examples" ON)
63 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
64 option (BUILDARCH "Override architecture to build for - override" OFF)
65 option (TESTS "Override the addition of tests" ON)
67 set (MRAAPLATFORMFORCE "" CACHE STRING "ALL")
70 set (BUILDSWIGPYTHON OFF)
71 set (BUILDSWIGNODE OFF)
72 set (BUILDSWIGJAVA OFF)
77 target_architecture (DETECTED_ARCH)
78 message( INFO " - Target arch is ${DETECTED_ARCH}")
80 set (DETECTED_ARCH ${BUILDARCH})
81 message( INFO " - Override arch is ${DETECTED_ARCH}")
84 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
85 OR DETECTED_ARCH STREQUAL "i386")
87 elseif (DETECTED_ARCH MATCHES "arm.*")
90 message(FATAL_ERROR "Only x86 and arm platforms currently supported")
95 set (PYTHONBUILD_VERSION 3)
97 set (PYTHONBUILD_VERSION 2.7)
99 find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
101 if (${PYTHONINTERP_FOUND})
103 add_subdirectory (tests)
109 # add a target to generate API documentation with Doxygen
110 find_package (Doxygen)
112 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
114 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.java.in ${CMAKE_CURRENT_BINARY_DIR}/src/java/Doxyfile @ONLY)
116 add_custom_target (doc
117 ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
118 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
119 COMMENT "Generating API documentation with Doxygen" VERBATIM
121 endif (DOXYGEN_FOUND)
125 # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
126 if (DEFINED ENV{OECORE_TARGET_SYSROOT})
127 GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
128 string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
130 # debian uses amd64 to denote x86_64
131 if (DETECTED_ARCH STREQUAL "x86_64")
132 set (TARGET_ARCH "amd64")
134 set (TARGET_ARCH ${DETECTED_ARCH})
137 message (INFO " - Package arch is ${TARGET_ARCH}")
139 set(CPACK_GENERATOR "DEB" "TGZ")
140 set(OPKG_ARCH ${TARGET_ARCH})
141 set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
142 set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
143 set(mraa_PACKAGE_ON_TAG ".")
144 if ("${VERSION_COMMIT}" STREQUAL "")
145 set(mraa_PACKAGE_ON_TAG "")
147 set(CPACK_PACKAGE_VERSION
148 "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
149 set(CPACK_PACKAGE_NAME "mraa")
150 set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
151 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
152 set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
153 set(CPACK_DEBIAN_PACKAGE_PROVIDES "mraa-dev, mraa-dbg, mraa-doc")
154 set(CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_PROVIDES}, libmraa, libmraa-dev, libmraa-doc")
155 set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
156 set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
161 message (INFO " - Enabled RPM packaging for ${DETECTED_ARCH}")
162 set(CMAKE_INSTALL_PREFIX "/usr")
163 set(CPACK_PACKAGE_VERSION ${VERSION})
164 set(CPACK_GENERATOR "RPM")
165 set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
166 set(CPACK_PACKAGE_RELEASE 1)
167 set(CPACK_PACKAGE_VERSION
168 "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
169 set(CPACK_PACKAGE_CONTACT "Intel IoT-Devkit")
170 set(CPACK_PACKAGE_VENDOR "Intel IoT-Devkit")
171 set(CPACK_RPM_PACKAGE_PROVIDES "${CPACK_PACKAGE_NAME}-devel")
172 # Get distro tag (e.g. 'fc20') by parsing output of rpm --showrc
176 COMMAND sed -e "s/\\t./ /"
177 COMMAND awk "{printf \"%s\", \$NF}"
178 OUTPUT_VARIABLE DIST_TAG
180 set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${DIST_TAG}.${DETECTED_ARCH}")
184 add_subdirectory (src)
186 add_subdirectory (examples)