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" OR "x_${VERSION}" STREQUAL "x_HEAD-HASH-NOTFOUND")
20 message (WARNING " - Install git to compile a production libmraa!")
21 set (VERSION "v0.7.3-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 (IPK "Generate IPK using CPack" OFF)
58 option (RPM "Generate RPM using CPack" OFF)
59 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
60 option (ENABLEEXAMPLES "Disable building of examples" ON)
61 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
62 option (BUILDARCH "Override architecture to build for - override" OFF)
63 option (TESTS "Override the addition of tests" ON)
66 set (BUILDSWIGPYTHON OFF)
67 set (BUILDSWIGNODE OFF)
68 set (BUILDSWIGJAVA OFF)
73 target_architecture (DETECTED_ARCH)
74 message( INFO " - Target arch is ${DETECTED_ARCH}")
76 set (DETECTED_ARCH ${BUILDARCH})
77 message( INFO " - Override arch is ${DETECTED_ARCH}")
80 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
81 OR DETECTED_ARCH STREQUAL "i386")
83 elseif (DETECTED_ARCH MATCHES "arm.*")
86 message(FATAL_ERROR "Only x86 and arm platforms currently supported")
91 set (PYTHONBUILD_VERSION 3)
93 set (PYTHONBUILD_VERSION 2.7)
95 find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
97 if (${PYTHONINTERP_FOUND})
99 add_subdirectory (tests)
105 # add a target to generate API documentation with Doxygen
106 find_package (Doxygen)
108 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
109 add_custom_target (doc
110 ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
111 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
112 COMMENT "Generating API documentation with Doxygen" VERBATIM
114 endif (DOXYGEN_FOUND)
118 # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
119 if (DEFINED ENV{OECORE_TARGET_SYSROOT})
120 GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
121 string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
123 # debian uses amd64 to denote x86_64
124 if (DETECTED_ARCH STREQUAL "x86_64")
125 set (TARGET_ARCH "amd64")
127 set (TARGET_ARCH ${DETECTED_ARCH})
130 message (INFO " - Package arch is ${TARGET_ARCH}")
132 set(CPACK_GENERATOR "DEB" "TGZ")
133 set(OPKG_ARCH ${TARGET_ARCH})
134 set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
135 set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
136 set(mraa_PACKAGE_ON_TAG ".")
137 if ("${VERSION_COMMIT}" STREQUAL "")
138 set(mraa_PACKAGE_ON_TAG "")
140 set(CPACK_PACKAGE_VERSION
141 "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
142 set(CPACK_PACKAGE_NAME "mraa${mraa_VERSION_MAJOR}")
143 set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
144 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
145 set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
146 set(CPACK_DEBIAN_PACKAGE_PROVIDES "mraa-dev, mraa-dbg, mraa-doc")
147 set(CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_PROVIDES}, libmraa, libmraa-dev, libmraa-doc")
148 set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
149 set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
154 message (INFO " - Enabled RPM packaging for ${DETECTED_ARCH}")
155 set(CPACK_PACKAGE_VERSION ${VERSION})
156 set(CPACK_GENERATOR "RPM")
157 set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
158 set(CPACK_PACKAGE_RELEASE 1)
159 set(CPACK_PACKAGE_VERSION
160 "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
161 set(CPACK_PACKAGE_CONTACT "Intel IoT-Devkit")
162 set(CPACK_PACKAGE_VENDOR "Intel IoT-Devkit")
163 set(CPACK_RPM_PACKAGE_PROVIDES "${CPACK_PACKAGE_NAME}-devel")
164 EXECUTE_PROCESS(COMMAND rpm --showrc
165 COMMAND grep -E "dist[[:space:]]*\\."
166 COMMAND sed -e "s/^.*dist\\s*\\.//"
168 COMMAND sed -e s/\\t//
169 OUTPUT_VARIABLE DIST_TAG)
170 set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${DIST_TAG}.${DETECTED_ARCH}")
174 add_subdirectory (src)
176 add_subdirectory (examples)