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 "lib${LIB_SUFFIX}" 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")
20 message (WARNING " - Install git to compile a production libmraa!")
21 set (VERSION "v0.6.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 (IPK "Generate IPK using CPack" OFF)
57 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
58 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
59 option (BUILDARCH "Override architecture to build for - override" OFF)
60 option (TESTS "Override the addition of tests" ON)
64 target_architecture (DETECTED_ARCH)
65 message( INFO " - Target arch is ${DETECTED_ARCH}")
67 set (DETECTED_ARCH ${BUILDARCH})
68 message( INFO " - Override arch is ${DETECTED_ARCH}")
71 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
72 OR DETECTED_ARCH STREQUAL "i386")
74 elseif (DETECTED_ARCH MATCHES "arm.*")
77 message(FATAL_ERROR "Only x86 and arm platforms currently supported")
82 set (PYTHONBUILD_VERSION 3)
84 set (PYTHONBUILD_VERSION 2.7)
86 find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
88 if (${PYTHONINTERP_FOUND})
90 add_subdirectory (tests)
96 # add a target to generate API documentation with Doxygen
97 find_package (Doxygen)
99 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
100 add_custom_target (doc
101 ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
102 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
103 COMMENT "Generating API documentation with Doxygen" VERBATIM
105 endif (DOXYGEN_FOUND)
109 # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
110 if (DEFINED ENV{OECORE_TARGET_SYSROOT})
111 GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
112 string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
114 # debian uses amd64 to denote x86_64
115 if (DETECTED_ARCH STREQUAL "x86_64")
116 set (TARGET_ARCH "amd64")
118 set (TARGET_ARCH ${DETECTED_ARCH})
121 message (INFO " - Package arch is ${TARGET_ARCH}")
123 set(CPACK_GENERATOR "DEB" "TGZ")
124 set(OPKG_ARCH ${TARGET_ARCH})
125 set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
126 set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
127 set(mraa_PACKAGE_ON_TAG ".")
128 if ("${VERSION_COMMIT}" STREQUAL "")
129 set(mraa_PACKAGE_ON_TAG "")
131 set(CPACK_PACKAGE_VERSION
132 "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
133 set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
134 set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
135 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
136 set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
137 set(CPACK_DEBIAN_PACKAGE_PROVIDES "libmraa-dev, libmraa-dbg, libmraa-doc")
138 set(CPACK_DEBIAN_PACKAGE_REPLACES ${CPACK_DEBIAN_PACKAGE_PROVIDES})
139 set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
140 set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
144 add_subdirectory (src)
145 add_subdirectory (examples)